/// <summary> /// 無視対象ファイルをリストアップする。途中で処理がキャンセルされた場合はnullを返す /// </summary> protected virtual List <string> SearchIgnoredFiles(IgnoreSetting setting, CancellationToken cToken) { var paths = new List <string>(); try { Util.ApplyAllFiles(_app.Logger, TxtBaseDirPath.Text, (path) => { var fileAttrs = File.GetAttributes(path); var isDirectory = fileAttrs.HasFlag(System.IO.FileAttributes.Directory); if (setting.IsMatch(path, isDirectory)) { paths.Add(path); } cToken.ThrowIfCancellationRequested(); }); } catch (OperationCanceledException) { return(null); } return(paths); }
/// <summary> /// 確定ボタン押下 /// </summary> private void BtnSave_Click(object sender, EventArgs e) { // 無視設定を更新 var setting = _app.UserSettings.TargetFolders.First(f => f.Path == baseDirPath); var inputLines = TxtSetting.Text.Replace("\r", "").Split('\n').Where(line => !string.IsNullOrWhiteSpace(line)); switch (editMode) { case EditMode.APPEND: setting.IgnoreSettingLines.AddRange(inputLines); break; case EditMode.UPDATE: setting.IgnoreSettingLines = inputLines.ToList(); break; } _app.UserSettings.Save(); // DB内から無視パターンに一致するレコードを削除 var ignoreSetting = IgnoreSetting.Load(baseDirPath, setting.IgnoreSettingLines); var t = Task.Run(() => { _app.DeleteIgnoredDocumentRecords(ignoreSetting); }); var pf = new ProgressForm(t, "無視対象となる文書データを削除中..."); pf.ShowDialog(this); DialogResult = DialogResult.OK; Close(); }
/// <summary> /// プレビュー表示の更新 /// </summary> protected virtual async void RefreshList() { LstPreview.Items.Clear(); LblSearching.Show(); if (currentCTokenSource != null) { currentCTokenSource.Cancel(); } if (searchTask != null) { searchTask.Wait(); } var baseDirPath = TxtBaseDirPath.Text; // 設定オブジェクトを作成 var setting = new IgnoreSetting(baseDirPath); var lines = TxtSetting.Text.Replace("\r", "").Split('\n'); foreach (var line in lines) { setting.AddPattern(line); } currentCTokenSource = new CancellationTokenSource(); searchTask = Task.Run <List <string> >(() => { return(SearchIgnoredFiles(setting, currentCTokenSource.Token)); }); var paths = await searchTask; // キャンセルされていなければ、画面上にパスを設定 if (paths != null) { foreach (var path in paths) { LstPreview.Items.Add(path); } } // 進捗表示を隠す LblSearching.Hide(); }
public void BasicTest() { foreach (var dataSet in _dataSets) { foreach (var testPattern in dataSet.TestPatterns) { var setting = new IgnoreSetting(dataSet.BaseDirPath); setting.AddPattern(testPattern.Pattern); if (testPattern.ShouldBeMatched) { Assert.IsTrue(setting.IsMatch(dataSet.TargetPath, dataSet.TargetIsDirectory)); } else { Assert.IsFalse(setting.IsMatch(dataSet.TargetPath, dataSet.TargetIsDirectory)); } } } }