private void ApplyFilter() { switch (SelectedFilterMode) { case FilterMode.Downloaded: { DisplayedTracksSource.RemoveAll(x => x.DownloadState != DownloadState.Downloaded); } break; case FilterMode.NotDownloaded: { DisplayedTracksSource.RemoveAll(x => x.DownloadState == DownloadState.Downloaded); } break; case FilterMode.Downloading: { DisplayedTracksSource.RemoveAll( x => (x.DownloadState != DownloadState.Downloading) && (x.DownloadState != DownloadState.Converting)); } break; case FilterMode.Queued: { DisplayedTracksSource.RemoveAll(x => x.DownloadState != DownloadState.Queued); } break; } }
/// <summary> /// Called when a file was deleted in the workspace. /// Searches for an existing song in the list and sets its download status to false. /// </summary> /// <param name="sender">The sender.</param> /// <param name="fileSystemEventArgs">The <see cref="FileSystemEventArgs" /> instance containing the event data.</param> private void WatcherOnDeleted(object sender, FileSystemEventArgs fileSystemEventArgs) { if (Path.GetExtension(fileSystemEventArgs.Name)?.Replace(".", "") != Workspace.Settings.DownloadFormat.ToString().ToLower()) { return; } var title = Path.GetFileNameWithoutExtension(fileSystemEventArgs.Name); foreach (var track in Tracks) { if (track.Title != title) { continue; } DownloadedTracks--; track.DownloadState = DownloadState.NotDownloaded; if (SelectedFilterMode == FilterMode.NotDownloaded) { DisplayedTracksSource.Add(track); DisplayedTracksSource.Sort(); OnPageNumberChanged(); } return; } }
/// <summary> /// Called when a file was renamed in the workspace. /// Searches for an existing song in the list and renames its title. /// </summary> /// <param name="sender">The sender.</param> /// <param name="renamedEventArgs">The <see cref="RenamedEventArgs" /> instance containing the event data.</param> private void WatcherOnRenamed(object sender, RenamedEventArgs renamedEventArgs) { var newTitle = Path.GetFileNameWithoutExtension(renamedEventArgs.Name); foreach (var track in Tracks) { if (track.Title == newTitle) { var previousState = track.DownloadState; if (Path.GetExtension(renamedEventArgs.Name)?.Replace(".", "") != Workspace.Settings.DownloadFormat.ToString().ToLower()) { track.DownloadState = DownloadState.NeedsConvertion; if (previousState == DownloadState.Downloaded) { DownloadedTracks--; } if (SelectedFilterMode == FilterMode.NotDownloaded) { DisplayedTracksSource.Add(track); DisplayedTracksSource.Sort(); OnPageNumberChanged(); } } else { track.DownloadState = DownloadState.Downloaded; if (previousState == DownloadState.NotDownloaded) { DownloadedTracks++; } if (SelectedFilterMode == FilterMode.Downloaded) { DisplayedTracksSource.Add(track); DisplayedTracksSource.Sort(); OnPageNumberChanged(); } } return; } } }
/// <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; }