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; } }
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); }
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); }
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();"); }); } }