public void LoadPlayList(string playlist) { this.PlaylistFiles = PlaylistHelper.GetFilesInPlaylist(playlist); this.Library.Clear(); this.Library.LoadFromPlaylist(playlist); var existingFiles = this.Library.GetTracks().Select(t => t.Filename).ToList(); var missingFiles = this.PlaylistFiles.Except(existingFiles).ToList(); this.PlaylistFiles = this.PlaylistFiles.Except(missingFiles).ToList(); this.QueueNextTrack(); }
/// <summary> /// Handles the DoWork event of the backgroundWorker control. /// </summary> private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { List <Track> availableTracks; if (chkDisplayedTracksOnly.Checked) { availableTracks = _displayedTracks; } else { availableTracks = LibraryControl .AvailableTracks .Where(t => t.IsShufflerTrack) .ToList(); } var strategy = (TrackSelector.MixStrategy) Enum.Parse(typeof(TrackSelector.MixStrategy), cmbMode.GetTextThreadSafe().Replace(" ", "")); Dictionary <string, Dictionary <string, Track> > excludedMixes = null; if (txtExcludeTracks.Text != "" && File.Exists(txtExcludeTracks.Text)) { var excludeTracks = PlaylistHelper.GetFilesInPlaylist(txtExcludeTracks.Text) .Select(f => LibraryControl.Library.GetTrackByFilename(f)) .Where(t => t != null) .ToList(); if (chkExlcudeMixesOnly.Checked) { if (excludeTracks.Count > 1) { excludedMixes = LibraryControl.MixLibrary.ConvertPlaylistToMixDictionary(excludeTracks); } } else { var excludeTrackTitles = excludeTracks .Select(t => t.Title) .ToList(); availableTracks.RemoveAll(t => excludeTrackTitles.Contains(t.Title)); } } var bpmDirection = (TrackSelector.BpmDirection)Enum.Parse(typeof(TrackSelector.BpmDirection), cmbBmpDirection.GetTextThreadSafe()); var direction = (TrackSelector.GenerateDirection)Enum.Parse(typeof(TrackSelector.GenerateDirection), cmbDirection.GetTextThreadSafe()); var allowBearable = (TrackSelector.AllowBearableMixStrategy) Enum.Parse(typeof(TrackSelector.AllowBearableMixStrategy), cmbAllowBearable.GetTextThreadSafe().Replace(" ", "")); var approxLength = int.MaxValue; if (_screenMode == ScreenMode.GeneratePlaylist) { var comboText = cmbApproxLength.GetTextThreadSafe().Replace(" minutes", ""); if (comboText != "No limit") { approxLength = Convert.ToInt32(comboText); } } var continueMix = (TrackSelector.ContinueMix) Enum.Parse(typeof(TrackSelector.ContinueMix), cmbContinueMix.GetTextThreadSafe().Replace(" ", "")); var keyMixStrategy = (TrackSelector.KeyMixStrategy) Enum.Parse(typeof(TrackSelector.KeyMixStrategy), cmbKeyMixing.GetTextThreadSafe().Replace(" ", "")); var useExtendedMixes = (TrackSelector.UseExtendedMixes) Enum.Parse(typeof(TrackSelector.UseExtendedMixes), cmbExtendedMixes.GetTextThreadSafe().Replace(" ", "")); var tracksToAdd = int.MaxValue; if (_screenMode == ScreenMode.AutoGeneratePlaylist) { tracksToAdd = Convert.ToInt32(cmbTracksToGenerate.GetTextThreadSafe()); } var mixPath = TrackSelector.GeneratePlayList(availableTracks, LibraryControl.MixLibrary, PlaylistControl.GetTracks(), bpmDirection, approxLength, allowBearable, strategy, useExtendedMixes, excludedMixes, chkRestrictArtistClumping.Checked, chkRestrictGenreClumping.Checked, chkRestrictTitleClumping.Checked, continueMix, keyMixStrategy, tracksToAdd, direction); if (!_cancel) { if (InvokeRequired) { BeginInvoke(new MethodInvoker(() => QueueTracks(mixPath, direction))); } else { QueueTracks(mixPath, direction); } } }