public async Task UpdateAlbumAsync(AlbumViewModel albumViewModel, MetadataArtworkValue artwork, bool updateFileArtwork) { // Cache the new artwork string artworkID = await this.cacheService.CacheArtworkAsync(artwork.Value); // Add or update AlbumArtwork in the database await this.albumArtworkRepository.UpdateAlbumArtworkAsync(albumViewModel.AlbumKey, artworkID); if (updateFileArtwork) { // Get the tracks for this album IList <Track> tracks = await this.trackRepository.GetAlbumTracksAsync(new List <string> { albumViewModel.AlbumKey }); IList <FileMetadata> fileMetadatas = new List <FileMetadata>(); foreach (Track track in tracks) { FileMetadata fileMetadata = await this.GetFileMetadataAsync(track.Path); fileMetadata.ArtworkData = artwork; fileMetadatas.Add(fileMetadata); } // Update metadata in the files await this.updater.UpdateFileMetadataAsync(fileMetadatas); } // Raise event this.MetadataChanged(new MetadataChangedEventArgs()); }
public EditAlbumViewModel(Common.Database.Entities.Album album, IMetadataService metadataService, IDialogService dialogService, ICacheService cacheService) { this.Album = album; this.metadataService = metadataService; this.dialogService = dialogService; this.cacheService = cacheService; this.artwork = new MetadataArtworkValue(); this.LoadedCommand = new DelegateCommand(async() => await this.GetAlbumArtworkAsync()); this.ExportArtworkCommand = new DelegateCommand(async() => { if (HasArtwork) { await SaveFileUtils.SaveImageFileAsync("cover", this.Artwork.Value); } }); this.ChangeArtworkCommand = new DelegateCommand(async() => { if (!await OpenFileUtils.OpenImageFileAsync(new Action <byte[]>(this.UpdateArtwork))) { this.dialogService.ShowNotification(0xe711, 16, ResourceUtils.GetString("Language_Error"), ResourceUtils.GetString("Language_Error_Changing_Image"), ResourceUtils.GetString("Language_Ok"), true, ResourceUtils.GetString("Language_Log_File")); } }); this.RemoveArtworkCommand = new DelegateCommand(() => this.UpdateArtwork(null)); this.DownloadArtworkCommand = new DelegateCommand(() => this.DownloadArtworkAsync(), () => this.album.AlbumArtist != Defaults.UnknownArtistText && this.Album.AlbumTitle != Defaults.UnknownAlbumText); }
public EditMetadataBase(ICacheService cacheService) { this.cacheService = cacheService; this.artwork = new MetadataArtworkValue(); this.ExportArtworkCommand = new DelegateCommand(async() => await this.ExportArtworkAsync(), () => this.CanExportArtwork()); }
public EditTrackViewModel(IList <string> paths, IMetadataService metadataService, IDialogService dialogService) { this.multipleValuesText = "<" + ResourceUtils.GetString("Language_Multiple_Values") + ">"; this.artists = new MetadataValue(); this.title = new MetadataValue(); this.album = new MetadataValue(); this.albumArtists = new MetadataValue(); this.year = new MetadataValue(); this.trackNumber = new MetadataValue(); this.trackCount = new MetadataValue(); this.discNumber = new MetadataValue(); this.discCount = new MetadataValue(); this.genres = new MetadataValue(); this.grouping = new MetadataValue(); this.comment = new MetadataValue(); this.lyrics = new MetadataValue(); this.artwork = new MetadataArtworkValue(); this.paths = paths; this.metadataService = metadataService; this.dialogService = dialogService; this.HasMultipleArtwork = false; this.UpdateAlbumArtwork = false; this.LoadedCommand = new DelegateCommand(async() => await this.GetFilesMetadataAsync()); this.NavigateCommand = new DelegateCommand <string>((index) => Navigate(index)); this.ExportArtworkCommand = new DelegateCommand(async() => { if (HasArtwork) { await SaveFileUtils.SaveImageFileAsync("cover", this.Artwork.Value); } }); this.ChangeArtworkCommand = new DelegateCommand(async() => { if (!await OpenFileUtils.OpenImageFileAsync(new Action <byte[]>(this.UpdateArtwork))) { this.dialogService.ShowNotification( 0xe711, 16, ResourceUtils.GetString("Language_Error"), ResourceUtils.GetString("Language_Error_Changing_Image"), ResourceUtils.GetString("Language_Ok"), true, ResourceUtils.GetString("Language_Log_File")); } }); this.RemoveArtworkCommand = new DelegateCommand(() => this.UpdateArtwork(null)); this.Navigate("1"); // Make sure something is displayed when the screen is shown }
public async Task UpdateAlbumAsync(string albumKey, MetadataArtworkValue artwork, bool updateFileArtwork) { // Make sure that cached artwork cannot be out of date lock (this.cachedArtworkLock) { this.cachedArtwork = null; } // Set event args var args = new MetadataChangedEventArgs() { IsArtworkChanged = true }; // Cache new artwork string artworkID = await this.cacheService.CacheArtworkAsync(artwork.Value); // Update artwork in database // TODO await this.albumRepository.UpdateAlbumArtworkAsync(album.AlbumTitle, album.AlbumArtist, artworkID); IList <Track> tracks = await this.trackRepository.GetAlbumTracksAsync(new List <string> { albumKey }); IList <TrackViewModel> albumTracks = await this.container.ResolveTrackViewModelsAsync(tracks); var fileMetadatas = new List <IFileMetadata>(); foreach (TrackViewModel track in albumTracks) { var fmd = await this.GetFileMetadataAsync(track.Path); fmd.ArtworkData = artwork; fileMetadatas.Add(fmd); } if (updateFileArtwork) { // Queue update of the file metadata await this.QueueUpdateFileMetadata(fileMetadatas); } // Update the metadata in the PlaybackService await this.playbackService.UpdateQueueMetadataAsync(fileMetadatas); // Raise event this.MetadataChanged(args); }
public EditTrackViewModel(IList <TrackInfo> trackinfos, IMetadataService metadataService, IDialogService dialogService) { this.multipleValuesText = ResourceUtils.GetStringResource("Language_Multiple_Values"); this.artists = new MetadataValue(); this.title = new MetadataValue(); this.album = new MetadataValue(); this.albumArtists = new MetadataValue(); this.year = new MetadataValue(); this.trackNumber = new MetadataValue(); this.trackCount = new MetadataValue(); this.discNumber = new MetadataValue(); this.discCount = new MetadataValue(); this.genres = new MetadataValue(); this.grouping = new MetadataValue(); this.comment = new MetadataValue(); this.artwork = new MetadataArtworkValue(); this.trackInfos = trackinfos; this.metadataService = metadataService; this.dialogService = dialogService; this.HasMultipleArtwork = false; this.UpdateAlbumArtwork = false; this.LoadedCommand = new DelegateCommand(async() => await this.GetFilesMetadataAsync()); this.ChangeArtworkCommand = new DelegateCommand(async() => { if (!await OpenFileUtils.OpenImageFileAsync(new Action <string, byte[]>(this.UpdateArtwork))) { this.dialogService.ShowNotification( 0xe711, 16, ResourceUtils.GetStringResource("Language_Error"), ResourceUtils.GetStringResource("Language_Error_Changing_Image"), ResourceUtils.GetStringResource("Language_Ok"), true, ResourceUtils.GetStringResource("Language_Log_File")); } }); this.RemoveArtworkCommand = new DelegateCommand(() => this.UpdateArtwork(String.Empty, null)); }
public async Task UpdateAlbumAsync(Album album, MetadataArtworkValue artwork, bool updateFileArtwork) { string artworkID = String.Empty; // Cache new artwork if (artwork != null) { await Task.Run(() => { try { artworkID = IndexerUtils.CacheArtworkData(artwork.DataValue); } catch (Exception ex) { LogClient.Instance.Logger.Error("An error occured while caching artwork data for album with title='{0}' and album artist='{1}'. Exception: {2}", album.AlbumTitle, album.AlbumArtist, ex.Message); } }); } // Update artwork in database await this.albumRepository.UpdateAlbumArtworkAsync(album.AlbumTitle, album.AlbumArtist, artworkID); if (updateFileArtwork) { List <TrackInfo> albumTracks = await this.trackRepository.GetTracksAsync(album.ToList()); List <FileMetadata> fileMetadatas = (from t in albumTracks select new FileMetadata(t.Path) { ArtworkData = artwork }).ToList(); // Queue update of the file metadata await this.QueueFileMetadata(fileMetadatas); } // Raise event var metadataChangedEventArgs = new MetadataChangedEventArgs(); metadataChangedEventArgs.IsAlbumArtworkMetadataChanged = true; this.MetadataChanged(metadataChangedEventArgs); }
public EditAlbumViewModel(Album album, IMetadataService metadataService, IDialogService dialogService) { this.Album = album; this.metadataService = metadataService; this.dialogService = dialogService; this.artwork = new MetadataArtworkValue(); this.LoadedCommand = new DelegateCommand(async() => await this.GetAlbumArtworkAsync()); this.ChangeArtworkCommand = new DelegateCommand(async() => { if (!await OpenFileUtils.OpenImageFileAsync(new Action <string, byte[]>(this.UpdateArtwork))) { this.dialogService.ShowNotification(0xe711, 16, ResourceUtils.GetStringResource("Language_Error"), ResourceUtils.GetStringResource("Language_Error_Changing_Image"), ResourceUtils.GetStringResource("Language_Ok"), true, ResourceUtils.GetStringResource("Language_Log_File")); } }); this.RemoveArtworkCommand = new DelegateCommand(() => this.UpdateArtwork(string.Empty, null)); }
protected virtual void ShowArtwork(byte[] imageData) { this.Artwork = new MetadataArtworkValue(imageData); // Create new artwork data, so IsValueChanged is not triggered. this.VisualizeArtwork(imageData); // Visualize the artwork this.ExportArtworkCommand.RaiseCanExecuteChanged(); }