VulpesOS/gaia/apps/music/views/albums/view.js
OverSu b38dea0597 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.
2026-09-30 23:13:03 +02:00

86 lines
2.4 KiB
JavaScript
Executable file

/* global View */
'use strict';
var AlbumsView = View.extend(function AlbumsView() {
View.call(this); // super();
this.searchBox = document.getElementById('search-box');
this.searchResults = document.getElementById('search-results');
this.list = document.getElementById('list');
this.client.on('databaseChange', () => this.update());
this.setupSearch();
this.setupList();
this.update();
});
AlbumsView.prototype.update = function() {
return this.getAlbums().then((albums) => {
this.albums = albums;
return this.render();
});
};
AlbumsView.prototype.destroy = function() {
this.client.destroy();
View.prototype.destroy.call(this); // super(); // Always call *last*
};
AlbumsView.prototype.render = function() {
return this.list.setModel(this.albums)
.then(() => this.list.cache())
.then(this.onRenderDone);
};
AlbumsView.prototype.getAlbums = function() {
return document.l10n.formatValues('unknownAlbum', 'unknownArtist')
.then(([unknownAlbum, unknownArtist]) => {
return this.fetch('/api/albums/list')
.then(response => response.json())
.then((albums) => {
return albums.map((album) => {
return {
name: album.name,
url: '/album-detail?id=' + encodeURIComponent(album.name),
album: album.metadata.album || unknownAlbum,
artist: album.metadata.artist || unknownArtist
};
});
});
});
};
AlbumsView.prototype.getThumbnail = function(filePath) {
return this.fetch('/api/artwork/url/thumbnail/' + filePath)
.then(response => response.json());
};
AlbumsView.prototype.search = function(query) {
if (!query) {
return Promise.resolve(this.searchResults.clearResults());
}
return document.l10n.formatValues(
'unknownAlbum', 'unknownArtist'
).then(([unknownAlbum, unknownArtist]) => {
return this.fetch('/api/search/album/' + query)
.then(response => response.json())
.then((albums) => {
var results = albums.map((album) => {
return {
name: album.name,
title: album.metadata.album || unknownAlbum,
subtitle: album.metadata.artist || unknownArtist,
section: 'albums',
url: '/album-detail?id=' + encodeURIComponent(album.name)
};
});
return this.searchResults.setResults(results);
});
});
};
window.view = new AlbumsView();