Skip to content

Commit

Permalink
✨ Rewrite to manifest v3 to support Chrome
Browse files Browse the repository at this point in the history
  • Loading branch information
laurens94 committed Mar 16, 2023
1 parent 58f49a4 commit 8759193
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 99 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![Icon](https://addons.mozilla.org/user-media/addon_icons/2655/2655859-64.png?modified=71a2c23d) https://addons.mozilla.org/en-US/firefox/addon/netflix-rewind-1-sec/](https://addons.mozilla.org/en-US/firefox/addon/netflix-rewind-1-sec/)

# Netflix Rewind 1 sec
_A Firefox extension that allows you to rewind the video for 1 second each time you press the < key._
_A [Firefox](https://addons.mozilla.org/en-US/firefox/addon/netflix-rewind-1-sec/) and Chrome extension that allows you to rewind the video for 1 second each time you press the < key._

- Use <kbd><</kbd> or <kbd>,</kbd> to rewind with 1 second
- Use <kbd>></kbd> or <kbd>.</kbd> to skip with 5 seconds _(does get stuck sometimes, idk why, maybe because of buffer/stream?)_
Expand Down
35 changes: 35 additions & 0 deletions contentscript.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
;
(function () {
const settings = {
rewindSec: 1,
seekForwardSec: 5
}

function onError(error) {
console.warn(`Could not load settings for Netflix Rewind 1 Sec, falling back to defaults...`, error);
inject();
}

function onGot(item) {
if (item.rewindSec > 0) {
settings.rewindSec = item.rewindSec;
}
if (item.seekForwardSec > 0) {
settings.seekForwardSec = item.seekForwardSec;
}
inject()
}

let getting = browser.storage.sync.get();
getting.then(onGot, onError);

// Inject the script to the page:
function inject() {
var s = document.createElement('script');
s.src = chrome.runtime.getURL('netflix-rewind-1-sec.js?') + new URLSearchParams(settings);
s.onload = function () {
this.remove();
};
(document.head || document.documentElement).appendChild(s);
}
})()
14 changes: 12 additions & 2 deletions manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"manifest_version": 2,
"manifest_version": 3,
"name": "Netflix Rewind 1 sec",
"version": "2.0.0",
"version": "3.0.0",
"description": "Allows you to rewind the video for 1 second each time you press the < key",
"icons": {
"48": "icons/128.png"
Expand All @@ -13,7 +13,17 @@
],
"js": [
"browser-polyfill.min.js",
"contentscript.js"
]
}
],
"web_accessible_resources": [
{
"resources": [
"netflix-rewind-1-sec.js"
],
"matches": [
"*://*.netflix.com/*"
]
}
],
Expand Down
160 changes: 64 additions & 96 deletions netflix-rewind-1-sec.js
Original file line number Diff line number Diff line change
@@ -1,107 +1,75 @@
;
(function () {
const settings = {
rewindSec: 1,
seekForwardSec: 5
}
console.debug("💾 'Netflix Rewind 1 sec' plugin loaded.");
const params = new URLSearchParams(document.currentScript.src.split('?')[1]);

function onError (error) {
console.warn(`Could not load settings for Netflix Rewind 1 Sec, falling back to defaults...`, error);
inject(script);
}
window.netflixRewindPlugin = {};
window.netflixRewindPlugin.config = {
rewindSec: params.get('rewindSec'),
seekForwardSec: params.get('seekForwardSec')
};

function onGot (item) {
if (item.rewindSec > 0) {
settings.rewindSec = item.rewindSec;
}
if (item.seekForwardSec > 0) {
settings.seekForwardSec = item.seekForwardSec;
}
inject(script)
window.netflixRewindPlugin.seek = function (e) {
if (window.netflixRewindPlugin.player) {
let currentTime = window.netflixRewindPlugin.player.getCurrentTime();
switch (e.key) {
case '<':
case ',':
console.debug(`⏪ Seeking backwards by ${window.netflixRewindPlugin.config.rewindSec} second${window.netflixRewindPlugin.config.rewindSec > 1 ? 's' : ''}`);
window.netflixRewindPlugin.player.seek(currentTime - window.netflixRewindPlugin.config.rewindSec * 1000)
break;
case '>':
case '.':
console.debug(`⏩ Seeking forwards by ${window.netflixRewindPlugin.config.seekForwardSec} second${window.netflixRewindPlugin.config.seekForwardSec > 1 ? 's' : ''}`);
window.netflixRewindPlugin.player.seek(currentTime + window.netflixRewindPlugin.config.seekForwardSec * 1000)
break;
}
} else {
window.netflixRewindPlugin.initPluginLogic();
}
}

let getting = browser.storage.sync.get();
getting.then(onGot, onError);

// Script to be injected:
function script() {
console.debug("💾 'Netflix Rewind 1 sec' plugin loaded.");
window.netflixRewindPlugin = {};
window.netflixRewindPlugin.config = $CONFIG;

window.netflixRewindPlugin.seek = function (e) {
if (window.netflixRewindPlugin.player) {
let currentTime = window.netflixRewindPlugin.player.getCurrentTime();
switch (e.key) {
case '<':
case ',':
console.debug(`⏪ Seeking backwards by ${window.netflixRewindPlugin.config.rewindSec} second${window.netflixRewindPlugin.config.rewindSec > 1 ? 's' : ''}`);
window.netflixRewindPlugin.player.seek(currentTime - window.netflixRewindPlugin.config.rewindSec * 1000)
break;
case '>':
case '.':
console.debug(`⏩ Seeking forwards by ${window.netflixRewindPlugin.config.seekForwardSec} second${window.netflixRewindPlugin.config.seekForwardSec > 1 ? 's' : ''}`);
window.netflixRewindPlugin.player.seek(currentTime +window.netflixRewindPlugin.config.seekForwardSec * 1000)
break;
}
} else {
window.netflixRewindPlugin.initPluginLogic();
}
}

window.netflixRewindPlugin.initPluginLogic = function () {
// Clear variables:
window.netflixRewindPlugin.videoPlayer = undefined;
window.netflixRewindPlugin.playerSessionId = undefined;
window.netflixRewindPlugin.player = undefined;
window.netflixRewindPlugin.initPluginLogic = function () {
// Clear variables:
window.netflixRewindPlugin.videoPlayer = undefined;
window.netflixRewindPlugin.playerSessionId = undefined;
window.netflixRewindPlugin.player = undefined;

// Set variables:
if (netflix && netflix.appContext && netflix.appContext.state && netflix
.appContext
.state
.playerApp && netflix
.appContext
.state
.playerApp
.getAPI() && netflix
.appContext
.state
.playerApp
.getAPI()
.videoPlayer) {
// Set variables:
if (netflix && netflix.appContext && netflix.appContext.state && netflix
.appContext
.state
.playerApp && netflix
.appContext
.state
.playerApp
.getAPI() && netflix
.appContext
.state
.playerApp
.getAPI()
.videoPlayer) {

window.netflixRewindPlugin.videoPlayer = netflix
.appContext
.state
.playerApp
.getAPI()
.videoPlayer;
window.netflixRewindPlugin.videoPlayer = netflix
.appContext
.state
.playerApp
.getAPI()
.videoPlayer;

if (window.netflixRewindPlugin.videoPlayer
.getAllPlayerSessionIds() && window.netflixRewindPlugin.videoPlayer
.getAllPlayerSessionIds()[0]) {
if (window.netflixRewindPlugin.videoPlayer
.getAllPlayerSessionIds() && window.netflixRewindPlugin.videoPlayer
.getAllPlayerSessionIds()[0]) {

window.netflixRewindPlugin.playerSessionId = window.netflixRewindPlugin.videoPlayer
.getAllPlayerSessionIds()[0];
window.netflixRewindPlugin.playerSessionId = window.netflixRewindPlugin.videoPlayer
.getAllPlayerSessionIds()[0];

window.netflixRewindPlugin.player = window.netflixRewindPlugin.videoPlayer
.getVideoPlayerBySessionId(window.netflixRewindPlugin.playerSessionId);
}
}
}

// Get current player every 3 seconds:
setInterval(window.netflixRewindPlugin.initPluginLogic, 3000);

// Listen to keydown events:
document.addEventListener('keydown', window.netflixRewindPlugin.seek);
window.netflixRewindPlugin.player = window.netflixRewindPlugin.videoPlayer
.getVideoPlayerBySessionId(window.netflixRewindPlugin.playerSessionId);
}
}
}

// Inject the script to the page:
function inject(fn) {
const script = document.createElement('script')
const parsedScript = fn.toString().replace('$CONFIG', JSON.stringify(settings));
script.text = `(${parsedScript})();`
document.documentElement.appendChild(script)
}
})()
// Get current player every 3 seconds:
setInterval(window.netflixRewindPlugin.initPluginLogic, 3000);

// Listen to keydown events:
document.addEventListener('keydown', window.netflixRewindPlugin.seek);

0 comments on commit 8759193

Please sign in to comment.