Skip to content

Commit 2405b02

Browse files
authored
Merge pull request #20 from Gabe-H/updates
support shuffle repeat local files
2 parents 7d50616 + c19311a commit 2405b02

7 files changed

Lines changed: 336 additions & 107 deletions

File tree

app/main.js

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,34 @@ ipcMain.on("toggle-play", (event, arg) => {
8888
);
8989
});
9090

91+
ipcMain.on("toggle-shuffle", (event, arg) => {
92+
spotifyApi.getMyCurrentPlaybackState().then(
93+
function (data) {
94+
event.reply("toggle-shuffle-reply", data);
95+
},
96+
function (err) {
97+
event.reply("toggle-shuffle-reply", err);
98+
}
99+
)
100+
})
101+
102+
ipcMain.on("cycle-repeat", (event, arg) => {
103+
switch (arg) {
104+
case 'off':
105+
spotifyApi.setRepeat({state: 'context'})
106+
event.reply("repeat-reply", 'context')
107+
break;
108+
case 'context':
109+
spotifyApi.setRepeat({state: 'track'})
110+
event.reply("repeat-reply", 'track')
111+
break;
112+
case 'track':
113+
spotifyApi.setRepeat({state: 'off'})
114+
event.reply("repeat-reply", 'off')
115+
break;
116+
};
117+
})
118+
91119
ipcMain.on("control", (event, arg) => {
92120
switch (arg) {
93121
case "play":
@@ -106,10 +134,28 @@ ipcMain.on("control", (event, arg) => {
106134
});
107135
break;
108136
case "backward":
137+
spotifyApi.seek(0).catch((err) => {
138+
catch_error(err);
139+
});
109140
spotifyApi.skipToPrevious().catch((err) => {
110141
catch_error(err);
111142
});
112143
break;
144+
case "shuffle":
145+
spotifyApi.getMyCurrentPlaybackState().then(function(data) {
146+
if (data.body.shuffle_state == true) {
147+
spotifyApi.setShuffle({state: false}).then(function(data) {
148+
})
149+
event.reply("is_shuffle", false);
150+
}
151+
if (data.body.shuffle_state == false) {
152+
spotifyApi.setShuffle({state: true}).then(function(data) {
153+
}).catch((err) => {
154+
console.log(err)
155+
});
156+
event.reply("is_shuffle", true);
157+
}
158+
})
113159
}
114160
});
115161

@@ -181,6 +227,22 @@ ipcMain.on("buttons", (event, arg) => {
181227
}
182228
});
183229

