mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Cfg: Convert 'Import - Dansguardian'
This commit is contained in:
parent
200707b1c6
commit
42e7f5f2c6
@ -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);
|
||||
|
@ -53,10 +53,40 @@ public class Xocfg_mgr {
|
||||
cache_mgr.Sub(sub, ctx, key, key);
|
||||
return cache_mgr.Get(ctx, key);
|
||||
}
|
||||
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_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 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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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";
|
||||
}
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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";
|
||||
}
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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_"
|
||||
;
|
||||
}
|
@ -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();
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;}
|
||||
|
Loading…
Reference in New Issue
Block a user