Example #1
0
        // Read all of the files under a path into a list of MusicFolder class
        static public MusicFolder EnumerateMusicFolder(string sDir, BackgroundWorker worker, DoWorkEventArgs e, Func <BackgroundWorker, DoWorkEventArgs, bool> checkForCancel)
        {
            List <MusicFile> musicFiles = null;

            musicFiles = EnumerateFilesInPath(sDir, musicFiles, worker, e, checkForCancel);
            MusicFolder musicFolder = new MusicFolder(sDir, musicFiles);

            return(musicFolder);
        }
Example #2
0
        // Begin the scan process widgets
        static public string scanMusicFolder(string folderName, List <MusicFile> workingFiles, BackgroundWorker worker, DoWorkEventArgs e)
        {
            int         addedCount          = 0;
            int         deletedCount        = 0;
            FileInfo    masterManifest      = new FileInfo(Path.GetFullPath(folderName) + "\\" + Constants.ManifestFilename);
            MusicFolder scannedMasterMusic  = null;
            MusicFolder manifestMasterMusic = null;
            int         percentComplete     = 0;

            // Scan the master folder and build a fresh list
            Console.WriteLine("Scan the folder for music files....");
            percentComplete = 20;
            worker.ReportProgress(percentComplete, "Scan the folder for music files....");
            scannedMasterMusic = FileUtils.EnumerateMusicFolder(folderName, worker, e, checkForCancel);

            // If we have a previous manifest on the master folder, read it in
            Console.WriteLine("Look for a manifest file in the folder....");
            percentComplete = 40;
            worker.ReportProgress(percentComplete, "Look for a manifest file in the folder....");
            if (checkForCancel(worker, e))
            {
                return("Cancelled.");
            }
            if (masterManifest.Exists)
            {
                string json = File.ReadAllText(masterManifest.FullName);
                manifestMasterMusic = Newtonsoft.Json.JsonConvert.DeserializeObject <MusicFolder>(json);
            }
            else
            {
                manifestMasterMusic = new MusicFolder(folderName, null);
                string json = Newtonsoft.Json.JsonConvert.SerializeObject(scannedMasterMusic, Newtonsoft.Json.Formatting.Indented);
                try
                {
                    File.WriteAllText(masterManifest.FullName, json);
                }
                catch
                {
                    MessageBoxResult result = MessageBox.Show(
                        "Could not write the manifest file to " + masterManifest.FullName,
                        "Cannot create music manifest",
                        MessageBoxButton.OK,
                        MessageBoxImage.Question);
                }
            }

            // Go through all the recently scanned files to see if any are not in the disk list (new files)
            Console.WriteLine("Chew through all the files we just scanned....");
            percentComplete = 60;
            worker.ReportProgress(percentComplete, "Chew through all the files we just scanned....");
            foreach (MusicFile currentFile in scannedMasterMusic.musicFiles)
            {
                MusicFile searchFile = null;
                worker.ReportProgress(percentComplete, "Process " + currentFile.fileName);
                if (checkForCancel(worker, e))
                {
                    return("Cancelled.");
                }

                if (manifestMasterMusic.musicFiles != null)
                {
                    searchFile = manifestMasterMusic.musicFiles.Find(srch => srch.fileName == currentFile.fileName);
                }
                currentFile.isProcessed = true;

                // If the file exists in the disk manifest, then we are good
                if (searchFile != null)
                {
                    searchFile.isProcessed = true;
                    currentFile.status     = MusicFile.MusicFileStatus.Old;
                    searchFile.status      = MusicFile.MusicFileStatus.Old;
                }
                else  // Not in the disk manifest means a new file, add to our working list
                {
                    MusicFile newFile = new MusicFile(currentFile.fileName);
                    currentFile.status = MusicFile.MusicFileStatus.New;
                    newFile.status     = MusicFile.MusicFileStatus.New;
                    addedCount++;
                    workingFiles.Add(newFile);
                }
            }

            // Now go through the disk list and mark any unprocessed as deleted from the master
            Console.WriteLine("Now walk all the manifest files looking for deleted ones....");
            percentComplete = 80;
            worker.ReportProgress(percentComplete, "Now walk all the manifest files looking for deleted ones....");
            if (manifestMasterMusic.musicFiles != null)
            {
                foreach (MusicFile currentFile in manifestMasterMusic.musicFiles)
                {
                    worker.ReportProgress(percentComplete, "Scrub " + currentFile.fileName);
                    if (checkForCancel(worker, e))
                    {
                        return("Cancelled.");
                    }
                    if (currentFile.isProcessed == false)
                    {
                        currentFile.isProcessed = true;
                        MusicFile newFile = new MusicFile(currentFile.fileName);
                        currentFile.status = MusicFile.MusicFileStatus.Deleted;
                        newFile.status     = MusicFile.MusicFileStatus.Deleted;
                        deletedCount++;
                        //workingFiles.Add(newFile);
                    }
                }
            }

            Console.WriteLine("Scanning process is complete....");
            percentComplete = 100;
            worker.ReportProgress(percentComplete, "Scanning process is complete....");
            return(manifestMasterMusic.musicFiles.Count + " files in library, " +
                   scannedMasterMusic.musicFiles.Count + " files scanned, " +
                   addedCount + " files added, " +
                   deletedCount + " files deleted, " +
                   workingFiles.Count + " files to process.");
        }
Example #3
0
        private void asyncScanner_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            e.Result = MusicFolder.scanMusicFolder((string)e.Argument, workingList, worker, e);
        }