1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2025-05-31 22:44:34 +00:00

Cfg: Convert 'Wiki - HTML databases'

This commit is contained in:
gnosygnu 2016-12-13 12:49:05 -05:00
parent c73c917c48
commit 200707b1c6
14 changed files with 64 additions and 95 deletions

View File

@ -33,7 +33,8 @@ public class Xocfg_mgr {
public void Clear() {
cache_mgr.Clear();
}
public void Bind_many_app(Gfo_invk sub, String... keys) {Bind_many(sub, Xocfg_mgr.Ctx__app, keys);}
public void Bind_many_app (Gfo_invk sub, String... keys) {Bind_many(sub, Xocfg_mgr.Ctx__app, keys);}
public void Bind_many_wiki (Gfo_invk sub, Xow_wiki wiki, String... keys) {Bind_many(sub, wiki.Domain_itm().Abrv_xo_str(), keys);}
public void Bind_many(Gfo_invk sub, String ctx, String... keys) {
try {
for (String key : keys) {

View File

@ -38,8 +38,18 @@ public class Xocfg_map_tbl implements Db_tbl {
public void Upsert(int map_src, int map_trg, int map_sort) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__map_src, fld__map_trg), map_src, map_trg, map_sort);
}
public int Select_next_sort(int owner_id) {
Db_rdr rdr = conn.Stmt_select_max(tbl_name, fld__map_sort, fld__map_src).Crt_int(fld__map_src, owner_id).Exec_select__rls_auto();
public int Select_sort_or_next(int src_id, int trg_id) {
// select map_sort by map_src,map_trg
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__map_src, fld__map_trg).Crt_int(fld__map_src, src_id).Crt_int(fld__map_trg, trg_id).Exec_select__rls_auto();
try {
if (rdr.Move_next()) {
return rdr.Read_int(fld__map_sort);
}
}
finally {rdr.Rls();}
// pairing doesn't exist; select max
rdr = conn.Stmt_select_max(tbl_name, fld__map_sort, fld__map_src).Crt_int(fld__map_src, src_id).Exec_select__rls_auto();
try {
if (!rdr.Move_next()) return 0;
Object max = rdr.Read_obj(fld__map_sort);

View File

@ -23,7 +23,6 @@ public class Xocfg_type_mgr {
this.Lists__add("list:xowa.app.startup.window.mode", "previous", "maximized", "absolute", "relative", "default");
this.Lists__add("list:xowa.app.startup.pages.type", "blank", "xowa", "previous", "custom");
this.Lists__add("list:xowa.gui.window.html_box.adj_type", "none", "relative", "absolute");
this.Lists__add("list:xowa.wiki.dbs.html.basic.html_mode", Keyval_.new_("shown", "Shown"), Keyval_.new_("hdump_save", "Saved for HTML DB"), Keyval_.new_("hdump_load", "Loaded by HTML DB"));
this.Lists__add("list:xowa.wiki.database.general.zip_mode", "text", "gzip", "bzip2", "xz");
this.Lists__add("list:xowa.html.wiki.portal.missing_class", Keyval_.new_("", "Show as blue link"), Keyval_.new_("new", "Show as red link"), Keyval_.new_("xowa_display_none", "Hide"));
this.Lists__add("list:xowa.html.category.basic.missing_class", "normal", "hide", "red_link");
@ -42,7 +41,8 @@ public class Xocfg_type_mgr {
Lists__add(key, itms);
}
public void Lists__add(String key, Keyval... itms) {
list_hash.Add(key, itms);
if (!list_hash.Has(key)) // ignore multiple calls from Init_by_wiki; EX: Xow_hdump_mode
list_hash.Add(key, itms);
}
public Keyval[] Lists__get(String key) {
return (Keyval[])list_hash.Get_by_or_fail(key);

View File

@ -39,8 +39,9 @@ public class Xoedit_itm_html {
bfr.Add_str_u8_fmt("<select id=\"{0}\" data-xocfg=\"0\" type=\"text\" accesskey=\"d\" class=\"xocfg_select\" size=\"{1}\">", key, len);
for (int i = 0; i < len; i++) {
Keyval kv = kvs_ary[i];
String kv_key = kv.Key();
String kv_val = kv.Val_to_str_or_null();
bfr.Add_str_u8_fmt("<option value=\"{0}\"{2}>{1}</option>", kv.Key(), kv_val, String_.Eq(data, kv_val) ? " selected=\"selected\"" : "");
bfr.Add_str_u8_fmt("<option value=\"{0}\"{2}>{1}</option>", kv_key, kv_val, String_.Eq(data, kv_key) ? " selected=\"selected\"" : "");
}
bfr.Add_str_u8_fmt("</select>");
break;

View File

@ -51,12 +51,13 @@ public class Xocfg_maint_svc {
}
public static void Create_grp(Xocfg_db_app db_app, String key, String owner, String name, String help) {
// insert grp_meta
int grp_id = db_app.Conn().Sys_mgr().Autonum_next("cfg_grp_meta.grp_id");
Xocfg_grp_row grp = db_app.Tbl__grp().Select_by_key_or_null(key);
int grp_id = grp == null ? db_app.Conn().Sys_mgr().Autonum_next("cfg_grp_meta.grp_id") : grp.Id();
db_app.Tbl__grp().Upsert(grp_id, key);
// insert grp_map
int owner_id = String_.Len_eq_0(owner) ? Xocfg_grp_row.Id__root : db_app.Tbl__grp().Select_id_by_key_or_fail(owner);
int map_sort = db_app.Tbl__map().Select_next_sort(owner_id);
int map_sort = db_app.Tbl__map().Select_sort_or_next(owner_id, grp_id);
db_app.Tbl__map().Upsert(owner_id, grp_id, map_sort);
// insert nde_i18n
@ -73,7 +74,7 @@ public class Xocfg_maint_svc {
db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt);
// insert grp_map
int itm_sort = db_app.Tbl__map().Select_next_sort(grp_id);
int itm_sort = db_app.Tbl__map().Select_sort_or_next(grp_id, itm_id);
db_app.Tbl__map().Upsert(grp_id, itm_id, itm_sort);
// insert nde_i18n

View File

@ -50,7 +50,6 @@ public class Xoapi_root implements Gfo_invk {
public Xoapi_usr Usr() {return usr_api;} private final Xoapi_usr usr_api = new Xoapi_usr();
public Xoapi_special Special() {return special_api;} private final Xoapi_special special_api = new Xoapi_special();
public Xoapi_xtns Xtns() {return xtns_api;} private final Xoapi_xtns xtns_api = new Xoapi_xtns();
public Xoapi_wiki Wiki() {return wiki;} private final Xoapi_wiki wiki = new Xoapi_wiki();
public Xoapi_app_wikis Wikis() {return app_wikis;} private final Xoapi_app_wikis app_wikis = new Xoapi_app_wikis();
public String Test_str() {return test_str;} public void Test_str_(String v) {test_str = v;} private String test_str; // TEST
private void Exec(String key) {
@ -70,7 +69,6 @@ public class Xoapi_root implements Gfo_invk {
else if (ctx.Match(k, Invk_special)) return special_api;
else if (ctx.Match(k, Invk_xtns)) return xtns_api;
else if (ctx.Match(k, Invk_exec)) Exec(m.ReadStr("v"));
else if (ctx.Match(k, Invk_wiki)) return wiki;
else if (ctx.Match(k, Invk_wikis)) return app_wikis;
else if (ctx.Match(k, Invk_test_str)) return test_str;
else if (ctx.Match(k, Invk_test_str_)) test_str = m.ReadStr("v");
@ -81,6 +79,6 @@ public class Xoapi_root implements Gfo_invk {
, Invk_app = "app", Invk_addon = "addon"
, Invk_bldr = "bldr", Invk_nav = "nav", Invk_gui = "gui", Invk_html = "html", Invk_net = "net", Invk_usr = "usr", Invk_special = "special", Invk_xtns = "xtns"
, Invk_test_str = "test_str", Invk_test_str_ = "test_str_"
, Invk_wiki = "wiki", Invk_wikis = "wikis"
, Invk_wikis = "wikis"
;
}

View File

@ -19,13 +19,11 @@ package gplx.xowa.apps.apis.xowa; import gplx.*; import gplx.xowa.*; import gplx
import gplx.xowa.apps.apis.xowa.wikis.*;
public class Xoapi_app_wiki implements Gfo_invk {
public Xoapi_wiki_lang Lang() {return lang;} private final Xoapi_wiki_lang lang = new Xoapi_wiki_lang();
public Xoapi_hdump Hdump() {return hdump;} private final Xoapi_hdump hdump = new Xoapi_hdump();
public void Subscribe(Gfo_evt_itm sub) {lang.Subscribe(sub);}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_lang)) return lang;
else if (ctx.Match(k, Invk_hdump)) return hdump;
else return Gfo_invk_.Rv_unhandled;
}
private static final String Invk_lang = "lang", Invk_hdump = "hdump";
private static final String Invk_lang = "lang";
public static final Xoapi_app_wiki Dflt = new Xoapi_app_wiki();
}

View File

@ -1,27 +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; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*;
import gplx.xowa.apps.apis.xowa.wikis.*;
public class Xoapi_wiki implements Gfo_invk {
public Xoapi_hdump Hdump() {return hdump;} private final Xoapi_hdump hdump = new Xoapi_hdump();
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_hdump)) return hdump;
else return Gfo_invk_.Rv_unhandled;
}
private static final String Invk_hdump = "hdump";
}

View File

@ -1,34 +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.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*;
public class Xoapi_hdump implements Gfo_invk {
public boolean Read_preferred() {return read_preferred;} private boolean read_preferred = true;
public Hdump_html_mode Html_mode() {return html_mode;} private Hdump_html_mode html_mode = Hdump_html_mode.Shown;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk__read_preferred)) return Yn.To_str(read_preferred);
else if (ctx.Match(k, Invk__read_preferred_)) read_preferred = m.ReadYn("v");
else if (ctx.Match(k, Invk__html_mode)) return html_mode.Key();
else if (ctx.Match(k, Invk__html_mode_)) html_mode = Hdump_html_mode.Parse(m.ReadStr("v"));
else if (ctx.Match(k, Invk__html_mode_list)) return Hdump_html_mode.Opt_list();
return this;
}
private static final String
Invk__read_preferred = "read_preferred" , Invk__read_preferred_ = "read_preferred_"
, Invk__html_mode = "html_mode" , Invk__html_mode_ = "html_mode_", Invk__html_mode_list = "html_mode_list"
;
}

View File

@ -48,7 +48,7 @@ public class Xoh_page_wtr_wkr {
}
Bry_bfr page_bfr = wiki.Utl__bfr_mkr().Get_m001(); // NOTE: get separate page rv to output page; do not reuse tmp_bfr b/c it will be used inside Fmt_do
Xoh_wtr_ctx hctx = null;
if (page_mode == Xopg_page_.Tid_html && wiki.App().Api_root().Wiki().Hdump().Html_mode().Tid_is_hdump_save()) {
if (page_mode == Xopg_page_.Tid_html && wiki.Html__hdump_mgr().Load_mgr().Html_mode().Tid_is_hdump_save()) {
hctx = Xoh_wtr_ctx.Hdump;
Write_body(page_bfr, ctx, hctx, page);
Write_page_by_tid(ctx, hctx, page_mode, rv, mgr.Page_html_fmtr(), Gfh_utl.Escape_html_as_bry(page_bfr.To_bry_and_clear()));

View File

@ -40,6 +40,7 @@ public class Xow_hdump_mgr {
// mode_is_b256 = true;
}
Init_by_db(dflt_zip_tid, dflt_hzip_enable, mode_is_b256);
load_mgr.Init_by_wiki(wiki);
}
public void Init_by_db(byte dflt_zip_tid, boolean dflt_hzip_enable, boolean mode_is_b256) {
int dflt_hzip_tid = dflt_hzip_enable ? Xoh_hzip_dict_.Hzip__v1 : Xoh_hzip_dict_.Hzip__none;

View File

@ -21,7 +21,7 @@ import gplx.xowa.htmls.heads.*; import gplx.xowa.htmls.core.makes.*; import gplx
import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*;
import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.skins.*; import gplx.xowa.wikis.pages.lnkis.*; import gplx.xowa.wikis.pages.htmls.*;
import gplx.xowa.addons.wikis.ctgs.htmls.pageboxs.*;
public class Xow_hdump_mgr__load {
public class Xow_hdump_mgr__load implements Gfo_invk {
private final Xow_wiki wiki; private final Xoh_hzip_mgr hzip_mgr; private final Io_stream_zip_mgr zip_mgr;
private final Xoh_page tmp_hpg; private final Bry_bfr tmp_bfr; private final Xowd_page_itm tmp_dbpg = new Xowd_page_itm();
private Xow_override_mgr override_mgr__html, override_mgr__page;
@ -29,7 +29,14 @@ public class Xow_hdump_mgr__load {
this.wiki = wiki; this.hzip_mgr = hzip_mgr; this.zip_mgr = zip_mgr; this.tmp_hpg = tmp_hpg; this.tmp_bfr = tmp_bfr;
this.make_mgr = new Xoh_make_mgr();
}
public boolean Read_preferred() {return read_preferred;} private boolean read_preferred = true;
public Xow_hdump_mode Html_mode() {return html_mode;} private Xow_hdump_mode html_mode;
public Xoh_make_mgr Make_mgr() {return make_mgr;} private final Xoh_make_mgr make_mgr;
public void Init_by_wiki(Xow_wiki wiki) {
gplx.xowa.addons.apps.cfgs.Xocfg_mgr cfg_mgr = wiki.App().Cfg();
Xow_hdump_mode.Cfg__reg_type(cfg_mgr.Type_mgr());
cfg_mgr.Bind_many_wiki(this, wiki, Cfg__read_preferred, Cfg__html_mode);
}
public void Load_by_edit(Xoae_page wpg) {
tmp_hpg.Ctor_by_hview(wpg.Wiki(), wpg.Url(), wpg.Ttl(), wpg.Db().Page().Id());
Load(tmp_hpg, wpg.Ttl());
@ -128,6 +135,16 @@ public class Xow_hdump_mgr__load {
trg_list.Add_direct(src_list.Get_at(i));
}
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Cfg__read_preferred)) read_preferred = m.ReadYn("v");
else if (ctx.Match(k, Cfg__html_mode)) html_mode = Xow_hdump_mode.Parse(m.ReadStr("v"));
return this;
}
private static final String
Cfg__read_preferred = "xowa.wiki.hdumps.read_preferred"
, Cfg__html_mode = "xowa.wiki.hdumps.html_mode"
;
private static boolean Load__fail(Xoh_page hpg) {hpg.Db().Page().Exists_n_(); return false;}
private static boolean Load__dbpg(Xow_wiki wiki, Xowd_page_itm dbpg, Xoh_page hpg, Xoa_ttl ttl) {
wiki.Data__core_mgr().Tbl__page().Select_by_ttl(dbpg, ttl.Ns(), ttl.Page_db());

View File

@ -15,27 +15,29 @@ 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.wikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.apis.*; import gplx.xowa.apps.apis.xowa.*;
public class Hdump_html_mode {
public Hdump_html_mode(int tid, String key, String gui) {
this.tid = (byte)tid; this.key = key; this.gui = gui;
package gplx.xowa.htmls.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
public class Xow_hdump_mode {
private final int tid;
private final String key;
private final String gui;
public Xow_hdump_mode(int tid, String key, String gui) {
this.tid = tid; this.key = key; this.gui = gui;
}
public byte Tid() {return tid;} private final byte tid;
public String Key() {return key;} private final String key;
public String Gui() {return gui;} private final String gui;
public Keyval Opt() {return Keyval_.new_(key, gui);}
public boolean Tid_is_hdump_save() {return tid == Hdump_save.tid;}
public static final Hdump_html_mode
Shown = new Hdump_html_mode(0, "shown" , "Shown")
, Hdump_save = new Hdump_html_mode(1, "hdump_save" , "Saved for HTML DB")
, Hdump_load = new Hdump_html_mode(2, "hdump_load" , "Loaded by HTML DB")
;
public static Hdump_html_mode Parse(String v) {
private static final Xow_hdump_mode
Shown = new Xow_hdump_mode(0, "shown" , "Shown")
, Hdump_save = new Xow_hdump_mode(1, "hdump_save" , "Saved for HTML DB")
, Hdump_load = new Xow_hdump_mode(2, "hdump_load" , "Loaded by HTML DB");
public static void Cfg__reg_type(gplx.xowa.addons.apps.cfgs.mgrs.types.Xocfg_type_mgr type_mgr) {
type_mgr.Lists__add("list:xowa.wiki.hdumps.html_mode", To_kv(Shown), To_kv(Hdump_save), To_kv(Hdump_load));
}
private static Keyval To_kv(Xow_hdump_mode mode) {return Keyval_.new_(mode.key, mode.gui);}
public static Xow_hdump_mode Parse(String v) {
if (String_.Eq(v, Shown.key)) return Shown;
else if (String_.Eq(v, Hdump_save.key)) return Hdump_save;
else if (String_.Eq(v, Hdump_load.key)) return Hdump_load;
else throw Err_.new_unhandled(v);
}
public static Keyval[] Opt_list() {return new Keyval[] {Shown.Opt(), Hdump_save.Opt()};}
}

View File

@ -36,8 +36,9 @@ public class Xowe_page_mgr {
// load page from html_db
boolean from_html_db = page.Db().Page().Html_db_id() != -1;
boolean read_from_html_db_preferred = wiki.Html__hdump_mgr().Load_mgr().Read_preferred();
if (from_html_db) {
if (wiki.Appe().Api_root().Wiki().Hdump().Read_preferred()) {
if (read_from_html_db_preferred) {
wiki.Html__hdump_mgr().Load_mgr().Load_by_edit(page);
from_html_db = Bry_.Len_gt_0(page.Db().Html().Html_bry()); // NOTE: archive.org has some wtxt_dbs which included page|html_db_id without actual html_dbs; DATE:2016-06-22
}
@ -52,7 +53,7 @@ public class Xowe_page_mgr {
// load from html_dbs if no wtxt found and option just marked as not read_preferred
if ( Bry_.Len_eq_0(page.Db().Text().Text_bry()) // no wtxt found
&& !ttl.Ns().Id_is_special() // skip special
&& !wiki.Appe().Api_root().Wiki().Hdump().Read_preferred() // read preferred not marked
&& !read_from_html_db_preferred // read preferred not marked
) {
wiki.Html__hdump_mgr().Load_mgr().Load_by_edit(page);
from_html_db = Bry_.Len_gt_0(page.Db().Html().Html_bry());