230+
ipcMain.on("search", (event, args) => {
231+
console.log('searching for ', args)
232+
spotifyApi.search(args, ['track'], {limit : 1}).then(function(data) {
233+
if (data.body.tracks.items[0]) {
234+
var imgURL = data.body.tracks.items[0].album.images[0].url;
235+
console.log(imgURL);
236+
event.reply("local-reply", imgURL);
237+
} else {
238+
console.log('no image');
239+
event.reply("local-reply", '')
240+
}
241+
}, function (err) {
242+
console.log(err)
243+
}).catch((err) => catch_error(err))
244+
})
245+
184246
function restart_express() {
185247
server.listen(8080, "localhost");
186248
}
@@ -198,6 +260,7 @@ express.get("/callback", function (req, res) {
198260
function (data) {
199261
// Set the access token on the API object to use it in later calls
200262
spotifyApi.setAccessToken(data.body["access_token"]);
263+
console.log(data.body["access_token"])
201264
spotifyApi.setRefreshToken(data.body["refresh_token"]);
202265
win.loadFile("./src/index.html");
203266
setInterval(refresh, (data.body["expires_in"] - 10) * 1000);
@@ -228,8 +291,6 @@ function refresh() {
228291

229292
function catch_error(error) {
230293
console.log(error);
231-
if (error.statusCode == 403) {
232-
}
233294
}
234295

235296
app.whenReady().then(createWindow);

app/preload.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ contextBridge.exposeInMainWorld("actions", {
1111
maximize: () => ipcRenderer.send("buttons", "maximize"),
1212
top: () => ipcRenderer.send("buttons", "top"),
1313
topmac: () => ipcRenderer.send("buttons", "topmac"),
14+
search: (args) => ipcRenderer.send("search", args)
1415
});
1516

1617
contextBridge.exposeInMainWorld("controls", {
17-
toggleplay: () => ipcRenderer.send("toggle-play", ""),
18+
togglePlay: () => ipcRenderer.send("toggle-play", ""),
19+
toggleShuffle: () => ipcRenderer.send("toggle-shuffle", ""),
20+
cycleRepeat: (status) => ipcRenderer.send("cycle-repeat", status)
1821
});
1922

2023
contextBridge.exposeInMainWorld("check", {

app/videos.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ initJSON();
1717
setInterval(initJSON, 3600000);
1818

1919
ipcMain.on("isvideo", (event, arg) => {
20+
console.log(arg)
2021
var isSpecial = false;
2122
for (i = 0; i < Object.keys(myJSON).length; i++) {
2223
if (myJSON[i].id == arg) {

src/control.js

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,25 @@ var togglePlay = function () {
1111
var resetTime = setTimeout(() => {
1212
hasToggled = false;
1313
}, 1000);
14-
window.controls.toggleplay();
14+
window.controls.togglePlay();
1515
};
16+
var toggleShuffle = function () {
17+
hasToggled = true;
18+
clearInterval(resetTime);
19+
var resetTime = setTimeout(() => {
20+
hasToggled = false;
21+
}, 1000);
22+
control('shuffle')
23+
window.controls.toggleShuffle();
24+
};
25+
var cycleRepeat = function () {
26+
hasToggled = true;
27+
clearInterval(resetTime);
28+
var resetTime = setTimeout(() => {
29+
hasToggled = false;
30+
}, 1000);
31+
window.controls.cycleRepeat(myRepeat);
32+
}
1633

1734
ipcRenderer.on("toggle-play-reply", (event, data) => {
1835
var isPlaying = data.body.is_playing;
@@ -30,6 +47,19 @@ ipcRenderer.on("toggle-play-reply", (event, data) => {
3047
}
3148
});
3249

50+
ipcRenderer.on("toggle-shuffle-reply", (event, data) => {
51+
var isShuffle = data.body.shuffle_state;
52+
if (isShuffle == true) {
53+
$("#shuffle").removeClass().addClass("fa fa-random");
54+
}
55+
})
56+
57+
ipcRenderer.on("repeat-reply", (event, arg) => {
58+
myRepeat = arg;
59+
console.log(myRepeat)
60+
set_repeat(myRepeat);
61+
})
62+
3363
// Skip to next song in queue
3464
var seek = function () {
3565
console.log("Skipping forward");
@@ -74,6 +104,16 @@ $("#toggle").click(() => {
74104
firing = false;
75105
});
76106

107+
$("#shuffle").click(() => {
108+
if (firing) return;
109+
toggleShuffle();
110+
firing = false;
111+
});
112+
113+
$("#repeat").click(() => {
114+
cycleRepeat();
115+
});
116+
77117
$("#seek").click(() => {
78118
if (firing) return;
79119
seek();
@@ -154,6 +194,17 @@ ipcRenderer.on("not", (event, arg) => {
154194
}
155195
});
156196

197+
ipcRenderer.on("is_shuffle", (event, arg) => {
198+
switch (arg) {
199+
case true:
200+
$("#shuffle").css("opacity", "100%");
201+
break;
202+
case false:
203+
$("#shuffle").css("opacity", "");
204+
break;
205+
}
206+
});
207+
157208
ipcRenderer.on("mac", (event, arg) => {
158209
switch (arg) {
159210
case true:

src/index.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,11 @@ <h2 id="artist"></h2>
8787
<div
8888
style="position: absolute; bottom: 15px; text-align: center; width: 100%"
8989
>
90+
<i id="shuffle" class="fas fa-random"></i>
9091
<i id="previous" class="fa fa-fast-backward"></i>
91-
<i id="toggle"></i>
92+
<i id="toggle" class="fas fa-play"></i>
9293
<i id="seek" class="fa fa-fast-forward"></i>
94+
<i id="repeat" class="fas fa-redo-alt"></i>
9395
</div>
9496
</footer>
9597
<script type="text/javascript" src="control.js"></script>

0 commit comments

Comments
 (0)