129 lines
4.0 KiB
TypeScript

/** @file
* @author Edouard DUPIN
* @copyright 2018, Edouard DUPIN, all right reserved
* @license PROPRIETARY (see license file)
*/
import { Component, OnInit } from '@angular/core';
import { Album, Track } from 'app/back-api';
import { ArtistService, DataService, ArianeService, AlbumService, TrackService, PlayerService } from 'app/service';
import { arrayUnique } from 'common/utils/arrayTools';
@Component({
selector: 'app-album',
templateUrl: './album.html',
})
export class AlbumScene implements OnInit {
public artistIds: number[] = [];
public idAlbum: number = -1;
public name: string = '???';
public description: string = undefined;
public artistCovers: Array<string> = undefined;
public albumName: string = '';
public albumDescription: string = undefined;
public albumCovers: string[] = undefined;
public tracksIds: number[] = undefined;
public tracks: Track[] = undefined;
constructor(
private artistService: ArtistService,
private albumService: AlbumService,
private trackService: TrackService,
private arianeService: ArianeService,
private playerService: PlayerService,
private dataService: DataService) {
}
ngOnInit() {
//this.artistIds = [this.arianeService.getArtistId()];
this.idAlbum = this.arianeService.getAlbumId();
let self = this;
this.albumService.get(this.idAlbum)
.then((response) => {
self.albumName = response.name;
self.albumDescription = response.description;
self.albumCovers = this.dataService.getListUrl(response.covers);
}).catch((error) => {
self.albumDescription = undefined;
self.albumName = '???';
self.albumCovers = undefined;
// no check just ==> an error occured on album
});
//console.log("all the tracks: " + self.tracksIds);
this.trackService.getTracksWithAlbumId(self.idAlbum)
.then((response2: Track[]) => {
self.tracks = response2;
self.artistIds = []
self.tracks.forEach(element => {
self.artistIds = [...self.artistIds, ...element.artists];
});
self.artistIds = arrayUnique(self.artistIds);
if (self.artistIds.length === 0) {
console.error("No artist found !!!");
return;
} else if (self.artistIds.length > 1) {
console.error("More than 1 artist ==> not managed");
}
// TODO: display more than 1 ...
self.artistService.get(self.artistIds[0])
.then((response) => {
self.name = response.name;
self.description = response.description;
self.artistCovers = self.dataService.getListUrl(response.covers);
}).catch((error) => {
self.description = undefined;
self.name = '???';
self.artistCovers = undefined;
});
//console.log(`>>>>BBB get tracks : ${JSON.stringify(response2, null, 2)}`);
}).catch((response) => {
//console.log(`>>>>BBB plop`);
self.tracks = undefined;
});
}
onSelectTrack(event: any, idSelected: number): void {
if (event.ctrlKey === false) {
//this.arianeService.navigateTrack({trackId: idSelected, newWindows:event.which === 2} );
// TODO: add on global player ...
//this.playerService.play(idSelected);
let elements: number[] = [];
let valuePlayed: number = undefined;
for (let iii = 0; iii < this.tracks.length; iii++) {
elements.push(this.tracks[iii].id);
//console.log(`plop: ${this.tracks[iii].id} == ${idSelected} ==> ${this.tracks[iii].name}`);
if (this.tracks[iii].id == idSelected) {
//console.log(` ==> find`);
valuePlayed = iii;
}
}
this.playerService.playInList(valuePlayed, elements);
} else {
this.arianeService.navigateTrackEdit({ id: idSelected, newWindows: event.which === 2 });
}
}
playAll(): void {
let elements: number[] = [];
for (let iii = 0; iii < this.tracks.length; iii++) {
elements.push(this.tracks[iii].id);
}
this.playerService.clear();
this.playerService.setNewPlaylist(elements);
}
playShuffle(): void {
let elements: number[] = [];
for (let iii = 0; iii < this.tracks.length; iii++) {
elements.push(this.tracks[iii].id);
}
this.playerService.clear();
this.playerService.setNewPlaylistShuffle(elements);
}
}