internal async Task <List <Song> > GetSongsAsync() { if (IsOnline && Songs != null && Songs.Count > 0) { return(Songs); } if (Songs.Count == SongsID.Length) { return(Songs); } Songs.Clear(); var opr = SQLOperator.Current(); var s = await opr.GetSongsAsync(SongsID); var s1 = s.OrderBy(x => x.Track); s1 = s1.OrderBy(x => x.Disc); Songs.AddRange(s1); var t = ThreadPool.RunAsync(async work => { SongsID = s.Select(x => x.ID).ToArray(); if (SongsID.IsNullorEmpty()) { await SQLOperator.Current().RemoveAlbumAsync(ID); } else { await SQLOperator.Current().UpdateAlbumAsync(new Album(ID) { Songs = SongsID, Name = Name ?? string.Empty, Genres = Genres ?? new string[] { }, Year = Year, AlbumSort = AlbumSort ?? string.Empty, TrackCount = TrackCount, DiscCount = DiscCount, AlbumArtists = AlbumArtists ?? new string[] { }, AlbumArtistsSort = AlbumArtistsSort ?? new string[] { }, ReplayGainAlbumGain = ReplayGainAlbumGain, ReplayGainAlbumPeak = ReplayGainAlbumPeak, PicturePath = ArtworkUri == null ? string.Empty : ArtworkUri.AbsolutePath ?? string.Empty, }); } }); return(s1.ToList()); }
internal async Task AddAsync(int[] SongID) { var songs = await Song.GetAsync(SongID); var list = new List <int>(); foreach (var song in songs) { if (SongsID.Contains(song.ID)) { return; } list.Add(song.ID); if (!song.PicturePath.IsNullorEmpty()) { bool b = true; // confirm no duplicate foreach (var item in HeroArtworks) { if (item.OriginalString == song.PicturePath) { b = false; break; } } if (b) { HeroArtworks.Insert(0, new Uri(song.PicturePath)); } } } list.AddRange(SongsID); SongsID = list.ToArray(); if (HeroArtworks.Count > 4) { HeroArtworks.RemoveRange(4, HeroArtworks.Count - 4); } await SaveAsync(); }