Example #1
0
        /// <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();
        }
Example #2
0
        /// <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();
        }
Example #3
0
        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;
        }