From 42e7f5f2c6d5b67de771264009292256e0369a36 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Tue, 13 Dec 2016 14:15:52 -0500 Subject: [PATCH] Cfg: Convert 'Import - Dansguardian' --- .../src/gplx/xowa/addons/Xoax_addon_mgr.java | 7 ++ .../gplx/xowa/addons/apps/cfgs/Xocfg_mgr.java | 34 ++++++++- .../apps/cfgs/mgrs/dflts/Xocfg_dflt_mgr.java | 1 + .../edits/pages/Xocfg_edit_special.java | 2 +- .../edits/services/Xocfg_edit_svc.java | 2 +- .../apps/apis/xowa/bldrs/Xoapi_bldr_wiki.java | 7 +- .../apis/xowa/bldrs/filters/Xoapi_filter.java | 28 ------- .../dansguardians/Xoapi_dansguardian.java | 76 ------------------- .../bldrs/cmds/texts/sqls/Xob_page_cmd.java | 2 +- .../bldrs/cmds/texts/sqls/Xob_term_cmd.java | 2 +- .../filters/dansguardians/Dg_match_mgr.java | 21 ++++- 11 files changed, 66 insertions(+), 116 deletions(-) delete mode 100644 400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/filters/Xoapi_filter.java delete mode 100644 400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardian.java diff --git a/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java b/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java index 5186a1ae3..e0ec9e0fb 100644 --- a/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java @@ -65,6 +65,7 @@ public class Xoax_addon_mgr { if (app.Mode().Tid_is_http()) { app.Addon_mgr().Itms__add_many(new gplx.xowa.addons.servers.https.Xoax_long_poll_addon()); } + return this; } public void Run_by_app(Xoa_app app) { @@ -102,7 +103,13 @@ public class Xoax_addon_mgr { } } } + private boolean init_cfg = true; // WORKAROUND:move cfg to separate proc instead of lazy-loading on 1st wiki public void Load_by_wiki(Xow_wiki wiki) { + if (init_cfg) { + init_cfg = false; + gplx.xowa.bldrs.filters.dansguardians.Dg_match_mgr.Cfg__reg(wiki.App()); + } + int len = init_list.Len(); for (int i = 0; i < len; ++i) { Xoax_addon_itm__init itm = (Xoax_addon_itm__init)init_list.Get_at(i); 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 a6250b9d4..3701c8999 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 @@ -53,10 +53,40 @@ public class Xocfg_mgr { cache_mgr.Sub(sub, ctx, key, key); return cache_mgr.Get(ctx, key); } + public boolean Get_bool_by_wiki_or(Xow_wiki wiki, String key, boolean or) { + String rv = Get_str(wiki.Domain_itm().Abrv_xo_str(), key); + return rv == null ? Yn.parse_or(rv, or) : or; + } public String Get_str_app(String key) {return Get_str(Xocfg_mgr.Ctx__app, key);} - public String Get_str(String ctx, String key) { - return cache_mgr.Get(ctx, key); + public boolean Get_bool_or(String ctx, String key, boolean or) { + String rv = cache_mgr.Get(ctx, key); + try {return Yn.parse(rv);} + catch (Exception exc) { + Err_.Noop(exc); + Gfo_usr_dlg_.Instance.Warn_many("", "", "cfg:failed to parse boolean; key=~{0} val=~{1}", key, rv); + return or; + } + } + public int Get_int_or(String ctx, String key, int or) { + String rv = cache_mgr.Get(ctx, key); + try {return Int_.parse(rv);} + catch (Exception exc) { + Err_.Noop(exc); + Gfo_usr_dlg_.Instance.Warn_many("", "", "cfg:failed to parse int; key=~{0} val=~{1}", key, rv); + return or; + } + } + public Io_url Get_url_or(String ctx, String key, Io_url or) { + String rv = cache_mgr.Get(ctx, key); + try {return Io_url_.new_any_(rv);} + catch (Exception exc) { + Err_.Noop(exc); + Gfo_usr_dlg_.Instance.Warn_many("", "", "cfg:failed to parse int; key=~{0} val=~{1}", key, rv); + return or; + } } + public String To_ctx(Xow_wiki wiki) {return wiki.Domain_itm().Abrv_xo_str();} + public String Get_str(String ctx, String key) {return cache_mgr.Get(ctx, key);} public void Set_str_app(String key, String val) {Set_str(Xocfg_mgr.Ctx__app, key, val);} public void Set_str(String ctx, String key, String val) { cache_mgr.Set(ctx, key, val); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/dflts/Xocfg_dflt_mgr.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/dflts/Xocfg_dflt_mgr.java index 33a11e6aa..505d54ea1 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/dflts/Xocfg_dflt_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/mgrs/dflts/Xocfg_dflt_mgr.java @@ -33,6 +33,7 @@ public class Xocfg_dflt_mgr { } public void Add(String key, String val) { cache_mgr.Dflt(key, val); + hash.Add(key, new Xocfg_dflt_itm__static(val)); } public void Add(String key, Xocfg_dflt_itm itm) { hash.Add(key, itm); diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_special.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_special.java index 0faaddd12..1d5e81531 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_special.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/pages/Xocfg_edit_special.java @@ -26,7 +26,7 @@ public class Xocfg_edit_special implements Xow_special_page { String lang = url_args.Read_str_or("lang", wiki.App().User().Wikii().Lang().Key_str()); if (String_.Eq(grp, "")) { - grp = wiki.App().Cfg().Get_str_app("xowa.app.cfg.general.previous_section"); + grp = wiki.App().Cfg().Get_str_app("xowa.app.cfg.recent_page"); } new Xocfg_edit_html(grp, ctx, lang).Bld_page_by_mustache(wiki.App(), page, this); } diff --git a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java index 485903956..4ffc3cac3 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java +++ b/400_xowa/src/gplx/xowa/addons/apps/cfgs/specials/edits/services/Xocfg_edit_svc.java @@ -46,7 +46,7 @@ public class Xocfg_edit_svc { String key = args.Get_as_str("key"); if (edit_loader == null) edit_loader = Xocfg_edit_loader.New(app); Xoedit_root root = edit_loader.Load_root(key, ctx, "en"); - app.Cfg().Set_str_app("xowa.app.cfg.general.previous_section", key); + app.Cfg().Set_str_app("xowa.app.cfg.recent_page", key); app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.load__recv", root.To_nde()); } } diff --git a/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/Xoapi_bldr_wiki.java b/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/Xoapi_bldr_wiki.java index 0d4d9baeb..3c747bab8 100644 --- a/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/Xoapi_bldr_wiki.java +++ b/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/Xoapi_bldr_wiki.java @@ -21,17 +21,14 @@ import gplx.xowa.apps.apis.xowa.bldrs.imports.*; import gplx.xowa.apps.apis.xowa.bldrs.runners.*; public class Xoapi_bldr_wiki implements Gfo_invk { public void Ctor_by_app(Xoa_app app) { - filter.Ctor_by_app(app); runner.Ctor_by_app(app); } - public Xoapi_filter Filter() {return filter;} private final Xoapi_filter filter = new Xoapi_filter(); public Xoapi_import Import() {return import_api;} private final Xoapi_import import_api = new Xoapi_import(); public Xoapi_runner Runner() {return runner;} private final Xoapi_runner runner = new Xoapi_runner(); public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_filter)) return filter; - else if (ctx.Match(k, Invk_import)) return import_api; + if (ctx.Match(k, Invk_import)) return import_api; else if (ctx.Match(k, Invk_runner)) return runner; else return Gfo_invk_.Rv_unhandled; } - private static final String Invk_filter = "filter", Invk_import = "import", Invk_runner = "runner"; + private static final String Invk_import = "import", Invk_runner = "runner"; } diff --git a/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/filters/Xoapi_filter.java b/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/filters/Xoapi_filter.java deleted file mode 100644 index 47c0a9b5e..000000000 --- a/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/filters/Xoapi_filter.java +++ /dev/null @@ -1,28 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.apps.apis.xowa.bldrs.filters; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.bldrs.*; -import gplx.xowa.apps.apis.xowa.bldrs.filters.dansguardians.*; -public class Xoapi_filter implements Gfo_invk { - public void Ctor_by_app(Xoa_app app) {dansguardian.Ctor_by_app(app);} - public Xoapi_dansguardian Dansguardian() {return dansguardian;} private final Xoapi_dansguardian dansguardian = new Xoapi_dansguardian(); - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_dansguardian)) return dansguardian; - else return Gfo_invk_.Rv_unhandled; - } - private static final String Invk_dansguardian = "dansguardian"; -} diff --git a/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardian.java b/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardian.java deleted file mode 100644 index 4592615b6..000000000 --- a/400_xowa/src/gplx/xowa/apps/apis/xowa/bldrs/filters/dansguardians/Xoapi_dansguardian.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.apps.apis.xowa.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*; import gplx.xowa.apps.apis.xowa.bldrs.*; import gplx.xowa.apps.apis.xowa.bldrs.filters.*; -import gplx.core.ios.*; import gplx.xowa.bldrs.filters.dansguardians.*; -public class Xoapi_dansguardian implements Gfo_invk { - public void Ctor_by_app(Xoa_app app) { - root_dir = app.Fsys_mgr().Bin_xowa_dir().GenSubDir_nest("cfg", "bldr", "filter"); - } - public boolean Enabled() {return enabled;} private boolean enabled = Bool_.N; - public Io_url Root_dir() {return root_dir;} private Io_url root_dir; - public int Score_init() {return score_init;} private int score_init = 0; - public int Score_fail() {return score_fail;} private int score_fail = 0; - public boolean Case_match() {return case_match;} private boolean case_match = Bool_.N; - public boolean Wildcard_enabled() {return wildcard_enabled;} private boolean wildcard_enabled = Bool_.N; - public byte[] Wildcard_char() {return wildcard_char;} private byte[] wildcard_char = Byte_ascii.Space_bry; - public byte[][] Wildcard_list() {return wildcard_list;} private byte[][] wildcard_list = Bry_.Ary(Byte_ascii.Space_bry);// \s,.!?:;'"-() /@#$%^&*()[]{}<>_+=|\~` - public int Target_tid() {return target_tid;} private int target_tid = Dg_match_mgr.Target_tid_wikitext; - public boolean Log_enabled() {return log_enabled;} private boolean log_enabled = Bool_.Y; - public Dg_match_mgr New_mgr(String domain_str, Io_url wiki_root_dir) { - if (!enabled) return null; - Io_url log_url = wiki_root_dir.GenSubFil("dansguardian_log.sqlite3"); - Dg_match_mgr rv = new Dg_match_mgr(root_dir.GenSubDir(domain_str), score_init, score_fail, case_match, log_enabled, log_url); - return rv; - } - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_enabled)) return Yn.To_str(enabled); - else if (ctx.Match(k, Invk_enabled_)) enabled = m.ReadYn("v"); - else if (ctx.Match(k, Invk_root_dir)) return root_dir.Raw(); - else if (ctx.Match(k, Invk_root_dir_)) root_dir = m.ReadIoUrl("v"); - else if (ctx.Match(k, Invk_score_init)) return Int_.To_str(score_init); - else if (ctx.Match(k, Invk_score_init_)) score_init = m.ReadInt("v"); - else if (ctx.Match(k, Invk_score_fail)) return Int_.To_str(score_fail); - else if (ctx.Match(k, Invk_score_fail_)) score_fail = m.ReadInt("v"); - else if (ctx.Match(k, Invk_case_match)) return Yn.To_str(case_match); - else if (ctx.Match(k, Invk_case_match_)) case_match = m.ReadYn("v"); - else if (ctx.Match(k, Invk_wildcard_enabled)) return Yn.To_str(wildcard_enabled); - else if (ctx.Match(k, Invk_wildcard_enabled_)) wildcard_enabled = m.ReadYn("v"); - else if (ctx.Match(k, Invk_wildcard_char)) return String_.new_u8(wildcard_char); - else if (ctx.Match(k, Invk_wildcard_char_)) wildcard_char = m.ReadBry("v"); - else if (ctx.Match(k, Invk_wildcard_list)) return ""; - else if (ctx.Match(k, Invk_wildcard_list_)) {} - else if (ctx.Match(k, Invk_target_tid)) return Int_.To_str(target_tid); - else if (ctx.Match(k, Invk_target_tid_)) target_tid = m.ReadInt("v"); - else if (ctx.Match(k, Invk_log_enabled)) return Yn.To_str(log_enabled); - else if (ctx.Match(k, Invk_log_enabled_)) log_enabled = m.ReadYn("v"); - else return Gfo_invk_.Rv_unhandled; - return this; - } - private static final String - Invk_enabled = "enabled" , Invk_enabled_ = "enabled_" - , Invk_root_dir = "root_dir" , Invk_root_dir_ = "root_dir_" - , Invk_score_init = "score_init" , Invk_score_init_ = "score_init_" - , Invk_score_fail = "score_fail" , Invk_score_fail_ = "score_fail_" - , Invk_case_match = "case_match" , Invk_case_match_ = "case_match_" - , Invk_wildcard_enabled = "wildcard_enabled" , Invk_wildcard_enabled_ = "wildcard_enabled_" - , Invk_wildcard_char = "wildcard_char" , Invk_wildcard_char_ = "wildcard_char_" - , Invk_wildcard_list = "wildcard_list" , Invk_wildcard_list_ = "wildcard_list_" - , Invk_target_tid = "target_tid" , Invk_target_tid_ = "target_tid_" - , Invk_log_enabled = "log_enabled" , Invk_log_enabled_ = "log_enabled_" - ; -} diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd.java index bef580c39..7b5d3cabb 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_page_cmd.java @@ -37,7 +37,7 @@ public class Xob_page_cmd extends Xob_itm_basic_base implements Xob_page_wkr, Gf this.page_core_tbl = db_mgr.Tbl__page(); this.text_zip_mgr = wiki.Utl__zip_mgr(); text_zip_tid = import_cfg.Zip_tid_text(); this.ns_to_db_mgr = new Xob_ns_to_db_mgr(new Xob_ns_to_db_wkr__text(), db_mgr, import_cfg.Text_db_max()); - this.dg_match_mgr = app.Api_root().Bldr().Wiki().Filter().Dansguardian().New_mgr(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir()); + this.dg_match_mgr = Dg_match_mgr.New_mgr(app, wiki); if (dg_match_mgr != null) redirect_id_enabled = true; // always enable redirect_id if dg_match_mgr enabled; DATE:2016-01-04 if (redirect_id_enabled) { this.redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), gplx.langs.htmls.encoders.Gfo_url_encoder_.Http_url_ttl).Create_table(); diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java index de2b2ccb5..f65db1626 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_term_cmd.java @@ -28,7 +28,7 @@ public class Xob_term_cmd extends Xob_term_base { cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, "props.siteinfo_misc", wiki.Props().Siteinfo_misc()); cfg_tbl.Insert_bry(Xow_cfg_consts.Grp__wiki_init, "props.siteinfo_mainpage", wiki.Props().Siteinfo_mainpage()); gplx.fsdb.Fsdb_db_mgr__v2_bldr.Get_or_make(wiki, false);// always build file.user db; DATE:2015-05-12 - if (wiki.Appe().Api_root().Bldr().Wiki().Filter().Dansguardian().Enabled()) // if dansguardian, delete missing pages; DATE:2016-01-06 + if (wiki.App().Cfg().Get_bool_by_wiki_or(wiki, gplx.xowa.bldrs.filters.dansguardians.Dg_match_mgr.Cfg__enabled, false)) new Xob_page_delete_cmd(wiki.Appe().Bldr(), wiki).Cmd_run(); wiki.Data__core_mgr().Rls(); } diff --git a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java index 7aae743c8..cf02491a2 100644 --- a/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java +++ b/400_xowa/src/gplx/xowa/bldrs/filters/dansguardians/Dg_match_mgr.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.filters.dansguardians; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.filters.*; import gplx.core.primitives.*; import gplx.core.btries.*; +import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.langs.*; import gplx.xowa.bldrs.filters.core.*; public class Dg_match_mgr { @@ -128,7 +129,25 @@ public class Dg_match_mgr { } public void Rls() {log_mgr.Rls();} public void Commit() {if (log_enabled) log_mgr.Commit();} - public static final int Target_tid_title = 1, Target_tid_wikitext = 2; + + public static void Cfg__reg(Xoa_app app) { + app.Cfg().Dflt_mgr().Add(Cfg__root_dir, app.Fsys_mgr().Bin_xowa_dir().GenSubDir_nest("cfg", "bldr", "filter").Raw()); + } + public static Dg_match_mgr New_mgr(Xoa_app app, Xow_wiki wiki) { + Xocfg_mgr cfg_mgr = app.Cfg(); + if (!cfg_mgr.Get_bool_by_wiki_or(wiki, Cfg__enabled, false)) return null; + String ctx = cfg_mgr.To_ctx(wiki); + return new Dg_match_mgr + ( cfg_mgr.Get_url_or(ctx, Cfg__root_dir, app.Fsys_mgr().Bin_xowa_dir().GenSubDir_nest("cfg", "bldr", "filter")).GenSubDir(wiki.Domain_str()) + , cfg_mgr.Get_int_or(ctx, "xowa.wiki.import.dansguardian.score_init", 0) + , cfg_mgr.Get_int_or(ctx, "xowa.wiki.import.dansguardian.score_fail", 0) + , cfg_mgr.Get_bool_or(ctx, "xowa.wiki.import.dansguardian.case_match", false) + , cfg_mgr.Get_bool_or(ctx, "xowa.wiki.import.dansguardian.log_enabled", true) + , wiki.Fsys_mgr().Root_dir().GenSubFil("dansguardian_log.sqlite3") + ); + } + public static final String Cfg__enabled = "xowa.wiki.import.dansguardian.enabled"; + private static final String Cfg__root_dir = "xowa.wiki.import.dansguardian.root_dir"; } class Dg_rule_group { public Dg_rule_group(byte[] word) {this.word = word;}