2
2
import { CheckTimer } from "./CheckTimer.js" ;
3
3
import { Actions } from "../common/Actions.js" ;
4
4
import { NativeMediaPlayer } from "../common/NativeMediaPlayer" ;
5
+ import { ElementExistsStatus } from "../common/ElementExistsStatus.js" ;
6
+ import { ElementClickControl } from "../common/ElementClickControl.js" ;
5
7
6
8
function safeGetElementTextContentByQuery ( query ) {
7
9
try {
8
10
const element = document . querySelector ( query ) ;
9
11
10
- return element . textContent ;
12
+ return element . textContent . trim ( ) ;
11
13
} catch ( e ) {
12
14
return "" ;
13
15
}
@@ -247,7 +249,7 @@ class Provider {
247
249
248
250
case "radio.garden" :
249
251
artistName = safeGetElementTextContentByQuery (
250
- ". channel-list-item-name-container "
252
+ "[class*=' channel'] [class*='titleContainer'] [class*='title']:not([class*='subtitle']) "
251
253
) ;
252
254
break ;
253
255
@@ -260,6 +262,11 @@ class Provider {
260
262
"[data-testid='context-item-info-title'] [data-testid='context-item-link']"
261
263
) ;
262
264
break ;
265
+
266
+ case "freemusicarchive.org" :
267
+ songName = safeGetElementTextContentByQuery ( ".c-player__song .c-song__artist" ) ;
268
+ artistName = safeGetElementTextContentByQuery ( ".c-player__song .c-song__title" ) ;
269
+ break ;
263
270
}
264
271
265
272
if ( artistName && songName ) {
@@ -343,6 +350,10 @@ class Provider {
343
350
status = new NativeMediaPlayer ( "video" ) . status ( ) ;
344
351
break ;
345
352
353
+ case "freemusicarchive.org" :
354
+ status = new ElementExistsStatus ( ".c-player__control-button--pause:not([style*='display: none'])" ) . getStatus ( ) ;
355
+ break ;
356
+
346
357
case "last.fm" :
347
358
status = document
348
359
. getElementById ( "webRadio" )
@@ -495,10 +506,7 @@ class Provider {
495
506
break ;
496
507
497
508
case "radio.garden" :
498
- selectorQuery = ".icon-toggle.mod-mute .icon-button.mod-sound" ;
499
- playerPauseButton = document . querySelector ( selectorQuery ) ;
500
-
501
- status = playerPauseButton ? Status . PLAYING : Status . PAUSED ;
509
+ status = new ElementExistsStatus ( "[class*='controlsContainer'] [aria-label='stop']" ) . getStatus ( ) ;
502
510
break ;
503
511
504
512
case "somafm.com" :
@@ -558,6 +566,10 @@ class Provider {
558
566
new NativeMediaPlayer ( "video" ) . pause ( ) ;
559
567
break ;
560
568
569
+ case "freemusicarchive.org" :
570
+ new ElementClickControl ( ".c-player__control-button--pause:not([style*='display: none'])" ) . evaluate ( ) ;
571
+ break ;
572
+
561
573
case "last.fm" :
562
574
document . querySelector ( "#radioControlPause a" ) &&
563
575
document . querySelector ( "#radioControlPause a" ) . click ( ) ;
@@ -700,14 +712,7 @@ class Provider {
700
712
break ;
701
713
702
714
case "radio.garden" :
703
- selectorQuery = ".icon-toggle.mod-mute .icon-button.mod-sound" ;
704
- playerPauseButton = document . querySelector ( selectorQuery ) ;
705
-
706
- if ( ! playerPauseButton ) {
707
- return ;
708
- }
709
-
710
- playerPauseButton . click ( ) ;
715
+ new ElementClickControl ( "[class*='controlsContainer'] [aria-label='stop']" ) . evaluate ( ) ;
711
716
break ;
712
717
713
718
case "somafm.com" :
@@ -775,6 +780,10 @@ class Provider {
775
780
new NativeMediaPlayer ( "video" ) . play ( ) ;
776
781
break ;
777
782
783
+ case "freemusicarchive.org" :
784
+ new ElementClickControl ( ".c-player__control-button--play:not([style*='display: none'])" ) . evaluate ( ) ;
785
+ break ;
786
+
778
787
case "last.fm" :
779
788
document . querySelector ( "#radioControlPlay a" ) &&
780
789
document . querySelector ( "#radioControlPlay a" ) . click ( ) ;
@@ -915,14 +924,7 @@ class Provider {
915
924
break ;
916
925
917
926
case "radio.garden" :
918
- selectorQuery = ".icon-toggle.mod-mute .icon-button.mod-muted" ;
919
- playerPlayButton = document . querySelector ( selectorQuery ) ;
920
-
921
- if ( ! playerPlayButton ) {
922
- return ;
923
- }
924
-
925
- playerPlayButton . click ( ) ;
927
+ new ElementClickControl ( "[class*='controlsContainer'] [aria-label='play']" ) . evaluate ( ) ;
926
928
break ;
927
929
928
930
case "somafm.com" :
0 commit comments