aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/assets/player
diff options
context:
space:
mode:
authorkontrollanten <6680299+kontrollanten@users.noreply.github.com>2021-03-31 11:26:32 +0200
committerGitHub <noreply@github.com>2021-03-31 11:26:32 +0200
commit58b9ce3080c12678e8c1c28c08da09d6ea60011d (patch)
tree10e501ba791e67febd47b397729ba5debb81a85c /client/src/assets/player
parentd794137057fc5fcea10ddd29f82e79ee2412fea4 (diff)
downloadPeerTube-58b9ce3080c12678e8c1c28c08da09d6ea60011d.tar.gz
PeerTube-58b9ce3080c12678e8c1c28c08da09d6ea60011d.tar.zst
PeerTube-58b9ce3080c12678e8c1c28c08da09d6ea60011d.zip
Resume videos for non-logged in users (#3885)
* client: resume videos for non-logged in users closes #3866 * fix build for embeded * Update client/src/app/app.component.ts * fix review comments
Diffstat (limited to 'client/src/assets/player')
-rw-r--r--client/src/assets/player/peertube-player-local-storage.ts50
-rw-r--r--client/src/assets/player/peertube-player-manager.ts5
-rw-r--r--client/src/assets/player/peertube-plugin.ts13
-rw-r--r--client/src/assets/player/peertube-videojs-typings.ts2
4 files changed, 64 insertions, 6 deletions
diff --git a/client/src/assets/player/peertube-player-local-storage.ts b/client/src/assets/player/peertube-player-local-storage.ts
index 75ccfe618..cf2cfb472 100644
--- a/client/src/assets/player/peertube-player-local-storage.ts
+++ b/client/src/assets/player/peertube-player-local-storage.ts
@@ -68,6 +68,51 @@ function getStoredLastSubtitle () {
68 return getLocalStorage('last-subtitle') 68 return getLocalStorage('last-subtitle')
69} 69}
70 70
71function saveVideoWatchHistory(videoUUID: string, duration: number) {
72 return setLocalStorage(`video-watch-history`, JSON.stringify({
73 ...getStoredVideoWatchHistory(),
74 [videoUUID]: {
75 duration,
76 date: `${(new Date()).toISOString()}`
77 }
78 }))
79}
80
81function getStoredVideoWatchHistory(videoUUID?: string) {
82 let data
83
84 try {
85 data = JSON.parse(getLocalStorage('video-watch-history'))
86 } catch (error) {
87 console.error('Cannot parse video watch history from local storage: ', error)
88 }
89
90 data = data || {}
91
92 if (videoUUID) return data[videoUUID]
93
94 return data
95}
96
97function cleanupVideoWatch() {
98 const data = getStoredVideoWatchHistory()
99
100 const newData = Object.keys(data).reduce((acc, videoUUID) => {
101 const date = Date.parse(data[videoUUID].date)
102
103 const diff = Math.ceil(((new Date()).getTime() - date) / (1000 * 3600 * 24))
104
105 if (diff > 30) return acc
106
107 return {
108 ...acc,
109 [videoUUID]: data[videoUUID]
110 }
111 }, {})
112
113 setLocalStorage('video-watch-history', JSON.stringify(newData))
114}
115
71// --------------------------------------------------------------------------- 116// ---------------------------------------------------------------------------
72 117
73export { 118export {
@@ -81,7 +126,10 @@ export {
81 saveAverageBandwidth, 126 saveAverageBandwidth,
82 getAverageBandwidthInStore, 127 getAverageBandwidthInStore,
83 saveLastSubtitle, 128 saveLastSubtitle,
84 getStoredLastSubtitle 129 getStoredLastSubtitle,
130 saveVideoWatchHistory,
131 getStoredVideoWatchHistory,
132 cleanupVideoWatch
85} 133}
86 134
87// --------------------------------------------------------------------------- 135// ---------------------------------------------------------------------------
diff --git a/client/src/assets/player/peertube-player-manager.ts b/client/src/assets/player/peertube-player-manager.ts
index 1d335805b..119dec379 100644
--- a/client/src/assets/player/peertube-player-manager.ts
+++ b/client/src/assets/player/peertube-player-manager.ts
@@ -106,6 +106,8 @@ export interface CommonOptions extends CustomizationOptions {
106 106
107 videoCaptions: VideoJSCaption[] 107 videoCaptions: VideoJSCaption[]
108 108
109 videoUUID: string
110
109 userWatching?: UserWatching 111 userWatching?: UserWatching
110 112
111 serverUrl: string 113 serverUrl: string
@@ -231,7 +233,8 @@ export class PeertubePlayerManager {
231 subtitle: commonOptions.subtitle, 233 subtitle: commonOptions.subtitle,
232 videoCaptions: commonOptions.videoCaptions, 234 videoCaptions: commonOptions.videoCaptions,
233 stopTime: commonOptions.stopTime, 235 stopTime: commonOptions.stopTime,
234 isLive: commonOptions.isLive 236 isLive: commonOptions.isLive,
237 videoUUID: commonOptions.videoUUID
235 } 238 }
236 } 239 }
237 240
diff --git a/client/src/assets/player/peertube-plugin.ts b/client/src/assets/player/peertube-plugin.ts
index 75a6e662e..07c7e33f6 100644
--- a/client/src/assets/player/peertube-plugin.ts
+++ b/client/src/assets/player/peertube-plugin.ts
@@ -13,6 +13,7 @@ import {
13 getStoredVolume, 13 getStoredVolume,
14 saveLastSubtitle, 14 saveLastSubtitle,
15 saveMuteInStore, 15 saveMuteInStore,
16 saveVideoWatchHistory,
16 saveVolumeInStore 17 saveVolumeInStore
17} from './peertube-player-local-storage' 18} from './peertube-player-local-storage'
18 19
@@ -120,7 +121,7 @@ class PeerTubePlugin extends Plugin {
120 this.initializePlayer() 121 this.initializePlayer()
121 this.runViewAdd() 122 this.runViewAdd()
122 123
123 if (options.userWatching) this.runUserWatchVideo(options.userWatching) 124 this.runUserWatchVideo(options.userWatching, options.videoUUID)
124 }) 125 })
125 } 126 }
126 127
@@ -178,7 +179,7 @@ class PeerTubePlugin extends Plugin {
178 }, 1000) 179 }, 1000)
179 } 180 }
180 181
181 private runUserWatchVideo (options: UserWatching) { 182 private runUserWatchVideo (options: UserWatching, videoUUID: string) {
182 let lastCurrentTime = 0 183 let lastCurrentTime = 0
183 184
184 this.userWatchingVideoInterval = setInterval(() => { 185 this.userWatchingVideoInterval = setInterval(() => {
@@ -187,8 +188,12 @@ class PeerTubePlugin extends Plugin {
187 if (currentTime - lastCurrentTime >= 1) { 188 if (currentTime - lastCurrentTime >= 1) {
188 lastCurrentTime = currentTime 189 lastCurrentTime = currentTime
189 190
190 this.notifyUserIsWatching(currentTime, options.url, options.authorizationHeader) 191 if (options) {
191 .catch(err => console.error('Cannot notify user is watching.', err)) 192 this.notifyUserIsWatching(currentTime, options.url, options.authorizationHeader)
193 .catch(err => console.error('Cannot notify user is watching.', err))
194 } else {
195 saveVideoWatchHistory(videoUUID, currentTime)
196 }
192 } 197 }
193 }, this.CONSTANTS.USER_WATCHING_VIDEO_INTERVAL) 198 }, this.CONSTANTS.USER_WATCHING_VIDEO_INTERVAL)
194 } 199 }
diff --git a/client/src/assets/player/peertube-videojs-typings.ts b/client/src/assets/player/peertube-videojs-typings.ts
index e5259092c..4a6c80247 100644
--- a/client/src/assets/player/peertube-videojs-typings.ts
+++ b/client/src/assets/player/peertube-videojs-typings.ts
@@ -108,6 +108,8 @@ type PeerTubePluginOptions = {
108 stopTime: number | string 108 stopTime: number | string
109 109
110 isLive: boolean 110 isLive: boolean
111
112 videoUUID: string
111} 113}
112 114
113type PlaylistPluginOptions = { 115type PlaylistPluginOptions = {