예제 #1
0
        public AddinFileInfo SetLastScanTime(string file, string addinId, bool isRoot, DateTime time, bool scanError, string scanDataMD5 = null)
        {
            AddinFileInfo info = (AddinFileInfo)files [file];

            if (info == null)
            {
                info         = new AddinFileInfo();
                info.File    = file;
                files [file] = info;
            }
            info.LastScan    = time;
            info.AddinId     = addinId;
            info.IsRoot      = isRoot;
            info.ScanError   = scanError;
            info.ScanDataMD5 = scanDataMD5;
            if (addinId != null)
            {
                info.Domain = GetDomain(isRoot);
            }
            else
            {
                info.Domain = null;
            }
            return(info);
        }
예제 #2
0
        public DateTime GetLastScanTime(string file)
        {
            AddinFileInfo info = (AddinFileInfo)files [file];

            if (info == null)
            {
                return(DateTime.MinValue);
            }
            else
            {
                return(info.LastScan);
            }
        }
예제 #3
0
        void RegisterFileToScan(IProgressStatus monitor, string file, AddinScanFolderInfo folderInfo, AddinScanData scanData)
        {
            AddinFileInfo finfo = folderInfo.GetAddinFileInfo(file);
            bool          added = false;

            if (finfo != null && (!finfo.IsAddin || finfo.Domain == folderInfo.GetDomain(finfo.IsRoot)) && !finfo.HasChanged(FileSystem, scanData?.MD5) && !scanResult.RegenerateAllData)
            {
                if (finfo.ScanError)
                {
                    // Always schedule the file for scan if there was an error in a previous scan.
                    // However, don't set ChangesFound=true, in this way if there isn't any other
                    // change in the registry, the file won't be scanned again.
                    scanResult.AddFileToScan(file, folderInfo, scanData);
                    added = true;
                }

                if (!finfo.IsAddin)
                {
                    return;
                }

                if (database.AddinDescriptionExists(finfo.Domain, finfo.AddinId))
                {
                    // It is an add-in and it has not changed. Paths in the ignore list
                    // are still valid, so they can be used.
                    if (finfo.IgnorePaths != null)
                    {
                        scanResult.ScanContext.AddPathsToIgnore(finfo.IgnorePaths);
                    }
                    return;
                }
            }

            scanResult.ChangesFound = true;

            if (!scanResult.CheckOnly && !added)
            {
                scanResult.AddFileToScan(file, folderInfo, scanData);
            }
        }