private void EngineSelection_SelectedIndexChanged(object sender, EventArgs e) { EngineLib.Msgbox = ShowMsgBox; if (EngineSelection.SelectedItem != null) { currentEngine = EngineLib.Get(EngineSelection.SelectedItem.ToString()); } run.Enabled = currentEngine.Loaded; new Thread(new ThreadStart(() => { lock (currentEngine) { try { EngineSelection.Enabled = false; EngineName.Text = currentEngine.EngineInfo.Name; EngineProvider.Text = currentEngine.EngineInfo.Provider; EngineVersion.Text = currentEngine.EngineInfo.Version.ToString(); EngineMessages.Text = currentEngine.EngineInfo.Message; if (currentEngine.EngineInfo.NeedLogin) { var loginEngine = (ILoginSearchEngine)currentEngine; var loginform = new Login(loginEngine.Captcha(currentEngine.EngineInfo.LoginInfo)); loginform.ShowDialog(); loginform.Dispose(); if (!loginEngine.Login(loginform.Username, loginform.Password, loginform.Captcha)) { throw new Exception("无法登录到搜题引擎"); } } while (!currentEngine.Loaded) { Thread.Sleep(0); } run.Enabled = currentEngine.Loaded; EngineVersion.Text = currentEngine.EngineInfo.Version.ToString(); EngineMessages.Text = currentEngine.EngineInfo.Message; EngineSelection.Enabled = true; } catch (Exception err) { MessageBox.Show("您选择的搜题引擎出现了一处错误。\n" + err.Message + "\n" + err.StackTrace, "无法加载选择的搜题引擎"); } } })).Start(); }
public LocalSearch() { Directory.CreateDirectory("./localdb"); files = Directory.GetFiles("./localdb", "*.ldb", SearchOption.AllDirectories); while (files.Length < 1) { Process.Start("explorer", Path.GetFullPath("./localdb")); EngineLib.Msgbox.Invoke("没有可用的数据库,请将本地数据库(.ldb)存入打开的文件夹。"); files = Directory.GetFiles("./localdb", "*.ldb", SearchOption.AllDirectories); } long totalsize = 0; foreach (var f in files) { var finfo = new FileInfo(f); totalsize += finfo.Length; } memcached = (totalsize <= NON_MEMCACHE_SIZE_THREHOLD); if (memcached) { datastore = new Dictionary <string, string>(); foreach (var f in files) { var lines = File.ReadAllLines(f); foreach (var l in lines) { JObject jb = JObject.Parse(l); try { datastore.Add(jb.Value <string>("q"), jb.Value <string>("a")); } catch (ArgumentException err) { EngineLib.Msgbox("题库文件\"" + Path.GetFileName(f) + "\"存在一处错误:\n" + err.Message); } } } } }
private void Form1_Load(object sender, EventArgs e) { EngineSelection.Items.AddRange(EngineLib.List().ToArray()); }