mirror of
https://github.com/owntone/owntone-server.git
synced 2024-12-29 08:33:23 -05:00
197 lines
5.7 KiB
JavaScript
197 lines
5.7 KiB
JavaScript
|
|
|
|
var app = new Vue({
|
|
el: '#root',
|
|
data: {
|
|
config: {},
|
|
library: {},
|
|
outputs: [],
|
|
verification_req: { pin: '' },
|
|
spotify: {},
|
|
pairing: {},
|
|
pairing_req: { pin: '' },
|
|
libspotify: { user: '', password: '', errors: { user: '', password: '', error: '' } },
|
|
lastfm: {},
|
|
lastfm_login: { user: '', password: '', errors: { user: '', password: '', error: '' } }
|
|
},
|
|
|
|
created: function () {
|
|
this.loadConfig();
|
|
this.loadLibrary();
|
|
this.loadOutputs();
|
|
this.loadSpotify();
|
|
this.loadPairing();
|
|
this.loadLastfm();
|
|
},
|
|
|
|
computed: {
|
|
spotify_missing_scope () {
|
|
if (this.spotify.webapi_token_valid && this.spotify.webapi_granted_scope && this.spotify.webapi_required_scope) {
|
|
return this.spotify.webapi_required_scope.split(' ').filter(scope => this.spotify.webapi_granted_scope.indexOf(scope) < 0)
|
|
}
|
|
return []
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
loadConfig: function() {
|
|
axios.get('./api/config').then(response => {
|
|
this.config = response.data;
|
|
this.connect()});
|
|
},
|
|
|
|
loadLibrary: function() {
|
|
axios.get('./api/library').then(response => this.library = response.data);
|
|
},
|
|
|
|
loadOutputs: function() {
|
|
axios.get('./api/outputs').then(response => this.outputs = response.data.outputs);
|
|
},
|
|
|
|
loadSpotify: function() {
|
|
axios.get('./api/spotify').then(response => this.spotify = response.data);
|
|
},
|
|
|
|
loadPairing: function() {
|
|
axios.get('./api/pairing').then(response => this.pairing = response.data);
|
|
},
|
|
|
|
loadLastfm: function() {
|
|
axios.get('./api/lastfm').then(response => this.lastfm = response.data);
|
|
},
|
|
|
|
update: function() {
|
|
this.library.updating = true;
|
|
axios.put('./api/update').then(console.log('Library is updating'));
|
|
},
|
|
|
|
update_meta: function() {
|
|
this.library.updating = true;
|
|
axios.put('./api/rescan').then(console.log('Library is rescanning meta'));
|
|
},
|
|
|
|
kickoffPairing: function() {
|
|
axios.post('./api/pairing', this.pairing_req).then(response => {
|
|
console.log('Kicked off pairing');
|
|
if (!this.config.websocket_port) {
|
|
this.pairing = {};
|
|
}
|
|
});
|
|
},
|
|
|
|
kickoffVerification: function() {
|
|
axios.post('./api/verification', this.verification_req).then(response => {
|
|
console.log('Kicked off verification');
|
|
this.verification_req.pin = '';
|
|
});
|
|
},
|
|
|
|
selectOutputs: function() {
|
|
var selected_outputs = [];
|
|
for (var i = 0; i < this.outputs.length; i++) {
|
|
if (this.outputs[i].selected) {
|
|
selected_outputs.push(this.outputs[i].id);
|
|
}
|
|
}
|
|
|
|
axios.put('./api/outputs/set', { outputs: selected_outputs }).then(response => {
|
|
if (!this.config.websocket_port) {
|
|
this.loadOutputs();
|
|
}
|
|
});
|
|
},
|
|
|
|
loginLibspotify: function() {
|
|
axios.post('./api/spotify-login', this.libspotify).then(response => {
|
|
this.libspotify.user = '';
|
|
this.libspotify.password = '';
|
|
this.libspotify.errors.user = '';
|
|
this.libspotify.errors.password = '';
|
|
this.libspotify.errors.error = '';
|
|
if (!response.data.success) {
|
|
this.libspotify.errors.user = response.data.errors.user;
|
|
this.libspotify.errors.password = response.data.errors.password;
|
|
this.libspotify.errors.error = response.data.errors.error;
|
|
}
|
|
});
|
|
},
|
|
|
|
loginLastfm: function() {
|
|
axios.post('./api/lastfm-login', this.lastfm_login).then(response => {
|
|
this.lastfm_login.user = '';
|
|
this.lastfm_login.password = '';
|
|
this.lastfm_login.errors.user = '';
|
|
this.lastfm_login.errors.password = '';
|
|
this.lastfm_login.errors.error = '';
|
|
if (!response.data.success) {
|
|
this.lastfm_login.errors.user = response.data.errors.user;
|
|
this.lastfm_login.errors.password = response.data.errors.password;
|
|
this.lastfm_login.errors.error = response.data.errors.error;
|
|
}
|
|
});
|
|
},
|
|
|
|
logoutLastfm: function() {
|
|
axios.get('./api/lastfm-logout', this.lastfm_login).then(response => {
|
|
if (!this.config.websocket_port) {
|
|
this.loadLastfm();
|
|
}
|
|
});
|
|
},
|
|
|
|
connect: function() {
|
|
if (this.config.websocket_port <= 0) {
|
|
console.log('Websocket disabled');
|
|
return;
|
|
}
|
|
|
|
var protocol = 'ws://'
|
|
if (window.location.protocol === 'https:') {
|
|
protocol = 'wss://'
|
|
}
|
|
|
|
var socket = new WebSocket(protocol + document.domain + ':' + this.config.websocket_port, 'notify');
|
|
const vm = this;
|
|
socket.onopen = function() {
|
|
socket.send(JSON.stringify({ notify: ['update', 'pairing', 'spotify', 'lastfm', 'outputs']}));
|
|
socket.onmessage = function(response) {
|
|
console.log(response.data); // upon message
|
|
var data = JSON.parse(response.data);
|
|
if (data.notify.includes('update')) {
|
|
vm.loadLibrary();
|
|
}
|
|
if (data.notify.includes('pairing')) {
|
|
vm.loadPairing();
|
|
}
|
|
if (data.notify.includes('spotify')) {
|
|
vm.loadSpotify();
|
|
}
|
|
if (data.notify.includes('lastfm')) {
|
|
vm.loadLastfm();
|
|
}
|
|
if (data.notify.includes('outputs')) {
|
|
vm.loadOutputs();
|
|
}
|
|
};
|
|
};
|
|
}
|
|
},
|
|
|
|
filters: {
|
|
duration: function(seconds) {
|
|
// Display seconds as hours:minutes:seconds
|
|
|
|
var h = Math.floor(seconds / 3600);
|
|
var m = Math.floor(seconds % 3600 / 60);
|
|
var s = Math.floor(seconds % 3600 % 60);
|
|
|
|
return h + ":" + ('0' + m).slice(-2) + ":" + ('0' + s).slice(-2);
|
|
},
|
|
|
|
join: function(array) {
|
|
return array.join(', ');
|
|
}
|
|
}
|
|
|
|
})
|