private void ProcessAlbum(VKSaverTrack track, string albumName) { string dbKey = $"{track.Artist}-{albumName}"; VKSaverAlbum album = null; if (!_albums.TryGetValue(dbKey, out album)) { album = new VKSaverAlbum { DbKey = dbKey, Name = albumName, Tracks = new List <VKSaverTrack>() }; _albums[dbKey] = album; } VKSaverArtist artist = _artists[track.Artist]; if (artist.Albums == null) { artist.Albums = new List <VKSaverAlbum>(); } if (artist.Albums.FirstOrDefault(a => a.DbKey == dbKey) == null) { artist.Albums.Add(album); } album.Tracks.Add(track); }
public async Task InsertDownloadedTrack(VKSaverAudio audio, string folderPath, string filePath) { string artistName = null; string capatibleFolderPath = MusicFilesPathHelper.GetCapatibleSource(folderPath); string genreKey = audio.VK.Genre == 0 ? UNKNOWN_GENRE_NAME : audio.VK.Genre.ToString(); string vkInfoKey = $"{audio.VK.OwnerID} {audio.VK.ID}"; if (String.IsNullOrEmpty(audio.Track.Artist)) { artistName = UNKNOWN_ARTIST_NAME; } else { artistName = audio.Track.Artist; } string albumKey = $"{artistName}-{UNKNOWN_ALBUM_NAME}"; var dbFolder = await _database.FindItem <VKSaverFolder>(capatibleFolderPath); if (dbFolder == null) { dbFolder = new VKSaverFolder { Path = capatibleFolderPath, Name = Path.GetFileName(folderPath), Tracks = new List <VKSaverTrack>() }; await _database.InsertItem(dbFolder); } else { dbFolder = null; } var dbAlbum = await _database.FindItem <VKSaverAlbum>(albumKey); if (dbAlbum == null) { dbAlbum = new VKSaverAlbum { DbKey = albumKey, Name = UNKNOWN_ALBUM_NAME, ArtistName = artistName, Tracks = new List <VKSaverTrack>() }; await _database.InsertItem(dbAlbum); } else { dbAlbum = null; } var dbArtist = await _database.FindItem <VKSaverArtist>(artistName); if (dbArtist == null) { dbArtist = new VKSaverArtist { DbKey = artistName, Name = artistName, Tracks = new List <VKSaverTrack>(), Albums = new List <VKSaverAlbum>() }; await _database.InsertItem(dbArtist); } else if (dbAlbum != null) { dbArtist = await _database.GetItemWithChildrens <VKSaverArtist>(artistName); } else { dbArtist = null; } var dbGenre = await _database.FindItem <VKSaverGenre>(genreKey); if (dbGenre == null) { dbGenre = new VKSaverGenre { DbKey = genreKey, Name = genreKey, Tracks = new List <VKSaverTrack>() }; await _database.InsertItem(dbGenre); } else { dbGenre = null; } var dbVkInfo = await _database.FindItem <VKSaverAudioVKInfo>(vkInfoKey); if (dbVkInfo == null) { dbVkInfo = audio.VK; dbVkInfo.DbKey = vkInfoKey; await _database.InsertItem(dbVkInfo); } else { dbVkInfo = null; } var track = new VKSaverTrack { Title = audio.Track.Title.Trim(), Artist = artistName, Duration = TimeSpan.FromTicks(audio.Track.Duration), Source = MusicFilesPathHelper.GetCapatibleSource(filePath), GenreKey = genreKey, FolderKey = capatibleFolderPath, AlbumKey = albumKey, VKInfoKey = vkInfoKey }; await _database.InsertItem(track); if (dbAlbum != null) { dbAlbum.Tracks.Add(track); await _database.UpdateItemChildrens(dbAlbum); } if (dbArtist != null) { if (dbAlbum != null) { dbArtist.Albums.Add(dbAlbum); } dbArtist.Tracks.Add(track); await _database.UpdateItemChildrens(dbArtist); } if (dbFolder != null) { dbFolder.Tracks.Add(track); await _database.UpdateItemChildrens(dbFolder); } if (dbGenre != null) { dbGenre.Tracks.Add(track); await _database.UpdateItemChildrens(dbGenre); } if (dbVkInfo != null) { await _database.UpdateItemChildrens(dbVkInfo); } NeedReloadLibraryView = true; }