Пример #1
0
        private bool NewTrack(InspectedTrack inspectedTrack, int[] selectedSongIds, Album album)
        {
            if (inspectedTrack.ExistingSong == null)
            {
                return(true);
            }

            var albumTrack = album.GetSongByTrackNum(inspectedTrack.ImportedTrack.DiscNum, inspectedTrack.ImportedTrack.TrackNum);

            if (albumTrack != null)
            {
                return(false);
            }

            return(!selectedSongIds.Contains(inspectedTrack.ExistingSong.Id));
        }
Пример #2
0
        private InspectedTrack InspectTrack(ISession session, ImportedAlbumTrack importedTrack, IEnumerable <Artist> artists, Album album)
        {
            var inspected     = new InspectedTrack(importedTrack);
            var existingTrack = album != null?album.GetSongByTrackNum(importedTrack.DiscNum, importedTrack.TrackNum) : null;

            var existingSong = existingTrack != null && existingTrack.Song != null ? existingTrack.Song
                                : FindSong(session, importedTrack.Title, artists);

            if (existingSong != null)
            {
                inspected.ExistingSong = new SongContract(existingSong, PermissionContext.LanguagePreference);
            }

            inspected.Selected = existingTrack != null;

            return(inspected);
        }
Пример #3
0
        private bool AcceptImportedSong(ISession session, IAlbumImporter importer, Album album, InspectedTrack inspectedTrack,
                                        ContentLanguageSelection languageSelection, int[] selectedSongIds)
        {
            Song song = null;
            var  diff = new SongDiff(false);

            if (NewTrack(inspectedTrack, selectedSongIds, album))
            {
                song = new Song(new LocalizedString(inspectedTrack.ImportedTrack.Title, languageSelection));
                session.Save(song);
                album.AddSong(song, inspectedTrack.ImportedTrack.TrackNum, inspectedTrack.ImportedTrack.DiscNum);
                diff.Names.Set();
            }
            else if (selectedSongIds.Contains(inspectedTrack.ExistingSong.Id))
            {
                song = session.Load <Song>(inspectedTrack.ExistingSong.Id);

                if (!album.HasSong(song))
                {
                    album.AddSong(song, inspectedTrack.ImportedTrack.TrackNum, inspectedTrack.ImportedTrack.DiscNum);
                }

                var newName = inspectedTrack.ImportedTrack.Title;

                if (!song.Names.HasName(newName) && !song.Names.HasNameForLanguage(languageSelection))
                {
                    song.CreateName(new LocalizedString(newName, languageSelection));
                    diff.Names.Set();
                }
            }

            if (song != null)
            {
                if (inspectedTrack.ImportedTrack != null)
                {
                    foreach (var artistName in inspectedTrack.ImportedTrack.ArtistNames)
                    {
                        if (CreateArtist(session, song, artistName, ArtistRoles.Composer))
                        {
                            diff.Artists.Set();
                        }
                    }

                    foreach (var artistName in inspectedTrack.ImportedTrack.VocalistNames)
                    {
                        if (CreateArtist(session, song, artistName, ArtistRoles.Vocalist))
                        {
                            diff.Artists.Set();
                        }
                    }

                    song.UpdateArtistString();
                }

                if (diff.ChangedFields.Value != SongEditableFields.Nothing)
                {
                    var importerName = importer != null ? importer.ServiceName : "(unknown)";

                    _songService.Archive(session, song, diff, SongArchiveReason.AutoImportedFromMikuDb,
                                         $"Auto-imported from {importerName} for album '{album.DefaultName}'");
                }

                session.Update(song);
                return(true);
            }

            return(false);
        }
Пример #4
0
        private bool AcceptImportedSong(ISession session, Album album, InspectedTrack inspectedTrack,
                                        ContentLanguageSelection languageSelection, int[] selectedSongIds)
        {
            Song song = null;
            var  diff = new SongDiff(false);

            if (NewTrack(inspectedTrack, selectedSongIds, album))
            {
                song = new Song(new LocalizedString(inspectedTrack.ImportedTrack.Title, languageSelection));
                session.Save(song);
                album.AddSong(song, inspectedTrack.ImportedTrack.TrackNum, inspectedTrack.ImportedTrack.DiscNum);
                diff.Names = true;
            }
            else if (selectedSongIds.Contains(inspectedTrack.ExistingSong.Id))
            {
                song = session.Load <Song>(inspectedTrack.ExistingSong.Id);

                if (!album.HasSong(song))
                {
                    album.AddSong(song, inspectedTrack.ImportedTrack.TrackNum, inspectedTrack.ImportedTrack.DiscNum);
                }

                var newName = inspectedTrack.ImportedTrack.Title;

                if (!song.Names.HasName(newName) && !song.Names.HasNameForLanguage(languageSelection))
                {
                    song.CreateName(new LocalizedString(newName, languageSelection));
                    diff.Names = true;
                }
            }

            if (song != null)
            {
                if (inspectedTrack.ImportedTrack != null)
                {
                    foreach (var artistName in inspectedTrack.ImportedTrack.ArtistNames)
                    {
                        if (CreateArtist(session, song, artistName, ArtistRoles.Composer))
                        {
                            diff.Artists = true;
                        }
                    }

                    foreach (var artistName in inspectedTrack.ImportedTrack.VocalistNames)
                    {
                        if (CreateArtist(session, song, artistName, ArtistRoles.Vocalist))
                        {
                            diff.Artists = true;
                        }
                    }

                    song.UpdateArtistString();
                }

                Services.Songs.Archive(session, song, diff, SongArchiveReason.AutoImportedFromMikuDb,
                                       string.Format("Auto-imported from MikuDB for album '{0}'", album.DefaultName));

                session.Update(song);
                return(true);
            }

            return(false);
        }