+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 {
+ const value = getLocalStorage('video-watch-history')
+ if (!value) return {}
+
+ data = JSON.parse(value)
+ } catch (error) {
+ logger.error('Cannot parse video watch history from local storage/', error)
+ }
+
+ data = data || {}
+
+ if (videoUUID) return data[videoUUID]
+
+ return data
+}
+
+function cleanupVideoWatch () {
+ const data = getStoredVideoWatchHistory()
+ if (!data) return
+
+ 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))
+}
+