1
- /* eslint-disable prefer-const, @typescript-eslint/no-unused-vars */
2
-
3
1
import { createRenderer } from '@/utils' ;
4
- import { SongInfo } from '@/providers/song-info' ;
5
- import { YoutubePlayer } from '@/types/youtube-player' ;
6
2
7
3
import { makeLyricsRequest } from './lyrics' ;
8
4
import { selectors , tabStates } from './utils' ;
9
5
import { setConfig } from './renderer' ;
10
6
import { setCurrentTime } from './components/LyricsContainer' ;
11
7
8
+ import type { RendererContext } from '@/types/contexts' ;
9
+ import type { YoutubePlayer } from '@/types/youtube-player' ;
10
+ import type { SongInfo } from '@/providers/song-info' ;
11
+
12
12
import type { SyncedLyricsPluginConfig } from '../types' ;
13
13
14
14
export let _ytAPI : YoutubePlayer | null = null ;
15
15
16
- export const renderer = createRenderer ( {
16
+ export const renderer = createRenderer < {
17
+ observerCallback : MutationCallback ;
18
+ onPlayerApiReady : ( api : YoutubePlayer ) => void ;
19
+ hasAddedEvents : boolean ;
20
+ observer ?: MutationObserver ;
21
+ videoDataChange : ( ) => void ;
22
+ progressCallback : ( evt : Event ) => void ;
23
+ } , SyncedLyricsPluginConfig > ( {
17
24
onConfigChange ( newConfig ) {
18
- setConfig ( newConfig as SyncedLyricsPluginConfig ) ;
25
+ setConfig ( newConfig ) ;
19
26
} ,
20
27
21
28
observerCallback ( mutations : MutationRecord [ ] ) {
@@ -35,23 +42,20 @@ export const renderer = createRenderer({
35
42
}
36
43
} ,
37
44
38
- onPlayerApiReady ( api ) {
45
+ onPlayerApiReady ( api : YoutubePlayer ) {
39
46
_ytAPI = api ;
40
47
41
- // @ts -expect-error type is 'unknown', so TS complains
42
48
api . addEventListener ( 'videodatachange' , this . videoDataChange ) ;
43
49
44
- // @ts -expect-error type is 'unknown', so TS complains
45
50
this . videoDataChange ( ) ;
46
51
} ,
47
52
48
53
hasAddedEvents : false ,
49
- observer : null as MutationObserver | null ,
54
+
50
55
videoDataChange ( ) {
51
56
if ( ! this . hasAddedEvents ) {
52
57
const video = document . querySelector ( 'video' ) ;
53
58
54
- // @ts -expect-error type is 'unknown', so TS complains
55
59
video ?. addEventListener ( 'timeupdate' , this . progressCallback ) ;
56
60
57
61
if ( video ) this . hasAddedEvents = true ;
@@ -61,7 +65,7 @@ export const renderer = createRenderer({
61
65
if ( ! header ) return ;
62
66
63
67
this . observer ??= new MutationObserver (
64
- this . observerCallback as MutationCallback ,
68
+ this . observerCallback ,
65
69
) ;
66
70
67
71
// Force the lyrics tab to be enabled at all times.
@@ -80,10 +84,10 @@ export const renderer = createRenderer({
80
84
}
81
85
} ,
82
86
83
- async start ( { getConfig , ipc : { on } } ) {
84
- setConfig ( ( await getConfig ( ) ) as SyncedLyricsPluginConfig ) ;
87
+ async start ( ctx : RendererContext < SyncedLyricsPluginConfig > ) {
88
+ setConfig ( await ctx . getConfig ( ) ) ;
85
89
86
- on ( 'ytmd:update-song-info' , async ( info : SongInfo ) => {
90
+ ctx . ipc . on ( 'ytmd:update-song-info' , async ( info : SongInfo ) => {
87
91
await makeLyricsRequest ( info ) ;
88
92
} ) ;
89
93
} ,
0 commit comments