Example #1
0
        private void AlwaysCrawlProgress_ProgressChanged(object sender, ProgressState state)
        {
            AlwaysCrawlProgressTick++;
            if (AlwaysCrawlProgressTick >= AlwaysCrawlProgressTickEnd)
            {
                AlwaysCrawlProgressTick = 0;
            }

            // 設定画面を表示中の場合、一部ステップ時にカウント表示を更新
            if (ChromeBrowser.Address.EndsWith("setting.html"))
            {
                switch (state.CurrentStep)
                {
                case ProgressState.Step.RecordUpdateEnd:
                case ProgressState.Step.PurgeProcessEnd:
                case ProgressState.Step.AlwaysCrawlDBDocumentDeleteBegin:
                    // 前回から1秒以上経っている場合のみ更新
                    if (LastUpdatedCountDataInSettingPage == null || (DateTime.Now - LastUpdatedCountDataInSettingPage.Value).TotalMilliseconds >= 1000)
                    {
                        if (ChromeBrowser.CanExecuteJavascriptInMainFrame)
                        {
                            ChromeBrowser.EvaluateScriptAsync("updateCountsAsync();");
                        }
                        LastUpdatedCountDataInSettingPage = DateTime.Now;
                    }
                    break;
                }
            }

            string suffix;

            if (AlwaysCrawlProgressTick < AlwaysCrawlProgressTickEnd / 3)
            {
                suffix = ".";
            }
            else if (AlwaysCrawlProgressTick < AlwaysCrawlProgressTickEnd / 3 * 2)
            {
                suffix = "..";
            }
            else
            {
                suffix = "...";
            }

            bool onProgress;
            var  newCaption = GetBackgroundCrawlCaption(state.CurrentStep, state.Path, out onProgress);

            if (newCaption != null)
            {
                if (!string.IsNullOrEmpty(newCaption) && onProgress)
                {
                    newCaption += suffix;
                }
                StlBackgroundCrawl.Text = newCaption;
            }
        }
Example #2
0
        protected virtual void CrawlStart(IEnumerable <string> targetDirPaths = null)
        {
            // 検索対象フォルダが存在するかどうかをチェック
            foreach (var dirPath in App.GetCrawlTargetDirPaths(targetDirPaths))
            {
                if (!Directory.Exists(dirPath))
                {
                    Util.ShowErrorMessage(this, $"下記の検索対象フォルダが見つかりませんでした。\n{dirPath}\n\n検索対象フォルダの設定を変更してから、再度クロールを行ってください。");
                    return;
                }
            }

            // 実行前にDBのサイズを取得
            var dbFileSize = App.GM.GetDBFileSizeTotal();

            // ルートパスを取得
            var rootPath = Path.GetPathRoot(Path.GetFullPath(App.GM.DBDirPath));

            // ルートパスがアルファベットから始まっていれば、ローカルにDBがあるとみなし、空き容量チェック
            var driveLetter = rootPath.Substring(0, 1);

            if (Regex.IsMatch(driveLetter, "[a-zA-Z]"))
            {
                // ドライブの空き容量を取得
                var driveFreeSpaceSize = new DriveInfo(driveLetter).AvailableFreeSpace;

                // ドライブの空き容量(DBサイズ分を除く)が2GB未満の場合は警告
                if ((driveFreeSpaceSize - dbFileSize) < 1024L * 1024L * 1024L * 2L)
                {
                    var freeSpaceByGB    = Math.Round(driveFreeSpaceSize / (decimal)(1024L * 1024L * 1024L), 2);
                    var freeSpaceCaption = freeSpaceByGB.ToString() + "GB";
                    var msg = $"{driveLetter.ToUpper()}ドライブの空き容量が残り少なくなっているため\nクロールによってDBのサイズが拡大し、空き容量が無くなる可能性があります。\n(現在の空き容量: {freeSpaceCaption})\n\nクロールを実行してもよろしいですか?";
                    var res = MessageBox.Show(this, msg, "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
                    if (res == DialogResult.No)
                    {
                        return;
                    }
                }
            }

            ChromeBrowser.EvaluateScriptAsync("$('#CRAWL-START').addClass('disabled'); $('#SETTING-LINK').addClass('disabled');");

            var f = new CrawlProgressForm(App, () =>
            {
                ChromeBrowser.EvaluateScriptAsync("$('#CRAWL-START').removeClass('disabled'); $('#SETTING-LINK').removeClass('disabled');");
            })
            {
                TargetDirPaths = targetDirPaths
            };

            f.Show(this);
        }
Example #3
0
        public string GetTextContentByElementId(string ElementId)
        {
            string startDate = "";
            string script    = string.Format("document.getElementById('{0}').textContent;", ElementId);

            ChromeBrowser.EvaluateScriptAsync(script).ContinueWith(x =>
            {
                var response = x.Result;

                if (response.Success && response.Result != null)
                {
                    startDate = response.Result.ToString();
                }
            });
            return(startDate);
        }
Example #4
0
        private void ChromeBrowser_FrameLoadStart(object sender, FrameLoadStartEventArgs e)
        {
            if (e.Url.EndsWith("index.html"))
            {
                var selectRes1 = App.GM.Select(Table.Documents
                                               , limit: 0
                                               , outputColumns: new[] { Groonga.VColumn.ID }
                                               );

                DBState.DocumentCount     = selectRes1.SearchResult.NHits;
                DBState.TargetFolderCount = App.UserSettings.TargetFolders.Count;
                DBState.AlwaysCrawlMode   = App.UserSettings.AlwaysCrawlMode;

                // 更新の有無をチェック
                ISAutoUpdater.Check(ApplicationEnvironment.IsPortableMode(), (args) =>
                {
                    var msg = $"新しいバージョン ({args.CurrentVersion.TrimEnd('0').TrimEnd('.')}) に更新可能です";
                    ChromeBrowser.EvaluateScriptAsync($"$('#UPDATE-LINK .message').text('{msg}'); $('#UPDATE-LINK').show();");
                });
            }
        }