diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java index 0a0b4dc03..c92357bd6 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java @@ -68,6 +68,7 @@ public class Xocfg_mgr { String rv = cache_mgr.Get_or(Ctx__app, key, null); return rv == null ? or : String_.Ary_parse(String_.Trim(rv), dlm); } + public String Get_str_wiki_or(Xow_wiki wiki, String key, String or) {return cache_mgr.Get_or(wiki.Domain_itm().Abrv_xo_str(), key, or);} public String Get_str_app_or(String key, String or) {return cache_mgr.Get_or(Ctx__app, key, or);} public String Get_str_app(String key) {return Get_str(Xocfg_mgr.Ctx__app, key);} public boolean Get_bool_or(String ctx, String key, boolean or) { diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_ns_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_ns_mgr.java index 2d4c516aa..d52e61915 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_ns_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_ns_mgr.java @@ -26,7 +26,7 @@ public class Srch_ns_mgr { ns_hash.Clear(); ns_all = ns_main = false; } - public boolean Ns_main_only() {return ns_main;} + public boolean Ns_main_only() {return ns_main && !ns_all;} // Ns_main_only is used by Searcher to only search main srch_link db public boolean Has(int ns_id) { return ns_all // ns_all always returns true || ns_main && ns_id == Xow_ns_.Tid__main // ns_main returns true if main_ns diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java index ce0882777..1f069ba2e 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java @@ -18,7 +18,8 @@ along with this program. If not, see . package gplx.xowa.addons.wikis.searchs.searchers; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.addons.wikis.searchs.searchers.rslts.*; import gplx.xowa.addons.wikis.searchs.searchers.wkrs.*; import gplx.xowa.addons.wikis.searchs.parsers.*; import gplx.xowa.addons.wikis.searchs.searchers.crts.*; import gplx.xowa.addons.wikis.searchs.searchers.crts.visitors.*; -public class Srch_search_mgr { +import gplx.core.net.*; import gplx.core.net.qargs.*; +public class Srch_search_mgr implements Gfo_invk { private final Srch_search_addon addon; private final Xow_wiki wiki; private final Srch_rslt_list cache__page = new Srch_rslt_list(); @@ -38,6 +39,8 @@ public class Srch_search_mgr { this.cur_cmds = new Srch_search_cmd[Srch_search_qry.Tid_len]; for (int i = 0; i < len; ++i) cur_cmds[i] = Srch_search_cmd.Noop(); + + wiki.App().Cfg().Bind_many_wiki(this, wiki, Cfg__args_default); } public void Clear_rslts_cache() {cache__rslts.Clear();} public void Search_cancel() { @@ -85,4 +88,10 @@ public class Srch_search_mgr { cache__word_counts.Clear(); cache__rslts.Clear(); } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Cfg__args_default)) this.Clear_rslts_cache(); // NOTE: must clear cache after args_dflt changed + else return Gfo_invk_.Rv_unhandled; + return this; + } + public static final String Cfg__args_default = "xowa.addon.search.args_default"; } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_cfg.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_cfg.java index 2122809ca..ecb38fd35 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_cfg.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_cfg.java @@ -20,23 +20,19 @@ import gplx.core.net.*; import gplx.core.net.qargs.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.domains.crts.*; import gplx.xowa.addons.wikis.searchs.searchers.*; public class Srch_special_cfg implements Gfo_invk { - private Xoa_app app; private final Xow_domain_crt_kv_itm_mgr multi_wikis_mgr = new Xow_domain_crt_kv_itm_mgr(); private byte[] multi_wikis_bry = Dflt_multi_wikis_bry; private final Xow_domain_crt_kv_itm_mgr multi_sorts_mgr = new Xow_domain_crt_kv_itm_mgr(); private byte[] multi_sorts_bry = Dflt_multi_sorts_bry; - private String args_default_str = "";// default args for search public Srch_special_cfg() { multi_wikis_mgr.Parse_as_itms(multi_wikis_bry); multi_sorts_mgr.Parse_as_arys(multi_sorts_bry); ns_mgr.Add_main_if_empty(); } public void Init_by_kit(Xoae_app app, gplx.gfui.kits.core.Gfui_kit kit) { - this.app = app; - app.Cfg().Bind_many_app(this, Cfg__results_per_page, Cfg__async_db, Cfg__auto_wildcard, Cfg__args_default, Cfg__multi_wikis, Cfg__multi_sorts); + app.Cfg().Bind_many_app(this, Cfg__results_per_page, Cfg__async_db, Cfg__auto_wildcard, Cfg__multi_wikis, Cfg__multi_sorts); } public int Results_per_page() {return results_per_page;} private int results_per_page = 100; public boolean Async_db() {return async_db;} private boolean async_db = true; public boolean Auto_wildcard() {return auto_wildcard;} private boolean auto_wildcard = false; // automatically add wild-card; EX: Earth -> *Earth* - public Gfo_qarg_itm[] Args_default() {return args_default;} private Gfo_qarg_itm[] args_default = Gfo_qarg_itm.Ary_empty; public Srch_ns_mgr Ns_mgr() {return ns_mgr;} private final Srch_ns_mgr ns_mgr = new Srch_ns_mgr(); public Xow_domain_crt_itm Multi_wikis_crt (Xow_domain_itm cur_domain) {return multi_wikis_mgr.Find_itm(cur_domain, cur_domain);} public Xow_domain_crt_itm[] Multi_sorts_crt (Xow_domain_itm cur_domain) {return multi_sorts_mgr.Find_ary(cur_domain, cur_domain);} @@ -44,12 +40,6 @@ public class Srch_special_cfg implements Gfo_invk { if (ctx.Match(k, Cfg__results_per_page)) results_per_page = m.ReadInt("v"); else if (ctx.Match(k, Cfg__async_db)) async_db = m.ReadYn("v"); else if (ctx.Match(k, Cfg__auto_wildcard)) auto_wildcard = m.ReadYn("v"); - else if (ctx.Match(k, Cfg__args_default)) { - this.args_default_str = m.ReadStr("v"); - byte[] bry = Bry_.new_a7("http://x.org/a?" + args_default_str); - Gfo_url tmp_url = app.User().Wikii().Utl__url_parser().Url_parser().Parse(bry, 0, bry.length); - this.args_default = tmp_url.Qargs(); - } else if (ctx.Match(k, Cfg__multi_wikis)) { byte[] multi_wikis_temp = m.ReadBry("v"); if (multi_wikis_mgr.Parse_as_itms(multi_wikis_temp)) { @@ -69,7 +59,6 @@ public class Srch_special_cfg implements Gfo_invk { Cfg__results_per_page = "xowa.addon.search.results_per_page" , Cfg__async_db = "xowa.addon.search.async_db" , Cfg__auto_wildcard = "xowa.addon.search.auto_wildcard" - , Cfg__args_default = "xowa.addon.search.args_default" , Cfg__multi_wikis = "xowa.addon.search.multi_wikis" , Cfg__multi_sorts = "xowa.addon.search.multi_sorts" ; diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_page.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_page.java index 7f90a6353..369c77a0e 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_page.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_page.java @@ -30,7 +30,14 @@ public class Srch_special_page implements Xow_special_page { // get args from urls while applying defaults from search_cfg Srch_qarg_mgr qargs_mgr = new Srch_qarg_mgr(wiki.App().Addon_mgr().Itms__search__special().Ns_mgr()); qargs_mgr.Clear(); - qargs_mgr.Parse(search_cfg.Args_default()); + + // parse args_default_str + String args_default_str = wiki.App().Cfg().Get_str_wiki_or(wiki, Srch_search_mgr.Cfg__args_default, ""); + if (String_.Len_gt_0(args_default_str)) { + byte[] bry = Bry_.new_a7("http://x.org/a?" + args_default_str); + gplx.core.net.Gfo_url tmp_url = wiki.App().User().Wikii().Utl__url_parser().Url_parser().Parse(bry, 0, bry.length); + qargs_mgr.Parse(tmp_url.Qargs()); + } qargs_mgr.Parse(url.Qargs_ary()); qargs_mgr.Ns_mgr().Add_main_if_empty();