diff --git a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/Xofulltext_args_qry.java b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/Xofulltext_args_qry.java index 0db171b67..687bd150d 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/Xofulltext_args_qry.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/Xofulltext_args_qry.java @@ -23,11 +23,12 @@ public class Xofulltext_args_qry { public Xofulltext_cache_mgr cache_mgr; public Xofulltext_args_wiki[] wikis_ary; + public boolean expand_snips; + public boolean show_all_snips; + public boolean expand_options; public boolean case_match; public boolean auto_wildcard_bgn; public boolean auto_wildcard_end; - public boolean expand_matches_section; - public boolean show_all_matches; private boolean canceled; public byte[] Qry_key(byte[] wiki, byte[] ns_ids) { @@ -58,11 +59,13 @@ public class Xofulltext_args_qry { Set_prop(wiki_args, wikis_len, args, "limits"); rv.page_guid = args.Get_as_str("page_guid"); + rv.expand_snips = args.Get_as_bool_or("expand_snips", false); + rv.show_all_snips = args.Get_as_bool_or("show_all_snips", false); + rv.expand_options = args.Get_as_bool_or("expand_options", false); + rv.case_match = args.Get_as_bool_or("case_match", false); rv.auto_wildcard_bgn = args.Get_as_bool_or("auto_wildcard_bgn", false); rv.auto_wildcard_end = args.Get_as_bool_or("auto_wildcard_end", false); - rv.expand_matches_section = args.Get_as_bool_or("expand_matches_section", false); - rv.show_all_matches = args.Get_as_bool_or("show_all_matches", false); return rv; } private static void Set_prop(Xofulltext_args_wiki[] wikis, int wikis_len, Json_nde args, String key) { diff --git a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/brutes/Xofulltext_searcher__brute.java b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/brutes/Xofulltext_searcher__brute.java index 5c5950121..1849b5a34 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/brutes/Xofulltext_searcher__brute.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/brutes/Xofulltext_searcher__brute.java @@ -60,13 +60,13 @@ public class Xofulltext_searcher__brute implements Xofulltext_searcher { // do highlight if (found <= wiki_args.len) { - cbk_highlight.Init(ui, args.qry_id, wiki, page_id, ttl.Full_db(), args.show_all_matches); + cbk_highlight.Init(ui, args.qry_id, wiki, page_id, ttl.Full_db(), args.show_all_snips); ui.Send_page_add(new Xofulltext_searcher_page ( args.qry_id , wiki_domain , page_id , ttl.Full_db() - , args.expand_matches_section + , args.expand_snips )); finder.Match(text_mcase, 0, text_mcase.length, cbk_highlight); } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_highlighter_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_highlighter_mgr.java index 99f59be04..dc7cc0fd1 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_highlighter_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_highlighter_mgr.java @@ -74,7 +74,7 @@ class Xofulltext_highlighter_mgr implements Gfo_invk { int page_id = item.page_id; Gflucene_highlighter_item[] lines = highlighter_mgr.Exec(searcher_data, item); for (Gflucene_highlighter_item line : lines) { - ui.Send_line_add(true, searcher_args.show_all_matches, searcher_args.qry_id, wiki.Domain_bry(), page_id, line.num, Bry_.new_u8(line.text)); + ui.Send_line_add(true, searcher_args.show_all_snips, searcher_args.qry_id, wiki.Domain_bry(), page_id, line.num, Bry_.new_u8(line.text)); } } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_searcher__lucene.java b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_searcher__lucene.java index 8dc9cf454..abb2564ff 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_searcher__lucene.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_searcher__lucene.java @@ -75,7 +75,7 @@ public class Xofulltext_searcher__lucene implements Xofulltext_searcher { if (!wiki_args.ns_hash.Has(doc_data.ns_id)) continue; // call page doc_data - Xofulltext_searcher_page page = new Xofulltext_searcher_page(args.qry_id, wiki.Domain_bry(), doc_data.page_id, doc_data.page_full_db, args.expand_matches_section); + Xofulltext_searcher_page page = new Xofulltext_searcher_page(args.qry_id, wiki.Domain_bry(), doc_data.page_id, doc_data.page_full_db, args.expand_snips); ui.Send_page_add(page); full_list.Add(doc_data.page_id, doc_data); diff --git a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/specials/Xofulltext_searcher_html.java b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/specials/Xofulltext_searcher_html.java index c21a6e721..0f34a5f73 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/specials/Xofulltext_searcher_html.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/specials/Xofulltext_searcher_html.java @@ -19,7 +19,6 @@ import gplx.dbs.*; import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*; import gplx.xowa.addons.apps.cfgs.*; class Xofulltext_searcher_html extends Xow_special_wtr__base implements Mustache_doc_itm { - private final boolean case_match, auto_wildcard_bgn, auto_wildcard_end, expand_matches_section, show_all_matches; private final Hash_adp props = Hash_adp_.New(); public Xofulltext_searcher_html(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, Xow_wiki wiki, Guid_adp page_guid) { String search_text = url_args.Read_str_or("search", ""); @@ -27,22 +26,34 @@ class Xofulltext_searcher_html extends Xow_special_wtr__base implements Mustache props.Add("qarg_search", search_text); props.Add("page_guid", page_guid.To_str()); props.Add("cur_wiki", wiki.Domain_str()); - props_Add(cfg_mgr, url_args, "wikis" , wiki.Domain_str()); - props_Add(cfg_mgr, url_args, "ns_ids", "0"); - props_Add(cfg_mgr, url_args, "limits", "100"); - props_Add(cfg_mgr, url_args, "offsets", "0"); + props_Add_str(cfg_mgr, url_args, "wikis" , wiki.Domain_str(), false); + props_Add_str(cfg_mgr, url_args, "ns_ids", "0"); + props_Add_str(cfg_mgr, url_args, "limits", "100"); + props_Add_str(cfg_mgr, url_args, "offsets", "0"); - this.case_match = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.case_match", false); - this.auto_wildcard_bgn = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.auto_wildcard_bgn", false); - this.auto_wildcard_end = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.auto_wildcard_end", false); - this.expand_matches_section = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.expand_matches_section", false); - this.show_all_matches = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.show_all_matches", false); + props_Add_bool(cfg_mgr, url_args, "expand_snips"); + props_Add_bool(cfg_mgr, url_args, "show_all_snips"); + props_Add_bool(cfg_mgr, url_args, "expand_options"); + props_Add_bool(cfg_mgr, url_args, "case_match"); + props_Add_bool(cfg_mgr, url_args, "auto_wildcard_bgn"); + props_Add_bool(cfg_mgr, url_args, "auto_wildcard_end"); } - private void props_Add(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, String key, String dflt_val) { - String cfg_key = "xowa.addon.search.fulltext.special.dflt_" + key; - String cfg_val = cfg_mgr.Get_str_app_or(cfg_key, dflt_val); - props.Add("dflt_" + key, cfg_val); - props.Add("qarg_" + key, url_args.Read_str_or(key, cfg_val)); + private void props_Add_str(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, String key, String else_val) { + props_Add_str(cfg_mgr, url_args, key, else_val, true); + } + private void props_Add_str(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, String key, String else_val, boolean use_cfg) { + String dflt_val = else_val; + if (use_cfg) { + String cfg_key = "xowa.addon.search.fulltext.special." + key; + dflt_val = cfg_mgr.Get_str_app_or(cfg_key, else_val); + } + props.Add("dflt_" + key, dflt_val); + props.Add("qarg_" + key, url_args.Read_str_or(key, dflt_val)); + } + private void props_Add_bool(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, String key) { + String cfg_key = "xowa.addon.search.fulltext.special." + key; + boolean cfg_val = cfg_mgr.Get_bool_app_or(cfg_key, false); + props.Add(key, cfg_val); } @Override protected Io_url Get_addon_dir(Xoa_app app) {return Addon_dir(app);} @Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xofulltext_searcher.main.template.html");} @@ -80,12 +91,13 @@ class Xofulltext_searcher_html extends Xow_special_wtr__base implements Mustache } } public Mustache_doc_itm[] Mustache__subs(String key) { - if (String_.Eq(key, "case_match")) return Mustache_doc_itm_.Ary__bool(case_match); - else if (String_.Eq(key, "auto_wildcard_bgn")) return Mustache_doc_itm_.Ary__bool(auto_wildcard_bgn); - else if (String_.Eq(key, "auto_wildcard_end")) return Mustache_doc_itm_.Ary__bool(auto_wildcard_end); - else if (String_.Eq(key, "expand_matches_section")) return Mustache_doc_itm_.Ary__bool(expand_matches_section); - else if (String_.Eq(key, "show_all_matches")) return Mustache_doc_itm_.Ary__bool(show_all_matches); - return Mustache_doc_itm_.Ary__empty; + Object val_obj = props.Get_by(key); + if (val_obj == null) { + return Mustache_doc_itm_.Ary__empty; + } + else { + return Mustache_doc_itm_.Ary__bool((boolean)val_obj); + } } public static Io_url Addon_dir(Xoa_app app) { return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "wiki", "fulltext", "searcher"); diff --git a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/svcs/Xofulltext_searcher_bridge.java b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/svcs/Xofulltext_searcher_bridge.java index b1d3d2b93..555bc0b4e 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/svcs/Xofulltext_searcher_bridge.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/svcs/Xofulltext_searcher_bridge.java @@ -25,18 +25,20 @@ public class Xofulltext_searcher_bridge implements Bridge_cmd_itm { byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Bridge_cmd_mgr.Msg__proc, null), Byte_ascii.Max_7_bit); Json_nde args = data.Get_kv(Bridge_cmd_mgr.Msg__args).Val_as_nde(); switch (proc_id) { - case Proc__search: svc.Search(args); break; - case Proc__cancel: svc.Cancel(args); break; + case Proc__search_run: svc.Search_run(args); break; + case Proc__search_cxl: svc.Search_cxl(args); break; + case Proc__options_save: svc.Options_save(args); break; case Proc__get_lines_rest: svc.Get_lines_rest(args); break; default: throw Err_.new_unhandled_default(proc_id); } return ""; } - private static final byte Proc__search = 0, Proc__cancel = 1, Proc__get_lines_rest = 2; + private static final byte Proc__search_run = 0, Proc__search_cxl = 1, Proc__options_save = 2, Proc__get_lines_rest = 3; private static final Hash_adp_bry proc_hash = Hash_adp_bry.cs() - .Add_str_byte("search" , Proc__search) - .Add_str_byte("cancel" , Proc__cancel) + .Add_str_byte("search_run" , Proc__search_run) + .Add_str_byte("search_cxl" , Proc__search_cxl) + .Add_str_byte("options_save" , Proc__options_save) .Add_str_byte("get_lines_rest" , Proc__get_lines_rest) ; diff --git a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/svcs/Xofulltext_searcher_svc.java b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/svcs/Xofulltext_searcher_svc.java index 58079d7d5..ab09bb5cb 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/svcs/Xofulltext_searcher_svc.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/svcs/Xofulltext_searcher_svc.java @@ -33,8 +33,8 @@ class Xofulltext_searcher_svc implements Gfo_invk { public Xofulltext_searcher_svc(Xoa_app app) { this.app = app; } - public void Cancel(Json_nde args) {this.Cancel(args.Get_as_str("page_guid"));} - private void Cancel(String page_guid) { + public void Search_cxl(Json_nde args) {this.Search_cxl(args.Get_as_str("page_guid"));} + private void Search_cxl(String page_guid) { Xofulltext_args_qry prv_args = (Xofulltext_args_qry)wkr_hash.Get_by(page_guid); if (prv_args != null) { prv_args.Cancel(); @@ -43,29 +43,38 @@ class Xofulltext_searcher_svc implements Gfo_invk { } } } - public void Search(Json_nde args) { + public void Options_save(Json_nde args) { + Xocfg_mgr cfg_mgr = app.Cfg(); + cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_options", args.Get_as_bool_or("expand_options", false)); + if (cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.options.autosave_enabled", true)) { + cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_snips", args.Get_as_bool_or("expand_snips", false)); + cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.show_all_snips", args.Get_as_bool_or("show_all_snips", false)); + } + } + public void Search_run(Json_nde args) { // get search_args Xofulltext_args_qry search_args = Xofulltext_args_qry.New_by_json(args); search_args.cache_mgr = this.Cache_mgr(); // cancel any existing searches - this.Cancel(search_args.page_guid); + this.Search_cxl(search_args.page_guid); Compress_cache(wkr_hash); synchronized (wkr_hash) { wkr_hash.Add(search_args.page_guid, search_args); } // autosave any changes if enabled - Xocfg_mgr cfg_mgr = app.Cfg(); - if (cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.options.autosave_enabled", true)) { - cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.case_match", search_args.case_match); - cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.auto_wildcard_bgn", search_args.auto_wildcard_bgn); - cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.auto_wildcard_end", search_args.auto_wildcard_end); - cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_matches_section", search_args.expand_matches_section); - cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.show_all_matches", search_args.show_all_matches); -// cfg_mgr.Set_int_app ("xowa.addon.search.fulltext.special.max_pages_per_wiki", search_args.max_pages_per_wiki); -// cfg_mgr.Set_bry_app ("xowa.addon.search.fulltext.special.namespaces", search_args.namespaces); - } +// Xocfg_mgr cfg_mgr = app.Cfg(); +// if (cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.options.autosave_enabled", true)) { +// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_snips", search_args.expand_snips); +// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.show_all_snips", search_args.show_all_snips); +// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_options", search_args.expand_options); +// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.case_match", search_args.case_match); +// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.auto_wildcard_bgn", search_args.auto_wildcard_bgn); +// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.auto_wildcard_end", search_args.auto_wildcard_end); +//// cfg_mgr.Set_int_app ("xowa.addon.search.fulltext.special.max_pages_per_wiki", search_args.max_pages_per_wiki); +//// cfg_mgr.Set_bry_app ("xowa.addon.search.fulltext.special.namespaces", search_args.namespaces); +// } // launch thread gplx.core.threads.Thread_adp_.Start_by_val("search", Cancelable_.Never, this, Invk__search, search_args); @@ -129,13 +138,13 @@ class Xofulltext_searcher_svc implements Gfo_invk { for (int i = bgn; i < end; i++) { if (i >= max) return false; // more pages requested than available Xofulltext_cache_page page = (Xofulltext_cache_page)qry.Pages().Get_at(i); - ui.Send_page_add(new Xofulltext_searcher_page(qry_id, wiki.Domain_bry(), page.Page_id(), page.Page_ttl(), args.expand_matches_section)); + ui.Send_page_add(new Xofulltext_searcher_page(qry_id, wiki.Domain_bry(), page.Page_id(), page.Page_ttl(), args.expand_snips)); // loop lines int lines_len = page.Lines().Len(); for (int j = 0; j < lines_len; j++) { Xofulltext_cache_line line = (Xofulltext_cache_line)page.Lines().Get_at(j); - ui.Send_line_add(false, args.show_all_matches, qry_id, wiki.Domain_bry(), page.Page_id(), line.Line_seq(), line.Line_html()); + ui.Send_line_add(false, args.show_all_snips, qry_id, wiki.Domain_bry(), page.Page_id(), line.Line_seq(), line.Line_html()); } } return true;