@@ -21,37 +21,6 @@ let isPluginLoaded = false;
21
21
let isApiLoaded = false ;
22
22
let firstDataLoaded = false ;
23
23
24
- const observer = new MutationObserver ( ( ) => {
25
- const playerApi = document . querySelector < Element & YoutubePlayer > (
26
- '#movie_player' ,
27
- ) ;
28
- if ( playerApi ) {
29
- observer . disconnect ( ) ;
30
-
31
- // Inject song-info provider
32
- setupSongInfo ( playerApi ) ;
33
- const dataLoadedListener = ( name : string ) => {
34
- if ( ! firstDataLoaded && name === 'dataloaded' ) {
35
- firstDataLoaded = true ;
36
- playerApi . removeEventListener ( 'videodatachange' , dataLoadedListener ) ;
37
- }
38
- } ;
39
- playerApi . addEventListener ( 'videodatachange' , dataLoadedListener ) ;
40
-
41
- if ( isPluginLoaded && ! isApiLoaded ) {
42
- api = playerApi ;
43
- isApiLoaded = true ;
44
-
45
- onApiLoaded ( ) ;
46
- }
47
- }
48
- } ) ;
49
-
50
- observer . observe ( document . documentElement , {
51
- childList : true ,
52
- subtree : true ,
53
- } ) ;
54
-
55
24
async function listenForApiLoad ( ) {
56
25
if ( ! isApiLoaded ) {
57
26
api = document . querySelector ( '#movie_player' ) ;
@@ -176,14 +145,16 @@ const defineYTMDTransElements = () => {
176
145
) ;
177
146
} ;
178
147
179
- ( async ( ) => {
148
+ const preload = async ( ) => {
180
149
await loadI18n ( ) ;
181
150
await setLanguage ( window . mainConfig . get ( 'options.language' ) ?? 'en' ) ;
182
151
window . i18n = {
183
152
t : i18t . bind ( i18next ) ,
184
153
} ;
185
154
defineYTMDTransElements ( ) ;
155
+ } ;
186
156
157
+ const main = async ( ) => {
187
158
await loadAllRendererPlugins ( ) ;
188
159
isPluginLoaded = true ;
189
160
@@ -226,4 +197,50 @@ const defineYTMDTransElements = () => {
226
197
console . log ( JSON . parse ( log ) ) ;
227
198
} ) ;
228
199
}
229
- } ) ( ) ;
200
+ } ;
201
+
202
+ const initObserver = async ( ) => {
203
+ // check document.documentElement is ready
204
+ await new Promise < void > ( ( resolve ) => {
205
+ document . addEventListener (
206
+ 'DOMContentLoaded' ,
207
+ ( ) => {
208
+ resolve ( ) ;
209
+ } ,
210
+ { once : true } ,
211
+ ) ;
212
+ } ) ;
213
+
214
+ const observer = new MutationObserver ( ( ) => {
215
+ const playerApi = document . querySelector < Element & YoutubePlayer > (
216
+ '#movie_player' ,
217
+ ) ;
218
+ if ( playerApi ) {
219
+ observer . disconnect ( ) ;
220
+
221
+ // Inject song-info provider
222
+ setupSongInfo ( playerApi ) ;
223
+ const dataLoadedListener = ( name : string ) => {
224
+ if ( ! firstDataLoaded && name === 'dataloaded' ) {
225
+ firstDataLoaded = true ;
226
+ playerApi . removeEventListener ( 'videodatachange' , dataLoadedListener ) ;
227
+ }
228
+ } ;
229
+ playerApi . addEventListener ( 'videodatachange' , dataLoadedListener ) ;
230
+
231
+ if ( isPluginLoaded && ! isApiLoaded ) {
232
+ api = playerApi ;
233
+ isApiLoaded = true ;
234
+
235
+ onApiLoaded ( ) ;
236
+ }
237
+ }
238
+ } ) ;
239
+
240
+ observer . observe ( document . documentElement , {
241
+ childList : true ,
242
+ subtree : true ,
243
+ } ) ;
244
+ } ;
245
+
246
+ initObserver ( ) . then ( preload ) . then ( main ) ;
0 commit comments