]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/assets/player/peertube-player-local-storage.ts
Resume videos for non-logged in users (#3885)
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / peertube-player-local-storage.ts
index f6c5c5419fd5120124d3a294602989e56495b04f..cf2cfb472e6b4bbdf80e41e1eecd810847f5ea40 100644 (file)
@@ -10,7 +10,7 @@ function getStoredVolume () {
   return undefined
 }
 
-function getStoredWebTorrentEnabled (): boolean {
+function getStoredP2PEnabled (): boolean {
   const value = getLocalStorage('webtorrent_enabled')
   if (value !== null && value !== undefined) return value === 'true'
 
@@ -68,11 +68,56 @@ function getStoredLastSubtitle () {
   return getLocalStorage('last-subtitle')
 }
 
+function saveVideoWatchHistory(videoUUID: string, duration: number) {
+  return setLocalStorage(`video-watch-history`, JSON.stringify({
+    ...getStoredVideoWatchHistory(),
+    [videoUUID]: {
+      duration,
+      date: `${(new Date()).toISOString()}`
+    }
+  }))
+}
+
+function getStoredVideoWatchHistory(videoUUID?: string) {
+  let data
+
+  try {
+    data = JSON.parse(getLocalStorage('video-watch-history'))
+  } catch (error) {
+    console.error('Cannot parse video watch history from local storage: ', error)
+  }
+
+  data = data || {}
+
+  if (videoUUID) return data[videoUUID]
+
+  return data
+}
+
+function cleanupVideoWatch() {
+  const data = getStoredVideoWatchHistory()
+
+  const newData = Object.keys(data).reduce((acc, videoUUID) => {
+    const date = Date.parse(data[videoUUID].date)
+
+    const diff = Math.ceil(((new Date()).getTime() - date) / (1000 * 3600 * 24))
+
+    if (diff > 30) return acc
+
+    return {
+      ...acc,
+      [videoUUID]: data[videoUUID]
+    }
+  }, {})
+
+  setLocalStorage('video-watch-history', JSON.stringify(newData))
+}
+
 // ---------------------------------------------------------------------------
 
 export {
   getStoredVolume,
-  getStoredWebTorrentEnabled,
+  getStoredP2PEnabled,
   getStoredMute,
   getStoredTheater,
   saveVolumeInStore,
@@ -81,7 +126,10 @@ export {
   saveAverageBandwidth,
   getAverageBandwidthInStore,
   saveLastSubtitle,
-  getStoredLastSubtitle
+  getStoredLastSubtitle,
+  saveVideoWatchHistory,
+  getStoredVideoWatchHistory,
+  cleanupVideoWatch
 }
 
 // ---------------------------------------------------------------------------