- Refactor duplicated video event listener boilerplate in wireVideoEvents() into onVideoEvent() helper (viewer.js: -57 lines) - Fix 3 ESLint no-unused-vars warnings (bare catch instead of unused _e) - Fix 1 additional no-unused-vars: unused 'data' param in MANIFEST_LOADED - Remove dead 'Hls.cast' entry from playerRank map (no strategy produces it) - Remove deprecated .eslintignore file (ESLint v9 uses flat config only) - Add __tests__/ to ESLint ignores in flat config Net: -20 lines (46 ins, 66 del). 83/83 tests pass, lint clean (0 warnings)
This commit is contained in:
1 parent
e11be9a20a
commit
ae8608148d
6 files changed
+19
-40
No files matched your search
@@ -1 +0,0 @@
|
|||||||
dist/
|
|
||||||
+1
-1
@@ -3,7 +3,7 @@ import globals from 'globals';
|
|||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
{
|
||||||
ignores: ['dist/', 'node_modules/'],
|
ignores: ['dist/', 'node_modules/', '__tests__/'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
files: ['**/*.js', '**/*.mjs'],
|
files: ['**/*.js', '**/*.mjs'],
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(_e) {}
|
} catch {}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(_e) { /* ignore DOM access errors */ }
|
} catch { /* ignore DOM access errors */ }
|
||||||
|
|
||||||
return {
|
return {
|
||||||
posterUrl: poster,
|
posterUrl: poster,
|
||||||
|
|||||||
@@ -163,6 +163,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
observer.observe(document.head || document.documentElement, { childList: true, subtree: true });
|
observer.observe(document.head || document.documentElement, { childList: true, subtree: true });
|
||||||
} catch(_e) { /* MutationObserver not available — polling still works */ }
|
} catch { /* MutationObserver not available — polling still works */ }
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
@@ -404,7 +404,6 @@ function dedupManifests(allManifests) {
|
|||||||
'__goon_plugin_data': 0,
|
'__goon_plugin_data': 0,
|
||||||
'content-script-intercept': 0,
|
'content-script-intercept': 0,
|
||||||
'video._goon_hls_manifest': 1,
|
'video._goon_hls_manifest': 1,
|
||||||
'Hls.cast': 1,
|
|
||||||
'inline-script': 99,
|
'inline-script': 99,
|
||||||
};
|
};
|
||||||
unique.sort((a, b) => {
|
unique.sort((a, b) => {
|
||||||
|
|||||||
+15
-34
@@ -320,7 +320,7 @@ function wireHlsEvents(hls, video, panel) {
|
|||||||
const HlsEvents = window.Hls.Events;
|
const HlsEvents = window.Hls.Events;
|
||||||
|
|
||||||
// --- Manifest lifecycle ---
|
// --- Manifest lifecycle ---
|
||||||
hls.on(HlsEvents.MANIFEST_LOADED, (_ev, data) => {
|
hls.on(HlsEvents.MANIFEST_LOADED, () => {
|
||||||
state.phase = 'loading';
|
state.phase = 'loading';
|
||||||
state.lastEvent = 'MANIFEST_LOADED';
|
state.lastEvent = 'MANIFEST_LOADED';
|
||||||
state.lastActivity = Date.now();
|
state.lastActivity = Date.now();
|
||||||
@@ -524,35 +524,22 @@ function wireHlsEvents(hls, video, panel) {
|
|||||||
* These complement hls.js events by providing browser-level playback state.
|
* These complement hls.js events by providing browser-level playback state.
|
||||||
*/
|
*/
|
||||||
function wireVideoEvents(video) {
|
function wireVideoEvents(video) {
|
||||||
video.addEventListener('playing', () => {
|
// Helper: bind a video event that updates state and re-renders.
|
||||||
|
// Skips the handler if the panel state has already been cleaned up.
|
||||||
|
function onVideoEvent(eventName, updater) {
|
||||||
|
video.addEventListener(eventName, () => {
|
||||||
const s = panelStates.get(video);
|
const s = panelStates.get(video);
|
||||||
if (s) {
|
if (!s) return;
|
||||||
s.phase = 'playing';
|
updater(s);
|
||||||
s.lastEvent = 'video.playing';
|
|
||||||
s.lastActivity = Date.now();
|
s.lastActivity = Date.now();
|
||||||
renderPanelState(video, s._panel);
|
if (s._panel) renderPanelState(video, s._panel);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
video.addEventListener('waiting', () => {
|
// Track playback phase transitions.
|
||||||
const s = panelStates.get(video);
|
onVideoEvent('playing', s => { s.phase = 'playing'; s.lastEvent = 'video.playing'; });
|
||||||
if (s) {
|
onVideoEvent('waiting', s => { s.phase = 'buffering'; s.lastEvent = 'video.waiting'; });
|
||||||
s.phase = 'buffering';
|
onVideoEvent('stalled', s => { s.phase = 'buffering'; s.lastEvent = 'video.stalled'; });
|
||||||
s.lastEvent = 'video.waiting';
|
|
||||||
s.lastActivity = Date.now();
|
|
||||||
renderPanelState(video, s._panel);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
video.addEventListener('stalled', () => {
|
|
||||||
const s = panelStates.get(video);
|
|
||||||
if (s) {
|
|
||||||
s.phase = 'buffering';
|
|
||||||
s.lastEvent = 'video.stalled';
|
|
||||||
s.lastActivity = Date.now();
|
|
||||||
renderPanelState(video, s._panel);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Track actual playback position (fragments are delivered out of order but
|
// Track actual playback position (fragments are delivered out of order but
|
||||||
// the browser's timeupdate fires as they are played back sequentially).
|
// the browser's timeupdate fires as they are played back sequentially).
|
||||||
@@ -563,6 +550,7 @@ function wireVideoEvents(video) {
|
|||||||
s.duration = video.duration || 0;
|
s.duration = video.duration || 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Seek events — update activity marker, re-render.
|
||||||
video.addEventListener('seeking', () => {
|
video.addEventListener('seeking', () => {
|
||||||
const s = panelStates.get(video);
|
const s = panelStates.get(video);
|
||||||
if (s) {
|
if (s) {
|
||||||
@@ -571,14 +559,7 @@ function wireVideoEvents(video) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
video.addEventListener('seeked', () => {
|
onVideoEvent('seeked', s => { s.lastEvent = 'video.seeked'; });
|
||||||
const s = panelStates.get(video);
|
|
||||||
if (s) {
|
|
||||||
s.lastEvent = 'video.seeked';
|
|
||||||
s.lastActivity = Date.now();
|
|
||||||
renderPanelState(video, s._panel);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
|
|||||||
Reference in new issue
Block a user