public async Task <UpdateQueueMetadataResult> UpdateMetadataAsync(IList <FileMetadata> fileMetadatas) { var result = new UpdateQueueMetadataResult(); IList <Track> tracks = await this.trackRepository.GetTracksAsync(fileMetadatas.Select(x => x.Path).ToList()); await Task.Run(() => { lock (this.queueLock) { if (this.Queue != null) { // Queue result.IsQueueChanged = true; foreach (TrackViewModel trackViewModel in this.queue) { Track newTrack = tracks.Where(x => x.SafePath.Equals(trackViewModel.SafePath)).FirstOrDefault(); trackViewModel.UpdateTrack(newTrack); // Playing track if (trackViewModel.SafePath.Equals(this.currentTrack.SafePath)) { result.IsPlayingTrackChanged = true; this.currentTrack.UpdateTrack(newTrack); } } } } }); return(result); }
public async Task UpdateQueueMetadataAsync(IList <FileMetadata> fileMetadatas) { UpdateQueueMetadataResult result = await this.queueManager.UpdateMetadataAsync(fileMetadatas); // Raise events if (result.IsPlayingTrackChanged) { this.PlayingTrackChanged(this, new EventArgs()); } if (result.IsQueueChanged) { this.QueueChanged(this, new EventArgs()); } }
public async Task <UpdateQueueMetadataResult> UpdateMetadataAsync(List <IFileMetadata> fileMetadatas) { var result = new UpdateQueueMetadataResult(); await Task.Run(() => { lock (this.queueLock) { if (this.Queue != null) { foreach (PlayableTrack track in this.queue.Values) { IFileMetadata fmd = fileMetadatas.Select(f => f).Where(f => f.SafePath == track.SafePath).FirstOrDefault(); if (fmd != null) { // Queue if (this.UpdateTrackPlaybackInfo(track, fmd)) { result.IsQueueChanged = true; // Playing track if (track.SafePath.Equals(this.currentTrack.Value.SafePath)) { result.IsPlayingTrackPlaybackInfoChanged = true; // Playing track artwork if (fmd.ArtworkData.IsValueChanged) { result.IsPlayingTrackArtworkChanged = true; } } } } } } } }); return(result); }