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