Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
156
gaia/apps/music/views/player/view.js
Executable file
156
gaia/apps/music/views/player/view.js
Executable file
|
|
@ -0,0 +1,156 @@
|
|||
/* global View */
|
||||
'use strict';
|
||||
|
||||
const REPEAT_VALUES = ['off', 'list', 'song'];
|
||||
const SHUFFLE_VALUES = ['off', 'on'];
|
||||
|
||||
var PlayerView = View.extend(function PlayerView() {
|
||||
View.call(this); // super();
|
||||
|
||||
this.artwork = document.getElementById('artwork');
|
||||
this.controls = document.getElementById('controls');
|
||||
this.seekBar = document.getElementById('seek-bar');
|
||||
|
||||
this.artwork.addEventListener('share', () => this.share());
|
||||
this.artwork.addEventListener('repeat', () => {
|
||||
this.setRepeatSetting(this.artwork.repeat);
|
||||
});
|
||||
this.artwork.addEventListener('shuffle', () => {
|
||||
this.setShuffleSetting(this.artwork.shuffle);
|
||||
});
|
||||
this.artwork.addEventListener('ratingchange', (evt) => {
|
||||
this.setSongRating(evt.detail);
|
||||
});
|
||||
|
||||
this.controls.addEventListener('play', () => this.play());
|
||||
this.controls.addEventListener('pause', () => this.pause());
|
||||
this.controls.addEventListener('previous', () => this.previous());
|
||||
this.controls.addEventListener('next', () => this.next());
|
||||
this.controls.addEventListener('startseek', (evt) => {
|
||||
this.startFastSeek(evt.detail.reverse);
|
||||
});
|
||||
this.controls.addEventListener('stopseek', () => this.stopFastSeek());
|
||||
|
||||
this.seekBar.addEventListener('seek', (evt) => {
|
||||
this.seek(evt.detail.elapsedTime);
|
||||
});
|
||||
|
||||
this.client.on('play', () => this.controls.paused = false);
|
||||
this.client.on('pause', () => this.controls.paused = true);
|
||||
this.client.on('songChange', () => this.update());
|
||||
this.client.on('durationChange', (duration) => {
|
||||
this.seekBar.duration = duration;
|
||||
});
|
||||
this.client.on('elapsedTimeChange', (elapsedTime) => {
|
||||
this.seekBar.elapsedTime = elapsedTime;
|
||||
});
|
||||
|
||||
this.update();
|
||||
});
|
||||
|
||||
PlayerView.prototype.update = function() {
|
||||
this.getPlaybackStatus().then((status) => {
|
||||
this.getSong(status.filePath).then((song) => {
|
||||
if (!song) {
|
||||
return;
|
||||
}
|
||||
|
||||
document.l10n.formatValues(
|
||||
'unknownTitle', 'unknownArtist', 'unknownAlbum'
|
||||
).then(([unknownTitle, unknownArtist, unknownAlbum]) => {
|
||||
this.title = song.metadata.title || unknownTitle;
|
||||
this.artwork.artist = song.metadata.artist || unknownArtist;
|
||||
this.artwork.album = song.metadata.album || unknownAlbum;
|
||||
});
|
||||
|
||||
this.artwork.els.rating.value = song.metadata.rated;
|
||||
});
|
||||
|
||||
this.getSongArtwork(status.filePath)
|
||||
.then((url) => this.artwork.src = url);
|
||||
|
||||
this.artwork.repeat = REPEAT_VALUES[status.repeat];
|
||||
this.artwork.shuffle = SHUFFLE_VALUES[status.shuffle];
|
||||
this.controls.paused = status.paused;
|
||||
this.seekBar.duration = status.duration;
|
||||
this.seekBar.elapsedTime = status.elapsedTime;
|
||||
this.render();
|
||||
});
|
||||
};
|
||||
|
||||
PlayerView.prototype.destroy = function() {
|
||||
this.client.destroy();
|
||||
|
||||
View.prototype.destroy.call(this); // super(); // Always call *last*
|
||||
};
|
||||
|
||||
PlayerView.prototype.render = function() {
|
||||
this.onRenderDone();
|
||||
};
|
||||
|
||||
PlayerView.prototype.startFastSeek = function(reverse) {
|
||||
this.fetch('/api/audio/fastseek/start/' + (reverse ? 'reverse' : 'forward'));
|
||||
};
|
||||
|
||||
PlayerView.prototype.stopFastSeek = function() {
|
||||
this.fetch('/api/audio/fastseek/stop');
|
||||
};
|
||||
|
||||
PlayerView.prototype.seek = function(time) {
|
||||
this.fetch('/api/audio/seek/' + time);
|
||||
};
|
||||
|
||||
PlayerView.prototype.play = function() {
|
||||
this.fetch('/api/audio/play');
|
||||
};
|
||||
|
||||
PlayerView.prototype.pause = function() {
|
||||
this.fetch('/api/audio/pause');
|
||||
};
|
||||
|
||||
PlayerView.prototype.previous = function() {
|
||||
this.fetch('/api/queue/previous');
|
||||
};
|
||||
|
||||
PlayerView.prototype.next = function() {
|
||||
this.fetch('/api/queue/next');
|
||||
};
|
||||
|
||||
PlayerView.prototype.share = function() {
|
||||
this.getPlaybackStatus().then((status) => {
|
||||
this.fetch('/api/activities/share/' + status.filePath);
|
||||
});
|
||||
};
|
||||
|
||||
PlayerView.prototype.getPlaybackStatus = function() {
|
||||
return this.fetch('/api/audio/status').then(response => response.json());
|
||||
};
|
||||
|
||||
PlayerView.prototype.setRepeatSetting = function(repeat) {
|
||||
this.fetch('/api/queue/repeat/' + REPEAT_VALUES.indexOf(repeat));
|
||||
};
|
||||
|
||||
PlayerView.prototype.setShuffleSetting = function(shuffle) {
|
||||
this.fetch('/api/queue/shuffle/' + SHUFFLE_VALUES.indexOf(shuffle));
|
||||
};
|
||||
|
||||
PlayerView.prototype.setSongRating = function(rating) {
|
||||
this.getPlaybackStatus().then((status) => {
|
||||
this.fetch('/api/songs/rating/' + rating + '/' + status.filePath);
|
||||
});
|
||||
};
|
||||
|
||||
PlayerView.prototype.getSong = function(filePath) {
|
||||
return this.fetch('/api/songs/info/' + filePath).then((response) => {
|
||||
return response.json();
|
||||
});
|
||||
};
|
||||
|
||||
PlayerView.prototype.getSongArtwork = function(filePath) {
|
||||
return this.fetch('/api/artwork/url/original/' + filePath)
|
||||
.then((response) => {
|
||||
return response.json();
|
||||
});
|
||||
};
|
||||
|
||||
window.view = new PlayerView();
|
||||
Loading…
Reference in a new issue