public void LoadDataFromRelease(Release release, ICollectionImageHandler imageHandler)
        {
            if (release.DiscCount != this.DatabaseRelease.DiscCount || release.Tracklist.Count != this.DatabaseRelease.Tracklist.Count)
            {
                Dialogs.Error("Tracklists do not match. Can not continue.");
                return;
            }

            this.DatabaseRelease.AdditionalFiles.Clear();
            this.DatabaseRelease.AdditionalFiles.AddRange(release.AdditionalFiles);

            this.DatabaseRelease.Artists.Clear();
            this.DatabaseRelease.Artists.AddRange(release.Artists.Select(ra => new ReleaseArtist()
            {
                Artist = this.CollectionManager.GetOrCreateArtist(ra.Artist.Name),
                JoinString = ra.JoinString
            }));

            this.DatabaseRelease.CatalogNumber = release.CatalogNumber;
            this.DatabaseRelease.Country = release.Country;
            //this.DatabaseRelease.DateAdded = release.DateAdded;
            //this.DatabaseRelease.DateModified = release.DateModified;
            //this.DatabaseRelease.DateAudioModified = release.DateAudioModified;
            this.DatabaseRelease.DiscogsReleaseId = release.DiscogsReleaseId;
            this.DatabaseRelease.DiscogsMasterId = release.DiscogsMasterId;
            this.DatabaseRelease.FlagMessage = release.FlagMessage;
            this.DatabaseRelease.Genre = release.Genre;
            this.DatabaseRelease.IsFlagged = release.IsFlagged;
            this.DatabaseRelease.JoinedAlbumArtists = release.JoinedAlbumArtists;
            this.DatabaseRelease.Label = release.Label;
            this.DatabaseRelease.Notes = release.Notes;
            this.DatabaseRelease.WikipediaPageName = release.WikipediaPageName;
            this.DatabaseRelease.OriginalReleaseDate = release.OriginalReleaseDate;
            this.DatabaseRelease.ReleaseDate = release.ReleaseDate;
            this.DatabaseRelease.Title = release.Title;

            this.additionalFilesEditor.Release = null;
            this.additionalFilesEditor.Release = this.DatabaseRelease;

            this.DatabaseRelease.Images.Clear();
            this.imagesEditor.Release = null;
            this.imagesEditor.Release = this.DatabaseRelease;
            foreach (var image in release.Images)
            {
                var newImage = new MusicDatabase.Engine.Entities.Image()
                {
                    Description = image.Description,
                    Extension = image.Extension,
                    IsMain = image.IsMain,
                    MimeType = image.MimeType,
                    Type = image.Type
                };
                this.DatabaseRelease.Images.Add(newImage);
                this.imagesEditor.AddImage(newImage, imageHandler.LoadImage(image));
            }

            for (int i = 0; i < release.Tracklist.Count; ++i)
            {
                this.DatabaseRelease.Tracklist[i].Artists.Clear();
                this.DatabaseRelease.Tracklist[i].Artists.AddRange(release.Tracklist[i].Artists.Select(a => new TrackArtist()
                {
                    Artist = this.CollectionManager.GetOrCreateArtist(a.Artist.Name),
                    JoinString = a.JoinString
                }));
                this.DatabaseRelease.Tracklist[i].JoinedArtists = release.Tracklist[i].JoinedArtists;
                this.DatabaseRelease.Tracklist[i].Title = release.Tracklist[i].Title;
            }

            this.detailsEditor.Release = null;
            this.detailsEditor.Release = this.DatabaseRelease;
            this.RefreshAllDiscs();
        }
        private void discEditor_ItemAdding(object sender, TrackAddingEventArgs e)
        {
            this.UpdateRelease();

            string albumArtists = string.IsNullOrEmpty(e.ImportTrackItem.SourceItem.Tag.AlbumArtists) ?
                e.ImportTrackItem.SourceItem.Tag.Artists : e.ImportTrackItem.SourceItem.Tag.AlbumArtists;
            string artists = string.IsNullOrEmpty(e.ImportTrackItem.SourceItem.Tag.Artists) ?
                e.ImportTrackItem.SourceItem.Tag.AlbumArtists : e.ImportTrackItem.SourceItem.Tag.Artists;

            if (string.IsNullOrEmpty(this.DatabaseRelease.JoinedAlbumArtists) && !string.IsNullOrEmpty(albumArtists))
            {
                this.DatabaseRelease.Artists.Clear();
                this.DatabaseRelease.Artists.Add(new ReleaseArtist()
                {
                    Artist = this.CollectionManager.GetOrCreateArtist(albumArtists)
                });
                this.DatabaseRelease.JoinedAlbumArtists = albumArtists;
            }
            if (string.IsNullOrEmpty(this.DatabaseRelease.Title))
            {
                this.DatabaseRelease.Title = e.ImportTrackItem.SourceItem.Tag.Album;
            }
            if (this.DatabaseRelease.ReleaseDate.Type == ReleaseDateType.Invalid && e.ImportTrackItem.SourceItem.Tag.Year != 0)
            {
                this.DatabaseRelease.ReleaseDate = new ReleaseDate(e.ImportTrackItem.SourceItem.Tag.Year);
            }
            if (string.IsNullOrEmpty(this.DatabaseRelease.Genre))
            {
                this.DatabaseRelease.Genre = e.ImportTrackItem.SourceItem.Tag.Genre;
            }

            if (artists != this.DatabaseRelease.JoinedAlbumArtists && !string.IsNullOrEmpty(artists))
            {
                foreach (Track track in this.DatabaseRelease.Tracklist)
                {
                    if (string.IsNullOrEmpty(track.JoinedArtists))
                    {
                        track.Artists.Add(new TrackArtist()
                        {
                            Artist = this.CollectionManager.GetOrCreateArtist(artists)
                        });
                        track.JoinedArtists = artists;
                    }
                }

                e.ImportTrackItem.Track.Artists.Add(new TrackArtist()
                {
                    Artist = this.CollectionManager.GetOrCreateArtist(artists)
                });
                e.ImportTrackItem.Track.JoinedArtists = artists;
            }

            this.detailsEditor.Release = null;
            this.detailsEditor.Release = this.DatabaseRelease;
            this.RefreshAllDiscs();
        }
        private void btnDiscogsMatch_Click(object sender, RoutedEventArgs e)
        {
            this.UpdateRelease();

            DiscogsReleaseMerger merger = new DiscogsReleaseMerger(this, this.CollectionManager, this.DatabaseRelease, this.imagesEditor);
            foreach (var disc in this.Release.Discs)
            {
                merger.AddDisc(disc.Select(t => new Tuple<Track, string>(t.Track, t.SourceItem.Name)));
            }
            merger.Merge();

            this.detailsEditor.Release = null;
            this.detailsEditor.Release = this.DatabaseRelease;
            this.RefreshAllDiscs();
        }
        private void btnWikipediaMatch_Click(object sender, RoutedEventArgs e)
        {
            this.UpdateRelease();

            WikipediaImporter wikiImporter = new WikipediaImporter(this, this.DatabaseRelease);
            if (wikiImporter.Import())
            {
                this.detailsEditor.Release = null;
                this.detailsEditor.Release = this.DatabaseRelease;
                this.RefreshAllDiscs();
            }
        }
        private void btnCapitalizeTitles_Click(object sender, RoutedEventArgs e)
        {
            if (this.DatabaseRelease.JoinedAlbumArtists != null)
            {
                this.DatabaseRelease.JoinedAlbumArtists = Utility.CapitalizeWords(this.DatabaseRelease.JoinedAlbumArtists);
            }

            if (this.DatabaseRelease.Title != null)
            {
                this.DatabaseRelease.Title = Utility.CapitalizeWords(this.DatabaseRelease.Title);
            }

            if (this.DatabaseRelease.Genre != null)
            {
                this.DatabaseRelease.Genre = Utility.CapitalizeWords(this.DatabaseRelease.Genre);
            }

            foreach (Track track in this.DatabaseRelease.Tracklist)
            {
                foreach (TrackArtist trackArtist in track.Artists)
                {
                    string capitalizedName = Utility.CapitalizeWords(trackArtist.Artist.Name);
                    if (capitalizedName != trackArtist.Artist.Name)
                    {
                        trackArtist.Artist = this.CollectionManager.GetOrCreateArtist(capitalizedName);
                    }
                }
                if (track.Artists.Count > 0)
                {
                    track.JoinedArtists = track.Artists.Join();
                }

                if (track.Title != null)
                {
                    track.Title = Utility.CapitalizeWords(track.Title);
                }
            }

            this.detailsEditor.Release = null;
            this.detailsEditor.Release = this.DatabaseRelease;
            this.RefreshAllDiscs();
        }