/// <summary> /// 処理実行 /// </summary> public override void ExecuteMain( Stack <IWork> workStack, Result crawlResult, CancellationToken cToken, IProgress <ProgressState> progress = null ) { // 無視設定にマッチしない場合のみ処理 if (IgnoreSettings.Any(s => s.IsMatch(DirPath, true))) { Logger.Trace("BackgroundDirectoryCrawl/Ignore directory - {0}", DirPath); return; } else { // DB内に存在する、対象フォルダ以下の文書データを取得 (スキップ・削除の判定を行うため) var dbRecordMap = DBDocumentRecordListUp(new[] { DirPath }); // DBの不要な文書削除処理をワークスタックに追加(下記処理が終わった後に呼び出される) workStack.Push(new DBPurge(_app, IsBackgroundCrawl, dbRecordMap)); // 検索対象フォルダの更新処理をワークスタックに追加 workStack.Push(new DirectoryCrawl(_app, IsBackgroundCrawl, DirPath, IgnoreSettings, dbRecordMap)); } }
/// <summary> /// 処理実行 /// </summary> public override void ExecuteMain( Stack <IWork> workStack, Result crawlResult, CancellationToken cToken, IProgress <ProgressState> progress = null ) { Logger.Debug("ファイル変更時クロール - {0}", FilePath); // 展開対象の拡張子一覧を取得 var extractableExtNames = _app.GetExtractableExtNames(); // ファイルの拡張子を "txt" 形式で取得 var ext = Path.GetExtension(FilePath).TrimStart('.').ToLower(); // 登録対象の拡張子である場合のみ処理 if (extractableExtNames.Contains(ext)) { // 無視設定に合致しない場合のみ処理 if (IgnoreSettings.Any(s => s.IsMatch(FilePath, false))) { Logger.Trace("BackgroundFileCrawl/Ignore file - {0}", FilePath); return; } else { // DB内に存在する親フォルダ内の文書データを取得 (スキップ・削除の判定を行うため) var dbRecordMap = DBDocumentRecordListUp(new[] { Path.GetDirectoryName(FilePath) }); // ファイルの登録処理をワークスタックに追加 workStack.Push(new Work.DocumentFileUpdate(_app, IsBackgroundCrawl, FilePath, dbRecordMap)); } } }
/// <summary> /// 処理実行 /// </summary> public override void ExecuteMain( Stack <IWork> workStack, Result crawlResult, CancellationToken cToken, IProgress <ProgressState> progress = null ) { // 展開対象の拡張子一覧を取得 var extractableExtNames = _app.GetExtractableExtNames(); // 実行時、指定ディレクトリがすでに削除(もしくは移動)されている場合は、処理をスキップ if (!Directory.Exists(DirPath)) { Logger.Debug($"Target directory not found - {DirPath}"); return; } Logger.Debug($"フォルダ内クロール - {DirPath}"); // 直下のサブフォルダを検索し、クロール対象のサブフォルダを取得 var targetSubDirs = new List <string>(); ApplySubDirectories(DirPath, (subDirPath) => { // 無視設定に合致するフォルダはスキップ if (IgnoreSettings.Any(s => s.IsMatch(subDirPath, true))) { Logger.Trace("DirectoryCrawl/Ignore directory - {0}", subDirPath); return; } // サブフォルダを検索対象リストに追加 targetSubDirs.Add(subDirPath); Thread.Sleep(0); // 他のスレッドに処理を渡す cToken.ThrowIfCancellationRequested(); // 取り消し判定 }); // サブフォルダに対するクロール処理をワークスタックに追加 foreach (var subDirPath in targetSubDirs.Reverse <string>()) // フォルダパスが若い順から処理されるようにするため、逆順にする { workStack.Push(new DirectoryCrawl(_app, IsBackgroundCrawl, subDirPath, IgnoreSettings, AlreadyDBRecordMap)); } // 直下のファイルを検索し、登録対象の文書ファイルを取得 var targetFilePaths = new List <string>(); ApplyFiles(DirPath, (filePath) => { // ファイルの拡張子を "txt" 形式で取得 var ext = Path.GetExtension(filePath).TrimStart('.').ToLower(); // 登録対象の拡張子である場合のみ処理 if (extractableExtNames.Contains(ext)) { // 無視設定に合致しない場合のみ処理 if (IgnoreSettings.Any(s => s.IsMatch(filePath, false))) { Logger.Trace("DirectoryCrawl/Ignore file - {0}", filePath); return; } else { targetFilePaths.Add(filePath); } } Thread.Sleep(0); // 他のスレッドに処理を渡す cToken.ThrowIfCancellationRequested(); // 取り消し判定 }); // ファイルに対するクロール処理をワークスタックに追加 foreach (var filePath in targetFilePaths.Reverse <string>()) // フォルダパスが若い順から処理されるようにするため、逆順にする { workStack.Push(new DocumentFileUpdate(_app, IsBackgroundCrawl, filePath, AlreadyDBRecordMap)); } }