-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexternalAPI.js
More file actions
123 lines (109 loc) · 3.92 KB
/
externalAPI.js
File metadata and controls
123 lines (109 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import { DataReady, EXPECTED_DATA, externalAPI } from "./controller.js";
import { initEvents, checkLikeDislike, externalApiOn, externalApiOff, } from "./api-utils.js";
import { State, Toggles, Tracks } from "./extracted-data.js";
if (!window.externalAPI) { window.externalAPI = externalAPI; }
DataReady.ready(generateApi, true, ...EXPECTED_DATA);
function generateApi () {
// Check if the number of likes or dislikes on the playlist has changed.
document.body.onclick = checkLikeDislike;
externalAPI.on = externalApiOn;
externalAPI.off = externalApiOff;
externalAPI.getControls = () => {
const repeatModes = {
undefined: null,
null: null,
"none": false,
"context": true,
"one": 1
}
return {
dislike: State.index >= 0 ? true : false,
like: State.index >= 0 ? true : false,
index: State.index >= 0 ? true : false,
next: externalAPI.getNextTrack() ? true : false,
prev: externalAPI.getPrevTrack() ? true : false,
repeat: repeatModes[State.getRepeat()],
shuffle: State.getShuffle(),
}
}
externalAPI.getCurrentTrack = () => { return Tracks.current; }
externalAPI.getNextTrack = () => {
if (!Tracks.primary) return null;
let index = externalAPI.getTrackIndex() + 1;
let tracksListSize = Tracks.primary.length;
if (index - 1 > tracksListSize) {
return null;
}
return State.getTrackByIndex(index);
}
externalAPI.getPrevTrack = () => {
if (!Tracks.primary) return null;
let index = externalAPI.getTrackIndex() - 1;
if (index < 0) return null;
return State.getTrackByIndex(index);
}
externalAPI.getProgress = () => {
return {
position: State.getPosition(),
loaded: State.getLoaded(),
duration: State.getDuration()
}
}
externalAPI.getRepeat = State.getRepeat;
externalAPI.getShuffle = State.getShuffle;
externalAPI.getSourceInfo = () => {
let playlist = State.playlist;
if (!playlist) {
playlist = {
cover: "",
link: "",
owner: "",
title: "",
type: "common",
id: ""
}
}
let {
id: playlistId,
playlistUuid: link,
cover,
owner,
title,
type
} = playlist;
if (type === "vibe") {
type = "radio";
title = State.vibeTitle;
playlistId = undefined;
}
return {
cover: cover ? cover.uri : "",
owner: owner ? owner.name : "",
link: link ? link : "",
title: title ? title : "",
type,
playlistId
}
}
externalAPI.getSpeed = State.getSpeed;
externalAPI.getTrackIndex = () => { return State.index; }
externalAPI.getTracksList = () => { return Tracks.converted; }
externalAPI.getVolume = State.getVolume
externalAPI.isPlaying = State.isPlaying;
externalAPI.next = Toggles.next;
externalAPI.play = Toggles.play;
externalAPI.prev = Toggles.prev;
externalAPI.setPosition = Toggles.setPosition;
externalAPI.setSpeed = Toggles.setSpeed;
externalAPI.setVolume = Toggles.setVolume;
externalAPI.populate = Tracks.populate;
externalAPI.toggleDislike = Toggles.toggleTrackDisike;
externalAPI.toggleLike = Toggles.toggleTrackLike;
externalAPI.toggleMute = Toggles.toggleMute;
externalAPI.togglePause = Toggles.togglePause;
externalAPI.toggleRepeat = Toggles.toggleRepeat;
externalAPI.toggleShuffle = Toggles.toggleShuffle;
externalAPI.help = () => { console.log("https://github.com/Night-Soft/YmExternalAPI") }
externalAPI.navigate = (url) => { next.router.push(url); }
initEvents();
}