private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = (BackgroundWorker)sender; PlaylistWorkQueue queue = new PlaylistWorkQueue(); int WorkOrder = 1; tbl.ClearLog(); worker.ReportProgress(0, rm.GetString("Starting up...")); tsCurrentProcess.Text = rm.GetString("Starting up..."); if (Directory.Exists(ProgramSettings.OutputFolder) && File.Exists(ProgramSettings.RekordboxXMLFile)) { worker.ReportProgress(0, $"{ rm.GetString("Processing") } { ProgramSettings.RekordboxXMLFile }"); // On first run, the Playlist Helper is empty if (PlaylistHelper == null) { PlaylistHelper = new PlaylistHelper(ProgramSettings.OutputFolder , ProgramSettings.MusicFolder , new DJ_PLAYLISTS(ProgramSettings.RekordboxXMLFile)); } // On the next runs, the XML file may have changed else if (PlaylistHelper.Playlists.RekordboxXMLFullPath != ProgramSettings.RekordboxXMLFile) { PlaylistHelper.Playlists = new DJ_PLAYLISTS(ProgramSettings.RekordboxXMLFile); } worker.ReportProgress(0, $"{ PlaylistHelper.TrackCount } { rm.GetString("track(s) loaded!") }"); worker.ReportProgress(0, $"{ PlaylistHelper.PlaylistCount } { rm.GetString("Playlists loaded!") }"); if (radPlaylists.Checked) { // First we prepare the work queue if (chkOrphans.Checked) { queue.AddWork(PlaylistOptions.Orphans, rm.GetString(PlaylistHelper.PROCESS_TITLE_ORPHANS), WorkOrder++); } if (chkDuplicates.Checked) { queue.AddWork(PlaylistOptions.Duplicates, rm.GetString(PlaylistHelper.PROCESS_TITLE_DUPLICATES), WorkOrder++); } if (chkMissing.Checked) { queue.AddWork(PlaylistOptions.Missing, rm.GetString(PlaylistHelper.PROCESS_TITLE_MISSING), WorkOrder++); } if (chkUntagged.Checked) { queue.AddWork(PlaylistOptions.Untagged, rm.GetString(PlaylistHelper.PROCESS_TITLE_UNTAGGED), WorkOrder++); } if (chkUnanalyzed.Checked) { queue.AddWork(PlaylistOptions.Unanalyzed, rm.GetString(PlaylistHelper.PROCESS_TITLE_UNANALYZED), WorkOrder++); } if (chkUnreferenced.Checked) { queue.AddWork(PlaylistOptions.None, rm.GetString(PlaylistHelper.PROCESS_TITLE_UNREFERENCED), WorkOrder++); queue.AddWork(PlaylistOptions.Unreferenced, $"{ rm.GetString("Checking files stored in") } { ProgramSettings.MusicFolder }, { rm.GetString("this may take a while...") }", WorkOrder); } foreach (PlaylistWork pw in queue.Queue) { if (!worker.CancellationPending) { tsCurrentProcess.Text = pw.Title; worker.ReportProgress((pw.Order * 100) / WorkOrder, pw.Title); pw.DoWork(PlaylistHelper); } else { e.Cancel = true; return; } } } else if (radStats.Checked) { worker.ReportProgress(0, $"{rm.GetString("Calculating music library files size")}..."); worker.ReportProgress(100, rm.GetString("Total size:") + string.Format(new FileSizeFormatProvider(), " {0:fs}", PlaylistHelper.Playlists.Size)); } else if (radBackupMusic.Checked) { DialogResult dialogResult = Messages.YesNoCancelMessage(rm.GetString("You're about to copy") + string.Format(new FileSizeFormatProvider(), " {0:fs}. ", PlaylistHelper.Playlists.Size) + rm.GetString("This could take a long time. Would you like to overwrite the existing files ?")); bool overwrite = false; switch (dialogResult) { case DialogResult.Yes: overwrite = true; break; case DialogResult.No: overwrite = false; break; case DialogResult.Cancel: e.Cancel = true; return; } worker.ReportProgress(0, $"{ rm.GetString("Starting music files copy from") } { ProgramSettings.MusicFolder } to { ProgramSettings.OutputFolder }..."); FileCopier fc = new FileCopier(ProgramSettings.MusicFolder, ProgramSettings.OutputFolder); int count = 1; int total = PlaylistHelper.TrackCount; int errorsCount = 0; foreach (string file in PlaylistHelper.CollectionMusicFiles()) { if (!worker.CancellationPending) { if (fc.Copy(file, overwrite)) { worker.ReportProgress((count++ *100) / total); } else { worker.ReportProgress((count++ *100) / total, $"{ rm.GetString("Error:") } { rm.GetString("impossible to copy") } { file }. { rm.GetString("File not found") }. "); errorsCount++; } tsCurrentProcess.Text = $"{ count } / { total } { rm.GetString("music files processed") }"; } else { e.Cancel = true; return; } } if (errorsCount > 0) { worker.ReportProgress(100, $"{ rm.GetString("Error:") } { errorsCount } { rm.GetString("file(s) could not be copied") }."); } } worker.ReportProgress(100, rm.GetString("Finished!")); } else { string msg = $"{ rm.GetString("Impossible to start processing:") } { ProgramSettings.RekordboxXMLFile } { rm.GetString("could not be found.") }"; worker.ReportProgress(0, msg); Messages.ErrorMessage(msg); } }