/// <summary> /// Initializes a new instance of the <see cref="WorkspaceViewModel" /> class. /// </summary> /// <param name="workspace">The workspace for the view model.</param> public WorkspaceViewModel(Workspace workspace) { Workspace = workspace; Name = Workspace.Name; PlaylistUrl = workspace.Settings.PlaylistUrl; DownloadingAllSongsText = Resources.MainWindow_CurrentWorkspace_SyncButtonLabel; SearchTextboxWatermark = Resources.MainWindow_CurrentWorkspace_SearchWatermarkDefault; Tracks = new ObservableImmutableList <PlaylistItemViewModel>(); Tracks.CollectionChanged += TracksOnCollectionChanged; DisplayedTracks = new ObservableImmutableList <PlaylistItemViewModel>(); PageSelectorViewModel = new PageSelectorViewModel(this); DownloadManager = new DownloadManager(Settings.Default.ParallelDownloads); WorkspaceSettingsViewModel = new WorkspaceSettingsViewModel(this); DisplayedTracksSource = new List <PlaylistItemViewModel>(); Workspace.Settings.PropertyChanged += SettingsOnPropertyChanged; FilterModes = new Dictionary <FilterMode, string>(); Settings.Default.PropertyChanged += ApplicationSettingsOnPropertyChanged; _watcher = new FileSystemWatcher { Path = Workspace.Path, NotifyFilter = NotifyFilters.FileName, Filter = "*.*" }; _watcher.Created += WatcherOnCreated; _watcher.Deleted += WatcherOnDeleted; _watcher.Renamed += WatcherOnRenamed; _watcher.Error += WatcherOnError; SetupFilter(); }
/// <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; }