Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
/* exported AudioService */
|
|
/* global Response, ServiceWorkerWare, bridge */
|
|
'use strict';
|
|
|
|
importScripts('components/bridge/client.js');
|
|
|
|
var client = bridge.client({
|
|
service: 'music-service',
|
|
endpoint: new BroadcastChannel('music-service')
|
|
});
|
|
|
|
function AudioService(worker) {
|
|
var stopAfter = ServiceWorkerWare.decorators.stopAfter;
|
|
|
|
worker.get('/api/audio/play', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('play')
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/audio/pause', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('pause')
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/audio/seek/:time', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('seek', request.parameters.time)
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/audio/fastseek/start/:direction', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('startFastSeek', request.parameters.direction === 'reverse')
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/audio/fastseek/stop', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('stopFastSeek')
|
|
.then(() => resolve(respond({ success: true })))
|
|
.catch(() => resolve(respond({ success: false })));
|
|
});
|
|
}));
|
|
|
|
worker.get('/api/audio/status', stopAfter((request) => {
|
|
return new Promise((resolve) => {
|
|
client.method('getPlaybackStatus')
|
|
.then(status => resolve(respond(status)));
|
|
});
|
|
}));
|
|
|
|
function respond(response) {
|
|
return new Response(JSON.stringify(response), {
|
|
headers: { 'Content-Type': 'application/json' }
|
|
});
|
|
}
|
|
}
|