/// <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();
        }
Beispiel #4
0
        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));
                    }
                }
            }
        }