/// <summary> /// Updates the tracklist. /// Compares old and new songs. Removes all songs which are not in the fetched playlist and adds all songs which are /// new in the playlist. /// </summary> private void UpdateTracks() { DisplayedTracksSource.Clear(); // Get playlist items from the viewmodel collection var tracks = Tracks.Select(t => t.Item).ToList(); // Determinite items that should be added and removed var playlistItems = tracks.ToArray(); var addItems = Workspace.Settings.Items.Except(playlistItems).ToList(); var removeItems = playlistItems.Except(Workspace.Settings.Items).ToList(); // if (Tracks.Count == 0) addItems.Reverse(); // Remove the specified items Tracks.RemoveAll(item => removeItems.Contains(item.Item)); // Add the new items foreach (var item in addItems) { Tracks.Insert(0, new PlaylistItemViewModel(item, this)); } var i = 1; DownloadedTracks = 0; foreach (var track in Tracks) { if (track.DownloadState == DownloadState.Downloaded) { DownloadedTracks++; } track.Index = i++; } Workspace.SaveWorkspaceConfig(); DisplayedTracksSource.AddRange(Tracks); OnPageNumberChanged(); PageSelectorViewModel.UpdatePageview(); }
private void SearchTextChanged() { if (_searchTextChangeInProgress) { return; } _searchTextChangeInProgress = true; var refreshPageView = false; if (string.IsNullOrWhiteSpace(SearchText)) { SearchTextboxWatermark = Resources.MainWindow_CurrentWorkspace_SearchWatermarkDefault; if (DisplayedTracksSource.Count != Tracks.Count) { DisplayedTracksSource.Clear(); DisplayedTracksSource.AddRange(Tracks); refreshPageView = true; } } else { var results = Tracks.Where(x => x.Item.Title.ToLower().Contains(SearchText.ToLower())).ToList(); DisplayedTracksSource.Clear(); DisplayedTracksSource.AddRange(results); SearchTextboxWatermark = string.Format(Resources.MainWindow_CurrentWorkspace_SearchWatermarkResults, results.Count); refreshPageView = true; } ApplyFilter(); if (refreshPageView) { OnPageNumberChanged(); } PageSelectorViewModel.UpdatePageview(); _searchTextChangeInProgress = false; }