Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
107 lines
3.6 KiB
JavaScript
107 lines
3.6 KiB
JavaScript
/* exported QueueService */
|
|
/* global Response, ServiceWorkerWare, bridge */
|
|
'use strict';
|
|
|
|
importScripts('components/bridge/client.js');
|
|
|
|
var client = bridge.client({
|
|
service: 'music-service',
|
|
endpoint: new BroadcastChannel('music-service')
|
|
});
|
|
|
|
function QueueService(worker) {
|
|
var stopAfter = ServiceWorkerWare.decorators.stopAfter;
|
|
|
|
worker.get('/api/queue/current', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('currentSong')
|
|
.then(song => resolve(respond(song)))
|
|
.catch(() => {
|
|
resolve(new Response('', { status: 404 }));
|
|
});
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/queue/previous', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('previousSong')
|
|
.then(success => resolve(respond({ success: success })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/queue/next', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('nextSong')
|
|
.then(success => resolve(respond({ success: success })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/queue/album/:filePath', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
var filePath = decodeURIComponent(request.parameters.filePath);
|
|
client.method('queueAlbum', filePath)
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/queue/artist/:filePath', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
var filePath = decodeURIComponent(request.parameters.filePath);
|
|
client.method('queueArtist', filePath)
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/queue/playlist/:id/shuffle', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('queuePlaylist', request.parameters.id)
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/queue/playlist/:id/song/:filePath', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
var id = request.parameters.id;
|
|
var filePath = decodeURIComponent(request.parameters.filePath);
|
|
client.method('queuePlaylist', id, filePath)
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/queue/song/:filePath', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
var filePath = decodeURIComponent(request.parameters.filePath);
|
|
client.method('queueSong', filePath)
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/queue/repeat/:repeat', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('setRepeatSetting', request.parameters.repeat)
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/queue/shuffle/:shuffle', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('setShuffleSetting', request.parameters.shuffle)
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
function respond(response) {
|
|
return new Response(JSON.stringify(response), {
|
|
headers: { 'Content-Type': 'application/json' }
|
|
});
|
|
}
|
|
}
|