示例#1
0
        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());
        }
示例#2
0
        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);
        }
示例#3
0
        public EditMetadataBase(ICacheService cacheService)
        {
            this.cacheService = cacheService;

            this.artwork = new MetadataArtworkValue();

            this.ExportArtworkCommand = new DelegateCommand(async() => await this.ExportArtworkAsync(), () => this.CanExportArtwork());
        }
示例#4
0
        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
        }
示例#5
0
        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);
        }
示例#6
0
        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));
        }
示例#7
0
        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);
        }
示例#8
0
        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));
        }
示例#9
0
 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();
 }