Пример #1
0
 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();
 }
Пример #2
0
        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);
                        }
                    }
                }
            }
        }
Пример #3
0
 private void Form1_Load(object sender, EventArgs e)
 {
     EngineSelection.Items.AddRange(EngineLib.List().ToArray());
 }