Beispiel #1
0
        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);
            }
        }