From 7048193f00a80617093eb9d8e1bc4557159afd74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9ry=20Mathieu=20=28Mathius=29?= Date: Sat, 12 Feb 2022 22:07:41 +0100 Subject: [PATCH] Move store of modification in Cookie instead of localStorage --- assets/js/player.js | 56 ++++++++++++++++--- src/invidious/user/cookies.cr | 2 +- .../views/components/player_sources.ecr | 1 - videojs-dependencies.yml | 4 -- 4 files changed, 48 insertions(+), 15 deletions(-) diff --git a/assets/js/player.js b/assets/js/player.js index 34f721b40..5498df484 100644 --- a/assets/js/player.js +++ b/assets/js/player.js @@ -176,17 +176,55 @@ if (video_data.params.video_start > 0 || video_data.params.video_end > 0) { player.currentTime(video_data.params.video_start); } -/* - If the video settings are default, we enable the management of the settings by - the videojs-persist module otherwise we apply the preferences. -*/ -if (video_data.params.volume == 100 && video_data.params.speed == "1.0") - player.persist(); -else { - player.volume(video_data.params.volume / 100); - player.playbackRate(video_data.params.speed); +player.volume(video_data.params.volume / 100); +player.playbackRate(video_data.params.speed); + +/** + * Method for get content of Cookie + * @param {String} name Name of cookie + * @returns cookieValue + */ +function getCookieValue(name) { + var value = document.cookie.split(";").filter(item => { + return item.includes(name + "="); + }); + return value != null && value.length >= 1 ? value[0].substring((name + "=").length, value[0].length) : null; } +/** + * Method for update Prefs cookie (Or create if missing) + * @param {number} newVolume New Volume defined (Null if unchanged) + * @param {number} newSpeed New Speed defined (Null if unchanged) + */ +function updateCookie(newVolume, newSpeed) { + var volumeValue = newVolume != null ? newVolume : video_data.params.volume; + var speedValue = newSpeed != null ? newSpeed : video_data.params.speed; + var cookieValue = getCookieValue('PREFS'); + if (cookieValue != null) { + var cookieJson = JSON.parse(decodeURIComponent(cookieValue)); + cookieJson.volume = volumeValue; + cookieJson.speed = speedValue; + document.cookie = document.cookie.replace(getCookieValue('PREFS'), encodeURIComponent(JSON.stringify(cookieJson))); + } else { + var date = new Date(); + //Set expiration in 2 year + date.setTime(date.getTime() + 63115200); + document.cookie = 'PREFS=' + + encodeURIComponent(JSON.stringify({ 'volume': volumeValue, 'speed': speedValue })) + + '; expires=' + date.toGMTString() + '; SameSite=Strict; path=/'; + } + video_data.params.volume = volumeValue; + video_data.params.speed = speedValue; +} + +player.on('ratechange', function () { + updateCookie(null, player.playbackRate()); +}); + +player.on('volumechange', function () { + updateCookie(Math.ceil(player.volume() * 100), null); +}); + player.on('waiting', function () { if (player.playbackRate() > 1 && player.liveTracker.isLive() && player.liveTracker.atLiveEdge()) { console.log('Player has caught up to source, resetting playbackRate.') diff --git a/src/invidious/user/cookies.cr b/src/invidious/user/cookies.cr index 99df1b07a..367f700ff 100644 --- a/src/invidious/user/cookies.cr +++ b/src/invidious/user/cookies.cr @@ -30,7 +30,7 @@ struct Invidious::User value: URI.encode_www_form(preferences.to_json), expires: Time.utc + 2.years, secure: SECURE, - http_only: true + http_only: false ) end end diff --git a/src/invidious/views/components/player_sources.ecr b/src/invidious/views/components/player_sources.ecr index 305464c88..9af3899c4 100644 --- a/src/invidious/views/components/player_sources.ecr +++ b/src/invidious/views/components/player_sources.ecr @@ -11,7 +11,6 @@ - diff --git a/videojs-dependencies.yml b/videojs-dependencies.yml index b9754e0e0..6de23d257 100644 --- a/videojs-dependencies.yml +++ b/videojs-dependencies.yml @@ -25,10 +25,6 @@ videojs-overlay: version: 2.1.4 shasum: 5a103b25374dbb753eb87960d8360c2e8f39cc05 -videojs-persist: - version: 0.1.2 - shasum: 44da05aced1fbf15693a36b7cce3cc4a9960dabe - videojs-share: version: 3.2.1 shasum: 0a3024b981387b9d21c058c829760a72c14b8ceb