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)); }
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); }
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); }
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); }