コード例 #1
0
        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;
            }
        }
コード例 #2
0
        /// <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;
            }
        }
コード例 #3
0
        /// <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;
                }
            }
        }
コード例 #4
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();
        }
コード例 #5
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;
        }