public static void AddItemToGroup <T>(RealObservableCollection <GroupInfoList <T> > group, T addition, Func <T, char> keyConversion) { GroupInfoList <T> list = GetItemGroup(group, addition, keyConversion); if (list.FirstOrDefault((a) => ((dynamic)a).ID == ((dynamic)addition).ID) == null) { list.Add(addition); } }
public static GroupInfoList <T> GetItemGroup <T>(RealObservableCollection <GroupInfoList <T> > group, string key) { GroupInfoList <T> list = group.FirstOrDefault((g) => g.Key.ToString() == key); if (list == null) { key = "\uD83C\uDF10"; list = group.First((g) => g.Key.ToString() == key); } return(list); }
public static GroupInfoList <T> GetItemGroup <T>(RealObservableCollection <GroupInfoList <T> > group, T addition, Func <T, char> keyConversion) { string key = (keyConversion(addition).ToString().ToLower()); if (Char.IsDigit(key[0]) || Char.IsSymbol(key[0])) { key = "#"; } else if (!Char.IsLetter(key[0])) { key = "\uD83C\uDF10"; } return(GetItemGroup <T>(group, key)); }
public DeletionResult DeleteSong(Song song, RealObservableCollection <GroupInfoList <Artist> > artistsList, RealObservableCollection <GroupInfoList <Album> > albumsList, RealObservableCollection <GroupInfoList <Song> > songsList) { GroupInfoList <Song> songList = MusicLibrary.GetItemGroup(songsList, song, a => a.SongTitle[0]); List <Song> songs; if (Songs.TryGetValue(song.Artist.ToLower() + "--" + song.Album.ToLower(), out songs)) { songList.Remove(song); songs.Remove(song); } songs = GetSongs(song.Artist, song.Album); if (songs.Count == 0) { Songs.Remove(song.Artist.ToLower() + "--" + song.Album.ToLower()); List <Album> albums; if (Albums.TryGetValue(song.Artist.ToLower(), out albums)) { Album album = albums.FirstOrDefault((a) => a.AlbumName == song.Album); albums.Remove(album); if (albums.Count == 0) { GroupInfoList <Album> albumList = MusicLibrary.GetItemGroup(albumsList, album, aa => aa.AlbumName[0]); Albums.Remove(song.Artist.ToLower()); albumList.Remove(album); Artist artist = Artists[song.Artist.ToLower()]; GroupInfoList <Artist> artistList = MusicLibrary.GetItemGroup(artistsList, artist, a => a.ArtistName[0]); Artists.Remove(song.Artist.ToLower()); artistList.Remove(artist); return(DeletionResult.Artist); } return(DeletionResult.Album); } } return(DeletionResult.Song); }
private MusicLibrary() { ArtistGroupDictionary = CreateObservableGroupDictionary <Artist>(); ArtistsCollection = new CollectionViewSource() { IsSourceGrouped = true, Source = ArtistGroupDictionary }; AlbumGroupDictionary = CreateObservableGroupDictionary <Album>(); AlbumsCollection = new CollectionViewSource() { IsSourceGrouped = true, Source = AlbumGroupDictionary }; SongGroupDictionary = CreateObservableGroupDictionary <Song>(); SongsCollection = new CollectionViewSource() { IsSourceGrouped = true, Source = SongGroupDictionary }; _cache = new MusicLibraryCache(); }