/** @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 = 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); } }