Skip to content

Commit 4a27c81

Browse files
authored
Merge pull request #212 from StoPlay/211-service-request-freemusicarchiveorg
New service: freemusicarchive.org
2 parents 2ef5333 + 82f37c3 commit 4a27c81

File tree

6 files changed

+61
-23
lines changed

6 files changed

+61
-23
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ At the moment we fully support (stop and play)
4545
- beatport.com
4646
- anchor.fm
4747
- qub.ca
48+
- cikava-ideya.top
49+
- freemusicarchive.org
4850

4951
## How it works
5052

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@
2323
"grunt-webstore-upload": "^0.9.21",
2424
"grunt-zip": "^0.18.2"
2525
}
26-
}
26+
}

src/background/models/ProvidersList.js

+1
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,5 @@ export const ProvidersList = [
5555
"cikava-ideya.top",
5656
"tortuga.wtf",
5757
"ashdi.vip",
58+
"freemusicarchive.org",
5859
];

src/common/ElementClickControl.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
export class ElementClickControl {
2+
#controlSelector;
3+
4+
/**
5+
* playSelector here optional for cases when needed different one
6+
*/
7+
constructor(controlSelector) {
8+
this.#controlSelector = controlSelector;
9+
}
10+
11+
evaluate() {
12+
const element = document.querySelector(this.#controlSelector);
13+
14+
if (!element) {
15+
return;
16+
}
17+
18+
element.click();
19+
}
20+
}

src/common/ElementExistsStatus.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Status } from "../background/models/Status";
2+
3+
export class ElementExistsStatus {
4+
#selector;
5+
6+
constructor(selector) {
7+
this.#selector = selector;
8+
}
9+
10+
getStatus() {
11+
return document.querySelector(this.#selector) ? Status.PLAYING : Status.PAUSED;
12+
}
13+
}

src/content/index.js

+24-22
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
import { CheckTimer } from "./CheckTimer.js";
33
import { Actions } from "../common/Actions.js";
44
import { NativeMediaPlayer } from "../common/NativeMediaPlayer";
5+
import { ElementExistsStatus } from "../common/ElementExistsStatus.js";
6+
import { ElementClickControl } from "../common/ElementClickControl.js";
57

68
function safeGetElementTextContentByQuery(query) {
79
try {
810
const element = document.querySelector(query);
911

10-
return element.textContent;
12+
return element.textContent.trim();
1113
} catch (e) {
1214
return "";
1315
}
@@ -247,7 +249,7 @@ class Provider {
247249

248250
case "radio.garden":
249251
artistName = safeGetElementTextContentByQuery(
250-
".channel-list-item-name-container"
252+
"[class*='channel'] [class*='titleContainer'] [class*='title']:not([class*='subtitle'])"
251253
);
252254
break;
253255

@@ -260,6 +262,11 @@ class Provider {
260262
"[data-testid='context-item-info-title'] [data-testid='context-item-link']"
261263
);
262264
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;
263270
}
264271

265272
if (artistName && songName) {
@@ -343,6 +350,10 @@ class Provider {
343350
status = new NativeMediaPlayer("video").status();
344351
break;
345352

353+
case "freemusicarchive.org":
354+
status = new ElementExistsStatus(".c-player__control-button--pause:not([style*='display: none'])").getStatus();
355+
break;
356+
346357
case "last.fm":
347358
status = document
348359
.getElementById("webRadio")
@@ -495,10 +506,7 @@ class Provider {
495506
break;
496507

497508
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();
502510
break;
503511

504512
case "somafm.com":
@@ -558,6 +566,10 @@ class Provider {
558566
new NativeMediaPlayer("video").pause();
559567
break;
560568

569+
case "freemusicarchive.org":
570+
new ElementClickControl(".c-player__control-button--pause:not([style*='display: none'])").evaluate();
571+
break;
572+
561573
case "last.fm":
562574
document.querySelector("#radioControlPause a") &&
563575
document.querySelector("#radioControlPause a").click();
@@ -700,14 +712,7 @@ class Provider {
700712
break;
701713

702714
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();
711716
break;
712717

713718
case "somafm.com":
@@ -775,6 +780,10 @@ class Provider {
775780
new NativeMediaPlayer("video").play();
776781
break;
777782

783+
case "freemusicarchive.org":
784+
new ElementClickControl(".c-player__control-button--play:not([style*='display: none'])").evaluate();
785+
break;
786+
778787
case "last.fm":
779788
document.querySelector("#radioControlPlay a") &&
780789
document.querySelector("#radioControlPlay a").click();
@@ -915,14 +924,7 @@ class Provider {
915924
break;
916925

917926
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();
926928
break;
927929

928930
case "somafm.com":

0 commit comments

Comments
 (0)