From a7029f8cf1c7d6b9eadd28a2178761bd17e96ec1 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Wed, 21 Aug 2019 21:43:44 -0400 Subject: [PATCH] Search: Do not fail with error when searching in wikidata / commons [#539] --- .../addons/wikis/searchs/searchers/Srch_search_mgr.java | 6 ++++++ .../searchs/specials/htmls/Srch_html_page_bldr.java | 9 +++++++++ 2 files changed, 15 insertions(+) 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 f49aae814..069216786 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 @@ -49,6 +49,12 @@ public class Srch_search_mgr implements Gfo_invk { public void Search(Srch_search_qry qry, Srch_rslt_cbk cbk) { // NOTE: main entry point for search if (qry.Phrase.Orig.length == 0) return; + // exit early if no search database; else multiple NPE's during search-suggest; ISSUE#:539; DATE:2019-08-21 + if (addon.Db_mgr().Cfg() == null) { + Gfo_usr_dlg_.Instance.Warn_many("", "", "Search databases are missing; wiki=~{0}", wiki.Domain_str()); + return; + } + // handle obsolete search dbs; if (addon.Db_mgr().Cfg().Version_id__needs_upgrade() && !upgrade_prompted) { diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_html_page_bldr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_html_page_bldr.java index 50e0c6c50..a622104fe 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_html_page_bldr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_html_page_bldr.java @@ -22,6 +22,7 @@ public class Srch_html_page_bldr { private Srch_search_qry qry; private Xow_wiki wiki; private Xol_num_mgr num_mgr; private int slab_idx; private Xoh_lnki_bldr lnki_bldr; private Xoh_anchor_kv_bldr self_lnkr = new Xoh_anchor_kv_bldr(); private Srch_html_row_bldr html_row_bldr; + private Srch_search_addon addon; public void Init_by_wiki(Xow_wiki wiki, Xol_num_mgr num_mgr, Srch_search_qry qry) { this.wiki = wiki; this.num_mgr = num_mgr; this.qry = qry; this.lnki_bldr = wiki.Html__lnki_bldr(); @@ -31,6 +32,14 @@ public class Srch_html_page_bldr { self_lnkr.Init_w_qarg(tmp_bfr.Add(Bry__special_search).Add(qry.Phrase.Orig).Add(Bry__fulltext).To_bry_and_clear()); } public byte[] Bld_page(byte[] html_tbls_bry) { + // show a message if no search databases exist; ISSUE#:539; DATE:2019-08-21 + if (addon == null) { + addon = Srch_search_addon.Get(wiki); + } + if (addon != null && addon.Db_mgr().Cfg() == null) { + return Bry_.new_u8("Search databases are missing"); + } + byte[] rslts_hdr = fmtr_rslts.Bld_bry_many(tmp_bfr, num_mgr.Format_num(qry.Slab_bgn + List_adp_.Base1), num_mgr.Format_num(qry.Slab_end), qry.Phrase.Orig); byte[] option_link = lnki_bldr.Href_(Bry_.new_a7("home"), wiki.Ttl_parse(Bry_.new_a7("Options/Search"))).Img_16x16(Xoh_img_path.Img_option).Bld_to_bry(); // HOME fmtr_page.Bld_bfr_many(tmp_bfr, rslts_hdr, option_link, Bld_paging_link(Bool_.N), Bld_paging_link(Bool_.Y), html_tbls_bry);