예제 #1
0
        private static bool NewFileFound(RvFile fileChild, RvFile dbDir, int dbIndex)
        {
            if (fileChild == null)
            {
                ReportError.SendAndShow("Error in File Scanning Code.");
                return(true);
            }

            // this could be an unknown file, or dirctory.
            // if item is a directory add the directory and call back in again

            // add the newly found item
            switch (fileChild.FileType)
            {
            case FileType.Zip:
            case FileType.SevenZip:
                dbDir.ChildAdd(fileChild, dbIndex);
                CheckADir(fileChild, false);
                return(true);

            case FileType.Dir:
                dbDir.ChildAdd(fileChild, dbIndex);
                CheckADir(fileChild, true);
                return(true);

            case FileType.File:
                // if we have not read the files CRC in the checking code, we need to read it now.
                if (fileChild.GotStatus != GotStatus.FileLocked)
                {
                    if (!Utils.IsDeepScanned(fileChild))
                    {
                        Populate.FromAFile(fileChild, dbDir.FullName, EScanLevel, _thWrk, ref _fileErrorAbort);
                    }
                }
                dbDir.ChildAdd(fileChild, dbIndex);
                return(true);

            case FileType.ZipFile:
                dbDir.ChildAdd(fileChild, dbIndex);
                return(true);

            case FileType.SevenZipFile:
                if (fileChild.Name.EndsWith("/"))
                {
                    return(false);
                }
                dbDir.ChildAdd(fileChild, dbIndex);
                return(true);

            default:
                throw new Exception("Unsuported file type " + fileChild.FileType);
            }
        }
예제 #2
0
        public static bool Phase2Test(RvFile dbFile, RvFile testFile, EScanLevel eScanLevel, int indexCase, string fullDir, ThreadWorker thWrk, ref bool fileErrorAbort, out bool MatchedAlt)
        {
            MatchedAlt = false;
            //Debug.WriteLine("Comparing Dat File " + dbFile.TreeFullName);
            //Debug.WriteLine("Comparing File     " + testFile.TreeFullName);
            int retv = indexCase == 0 ?
                       dbFile.Name.CompareTo(testFile.Name) :
                       DBHelper.CompareName(dbFile, testFile);

            if (retv != 0)
            {
                return(false);
            }

            FileType dbfileType = dbFile.FileType;
            FileType dbtestFile = testFile.FileType;

#if ZipFile
            if (dbfileType == FileType.File && dbtestFile == FileType.Zip)
            {
                dbtestFile = FileType.File;
            }
#endif
            if (dbfileType != FileType.File || dbtestFile != FileType.File)
            {
                return(false);
            }

            Populate.FromAFile(testFile, fullDir, eScanLevel, thWrk, ref fileErrorAbort);
            if (fileErrorAbort)
            {
                return(false);
            }

            if (testFile.GotStatus == GotStatus.FileLocked)
            {
                return(false);
            }

            return(CompareWithAlt(dbFile, testFile, out MatchedAlt));
        }
예제 #3
0
        /// <summary>
        /// Called from 5 places:
        /// 1: ScanFiles: main top level loop.
        /// 2: MatchFound: called after a ZIP/SevenZip is matched to an item in the DB, where the zip has either changed or never been scanned or level 3 scanning
        /// 3: MatchFound: called when an directory is matched to an item in the DB that is not from a DAT. (This is a directory not found in the main tree, as main tree dir's are processes in top level loop
        /// 4: NewFileFound: called after a new unmatched ZIP/SevenZip is found.
        /// 5: NewFileFound: called after a new unmatched DIR is found.
        /// </summary>
        /// <param name="dbDir"></param>
        /// <param name="report"></param>
        private static void CheckADir(RvFile dbDir, bool report)
        {
            if (_cacheSaveTimer.Elapsed.TotalMinutes > Settings.rvSettings.CacheSaveTimePeriod)
            {
                _thWrk.Report("Saving Cache");
                DB.Write();
                _thWrk.Report("Saving Cache Complete");
                _cacheSaveTimer.Reset();
                _cacheSaveTimer.Start();
            }

            string fullDir = dbDir.FullName;

            if (report)
            {
                _thWrk.Report(new bgwText2(fullDir));
            }

            // this is a temporary rvDir structure to store the data about the actual directory/files we are scanning
            // we will first populate this variable with the real file data from the directory, and then compare it
            // with the data in dbDir.
            RvFile fileDir = null;

            Debug.WriteLine(fullDir);

            FileType ft = dbDir.FileType;

            #region "Populate fileDir"

            // if we are scanning a ZIP file then populate scanDir from the ZIP file
            switch (ft)
            {
            case FileType.Zip:
            case FileType.SevenZip:
                fileDir = Populate.FromAZipFile(dbDir, EScanLevel, _thWrk);
                break;

            case FileType.Dir:
                fileDir = Populate.FromADir(dbDir, EScanLevel, _thWrk, ref _fileErrorAbort);
                break;

            default:
                ReportError.SendAndShow("Un supported file type in CheckADir " + ft);
                break;
            }

            #endregion

            if (fileDir == null)
            {
                ReportError.SendAndShow("Unknown Reading File Type in Dir Scanner");
                return;
            }

            if (report)
            {
                _thWrk.Report(new bgwSetRange2(fileDir.ChildCount));

                _thWrk.Report(new bgwRange2Visible(true));
            }

            if (!DBTypeGet.isCompressedDir(ft) && _thWrk.CancellationPending)
            {
                return;
            }

            Compare(dbDir, fileDir, report, true);
        }