mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v3.1.3.1
This commit is contained in:
@@ -53,6 +53,6 @@ public interface Xoa_app extends GfoInvkAble {
|
||||
Bry_bfr_mkr Utl__bfr_mkr();
|
||||
Json_parser Utl__json_parser();
|
||||
Gfo_inet_conn Utl__inet_conn();
|
||||
Xoa_meta_mgr Meta_mgr();
|
||||
Xoa_meta_mgr Dbmeta_mgr();
|
||||
Xoa_site_cfg_mgr Site_cfg_mgr();
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ public class Xoa_app_ {
|
||||
}
|
||||
}
|
||||
public static final String Name = "xowa";
|
||||
public static final String Version = "3.1.1.1";
|
||||
public static final String Version = "3.1.3.1";
|
||||
public static String Build_date = "2012-12-30 00:00:00";
|
||||
public static String Op_sys_str;
|
||||
public static String User_agent = "";
|
||||
|
||||
@@ -71,7 +71,7 @@ public class Xoa_app_fxt {
|
||||
public static Xowe_wiki wiki_(Xoae_app app, String key, Xol_lang_itm lang) {
|
||||
Io_url wiki_dir = app.Fsys_mgr().Wiki_dir().GenSubDir(key);
|
||||
Xowe_wiki rv = new Xowe_wiki(app, lang, Xow_ns_mgr_.default_(lang.Case_mgr()), Xow_domain_itm_.parse(Bry_.new_u8(key)), wiki_dir);
|
||||
rv.File_mgr().Meta_mgr().Depth_(2); // TEST: written for 2 depth
|
||||
rv.File_mgr().Dbmeta_mgr().Depth_(2); // TEST: written for 2 depth
|
||||
rv.Props().Main_page_(Xoa_page_.Main_page_bry); // TEST: default to Main Page (nothing tests loading Main Page from wiki.gfs)
|
||||
rv.Ns_mgr().Ids_get_or_null(Xow_ns_.Tid__main).Subpages_enabled_(true);
|
||||
app.Wiki_mgr().Add(rv);
|
||||
|
||||
@@ -36,6 +36,11 @@ public class Xoa_ttl { // PAGE:en.w:http://en.wikipedia.org/wiki/Help:Link; REF.
|
||||
return Bry_.Mid(full_txt, bgn, end);
|
||||
}
|
||||
public byte[] Full_txt_raw() {return full_txt;} private byte[] full_txt = Bry_.Empty;
|
||||
public byte[] Full_db_wo_xwiki() {
|
||||
byte[] rv = Bry_.Mid(full_txt, wik_bgn == -1 ? 0 : ns_bgn == -1 ? page_bgn - 1 : ns_bgn - 1, full_txt.length);
|
||||
Bry_.Replace_reuse(rv, Byte_ascii.Space, Byte_ascii.Underline);
|
||||
return rv;
|
||||
}
|
||||
public byte[] Page_txt_w_anchor() {return Bry_.Mid(full_txt, page_bgn, qarg_bgn == -1 ? full_txt.length : qarg_bgn - 1);}
|
||||
public byte[] Page_txt() {return Bry_.Mid(full_txt, page_bgn, anch_bgn == -1 ? full_txt.length : anch_bgn - 1);}
|
||||
public byte[] Page_db() {
|
||||
@@ -372,7 +377,8 @@ public class Xoa_ttl { // PAGE:en.w:http://en.wikipedia.org/wiki/Help:Link; REF.
|
||||
return true;
|
||||
}
|
||||
public static byte[] Replace_spaces(byte[] raw) {return Bry_.Replace(raw, Byte_ascii.Space, Byte_ascii.Underline);}
|
||||
public static byte[] Replace_unders(byte[] raw) {return Bry_.Replace(raw, Byte_ascii.Underline, Byte_ascii.Space);}
|
||||
public static byte[] Replace_unders(byte[] raw) {return Replace_unders(raw, 0, raw.length);}
|
||||
public static byte[] Replace_unders(byte[] raw, int bgn, int end) {return Bry_.Replace(raw, bgn, end, Byte_ascii.Underline, Byte_ascii.Space);}
|
||||
private int wik_bgn = -1, ns_bgn = -1, page_bgn = 0, leaf_bgn = -1, anch_bgn = -1, root_bgn = -1;
|
||||
private byte[] tors_txt;
|
||||
public static final int Wik_bgn_int = -1;
|
||||
@@ -392,7 +398,7 @@ class Xoa_ttl_trie {
|
||||
rv.Add(Byte_ascii.Underline , Byte_obj_val.new_(Id_underline));
|
||||
rv.Add(Byte_ascii.Amp , Byte_obj_val.new_(Id_amp));
|
||||
rv.Add(Xop_comm_lxr.Bgn_ary , Byte_obj_val.new_(Id_comment_bgn));
|
||||
rv.Add(Byte_ascii.Nl , Byte_obj_val.new_(Id_newLine));
|
||||
rv.Add(Byte_ascii.Nl , Byte_obj_val.new_(Id_newLine));
|
||||
rv.Add(Byte_ascii.Brack_bgn , Byte_obj_val.new_(Id_invalid));
|
||||
rv.Add(Byte_ascii.Curly_bgn , Byte_obj_val.new_(Id_invalid));
|
||||
return rv;
|
||||
|
||||
@@ -81,7 +81,7 @@ public class Xoae_app implements Xoa_app, GfoInvkAble {
|
||||
public Bry_bfr_mkr Utl__bfr_mkr() {return Xoa_app_.Utl__bfr_mkr();}
|
||||
public Json_parser Utl__json_parser() {return utl__json_parser;} private final Json_parser utl__json_parser = new Json_parser();
|
||||
public Gfo_inet_conn Utl__inet_conn() {return inet_conn;} private final Gfo_inet_conn inet_conn = Gfo_inet_conn_.new_();
|
||||
public Xoa_meta_mgr Meta_mgr() {return meta_mgr;} private final Xoa_meta_mgr meta_mgr;
|
||||
public Xoa_meta_mgr Dbmeta_mgr() {return meta_mgr;} private final Xoa_meta_mgr meta_mgr;
|
||||
public boolean Bldr__running() {return bldr__running;} public void Bldr__running_(boolean v) {this.bldr__running = v;} private boolean bldr__running;
|
||||
public Xoa_parser_mgr Parser_mgr() {return parser_mgr;} private final Xoa_parser_mgr parser_mgr = new Xoa_parser_mgr();
|
||||
public Xoa_site_cfg_mgr Site_cfg_mgr() {return site_cfg_mgr;} private final Xoa_site_cfg_mgr site_cfg_mgr;
|
||||
|
||||
@@ -148,7 +148,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble, GfoEvObj {
|
||||
public Xoi_dump_mgr Import_mgr() {return import_mgr;} private Xoi_dump_mgr import_mgr = new Xoi_dump_mgr();
|
||||
public Xow_maint_mgr Maint_mgr() {return maint_mgr;} private Xow_maint_mgr maint_mgr;
|
||||
public void Clear_for_tests() { // NOTE: these are structures that cache items for PERF; need to be cleared out for multiple test runs
|
||||
file_mgr.Meta_mgr().Clear();
|
||||
file_mgr.Dbmeta_mgr().Clear();
|
||||
db_mgr.Load_mgr().Clear();
|
||||
}
|
||||
public Xodb_mgr_sql Db_mgr_create_as_sql() {Xodb_mgr_sql rv = new Xodb_mgr_sql(this); db_mgr = rv; return rv;}
|
||||
|
||||
@@ -62,10 +62,10 @@ public class Xoav_app implements Xoa_app, GfoInvkAble {
|
||||
public Xoh_lnki_bldr Html__lnki_bldr() {return html__lnki_bldr;} private final Xoh_lnki_bldr html__lnki_bldr;
|
||||
public Xoa_css_extractor Html__css_installer() {return html__css_installer;} private final Xoa_css_extractor html__css_installer = new Xoa_css_extractor();
|
||||
public Xoh_bridge_mgr Html__bridge_mgr() {return html__bridge_mgr;} private final Xoh_bridge_mgr html__bridge_mgr;
|
||||
public Xoa_meta_mgr Meta_mgr() {return meta_mgr;} private final Xoa_meta_mgr meta_mgr;
|
||||
public Xoa_meta_mgr Dbmeta_mgr() {return meta_mgr;} private final Xoa_meta_mgr meta_mgr;
|
||||
public Gfo_inet_conn Utl__inet_conn() {return inet_conn;} private final Gfo_inet_conn inet_conn = Gfo_inet_conn_.new_();
|
||||
public Xoa_site_cfg_mgr Site_cfg_mgr() {return site_cfg_mgr;} private final Xoa_site_cfg_mgr site_cfg_mgr;
|
||||
public boolean Xwiki_mgr__missing(byte[] domain) {return wiki_mgr.Get_by_domain(domain) == null;}
|
||||
public boolean Xwiki_mgr__missing(byte[] domain) {return wiki_mgr.Get_by_or_null(domain) == null;}
|
||||
public Xoa_sitelink_mgr Xwiki_mgr__sitelink_mgr() {return xwiki_mgr__sitelink_mgr;} private final Xoa_sitelink_mgr xwiki_mgr__sitelink_mgr = new Xoa_sitelink_mgr();
|
||||
public Xow_xwiki_itm_parser Xwiki_mgr__itm_parser() {return xwiki_mgr__itm_parser;} private final Xow_xwiki_itm_parser xwiki_mgr__itm_parser = new Xow_xwiki_itm_parser();
|
||||
|
||||
|
||||
@@ -21,16 +21,24 @@ import gplx.xowa.wikis.*;
|
||||
public class Xoav_wiki_mgr implements Xoa_wiki_mgr, GfoInvkAble {
|
||||
private final Xoav_app app; private final Ordered_hash hash = Ordered_hash_.New_bry();
|
||||
public Xoav_wiki_mgr(Xoav_app app, Xol_case_mgr case_mgr) {this.app = app;}
|
||||
public int Count() {return hash.Count();}
|
||||
public Xow_wiki Get_at_i(int i) {return (Xow_wiki)hash.Get_at(i);}
|
||||
public Xowv_wiki Get_by_domain(byte[] domain) {return (Xowv_wiki)hash.Get_by(domain);}
|
||||
public Xowv_wiki Import_by_fil(Io_url fil) {
|
||||
public int Count() {return hash.Count();}
|
||||
public boolean Has(byte[] key) {return hash.Has(key);}
|
||||
public Xow_wiki Get_at(int idx) {return (Xow_wiki)hash.Get_at(idx);}
|
||||
public Xow_wiki Get_by_or_null(byte[] key) {return (Xow_wiki)hash.Get_by(key);}
|
||||
public Xow_wiki Get_by_or_make_init_y(byte[] key) {
|
||||
Xow_wiki rv = this.Get_by_or_null(key);
|
||||
// if (rv == null) rv = New_wiki(key); // TODO: must init wiki, but need wiki_url; DATE:2015-05-23
|
||||
return rv;
|
||||
}
|
||||
public Xow_wiki Get_by_or_make_init_n(byte[] key) {return Get_by_or_make_init_y(key);}
|
||||
public void Add(Xow_wiki wiki) {hash.Add_if_dupe_use_nth(wiki.Domain_bry(), wiki);}
|
||||
public Xow_wiki Load_by_fil(Io_url fil) {
|
||||
Io_url wiki_dir = fil.OwnerDir();
|
||||
Xowv_wiki rv = Load(Gen_domain_str(fil.NameOnly()), wiki_dir);
|
||||
Xow_wiki rv = Load(Gen_domain_str(fil.NameOnly()), wiki_dir);
|
||||
app.User().User_db_mgr().Site_mgr().Import(rv.Domain_str(), rv.Domain_str(), wiki_dir.Raw(), "");
|
||||
return rv;
|
||||
}
|
||||
public void Load_by_user_data() {
|
||||
public void Load_by_user_data() {
|
||||
Xoud_site_row[] ary = app.User().User_db_mgr().Site_mgr().Get_all();
|
||||
int len = ary.length;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
@@ -38,34 +46,14 @@ public class Xoav_wiki_mgr implements Xoa_wiki_mgr, GfoInvkAble {
|
||||
Load(itm.Domain(), Io_url_.new_dir_(itm.Path()));
|
||||
}
|
||||
}
|
||||
public Xowv_wiki Load_by_fil(Io_url fil) {
|
||||
return Load(Gen_domain_str(fil.NameOnly()), fil.OwnerDir());
|
||||
}
|
||||
public boolean Has(byte[] key) {return hash.Has(key);}
|
||||
public Xow_wiki Get_by_key_or_null_i(byte[] key) {return (Xowv_wiki)hash.Get_by(key);}
|
||||
public Xow_wiki Get_by_key_or_make_init_y(byte[] key) {
|
||||
Xow_wiki rv = this.Get_by_domain(key);
|
||||
// if (rv == null) rv = New_wiki(key); // TODO: must init wiki, but need wiki_url; DATE:2015-05-23
|
||||
return rv;
|
||||
}
|
||||
public Xow_wiki Get_by_key_or_make_init_n(byte[] key) {return Get_by_key_or_make_init_y(key);}
|
||||
public void Load_by_dir(Io_url wiki_root_dir) {
|
||||
Io_url[] wiki_dirs = Io_mgr.Instance.QueryDir_args(wiki_root_dir).DirOnly_().ExecAsUrlAry();
|
||||
for (Io_url wiki_dir : wiki_dirs) {
|
||||
String wiki_dir_url = wiki_dir.Raw();
|
||||
if (String_.Has_at_bgn(wiki_dir_url, "#")) continue;
|
||||
Load(wiki_dir.NameOnly(), wiki_dir);
|
||||
}
|
||||
}
|
||||
private Xowv_wiki Load(String domain_str, Io_url wiki_dir) {
|
||||
private Xow_wiki Load(String domain_str, Io_url wiki_dir) {
|
||||
byte[] domain_bry = Bry_.new_u8(domain_str);
|
||||
Xowv_wiki rv = new Xowv_wiki(app, domain_bry, wiki_dir);
|
||||
Xow_wiki rv = new Xowv_wiki(app, domain_bry, wiki_dir);
|
||||
hash.Add_if_dupe_use_nth(domain_bry, rv);
|
||||
return rv;
|
||||
}
|
||||
public void Add(Xow_wiki wiki) {hash.Add_if_dupe_use_nth(wiki.Domain_bry(), wiki);}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_import_by_fil)) return Import_by_fil(Io_url_.new_fil_(m.ReadStr("v")));
|
||||
if (ctx.Match(k, Invk_import_by_fil)) return Load_by_fil(Io_url_.new_fil_(m.ReadStr("v")));
|
||||
else return GfoInvkAble_.Rv_unhandled;
|
||||
}
|
||||
public static final String Invk_import_by_fil = "import_by_fil";
|
||||
|
||||
@@ -63,7 +63,7 @@ public class Xoa_cfg_mgr implements GfoInvkAble {
|
||||
int wiki_count = app.Wiki_mgri().Count();
|
||||
boolean rv = true;
|
||||
for (int i = 0; i < wiki_count; i++) {
|
||||
Xow_wiki wiki = app.Wiki_mgri().Get_at_i(i);
|
||||
Xow_wiki wiki = app.Wiki_mgri().Get_at(i);
|
||||
if (all || wiki.Domain_tid() == grp_tid.Wiki_tid()) {
|
||||
if (!Eval_set(wiki, grp.Key_str(), itm.Val()))
|
||||
rv = false;
|
||||
@@ -71,7 +71,7 @@ public class Xoa_cfg_mgr implements GfoInvkAble {
|
||||
}
|
||||
return rv;
|
||||
case Xoa_cfg_grp_tid.Tid_wiki: {
|
||||
Xow_wiki wiki = app.Wiki_mgri().Get_by_key_or_null_i(itm.Key());
|
||||
Xow_wiki wiki = app.Wiki_mgri().Get_by_or_null(itm.Key());
|
||||
if (wiki == null) return true; // wiki not installed; return true (no error)
|
||||
return Eval_set(wiki, grp.Key_str(), itm.Val());
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ class Xoa_cfg_mgr_fxt {
|
||||
itm.Val_(val);
|
||||
}
|
||||
public Xowe_wiki Exec_make_wiki(String wiki_key_str) {return Exec_make_wiki(Bry_.new_a7(wiki_key_str));}
|
||||
public Xowe_wiki Exec_make_wiki(byte[] wiki_key_bry) {return app.Wiki_mgr().Get_by_key_or_make(wiki_key_bry);}
|
||||
public Xowe_wiki Exec_make_wiki(byte[] wiki_key_bry) {return app.Wiki_mgr().Get_by_or_make(wiki_key_bry);}
|
||||
public void Test_init_wiki(String wiki_key_str, String itm_key_str, String expd_val) {
|
||||
byte[] wiki_key_bry = Bry_.new_a7(wiki_key_str);
|
||||
Xowe_wiki wiki = Exec_make_wiki(wiki_key_bry);
|
||||
|
||||
@@ -92,7 +92,7 @@ public class Http_server_mgr implements GfoInvkAble {
|
||||
public String Parse_page_to_html(Http_data__client data__client, byte[] wiki_domain, byte[] page_ttl) {
|
||||
synchronized (thread_lock) {
|
||||
Init_gui();
|
||||
Xowe_wiki wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_key_or_make_init_y(wiki_domain); // get the wiki; assert init for Main_Page; EX:click zh.w on wiki sidebar; DATE:2015-07-19
|
||||
Xowe_wiki wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_or_make_init_y(wiki_domain); // get the wiki; assert init for Main_Page; EX:click zh.w on wiki sidebar; DATE:2015-07-19
|
||||
if (Env_.System_memory_total() > Io_mgr.Len_gb) Xow_wiki_.Rls_mem(wiki, true); // release memory at 1 GB; DATE:2015-09-11
|
||||
if (Bry_.Len_eq_0(page_ttl)) page_ttl = wiki.Props().Main_page();
|
||||
Xoa_url page_url = wiki.Utl__url_parser().Parse(page_ttl); // get the url (needed for query args)
|
||||
|
||||
@@ -29,7 +29,7 @@ class Http_server_wkr_ {
|
||||
byte[] wiki_domain = Bry_.new_u8(req_array[1]);
|
||||
Xow_domain_itm domain_itm = Xow_domain_itm_.parse(wiki_domain);
|
||||
if (domain_itm.Domain_type_id() == Xow_domain_tid_.Int__other && domain_itm.Lang_actl_itm().Id() == Xol_lang_stub_.Id__intl) return req;
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(wiki_domain);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(wiki_domain);
|
||||
wiki.Init_assert();
|
||||
String main_page = String_.new_u8(wiki.Props().Main_page());
|
||||
if (mode == 1) main_page = "/" + main_page;
|
||||
|
||||
@@ -33,7 +33,7 @@ class Http_server_wkr__fxt {
|
||||
this.app = Xoa_app_fxt.app_();
|
||||
}
|
||||
public void Init_wiki_main_page(String domain, String main_page) {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_u8(domain));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_u8(domain));
|
||||
wiki.Props().Main_page_(Bry_.new_u8(main_page));
|
||||
}
|
||||
public void Test_assert_main_page(String url, String expd) {
|
||||
|
||||
@@ -50,7 +50,7 @@ public class Xoa_url_parser {
|
||||
Xow_xwiki_itm xwiki_itm = app.User().Wikii().Xwiki_mgr().Get_by_key(wiki_bry);
|
||||
if (xwiki_itm == null) {Xoa_url_.Invalid_warn(str); return null;} // if wiki doesn't exist, warn and return nothing; DATE:2015-08-25
|
||||
if (rv.Page_is_main()) { // Main_Page requested; EX: "zh.wikipedia.org"; "zh.wikipedia.org/wiki/"; DATE:2014-02-16
|
||||
Xow_wiki wiki_itm = app.Wiki_mgri().Get_by_key_or_make_init_y(wiki_bry); // NOTE: must call Init to load Main_Page; only call if from url_bar, else all sister wikis will be loaded when parsing Sister_wikis panel
|
||||
Xow_wiki wiki_itm = app.Wiki_mgri().Get_by_or_make_init_y(wiki_bry); // NOTE: must call Init to load Main_Page; only call if from url_bar, else all sister wikis will be loaded when parsing Sister_wikis panel
|
||||
rv.Page_bry_(wiki_itm.Props().Main_page());
|
||||
}
|
||||
return rv;
|
||||
@@ -241,10 +241,10 @@ public class Xoa_url_parser {
|
||||
if (colon_pos == Bry_find_.Not_found) return null; // no colon
|
||||
Xow_wiki alias_wiki = wiki; // default alias_wiki to cur_wiki
|
||||
if (!tmp_wiki_is_missing) // tmp_wiki exists; use it for alias wikis; DATE:2015-09-17
|
||||
alias_wiki = wiki.App().Wiki_mgri().Get_by_key_or_make_init_n(tmp_wiki);
|
||||
alias_wiki = wiki.App().Wiki_mgri().Get_by_or_make_init_n(tmp_wiki);
|
||||
Xow_xwiki_itm alias_itm = alias_wiki.Xwiki_mgr().Get_by_mid(bry, 0, colon_pos); // check for alias;
|
||||
if (alias_itm == null) return null; // colon-word is not alias; EX:A:B
|
||||
Xow_ns_mgr ns_mgr = tmp_wiki_is_missing ? wiki.Ns_mgr() : wiki.App().Meta_mgr().Ns__get_or_load(tmp_wiki);
|
||||
Xow_ns_mgr ns_mgr = tmp_wiki_is_missing ? wiki.Ns_mgr() : wiki.App().Dbmeta_mgr().Ns__get_or_load(tmp_wiki);
|
||||
if (ns_mgr.Names_get_or_null(alias_itm.Key_bry()) != null) // special case to handle collision between "wikipedia" alias and "Wikipedia" namespace; if alias exists as ns, ignore it; EX:sv.wikipedia.org/wiki/Wikipedia:Main_Page DATE:2015-07-31
|
||||
return null;
|
||||
byte[] rv = Bry_.Mid(bry, colon_pos + 1);
|
||||
|
||||
@@ -44,7 +44,7 @@ public class Xoa_url_parser_fxt {
|
||||
return this;
|
||||
}
|
||||
public Xow_ns_mgr Prep_get_ns_mgr_from_meta(String wiki) {
|
||||
return app.Meta_mgr().Ns__get_or_load(Bry_.new_u8(wiki));
|
||||
return app.Dbmeta_mgr().Ns__get_or_load(Bry_.new_u8(wiki));
|
||||
}
|
||||
public Xoa_url_parser_fxt Run_parse(String actl_str) {return Run_parse(cur_wiki, actl_str);}
|
||||
public Xoa_url_parser_fxt Run_parse(Xow_wiki wiki, String actl_str) {
|
||||
|
||||
27
400_xowa/src/gplx/xowa/bldrs/Xob_cmd_base.java
Normal file
27
400_xowa/src/gplx/xowa/bldrs/Xob_cmd_base.java
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
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.bldrs; import gplx.*; import gplx.xowa.*;
|
||||
public abstract class Xob_cmd_base implements Xob_cmd {
|
||||
public abstract String Cmd_key();
|
||||
@gplx.Virtual public void Cmd_init(Xob_bldr bldr) {}
|
||||
@gplx.Virtual public void Cmd_bgn(Xob_bldr bldr) {}
|
||||
@gplx.Virtual public void Cmd_run() {}
|
||||
@gplx.Virtual public void Cmd_end() {}
|
||||
@gplx.Virtual public void Cmd_term() {}
|
||||
@gplx.Virtual public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return GfoInvkAble_.Rv_unhandled;}
|
||||
}
|
||||
@@ -56,6 +56,7 @@ public class Xob_cmd_keys {
|
||||
, Key_site_meta = "util.site_meta"
|
||||
, Key_diff_build = "diff.build"
|
||||
, Key_diff_merge = "diff.merge"
|
||||
, Key_text_delete_page = "text.delete_page"
|
||||
|
||||
, Key_tdb_text_init = "tdb.text.init" // "core.init"
|
||||
, Key_tdb_make_page = "tdb.text.page" // "core.make_page"
|
||||
|
||||
@@ -37,6 +37,7 @@ public class Xob_cmd_mgr implements GfoInvkAble {
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_cat_link)) return Add(new Xob_categorylinks_sql(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_cat_hidden)) return Add(new Xoctg_hiddencat_parser_sql(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_term)) return Add(new Xob_term_cmd(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_text_delete_page)) return Add(new Xob_page_delete_cmd(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_page_dump_make)) return Add(new Xob_page_dump_cmd_make(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_page_dump_drop)) return Add(new Xob_page_dump_cmd_drop(bldr, wiki));
|
||||
else if (String_.Eq(cmd_key, Xob_cmd_keys.Key_wiki_redirect)) return Add(new Xob_redirect_cmd(bldr, wiki));
|
||||
@@ -142,7 +143,7 @@ public class Xob_cmd_mgr implements GfoInvkAble {
|
||||
private Xowe_wiki Wiki_get_or_make(GfoMsg m) {
|
||||
byte[] wiki_key = m.ReadBry("v");
|
||||
Xoae_wiki_mgr wiki_mgr = bldr.App().Wiki_mgr();
|
||||
Xowe_wiki rv = wiki_mgr.Get_by_key_or_make(wiki_key);
|
||||
Xowe_wiki rv = wiki_mgr.Get_by_or_make(wiki_key);
|
||||
rv.Lang().Init_by_load();
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
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.bldrs.cmds.diffs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
import gplx.core.brys.*; import gplx.xowa.wikis.*;
|
||||
class Bfr_arg__dump_dir implements Bfr_arg { // .dump_dir = "C:\xowa\wiki\en.wikipedia.org"
|
||||
private final Xow_wiki wiki;
|
||||
public Bfr_arg__dump_dir(Xow_wiki wiki) {this.wiki = wiki;}
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
bfr.Add(wiki.Fsys_mgr().Root_dir().RawBry());
|
||||
}
|
||||
}
|
||||
class Bfr_arg__dump_core implements Bfr_arg {// .dump_core = "en.wikipedia.org-core.xowa"
|
||||
private final Xow_wiki wiki;
|
||||
public Bfr_arg__dump_core(Xow_wiki wiki) {this.wiki = wiki;}
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
bfr.Add(wiki.Data__core_mgr().Db__core().Url().RawBry());
|
||||
}
|
||||
}
|
||||
class Bfr_arg__dump_domain implements Bfr_arg {// .dump_domain = en.wikipedia.org
|
||||
private final Xow_wiki wiki;
|
||||
public Bfr_arg__dump_domain(Xow_wiki wiki) {this.wiki = wiki;}
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
bfr.Add(wiki.Domain_bry());
|
||||
}
|
||||
}
|
||||
@@ -17,39 +17,54 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.bldrs.cmds.diffs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
import gplx.core.brys.*; import gplx.core.brys.fmtrs.*;
|
||||
import gplx.dbs.*; import gplx.dbs.diffs.*; import gplx.dbs.diffs.builds.*;
|
||||
import gplx.dbs.*; import gplx.dbs.metas.*; import gplx.dbs.diffs.*; import gplx.dbs.diffs.builds.*;
|
||||
class Xob_diff_build_wkr {
|
||||
private final Gfdb_diff_bldr diff_bldr = new Gfdb_diff_bldr();
|
||||
private Db_conn prev_conn, curr_conn, diff_conn;
|
||||
public Xob_diff_build_wkr(Xob_bldr bldr, Xowe_wiki wiki, String prev_url, String curr_url, String diff_url, int commit_interval) {
|
||||
private final Gfdb_diff_bldr dif_bldr = new Gfdb_diff_bldr();
|
||||
private Db_conn prv_conn, cur_conn, dif_conn;
|
||||
public Xob_diff_build_wkr(Xob_bldr bldr, Xowe_wiki wiki, String prv_url, String cur_url, String dif_url, int commit_interval) {
|
||||
Bry_fmt url_fmt = Bry_fmt.New("").Args_(New_url_args(wiki));
|
||||
Bry_bfr tmp_bfr = Bry_bfr.new_();
|
||||
prev_conn = New_conn(wiki, url_fmt, prev_url, tmp_bfr);
|
||||
curr_conn = New_conn(wiki, url_fmt, curr_url, tmp_bfr);
|
||||
diff_conn = New_conn(wiki, url_fmt, diff_url, tmp_bfr);
|
||||
// get Gfdb_diff_tbl; format urls
|
||||
Tfds.Write(prev_conn, curr_conn, diff_conn);
|
||||
prv_conn = New_conn(Bool_.N, wiki, url_fmt, prv_url, tmp_bfr);
|
||||
cur_conn = New_conn(Bool_.N, wiki, url_fmt, cur_url, tmp_bfr);
|
||||
dif_conn = New_conn(Bool_.Y, wiki, url_fmt, dif_url, tmp_bfr);
|
||||
Tfds.Dbg(prv_conn, cur_conn, dif_conn);
|
||||
}
|
||||
public void Exec() {
|
||||
diff_bldr.Init(null); // diff_db_wkr
|
||||
diff_bldr.Compare(null, null); // lhs_tbl, rhs_tbl
|
||||
Gfdb_diff_db dif_db = new Gfdb_diff_db(dif_conn);
|
||||
Gfdb_diff_wkr__db dif_wkr = new Gfdb_diff_wkr__db();
|
||||
dif_wkr.Init_conn(dif_db, 1000);
|
||||
dif_bldr.Init(dif_wkr);
|
||||
Dbmeta_tbl_mgr prv_tbl_mgr = prv_conn.Meta_tbl_load_all();
|
||||
Dbmeta_tbl_mgr cur_tbl_mgr = prv_conn.Meta_tbl_load_all();
|
||||
int cur_tbl_len = cur_tbl_mgr.Len();
|
||||
for (int i = 0; i < cur_tbl_len; ++i) {
|
||||
Dbmeta_tbl_itm cur_tbl = cur_tbl_mgr.Get_at(i);
|
||||
Dbmeta_tbl_itm prv_tbl = prv_tbl_mgr.Get_by(cur_tbl.Name()); if (prv_tbl == null) continue;
|
||||
Gfdb_diff_tbl dif_tbl = Gfdb_diff_tbl.New(cur_tbl);
|
||||
dif_bldr.Compare(dif_tbl, prv_conn, cur_conn);
|
||||
}
|
||||
int prv_tbl_len = prv_tbl_mgr.Len();
|
||||
for (int i = 0; i < prv_tbl_len; ++i) {
|
||||
Dbmeta_tbl_itm prv_tbl = prv_tbl_mgr.Get_at(i);
|
||||
Dbmeta_tbl_itm cur_tbl = cur_tbl_mgr.Get_by(prv_tbl.Name());
|
||||
if (cur_tbl == null) {
|
||||
// delete all
|
||||
}
|
||||
}
|
||||
}
|
||||
public static Db_conn New_conn(Xow_wiki wiki, Bry_fmt fmtr, String url_fmt, Bry_bfr tmp_bfr) {
|
||||
public static Db_conn New_conn(boolean autocreate, Xow_wiki wiki, Bry_fmt fmtr, String url_fmt, Bry_bfr tmp_bfr) {
|
||||
fmtr.Fmt_(url_fmt).Bld_bfr_many(tmp_bfr);
|
||||
Db_conn conn = Db_conn_pool.Instance.Get_or_new(tmp_bfr.To_str_and_clear());
|
||||
return conn;
|
||||
return Db_conn_bldr.Instance.Get_or_autocreate(autocreate, Io_url_.new_any_(tmp_bfr.To_str_and_clear()));
|
||||
}
|
||||
private static Bfr_fmt_arg[] New_url_args(Xow_wiki wiki) {
|
||||
return null;
|
||||
Bfr_fmt_arg[] rv = new Bfr_fmt_arg[]
|
||||
{ new Bfr_fmt_arg(Bry_.new_a7(".dump_dir"), new Bfr_arg__dump_dir(wiki))
|
||||
, new Bfr_fmt_arg(Bry_.new_a7(".dump_core"), new Bfr_arg__dump_core(wiki))
|
||||
, new Bfr_fmt_arg(Bry_.new_a7(".dump_domain"), new Bfr_arg__dump_domain(wiki))
|
||||
};
|
||||
return rv;
|
||||
}
|
||||
//prev_url='~{.dump_dir}-prev/~{.dump_core}';
|
||||
//curr_url='~{.dump_dir}/~{.dump_core}';
|
||||
//diff_url='~{.dump_dir}/~{.dump_domain}-diff.xowa';
|
||||
//prv_url='~{.dump_dir}-prev/~{.dump_core}';
|
||||
//cur_url='~{.dump_dir}/~{.dump_core}';
|
||||
//dif_url='~{.dump_dir}/~{.dump_domain}-diff.xowa';
|
||||
}
|
||||
// class Bfr_arg__dump_dir : Bfr_arg {
|
||||
// public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
// // dump_dir = bfr.Add("C:\xowa\wiki\en.wikipedia.org");
|
||||
// // dump_core = en.wikipedia.org-core.xowa
|
||||
// // dump_domain = en.wikipedia.org
|
||||
// }
|
||||
// }
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
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.bldrs.cmds.diffs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
import gplx.dbs.*; import gplx.dbs.metas.*; import gplx.dbs.diffs.*;
|
||||
class Xob_diff_manifest {
|
||||
// page|page_id|*
|
||||
public static Gfdb_diff_tbl[] Parse(Db_conn conn, String src_str) {
|
||||
// byte[][] rows_ary = Bry_split_.Split_lines(Bry_.new_u8(src_str));
|
||||
// int rows_len = rows_ary.length;
|
||||
// for (int i = 0; i < rows_len; ++i) {
|
||||
// byte[] row = rows_ary[i];
|
||||
// byte[][] itms_ary = Bry_split_.Split(row, Byte_ascii.Pipe);
|
||||
// byte[] tbl_name = itms_ary[0];
|
||||
// conn.Meta_tbl_exists
|
||||
// int itms_len = itms_ary.length;
|
||||
// for (int j = 0; j < itms_len; ++j) {
|
||||
// byte[] itm = itms_ary[j];
|
||||
// Tfds.Dbg(itm);
|
||||
// }
|
||||
// Gfdb_diff_tbl tbl = new Gfdb_diff_tbl(String_.new_u8(itms_ary[0]),keys, vals, Db_rdr_.Empty);
|
||||
// }
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/*
|
||||
class Wkr {
|
||||
public void Make() {
|
||||
sdif_db_mgr sdif_db = new Sdif_db_mgr(conn);
|
||||
for (int i = 0; i < rhs_tbl_len; ++i) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -60,7 +60,7 @@ class Xob_diff_regy_sql_runner {
|
||||
fsdb_db_tid = Fsdb_db_tid_.Xto_tid(parts[2]);
|
||||
}
|
||||
public void Run_sql(Xoae_app app) {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_null(Bry_.new_u8(wiki_domain));
|
||||
Xowe_wiki wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_or_null(Bry_.new_u8(wiki_domain));
|
||||
app.Usr_dlg().Prog_many("", "", "running sql: url=~{0}", url.NameAndExt());
|
||||
Db_conn conn = Get_conn(wiki, fsdb_db_id, fsdb_db_tid);
|
||||
conn.Exec_sql(Io_mgr.Instance.LoadFilStr(url));
|
||||
|
||||
@@ -35,8 +35,8 @@ public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cm
|
||||
}
|
||||
private void Make_join_indexes(Db_conn make_db_provider) {
|
||||
try {
|
||||
make_db_provider.Ddl_create_idx(Db_meta_idx.new_normal_by_name("fsdb_regy", "fsdb_regy__join", "fsdb_name", "fsdb_is_orig", "fsdb_repo", "fsdb_w", "fsdb_time", "fsdb_page"));
|
||||
make_db_provider.Ddl_create_idx(Db_meta_idx.new_normal_by_name("xfer_regy", "xfer_regy__join", "lnki_ttl", "file_is_orig", "orig_repo", "file_w", "lnki_time", "lnki_page"));
|
||||
make_db_provider.Ddl_create_idx(Dbmeta_idx_itm.new_normal_by_name("fsdb_regy", "fsdb_regy__join", "fsdb_name", "fsdb_is_orig", "fsdb_repo", "fsdb_w", "fsdb_time", "fsdb_page"));
|
||||
make_db_provider.Ddl_create_idx(Dbmeta_idx_itm.new_normal_by_name("xfer_regy", "xfer_regy__join", "lnki_ttl", "file_is_orig", "orig_repo", "file_w", "lnki_time", "lnki_page"));
|
||||
}
|
||||
catch (Exception exc) {
|
||||
app.Usr_dlg().Warn_many("", "", "error while making indexes: err=~{0}", Err_.Message_gplx_full(exc));
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.cmds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*;
|
||||
import gplx.dbs.*; import gplx.xowa.files.*;
|
||||
class Xob_lnki_temp_tbl {
|
||||
private static final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private static final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private static final String Tbl_name = "lnki_temp";
|
||||
public static final String
|
||||
Fld_lnki_id = flds.Add_int_pkey_autonum("lnki_id"); // NOTE: insertion order index; public b/c not used and want to bypass warning
|
||||
@@ -39,7 +39,7 @@ class Xob_lnki_temp_tbl {
|
||||
private Db_stmt stmt_insert;
|
||||
public Xob_lnki_temp_tbl(Db_conn conn) {this.conn = conn;}
|
||||
public Db_conn Conn() {return conn;} private final Db_conn conn;
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(Tbl_name, flds));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(Tbl_name, flds));}
|
||||
public void Insert_bgn() {conn.Txn_bgn("bldr__lnki_temp"); stmt_insert = conn.Stmt_insert(Tbl_name, flds);}
|
||||
public void Insert_commit() {conn.Txn_sav();}
|
||||
public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);}
|
||||
|
||||
@@ -57,7 +57,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink
|
||||
wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_page_.Tid_read).Ctgs_enabled_(false); // disable categories else progress messages written (also for PERF)
|
||||
if (wiki.File__bin_mgr() != null)
|
||||
wiki.File__bin_mgr().Wkrs__del(gplx.xowa.files.bins.Xof_bin_wkr_.Key_http_wmf); // remove wmf wkr, else will try to download images during parsing
|
||||
commons_wiki = app.Wiki_mgr().Get_by_key_or_make(Xow_domain_itm_.Bry__commons);
|
||||
commons_wiki = app.Wiki_mgr().Get_by_or_make(Xow_domain_itm_.Bry__commons);
|
||||
Xop_log_mgr log_mgr = ctx.App().Log_mgr();
|
||||
log_mgr.Log_dir_(wiki.Fsys_mgr().Root_dir()); // put log in wiki dir, instead of user.temp
|
||||
invoke_wkr = this.Invoke_wkr(); // set member reference
|
||||
|
||||
@@ -27,7 +27,7 @@ public class Xob_orig_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
Db_conn conn = Xob_db_file.new__file_make(wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
Xob_orig_regy_tbl.Create_table(conn);
|
||||
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_domain_itm_.Bry__commons).Init_assert();
|
||||
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_or_make(Xow_domain_itm_.Bry__commons).Init_assert();
|
||||
Xowe_wiki repo_0 = wiki, repo_1 = commons_wiki;
|
||||
if (repo_0_is_remote) { // NOTE: default is false; local_wiki will be preferred over commons_wiki
|
||||
repo_0 = commons_wiki;
|
||||
|
||||
@@ -25,7 +25,7 @@ public class Xob_page_regy_cmd extends Xob_itm_basic_base implements Xob_cmd {
|
||||
public String Cmd_key() {return Xob_cmd_keys.Key_file_page_regy;}
|
||||
public void Cmd_init(Xob_bldr bldr) {}
|
||||
public void Cmd_bgn(Xob_bldr bldr) {
|
||||
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_key_or_make(Xow_domain_itm_.Bry__commons).Init_assert();
|
||||
Xowe_wiki commons_wiki = bldr.App().Wiki_mgr().Get_by_or_make(Xow_domain_itm_.Bry__commons).Init_assert();
|
||||
Db_conn page_regy_provider = Xob_db_file.new__page_regy(commons_wiki.Fsys_mgr().Root_dir()).Conn();
|
||||
commons_wiki.Init_assert();
|
||||
if (build_commons) {
|
||||
|
||||
@@ -37,11 +37,12 @@ public class Xob_page_cmd extends Xob_itm_basic_base implements Xobd_wkr, GfoInv
|
||||
this.page_core_tbl = db_mgr.Tbl__page();
|
||||
this.text_zip_mgr = Xoa_app_.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());
|
||||
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();
|
||||
redirect_tbl.Conn().Txn_bgn("bldr__page__redirect");
|
||||
}
|
||||
this.dg_match_mgr = app.Api_root().Bldr().Wiki().Filter().Dansguardian().New_mgr(wiki.Domain_str(), wiki.Fsys_mgr().Root_dir());
|
||||
app.Bldr().Dump_parser().Trie_tab_del_(); // disable swapping 	 for \t
|
||||
byte[] ns_file_map = import_cfg.New_ns_file_map(wiki.Import_cfg().Src_rdr_len());
|
||||
Xob_ns_file_itm.Init_ns_bldr_data(Xowd_db_file_.Tid_text, wiki.Ns_mgr(), ns_file_map);
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
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.bldrs.cmds.texts.sqls; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.cmds.texts.*;
|
||||
import gplx.dbs.*; import gplx.xowa.wikis.data.*;
|
||||
public class Xob_page_delete_cmd extends Xob_cmd_base {
|
||||
private final Xow_wiki wiki;
|
||||
public Xob_page_delete_cmd(Xob_bldr bldr, Xow_wiki wiki) {this.wiki = wiki;}
|
||||
@Override public String Cmd_key() {return Xob_cmd_keys.Key_text_delete_page;}
|
||||
@Override public void Cmd_run() {
|
||||
wiki.Init_by_wiki();
|
||||
Xowd_db_file core_db = wiki.Data__core_mgr().Db__core();
|
||||
Db_conn core_db_conn = core_db.Conn();
|
||||
Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Instance;
|
||||
|
||||
usr_dlg.Plog_many("", "", "creating page_filter");
|
||||
if (!core_db_conn.Meta_tbl_exists("page_filter")) {
|
||||
core_db_conn.Ddl_create_tbl
|
||||
( Dbmeta_tbl_itm.New("page_filter", new Dbmeta_fld_itm[]
|
||||
{ Dbmeta_fld_itm.new_int("page_id").Primary_y_()
|
||||
, Dbmeta_fld_itm.new_int("page_text_db_id")
|
||||
}
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl("page_filter", "db_id", "page_text_db_id", "page_id")
|
||||
));
|
||||
}
|
||||
|
||||
core_db_conn.Exec_sql_plog_ntx("finding missing redirects", String_.Concat_lines_nl_skip_last
|
||||
( "INSERT INTO page_filter (page_id, page_text_db_id)"
|
||||
, "SELECT ptr.page_id, ptr.page_text_db_id"
|
||||
, "FROM page ptr"
|
||||
, " LEFT JOIN page orig ON ptr.page_redirect_id = orig.page_id"
|
||||
, "WHERE ptr.page_is_redirect = 1"
|
||||
, "AND orig.page_id IS NULL"
|
||||
, "UNION"
|
||||
, "SELECT ptr.page_id, ptr.page_text_db_id"
|
||||
, "FROM page ptr"
|
||||
, "WHERE ptr.page_is_redirect = 1"
|
||||
, "AND ptr.page_redirect_id = -1"
|
||||
, ";"
|
||||
));
|
||||
|
||||
Xowd_db_file[] db_files = core_db.Tbl__db().Select_all(wiki.Data__core_mgr().Props(), wiki.Fsys_mgr().Root_dir());
|
||||
int len = db_files.length;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
boolean db_file_is_text = Bool_.N, db_file_is_cat = Bool_.N, db_file_is_search = Bool_.N;
|
||||
Xowd_db_file db_file = db_files[i];
|
||||
switch (db_file.Tid()) {
|
||||
case Xowd_db_file_.Tid_core: case Xowd_db_file_.Tid_wiki_solo: case Xowd_db_file_.Tid_text_solo:
|
||||
db_file_is_text = db_file_is_cat = db_file_is_search = Bool_.Y; break;
|
||||
case Xowd_db_file_.Tid_text: db_file_is_text = Bool_.Y; break;
|
||||
case Xowd_db_file_.Tid_cat: db_file_is_cat = Bool_.Y; break;
|
||||
case Xowd_db_file_.Tid_search_core: db_file_is_search = Bool_.Y; break;
|
||||
}
|
||||
int db_id = db_file.Id();
|
||||
if (db_file_is_text) Run_sql(core_db_conn, db_file.Url(), db_id, "deleting text: " + db_id, "DELETE FROM <attach_db>text WHERE page_id IN (SELECT page_id FROM page_filter WHERE page_text_db_id = {0});");
|
||||
if (db_file_is_cat) Run_sql(core_db_conn, db_file.Url(), db_id, "deleting cat: " + db_id, "DELETE FROM <attach_db>cat_link WHERE cl_from IN (SELECT page_id FROM page_filter);");
|
||||
if (db_file_is_cat) Run_sql(core_db_conn, db_file.Url(), db_id, "deleting search:" + db_id, "DELETE FROM <attach_db>search_link WHERE page_id IN (SELECT page_id FROM page_filter);");
|
||||
if (db_file_is_text || db_file_is_cat || db_file_is_search)
|
||||
db_file.Conn().Env_vacuum();
|
||||
}
|
||||
core_db_conn.Exec_sql_plog_ntx("deleting from table: page", "DELETE FROM page WHERE page_id IN (SELECT page_id FROM page_filter);");
|
||||
// core_db_conn.Ddl_delete_tbl("page_filter");
|
||||
core_db_conn.Env_vacuum();
|
||||
usr_dlg.Plog_many("", "", "");
|
||||
}
|
||||
private void Run_sql(Db_conn core_db_conn, Io_url db_url, int db_id, String prog_msg, String sql) {
|
||||
Db_attach_cmd.new_(core_db_conn, "data_db", db_url)
|
||||
.Add_fmt(prog_msg , sql, db_id)
|
||||
.Exec();
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,8 @@ 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.Instance.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
|
||||
new Xob_page_delete_cmd(wiki.Appe().Bldr(), wiki).Cmd_run();
|
||||
wiki.Data__core_mgr().Rls();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import gplx.dbs.*;
|
||||
class Xobd_page_dump_tbl {
|
||||
public final static String Tbl_name = "page_dump";
|
||||
private final String fld_id, fld_title, fld_namespace, fld_is_redirect;
|
||||
private final Db_conn conn; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final Db_conn conn; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
public Xobd_page_dump_tbl(Db_conn conn) {
|
||||
this.conn = conn;
|
||||
this.fld_id = flds.Add_int_pkey("page_id");
|
||||
@@ -29,12 +29,12 @@ class Xobd_page_dump_tbl {
|
||||
this.fld_is_redirect = flds.Add_int("page_is_redirect");
|
||||
}
|
||||
public void Create_data(Io_url page_db_url, int text_db_id) {
|
||||
conn.Ddl_create_tbl(Db_meta_tbl.new_(Tbl_name, flds));
|
||||
conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(Tbl_name, flds));
|
||||
conn.Stmt_delete(Tbl_name).Exec_delete(); // always clear tables again; allows commands to be rerun; DATE:2015-08-04
|
||||
Db_attach_cmd.new_(conn, "page_db", page_db_url)
|
||||
.Add_fmt("text_db_prep.clone_page", Sql_insert_data, text_db_id)
|
||||
.Exec();
|
||||
conn.Ddl_create_idx(Db_meta_idx.new_unique_by_tbl(Tbl_name, "main", fld_id, fld_namespace, fld_is_redirect, fld_title));
|
||||
conn.Ddl_create_idx(Dbmeta_idx_itm.new_unique_by_tbl(Tbl_name, "main", fld_id, fld_namespace, fld_is_redirect, fld_title));
|
||||
}
|
||||
private static final String Sql_insert_data = String_.Concat_lines_nl
|
||||
( "INSERT INTO page_dump (page_id, page_title, page_namespace, page_is_redirect)"
|
||||
|
||||
@@ -43,7 +43,7 @@ class Dg_log_mgr {
|
||||
public void Rls() {conn.Txn_end();}
|
||||
}
|
||||
class Dg_file_tbl {
|
||||
private String tbl_name = "dg_file"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "dg_file"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_file_id, fld_file_path, fld_rule_count;
|
||||
private Db_conn conn; private Db_stmt stmt_insert;
|
||||
public void Conn_(Db_conn new_conn, boolean created) {
|
||||
@@ -52,8 +52,8 @@ class Dg_file_tbl {
|
||||
fld_file_path = flds.Add_str("file_path", 512);
|
||||
fld_rule_count = flds.Add_int("rule_count");
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "file_id", fld_file_id)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "file_id", fld_file_id)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -69,7 +69,7 @@ class Dg_file_tbl {
|
||||
}
|
||||
}
|
||||
class Dg_rule_tbl implements Rls_able {
|
||||
private String tbl_name = "dg_rule"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "dg_rule"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_file_id, fld_rule_id, fld_rule_idx, fld_rule_score, fld_rule_text;
|
||||
private Db_conn conn; private Db_stmt stmt_insert;
|
||||
public void Conn_(Db_conn new_conn, boolean created) {
|
||||
@@ -80,8 +80,8 @@ class Dg_rule_tbl implements Rls_able {
|
||||
fld_rule_score = flds.Add_int("rule_score");
|
||||
fld_rule_text = flds.Add_str("rule_text", 1024);
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_rule_id)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "pkey", fld_rule_id)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -102,7 +102,7 @@ class Dg_rule_tbl implements Rls_able {
|
||||
}
|
||||
}
|
||||
class Dg_page_score_tbl implements Rls_able {
|
||||
private String tbl_name = "dg_page_score"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "dg_page_score"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_log_tid, fld_page_id, fld_page_ns, fld_page_ttl, fld_page_len, fld_page_score, fld_page_rule_count, fld_clude_type;
|
||||
private Db_conn conn; private Db_stmt stmt_insert;
|
||||
public void Conn_(Db_conn new_conn, boolean created) {
|
||||
@@ -116,8 +116,8 @@ class Dg_page_score_tbl implements Rls_able {
|
||||
fld_page_rule_count = flds.Add_int("page_rule_count");
|
||||
fld_clude_type = flds.Add_int("page_clude_type");
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -142,7 +142,7 @@ class Dg_page_score_tbl implements Rls_able {
|
||||
}
|
||||
}
|
||||
class Dg_page_rule_tbl implements Rls_able {
|
||||
private String tbl_name = "dg_page_rule"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "dg_page_rule"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_log_tid, fld_page_id, fld_rule_id, fld_rule_score_total;
|
||||
private Db_conn conn; private Db_stmt stmt_insert;
|
||||
public void Conn_(Db_conn new_conn, boolean created) {
|
||||
@@ -152,8 +152,8 @@ class Dg_page_rule_tbl implements Rls_able {
|
||||
fld_rule_id = flds.Add_int("rule_id");
|
||||
fld_rule_score_total = flds.Add_int("rule_score_total");
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id, fld_rule_id)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "pkey", fld_log_tid, fld_page_id, fld_rule_id)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ abstract class Xoi_cmd_base implements Gfo_thread_cmd {
|
||||
public void Process_async() {
|
||||
Xoae_app app = install_mgr.App();
|
||||
Xob_bldr bldr = app.Bldr();
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_a7(wiki_key));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki.Init_assert();
|
||||
bldr.Cmd_mgr().Clear();
|
||||
Process_async_init(app, wiki, bldr);
|
||||
@@ -81,7 +81,7 @@ class Xoi_cmd_category2_categorylinks extends Xoi_cmd_wiki_download { public Xoi
|
||||
class Xoi_cmd_category2_build extends Xoi_cmd_base {
|
||||
public Xoi_cmd_category2_build(Xoi_setup_mgr install_mgr, String wiki_key) {this.Ctor(install_mgr, wiki_key); this.app = install_mgr.App(); this.wiki_key = wiki_key;} private Xoae_app app; private String wiki_key;
|
||||
@Override public void Cmd_ctor() {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_u8(wiki_key));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_u8(wiki_key));
|
||||
wiki.Import_cfg().Category_version_(gplx.xowa.wikis.ctgs.Xoa_ctg_mgr.Version_2);
|
||||
}
|
||||
@Override public String Async_key() {return KEY;} public static final String KEY = "wiki.category2.build";
|
||||
|
||||
@@ -45,7 +45,7 @@ class Xoi_cmd_dumpfile {
|
||||
return this;
|
||||
}
|
||||
public Gfo_thread_cmd Exec(Xoi_cmd_mgr cmd_mgr) {
|
||||
Xowe_wiki wiki = cmd_mgr.App().Wiki_mgr().Get_by_key_or_make(domain);
|
||||
Xowe_wiki wiki = cmd_mgr.App().Wiki_mgr().Get_by_or_make(domain);
|
||||
if (bz2_unzip) { // unzip requested; add unzip cmd
|
||||
GfoMsg unzip_msg = GfoMsg_.new_parse_(Gfo_thread_cmd_unzip.KEY).Add("v", Gfo_thread_cmd_unzip.KEY).Add("src", bz2_url.Raw()).Add("trg", xml_url.Raw());
|
||||
Gfo_thread_cmd_unzip unzip_cmd = (Gfo_thread_cmd_unzip)cmd_mgr.Cmd_add(unzip_msg);
|
||||
|
||||
@@ -95,7 +95,7 @@ public class Xoi_cmd_mgr implements GfoInvkAble {
|
||||
if (dumpfile_cmd) {
|
||||
if (String_.Eq(cmd.Async_key(), Xoi_cmd_wiki_download.Key_wiki_download)) continue; // skip download if wiki.dump_file
|
||||
else if (String_.Eq(cmd.Async_key(), Xoi_cmd_wiki_unzip.KEY_dump)) {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_u8(wiki_key));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_u8(wiki_key));
|
||||
if (wiki.Import_cfg().Src_fil_xml() != null) continue; // skip unzip if xml exists
|
||||
}
|
||||
else if (String_.Eq(cmd.Async_key(), Xoi_cmd_wiki_import.KEY)) {
|
||||
|
||||
@@ -42,7 +42,7 @@ class Xoi_cmd_wiki_download extends Gfo_thread_cmd_download implements Gfo_threa
|
||||
Dump_servers_offline_msg_shown = true;
|
||||
}
|
||||
}
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(dump_file.Domain_itm().Domain_bry());
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(dump_file.Domain_itm().Domain_bry());
|
||||
Io_url root_dir = wiki.Fsys_mgr().Root_dir();
|
||||
Io_url[] trg_fil_ary = Io_mgr.Instance.QueryDir_args(root_dir).FilPath_("*." + dump_type + Download_file_ext() + "*").ExecAsUrlAry();
|
||||
Io_url trg = trg_fil_ary.length == 0 ? root_dir.GenSubFil(dump_file.File_name()) : trg_fil_ary[0];
|
||||
|
||||
@@ -72,7 +72,7 @@ class Xoi_cmd_wiki_import implements Gfo_thread_cmd {
|
||||
Xoae_app app = install_mgr.App();
|
||||
app.Usr_dlg().Prog_one("", "", "preparing import: ~{0}", wiki_key);
|
||||
Xob_bldr bldr = app.Bldr();
|
||||
wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki.Init_assert();
|
||||
bldr.Cmd_mgr().Clear();
|
||||
bldr.Pause_at_end_(false);
|
||||
|
||||
@@ -23,7 +23,7 @@ class Xoi_cmd_wiki_unzip extends Gfo_thread_cmd_unzip implements Gfo_thread_cmd
|
||||
@Override public String Async_key() {return KEY_dump;}
|
||||
@Override public byte Async_init() {
|
||||
Xoae_app app = install_mgr.App(); Gfui_kit kit = app.Gui_mgr().Kit();
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_u8(wiki_key));
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_u8(wiki_key));
|
||||
Io_url wiki_dir = wiki.Import_cfg().Src_dir();
|
||||
Io_url[] urls = Io_mgr.Instance.QueryDir_args(wiki_dir).Recur_(false).FilPath_("*.xml.bz2").ExecAsUrlAry();
|
||||
if (urls.length == 0) {
|
||||
|
||||
@@ -47,7 +47,7 @@ class Xoi_cmd_wiki_zip implements Gfo_thread_cmd {
|
||||
private void Process_async() {
|
||||
Xoae_app app = install_mgr.App();
|
||||
Xob_bldr bldr = app.Bldr();
|
||||
wiki = app.Wiki_mgr().Get_by_key_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki = app.Wiki_mgr().Get_by_or_make(Bry_.new_a7(wiki_key));
|
||||
wiki.Init_assert();
|
||||
bldr.Cmd_mgr().Clear();
|
||||
bldr.Pause_at_end_(false);
|
||||
|
||||
@@ -66,7 +66,7 @@ public class Xoa_maint_mgr implements GfoInvkAble {
|
||||
len = app.Wiki_mgr().Count();
|
||||
Xoa_app_.Usr_dlg().Log_many("", "", "maint.wiki_count; count=~{0}", len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_at(i);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_at_or_null(i);
|
||||
Xoa_app_.Usr_dlg().Log_many("", "", "maint.wiki_itm; wiki=~{0}", wiki.Domain_str());
|
||||
Wmf_dump_itm itm = (Wmf_dump_itm)itms_hash.Get_by_bry(wiki.Domain_bry()); if (itm == null) continue;
|
||||
wiki.Maint_mgr().Wmf_dump_date_(itm.Dump_date()).Wmf_dump_done_(itm.Status_tid() == Wmf_dump_itm.Status_tid_complete).Wmf_dump_status_(itm.Status_msg());
|
||||
|
||||
@@ -23,7 +23,7 @@ public class Xoa_maint_wikis_mgr implements GfoInvkAble {
|
||||
public Xowe_wiki Get_at(int i) {
|
||||
if (init) Init();
|
||||
byte[] domain = (byte[])hash.Get_at(i);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(domain);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(domain);
|
||||
wiki.Init_assert();
|
||||
return wiki;
|
||||
}
|
||||
@@ -32,7 +32,7 @@ public class Xoa_maint_wikis_mgr implements GfoInvkAble {
|
||||
int len = this.Len();
|
||||
for (int i = 0; i < len; i++) {
|
||||
byte[] domain = (byte[])hash.Get_at(i);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(domain);
|
||||
Xowe_wiki wiki = app.Wiki_mgr().Get_by_or_make(domain);
|
||||
wiki.Init_assert();
|
||||
}
|
||||
init = false;
|
||||
|
||||
@@ -27,7 +27,7 @@ public class Xoa_wmf_mgr implements GfoInvkAble {
|
||||
enabled = v;
|
||||
int len = wiki_mgr.Count();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowe_wiki wiki = wiki_mgr.Get_at(i);
|
||||
Xowe_wiki wiki = wiki_mgr.Get_at_or_null(i);
|
||||
wiki.File_mgr().Cfg_download().Enabled_(v);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
public class Site_core_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_core"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_core"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_site_domain, fld_json_completed, fld_json_date, fld_json_text;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete, stmt_update;
|
||||
@@ -32,7 +32,7 @@ public class Site_core_tbl implements Db_tbl {
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public Db_conn Conn() {return conn;}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv)));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv)));}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_extension_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_extension"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_extension"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_type, fld_name, fld_namemsg, fld_description, fld_descriptionmsg, fld_author, fld_url, fld_version
|
||||
, fld_vcs_system, fld_vcs_version, fld_vcs_url, fld_vcs_date, fld_license_name, fld_license, fld_credits;
|
||||
private final Db_conn conn;
|
||||
@@ -43,8 +43,8 @@ class Site_extension_tbl implements Db_tbl {
|
||||
this.fld_credits = flds.Add_str("credits", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_type, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_type, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_interwikimap_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_interwikimap"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_interwikimap"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_prefix, fld_local, fld_language, fld_localinterwiki, fld_url, fld_protorel;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -33,8 +33,8 @@ class Site_interwikimap_tbl implements Db_tbl {
|
||||
this.fld_protorel = flds.Add_bool("protorel");
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_prefix)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_prefix)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_kv_tbl implements Db_tbl {
|
||||
private String tbl_name; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private String tbl_name; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_key, fld_val;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_kv_tbl implements Db_tbl {
|
||||
this.fld_val = flds.Add_str("val", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_key)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_key)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_language_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_language"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_language"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_code, fld_name;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_language_tbl implements Db_tbl {
|
||||
this.fld_name = flds.Add_str("name", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_code)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_code)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_library_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_library"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_library"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_name, fld_version;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_library_tbl implements Db_tbl {
|
||||
this.fld_version = flds.Add_str("version", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_magicword_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_magicword"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_magicword"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_name, fld_case_match, fld_aliases;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -30,8 +30,8 @@ class Site_magicword_tbl implements Db_tbl {
|
||||
this.fld_aliases = flds.Add_str("aliases", 2048);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
public class Site_namespace_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_namespace"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_namespace"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_id, fld_case_tid, fld_canonical, fld_localized, fld_subpages, fld_content, fld_defaultcontentmodel;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -34,8 +34,8 @@ public class Site_namespace_tbl implements Db_tbl {
|
||||
this.fld_defaultcontentmodel = flds.Add_str("defaultcontentmodel", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_id)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_id)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_namespacealias_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_namespacealias"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_namespacealias"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_id, fld_alias;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_namespacealias_tbl implements Db_tbl {
|
||||
this.fld_alias = flds.Add_str("alias", 2048);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_normal_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_id, fld_alias)));} // NOTE: kk.w has duplicate entries in json
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_normal_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_id, fld_alias)));} // NOTE: kk.w has duplicate entries in json
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_showhook_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_showhook"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_showhook"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_name, fld_scribunto, fld_subscribers;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -30,8 +30,8 @@ class Site_showhook_tbl implements Db_tbl {
|
||||
this.fld_subscribers = flds.Add_str("subscribers", 2048);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_name)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_skin_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_skin"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_skin"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_code, fld_dflt, fld_name, fld_unusable;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -31,8 +31,8 @@ class Site_skin_tbl implements Db_tbl {
|
||||
this.fld_unusable = flds.Add_bool("unusable");
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_code)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_code)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_specialpagealias_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_specialpagealias"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_specialpagealias"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_realname, fld_aliases;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_specialpagealias_tbl implements Db_tbl {
|
||||
this.fld_aliases = flds.Add_str("aliases", 2048);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main")), fld_site_abrv, fld_realname)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main")), fld_site_abrv, fld_realname)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_statistic_tbl implements Db_tbl {
|
||||
private static final String tbl_name = "site_statistic"; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private static final String tbl_name = "site_statistic"; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_pages, fld_articles, fld_edits, fld_images, fld_users, fld_activeusers, fld_admins, fld_jobs, fld_queued_massmessages;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -36,8 +36,8 @@ class Site_statistic_tbl implements Db_tbl {
|
||||
this.fld_queued_massmessages = flds.Add_long("queued_massmessages");
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.bldrs.wms.sites; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wms.*;
|
||||
import gplx.dbs.*;
|
||||
class Site_val_tbl implements Db_tbl {
|
||||
private String tbl_name; private final Db_meta_fld_list flds = new Db_meta_fld_list();
|
||||
private String tbl_name; private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld_site_abrv, fld_val;
|
||||
private final Db_conn conn;
|
||||
private Db_stmt stmt_select, stmt_insert, stmt_delete;
|
||||
@@ -29,8 +29,8 @@ class Site_val_tbl implements Db_tbl {
|
||||
this.fld_val = flds.Add_str("val", 255);
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_name(tbl_name, Db_meta_idx.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_val)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Db_meta_fld.Ary_empty).Exec_delete();}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, Dbmeta_idx_itm.Bld_idx_name(tbl_name, "main"), fld_site_abrv, fld_val)));}
|
||||
public void Delete_all() {conn.Stmt_delete(tbl_name, Dbmeta_fld_itm.Str_ary_empty).Exec_delete();}
|
||||
public void Rls() {
|
||||
stmt_select = Db_stmt_.Rls(stmt_select);
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
|
||||
@@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.drds; import gplx.*; import gplx.xowa.*;
|
||||
import gplx.xowa.drds.pages.*; import gplx.xowa.drds.files.*;
|
||||
import gplx.xowa.apps.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.xowa.files.gui.*;
|
||||
import gplx.xowa.specials.search.*;
|
||||
import gplx.xowa.wikis.nss.*; import gplx.xowa.files.gui.*;
|
||||
import gplx.xowa.specials.search.*; import gplx.xowa.specials.randoms.*;
|
||||
public class Xod_app {
|
||||
private final Xoav_app app;
|
||||
private final Xod_page_mgr page_mgr = new Xod_page_mgr();
|
||||
@@ -27,22 +27,24 @@ public class Xod_app {
|
||||
public Xod_app(Xoav_app app) {
|
||||
this.app = app;
|
||||
}
|
||||
public int Get_wiki_count() {
|
||||
public int Wikis__count() {
|
||||
int rv = app.Wiki_mgri().Count();
|
||||
return rv - 1; // ignore home wiki
|
||||
}
|
||||
public Xow_wiki Get_wiki(String wiki_domain) {
|
||||
Xow_wiki rv = app.Wiki_mgri().Get_by_key_or_make_init_y(Bry_.new_u8(wiki_domain));
|
||||
if (rv.Data__core_mgr() == null) rv.Init_by_wiki();
|
||||
public Xow_wiki Wikis__get_by_domain(String wiki_domain) {
|
||||
Xow_wiki rv = app.Wiki_mgri().Get_by_or_make_init_y(Bry_.new_u8(wiki_domain));
|
||||
if (rv != null && rv.Data__core_mgr() == null) rv.Init_by_wiki();
|
||||
return rv;
|
||||
}
|
||||
public Xod_page_itm Get_page(Xow_wiki wiki, Xoa_url page_url) {
|
||||
public Xod_page_itm Wiki__get_by_url(Xow_wiki wiki, Xoa_url page_url) {
|
||||
return page_mgr.Get_page(wiki, page_url);
|
||||
}
|
||||
public void Load_files(Xow_wiki wiki, Xod_page_itm pg, Xog_js_wkr js_wkr) {
|
||||
file_mgr.Load_files(wiki, pg, js_wkr);
|
||||
public Xod_page_itm Wiki__get_random(Xow_wiki wiki, Xow_ns ns) {
|
||||
byte[] random_ttl_bry = wiki.Data__core_mgr().Tbl__page().Select_random(ns);
|
||||
Xoa_url url = wiki.Utl__url_parser().Parse(random_ttl_bry);
|
||||
return Wiki__get_by_url(wiki, url);
|
||||
}
|
||||
public String[] Search_titles(Cancelable cancelable, Xow_wiki wiki, Xows_ui_async ui_async, String search) {
|
||||
public String[] Wiki__search(Cancelable cancelable, Xow_wiki wiki, Xows_ui_async ui_async, String search) {
|
||||
Xows_db_wkr search_wkr = new Xows_db_wkr();
|
||||
Xows_db_row[] rows = search_wkr.Search_by_drd(cancelable, wiki, ui_async, Bry_.new_u8(search), 50);
|
||||
int len = rows.length;
|
||||
@@ -52,4 +54,7 @@ public class Xod_app {
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
public void Page__load_files(Xow_wiki wiki, Xod_page_itm pg, Xog_js_wkr js_wkr) {
|
||||
file_mgr.Load_files(wiki, pg, js_wkr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,9 +41,9 @@ class Xod_app_tstr {
|
||||
Io_mgr.Instance.InitEngine_mem();
|
||||
}
|
||||
public void Test__get(String ttl, Xod_page_itm expd) {
|
||||
Xow_wiki wiki = drd_provider.Get_wiki("en.wikipedia.org");
|
||||
Xow_wiki wiki = drd_provider.Wikis__get_by_domain("en.wikipedia.org");
|
||||
Xoa_url page_url = wiki.Utl__url_parser().Parse(Bry_.new_u8(ttl));
|
||||
Xod_page_itm itm = drd_provider.Get_page(wiki, page_url);
|
||||
Xod_page_itm itm = drd_provider.Wiki__get_by_url(wiki, page_url);
|
||||
Tfds.Eq(expd.To_str(), itm.To_str());
|
||||
}
|
||||
public Xod_page_itm Make_page(int page_id, String ttl, String modified_on, Xoh_section_itm... section_ary) {
|
||||
|
||||
@@ -15,14 +15,24 @@ 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.files; import gplx.*; import gplx.xowa.*;
|
||||
public class Xoa_file_mgr {
|
||||
private final List_adp list = List_adp_.new_();
|
||||
public void Clear() {list.Clear();}
|
||||
public boolean Check_cache(Xof_fsdb_itm itm) {
|
||||
return false;
|
||||
}
|
||||
public void Queue_for_viewing(Xof_fsdb_itm itm) {
|
||||
list.Add(itm);
|
||||
}
|
||||
}
|
||||
//namespace gplx.xowa.files {
|
||||
// using gplx.xowa.files.caches;
|
||||
// public class Xoa_file_mgr {
|
||||
// private final List_adp list = List_adp_.new_();
|
||||
// public void Clear() {list.Clear();}
|
||||
// public boolean Check_cache(Xow_wiki wiki, byte[] page_url, Xof_fsdb_itm fsdb_itm) {
|
||||
// fsdb_itm.Init_at_cache(0, 0, null);
|
||||
//// Xou_cache_mgr cache_mgr = new Xou_cache_mgr(null, null, null);
|
||||
//// Xou_cache_itm cache_itm = cache_mgr.Get_or_null(fsdb_itm);
|
||||
//// if (cache_itm == null) {
|
||||
//// fsdb_itm.Init_at_cache(Bool_.N_byte, 0, 0, null);
|
||||
//// return false;
|
||||
//// }
|
||||
//// else {
|
||||
//// fsdb_itm.Init_at_cache(Bool_.Y_byte, cache_itm.Html_w(), cache_itm.Html_h(), cache_itm.File_url());
|
||||
//// return true;
|
||||
//// }
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
@@ -38,6 +38,7 @@ public interface Xof_file_itm {
|
||||
boolean File_is_orig();
|
||||
int File_w();
|
||||
boolean File_exists();
|
||||
boolean File_exists_in_cache();
|
||||
int Html_uid();
|
||||
byte Html_elem_tid();
|
||||
int Html_w();
|
||||
@@ -60,5 +61,5 @@ public interface Xof_file_itm {
|
||||
void Init_at_gallery_bgn(int html_w, int html_h, int file_w);
|
||||
void Init_at_gallery_end(int html_w, int html_h, Io_url html_view_url, Io_url html_orig_url);
|
||||
|
||||
boolean Meta_is_new();
|
||||
boolean Dbmeta_is_new();
|
||||
}
|
||||
|
||||
@@ -51,10 +51,15 @@ public class Xof_file_wkr implements Gfo_thread_wkr {
|
||||
Exec_by_fsdb(fsdb);
|
||||
}
|
||||
private void Exec_by_fsdb(Xof_fsdb_itm fsdb) {
|
||||
fsdb.Orig_exists_n_();
|
||||
Xof_orig_itm orig = orig_mgr.Find_by_ttl_or_null(fsdb.Lnki_ttl()); if (orig == Xof_orig_itm.Null) return;
|
||||
Eval_orig(orig, fsdb, url_bldr, repo_mgr, img_size);
|
||||
Show_img(fsdb, usr_dlg, bin_mgr, mnt_mgr, cache_mgr, repo_mgr, js_wkr, img_size, url_bldr, hpg);
|
||||
try {
|
||||
if (fsdb.File_exists_in_cache()) return;
|
||||
fsdb.Orig_exists_n_();
|
||||
Xof_orig_itm orig = orig_mgr.Find_by_ttl_or_null(fsdb.Lnki_ttl()); if (orig == Xof_orig_itm.Null) return;
|
||||
Eval_orig(orig, fsdb, url_bldr, repo_mgr, img_size);
|
||||
Show_img(fsdb, usr_dlg, bin_mgr, mnt_mgr, cache_mgr, repo_mgr, js_wkr, img_size, url_bldr, hpg);
|
||||
} catch (Exception e) {
|
||||
usr_dlg.Warn_many("", "", "file.unknown: err=~{0}", Err_.Message_gplx_full(e));
|
||||
}
|
||||
}
|
||||
public static boolean Show_img(Xof_fsdb_itm fsdb, Gfo_usr_dlg usr_dlg, Xof_bin_mgr bin_mgr, Fsm_mnt_mgr mnt_mgr, Xou_cache_mgr cache_mgr, Xow_repo_mgr repo_mgr, Xog_js_wkr js_wkr, Xof_img_size img_size, Xof_url_bldr url_bldr, Xoa_page page) {
|
||||
try {
|
||||
|
||||
@@ -50,9 +50,10 @@ public class Xof_fsdb_itm implements Xof_file_itm {
|
||||
public boolean File_is_orig() {return file_is_orig;} private boolean file_is_orig;
|
||||
public int File_w() {return file_w;} private int file_w;
|
||||
public long File_size() {return file_size;} private long file_size;
|
||||
public boolean Meta_is_new() {return false;}
|
||||
public boolean Dbmeta_is_new() {return false;}
|
||||
public boolean Orig_exists() {return orig_exists;} public void Orig_exists_y_() {orig_exists = Bool_.Y;} public void Orig_exists_n_() {orig_exists = Bool_.N;} private boolean orig_exists;
|
||||
public boolean File_exists() {return file_exists;} public void File_exists_y_() {file_exists = Bool_.Y;} public void File_exists_n_() {file_exists = Bool_.N;} public void File_exists_(boolean v) {file_exists = v;} private boolean file_exists;
|
||||
public boolean File_exists_in_cache() {return file_exists_in_cache;} private boolean file_exists_in_cache;
|
||||
public boolean File_resized() {return file_resized;} public void File_resized_y_() {file_resized = Bool_.Y;} private boolean file_resized;
|
||||
public boolean Fsdb_insert() {return fsdb_insert;} public void Fsdb_insert_y_() {fsdb_insert = true;} private boolean fsdb_insert;
|
||||
public int Xfer_idx() {return xfer_idx;} private int xfer_idx;
|
||||
@@ -117,6 +118,10 @@ public class Xof_fsdb_itm implements Xof_file_itm {
|
||||
public void Init_at_xfer(int idx, int len) {
|
||||
this.xfer_idx = idx; this.xfer_len = len;
|
||||
}
|
||||
public void Init_at_cache(boolean file_exists_in_cache, int w, int h, Io_url view_url) {
|
||||
this.file_exists_in_cache = file_exists_in_cache;
|
||||
this.html_w = w; this.html_h = h; this.html_view_url = view_url;
|
||||
}
|
||||
public void Change_repo(byte orig_repo_id, byte[] orig_repo_name) {
|
||||
this.orig_repo_id = orig_repo_id; this.orig_repo_name = orig_repo_name;
|
||||
}
|
||||
|
||||
@@ -62,7 +62,8 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
public int Html_gallery_mgr_h() {return html_gallery_mgr_h;} private int html_gallery_mgr_h;
|
||||
public Js_img_wkr Html_img_wkr() {return html_img_wkr;} private Js_img_wkr html_img_wkr;
|
||||
public boolean File_exists() {return file_exists;} private boolean file_exists;
|
||||
public boolean Meta_is_new() {return meta_itm.State_new();}
|
||||
public boolean File_exists_in_cache() {return false;}
|
||||
public boolean Dbmeta_is_new() {return meta_itm.State_new();}
|
||||
public void Html_elem_tid_(byte v) {html_elem_tid = v;}
|
||||
public void Html_size_(int w, int h) {this.html_w = w; this.html_h = h;}
|
||||
public void Html_gallery_mgr_h_(int v) {html_gallery_mgr_h = v;}
|
||||
@@ -120,7 +121,7 @@ public class Xof_xfer_itm implements Xof_file_itm {
|
||||
this.orig_ttl_md5 = Xof_file_wkr_.Md5_fast(v);
|
||||
}
|
||||
|
||||
public Xof_meta_itm Meta_itm() {return meta_itm;} private Xof_meta_itm meta_itm;
|
||||
public Xof_meta_itm Dbmeta_itm() {return meta_itm;} private Xof_meta_itm meta_itm;
|
||||
public void Trg_repo_itm_(Xof_repo_itm v) {
|
||||
trg_repo_itm = v;
|
||||
trg_repo_root = trg_repo_itm == null ? Bry_.Empty : trg_repo_itm.Root_http();
|
||||
|
||||
@@ -68,7 +68,7 @@ public class Xow_file_mgr implements GfoInvkAble {
|
||||
}
|
||||
public static final byte Version_null = Byte_.Max_value_127, Version_1 = 1, Version_2 = 2;
|
||||
public Xowe_repo_mgr Repo_mgr() {return repo_mgr;} private Xowe_repo_mgr repo_mgr;
|
||||
public Xof_meta_mgr Meta_mgr() {return meta_mgr;} private Xof_meta_mgr meta_mgr;
|
||||
public Xof_meta_mgr Dbmeta_mgr() {return meta_mgr;} private Xof_meta_mgr meta_mgr;
|
||||
public Xof_cfg_download Cfg_download() {return cfg_download;} private Xof_cfg_download cfg_download = new Xof_cfg_download();
|
||||
public void Cfg_set(String grp, String key, String val) { // TEST: should only be called by tests
|
||||
if (test_grps == null) test_grps = Hash_adp_.new_();
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
|
||||
class Xofc_dir_tbl implements Rls_able {
|
||||
private String tbl_name = "file_cache_dir"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "file_cache_dir"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_id, fld_name;
|
||||
private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_stmt;
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
@@ -31,8 +31,8 @@ class Xofc_dir_tbl implements Rls_able {
|
||||
fld_id = flds.Add_int_pkey(fld_prefix + "id");
|
||||
fld_name = flds.Add_str(fld_prefix + "name", 255);
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_normal_by_tbl(tbl_name, "name", fld_name)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "name", fld_name)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -73,7 +73,7 @@ class Xofc_dir_tbl implements Rls_able {
|
||||
}
|
||||
public void Select_all(List_adp list) {
|
||||
list.Clear();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empty).Exec_select__rls_auto();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next())
|
||||
list.Add(new_itm(rdr));
|
||||
|
||||
@@ -120,7 +120,7 @@ class Xofc_fil_mgr {
|
||||
private void Fsys_delete(Xof_url_bldr url_bldr, Xoae_wiki_mgr wiki_mgr, Xoa_repo_mgr repo_mgr, Xofc_dir_mgr dir_mgr, Xofc_fil_itm itm) {
|
||||
byte mode_id = itm.Is_orig() ? Xof_repo_itm_.Mode_orig : Xof_repo_itm_.Mode_thumb;
|
||||
byte[] wiki_domain = dir_mgr.Get_by_id(itm.Dir_id()).Name();
|
||||
Xowe_wiki wiki = wiki_mgr.Get_by_key_or_make(wiki_domain);
|
||||
Xowe_wiki wiki = wiki_mgr.Get_by_or_make(wiki_domain);
|
||||
wiki.Init_assert();
|
||||
Xof_repo_itm trg_repo = repo_mgr.Get_by_primary(wiki_domain);
|
||||
byte[] ttl = itm.Name();
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
|
||||
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*;
|
||||
class Xofc_fil_tbl implements Rls_able {
|
||||
private String tbl_name = "file_cache_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "file_cache_fil"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_uid, fld_dir_id, fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_page, fld_ext, fld_size, fld_cache_time;
|
||||
private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_itm_stmt, select_itm_v2_stmt;
|
||||
public Db_conn Conn() {return conn;}
|
||||
@@ -37,7 +37,7 @@ class Xofc_fil_tbl implements Rls_able {
|
||||
fld_h = flds.Add_int(fld_prefix + "h");
|
||||
fld_time = flds.Add_int(fld_prefix + "thumbtime");
|
||||
if (schema_is_1) {
|
||||
fld_page = Db_meta_fld.Key_null;
|
||||
fld_page = Dbmeta_fld_itm.Key_null;
|
||||
}
|
||||
else {
|
||||
fld_page = flds.Add_int(fld_prefix + "page");
|
||||
@@ -46,8 +46,8 @@ class Xofc_fil_tbl implements Rls_able {
|
||||
fld_size = flds.Add_long(fld_prefix + "size");
|
||||
fld_cache_time = flds.Add_long("cache_time");
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_normal_by_tbl(tbl_name, "fil", fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_cache_time, fld_uid)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "fil", fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_cache_time, fld_uid)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -122,7 +122,7 @@ class Xofc_fil_tbl implements Rls_able {
|
||||
}
|
||||
public void Select_all(Bry_bfr fil_key_bldr, Ordered_hash hash) {
|
||||
hash.Clear();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empty).Exec_select__rls_auto();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next()) {
|
||||
Xofc_fil_itm fil_itm = new_itm(rdr);
|
||||
|
||||
23
400_xowa/src/gplx/xowa/files/caches/Xou_cache_finder.java
Normal file
23
400_xowa/src/gplx/xowa/files/caches/Xou_cache_finder.java
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
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.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
|
||||
public interface Xou_cache_finder {
|
||||
boolean Find(Xow_wiki wiki, byte[] page_url, Xof_fsdb_itm fsdb_itm);
|
||||
void Clear();
|
||||
void Add(Xof_fsdb_itm fsdb_itm);
|
||||
}
|
||||
79
400_xowa/src/gplx/xowa/files/caches/Xou_cache_finder_.java
Normal file
79
400_xowa/src/gplx/xowa/files/caches/Xou_cache_finder_.java
Normal file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
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.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
|
||||
import gplx.xowa.files.repos.*;
|
||||
public class Xou_cache_finder_ {
|
||||
public static final Xou_cache_finder Noop = new Xou_cache_finder_noop();
|
||||
public static Xou_cache_finder New_mem() {return new Xou_cache_finder_mem();}
|
||||
public static Xou_cache_finder New_db(Xou_cache_mgr cache_mgr) {return new Xou_cache_finder_db(cache_mgr);}
|
||||
}
|
||||
class Xou_cache_finder_noop implements Xou_cache_finder {
|
||||
public boolean Find(Xow_wiki wiki, byte[] page_url, Xof_fsdb_itm fsdb_itm) {
|
||||
fsdb_itm.Init_at_cache(false, 0, 0, Io_url_.Empty);
|
||||
return false;
|
||||
}
|
||||
public void Clear() {}
|
||||
public void Add(Xof_fsdb_itm fsdb_itm) {}
|
||||
}
|
||||
class Xou_cache_finder_mem implements Xou_cache_finder {
|
||||
private final Ordered_hash hash = Ordered_hash_.New_bry();
|
||||
private final Bry_bfr tmp_bfr = Bry_bfr.new_(255);
|
||||
private final Xof_img_size img_size = new Xof_img_size();
|
||||
private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2();
|
||||
public boolean Find(Xow_wiki wiki, byte[] page_url, Xof_fsdb_itm cur) {
|
||||
byte[] key = Xou_cache_itm.Key_gen(tmp_bfr, cur.Lnki_wiki_abrv(), cur.Lnki_ttl(), cur.Lnki_type(), cur.Lnki_upright(), cur.Lnki_w(), cur.Lnki_h(), cur.Lnki_time(), cur.Lnki_page(), cur.User_thumb_w());
|
||||
Xof_fsdb_itm mem = (Xof_fsdb_itm)hash.Get_by(key);
|
||||
if (mem == null) {
|
||||
cur.Init_at_cache(false, 0, 0, Io_url_.Empty);
|
||||
return false;
|
||||
}
|
||||
Xof_repo_itm repo = wiki.File__repo_mgr().Get_trg_by_id_or_null(mem.Orig_repo_id(), mem.Lnki_ttl(), page_url);
|
||||
mem.Init_at_html(Xof_exec_tid.Tid_wiki_page, img_size, repo, url_bldr);
|
||||
cur.Init_at_cache(true, mem.Html_w(), mem.Html_h(), mem.Html_view_url());
|
||||
return true;
|
||||
}
|
||||
public void Clear() {}
|
||||
public void Add(Xof_fsdb_itm cur) {
|
||||
byte[] key = Xou_cache_itm.Key_gen(tmp_bfr, cur.Lnki_wiki_abrv(), cur.Lnki_ttl(), cur.Lnki_type(), cur.Lnki_upright(), cur.Lnki_w(), cur.Lnki_h(), cur.Lnki_time(), cur.Lnki_page(), cur.User_thumb_w());
|
||||
hash.Add(key, cur);
|
||||
}
|
||||
}
|
||||
class Xou_cache_finder_db implements Xou_cache_finder {
|
||||
private final Xou_cache_mgr cache_mgr;
|
||||
private final Xof_img_size img_size = new Xof_img_size(); private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2();
|
||||
public Xou_cache_finder_db(Xou_cache_mgr cache_mgr) {this.cache_mgr = cache_mgr;}
|
||||
public boolean Find(Xow_wiki wiki, byte[] page_url, Xof_fsdb_itm cur) {
|
||||
Xou_cache_itm cache_itm = cache_mgr.Get_or_null(cur);
|
||||
if (cache_itm != null) {
|
||||
Xof_repo_itm repo = wiki.File__repo_mgr().Get_trg_by_id_or_null(cache_itm.Orig_repo_id(), cur.Lnki_ttl(), page_url);
|
||||
if (repo != null) {// unknown repo; shouldn't happen, but exit, else null ref
|
||||
cur.Init_at_orig((byte)cache_itm.Orig_repo_id(), repo.Wiki_domain(), cache_itm.Orig_ttl(), cache_itm.Orig_ext_itm(), cache_itm.Orig_w(), cache_itm.Orig_h(), Bry_.Empty);
|
||||
cur.Init_at_html(Xof_exec_tid.Tid_wiki_page, img_size, repo, url_bldr);
|
||||
if (Io_mgr.Instance.ExistsFil(cur.Html_view_url())) {
|
||||
cache_itm.Update_view_stats();
|
||||
cur.Init_at_cache(true, cur.Html_w(), cur.Html_h(), cur.Html_view_url());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
cur.Init_at_cache(false, 0, 0, Io_url_.Empty);
|
||||
return false;
|
||||
}
|
||||
public void Clear() {}
|
||||
public void Add(Xof_fsdb_itm cur) {}
|
||||
}
|
||||
@@ -160,7 +160,7 @@ public class Xou_cache_mgr {
|
||||
}
|
||||
private Io_url Calc_url(Xou_cache_itm cache) {
|
||||
byte[] wiki_domain = Xow_abrv_xo_.To_itm(cache.Lnki_wiki_abrv()).Domain_bry();
|
||||
Xow_wiki wiki = wiki_mgr.Get_by_key_or_make_init_y(wiki_domain); if (wiki == null) return Io_url_.Empty; // wiki is not available; should only happen in read-only mode; DATE:2015-05-23
|
||||
Xow_wiki wiki = wiki_mgr.Get_by_or_make_init_y(wiki_domain); if (wiki == null) return Io_url_.Empty; // wiki is not available; should only happen in read-only mode; DATE:2015-05-23
|
||||
Xof_repo_itm trg_repo = wiki.File__repo_mgr().Get_trg_by_id_or_null(cache.Orig_repo_id(), cache.Lnki_ttl(), Bry_.Empty);
|
||||
if (trg_repo == null) return Io_url_.Empty;
|
||||
byte[] orig_ttl = cache.Orig_ttl();
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xou_cache_tbl implements Rls_able {
|
||||
private String tbl_name = "file_cache"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "file_cache"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String
|
||||
fld_lnki_wiki_abrv, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page, fld_user_thumb_w
|
||||
, fld_orig_repo, fld_orig_ttl, fld_orig_ext, fld_orig_w, fld_orig_h
|
||||
@@ -65,10 +65,10 @@ public class Xou_cache_tbl implements Rls_able {
|
||||
select_stmt = Db_stmt_.Rls(select_stmt);
|
||||
}
|
||||
public void Create_tbl() {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_lnki_wiki_abrv, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page, fld_user_thumb_w)
|
||||
, Db_meta_idx.new_normal_by_tbl(tbl_name, "size", fld_file_size)
|
||||
, Db_meta_idx.new_normal_by_tbl(tbl_name, "date", fld_view_date)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "main", fld_lnki_wiki_abrv, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page, fld_user_thumb_w)
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "size", fld_file_size)
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "date", fld_view_date)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
@@ -90,7 +90,7 @@ public class Xou_cache_tbl implements Rls_able {
|
||||
}
|
||||
public void Select_all(Bry_bfr fil_key_bldr, Ordered_hash hash) {
|
||||
hash.Clear();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empty).Exec_select__rls_auto();
|
||||
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Exec_select__rls_auto();
|
||||
try {
|
||||
while (rdr.Move_next()) {
|
||||
Xou_cache_itm itm = new_itm(rdr);
|
||||
@@ -112,7 +112,7 @@ public class Xou_cache_tbl implements Rls_able {
|
||||
itm.Db_state_(Db_cmd_mode.Tid_ignore);
|
||||
} catch (Exception e) {stmt_bldr.Rls(); throw Err_.new_exc(e, "xo", "db_save failed");}
|
||||
}
|
||||
@gplx.Internal protected Db_rdr Select_all_for_test() {return conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empty).Exec_select__rls_manual();}
|
||||
@gplx.Internal protected Db_rdr Select_all_for_test() {return conn.Stmt_select(tbl_name, flds, Dbmeta_fld_itm.Str_ary_empty).Exec_select__rls_manual();}
|
||||
private void Db_save_crt(Db_stmt stmt, Xou_cache_itm itm, boolean insert) {
|
||||
if (insert) {
|
||||
stmt.Val_bry_as_str (fld_lnki_wiki_abrv , itm.Lnki_wiki_abrv())
|
||||
|
||||
@@ -52,7 +52,7 @@ public class Xof_commons_image_tbl implements Rls_able {
|
||||
);
|
||||
} finally {rdr.Rls();}
|
||||
}
|
||||
private static final String tbl_name = "image"; private static final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private static final String tbl_name = "image"; private static final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private static final String
|
||||
fld_img_name = flds.Add_str("img_name", 255) // varbinary(255)
|
||||
, fld_img_media_type = flds.Add_str("img_media_type", 255) // enum('UNKNOWN','BITMAP','DRAWING','AUDIO','VIDEO','MULTIMEDIA','OFFICE','TEXT','EXECUTABLE','ARCHIVE')"
|
||||
@@ -64,9 +64,9 @@ public class Xof_commons_image_tbl implements Rls_able {
|
||||
, fld_img_ext_id = flds.Add_int("img_ext_id") // xowa
|
||||
, fld_img_timestamp = flds.Add_str("img_timestamp", 255) // 20140101155749
|
||||
;
|
||||
public static Db_meta_tbl new_meta() {
|
||||
return Db_meta_tbl.new_(tbl_name, flds.To_fld_ary()
|
||||
, Db_meta_idx.new_normal_by_tbl(tbl_name, "name", fld_img_name, fld_img_timestamp)
|
||||
public static Dbmeta_tbl_itm new_meta() {
|
||||
return Dbmeta_tbl_itm.New(tbl_name, flds.To_fld_ary()
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "name", fld_img_name, fld_img_timestamp)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*;
|
||||
import gplx.dbs.*;
|
||||
public class Orig_fil_tbl implements Rls_able {
|
||||
private String tbl_name = "orig_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private String tbl_name = "orig_fil"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private String fld_uid, fld_name, fld_ext_id, fld_w, fld_h, fld_dir_url;
|
||||
private Db_conn conn; private Db_stmt stmt_insert, stmt_select;
|
||||
public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) {
|
||||
@@ -34,8 +34,8 @@ public class Orig_fil_tbl implements Rls_able {
|
||||
fld_h = flds.Add_int(fld_prefix + "h");
|
||||
fld_dir_url = flds.Add_str(fld_prefix + "dir_url", 1024); // NOTE: don't put dir in separate table; note that entire root_dir_wkr is not built to scale due to need for recursively loading all files
|
||||
if (created) {
|
||||
Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds
|
||||
, Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_name)
|
||||
Dbmeta_tbl_itm meta = Dbmeta_tbl_itm.New(tbl_name, flds
|
||||
, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "main", fld_name)
|
||||
);
|
||||
conn.Ddl_create_tbl(meta);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import gplx.core.primitives.*;
|
||||
import gplx.dbs.*; import gplx.dbs.utls.*;
|
||||
import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*;
|
||||
public class Xof_orig_tbl implements Rls_able {
|
||||
private final String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_repo, fld_ttl, fld_status, fld_ext, fld_w, fld_h, fld_redirect;
|
||||
private final Db_conn conn; private final Xof_orig_tbl__in_wkr select_in_wkr = new Xof_orig_tbl__in_wkr();
|
||||
public Db_conn Conn() {return conn;}
|
||||
@@ -40,7 +40,7 @@ public class Xof_orig_tbl implements Rls_able {
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Rls() {}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_normal_by_tbl(tbl_name, "main", fld_ttl)));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, "main", fld_ttl)));}
|
||||
public void Select_by_list(Ordered_hash rv, List_adp itms) {select_in_wkr.Init(rv, itms).Select_in(Cancelable_.Never, conn, 0, itms.Count());}
|
||||
public Xof_orig_itm Select_itm(byte[] ttl) {
|
||||
Xof_orig_itm rv = Xof_orig_itm.Null;
|
||||
@@ -87,9 +87,9 @@ public class Xof_orig_tbl implements Rls_able {
|
||||
private static final byte Status_found = 1;
|
||||
}
|
||||
class Xof_orig_tbl__in_wkr extends Db_in_wkr__base {
|
||||
private Xof_orig_tbl tbl; private String tbl_name; private Db_meta_fld_list flds; private String fld_ttl;
|
||||
private Xof_orig_tbl tbl; private String tbl_name; private Dbmeta_fld_list flds; private String fld_ttl;
|
||||
private List_adp itms; private Ordered_hash rv;
|
||||
public void Ctor(Xof_orig_tbl tbl, String tbl_name, Db_meta_fld_list flds, String fld_ttl) {
|
||||
public void Ctor(Xof_orig_tbl tbl, String tbl_name, Dbmeta_fld_list flds, String fld_ttl) {
|
||||
this.tbl = tbl; this.tbl_name = tbl_name; this.flds = flds; this.fld_ttl = fld_ttl;
|
||||
}
|
||||
public Xof_orig_tbl__in_wkr Init(Ordered_hash rv, List_adp itms) {this.itms = itms; this.rv = rv; return this;}
|
||||
|
||||
@@ -28,8 +28,7 @@ public class Xofw_wiki_wkr_base implements Xofw_wiki_finder {
|
||||
Xof_repo_pair repo_pair = (Xof_repo_pair)repo_pairs.Get_at(i);
|
||||
byte[] wiki_key = repo_pair.Src().Wiki_domain();
|
||||
if (repo_pair.Src().Wmf_api()) continue;
|
||||
Xowe_wiki repo_wiki = wiki_mgr.Get_by_key_or_null(wiki_key);
|
||||
if (repo_wiki == null) {continue;}
|
||||
Xowe_wiki repo_wiki = (Xowe_wiki)wiki_mgr.Get_by_or_null(wiki_key); if (repo_wiki == null) {continue;}
|
||||
Xoa_ttl ttl = Xoa_ttl.parse(repo_wiki, ttl_bry);
|
||||
Xow_ns file_ns = repo_wiki.Ns_mgr().Ns_file();
|
||||
boolean found = repo_wiki.Db_mgr().Load_mgr().Load_by_ttl(tmp_db_page, file_ns, ttl.Page_db());
|
||||
@@ -50,8 +49,7 @@ public class Xofw_wiki_wkr_base implements Xofw_wiki_finder {
|
||||
for (int i = 0; i < repo_pairs_len; i++) {
|
||||
Xof_repo_pair repo_pair = (Xof_repo_pair)repo_pairs.Get_at(i);
|
||||
byte[] src_wiki_key = repo_pair.Src().Wiki_domain();
|
||||
Xowe_wiki src_wiki = wiki_mgr.Get_by_key_or_null(src_wiki_key);
|
||||
if (src_wiki == null) continue; // src_wiki defined as repo_pair in cfg, but it has not been downloaded; continue; EX: commons set up but not downloaded
|
||||
Xowe_wiki src_wiki = (Xowe_wiki)wiki_mgr.Get_by_or_null(src_wiki_key); if (src_wiki == null) continue; // src_wiki defined as repo_pair in cfg, but it has not been downloaded; continue; EX: commons set up but not downloaded
|
||||
boolean found = src_wiki.Db_mgr().Load_mgr().Load_by_ttl(tmp_db_page, file_ns, ttl_db_key);
|
||||
if (!found) continue; // ttl does not exist in src_wiki; continue; EX: file does not exist in commons, but exists in en_wiki
|
||||
byte[] redirect = Get_redirect(src_wiki, file_ns, tmp_db_page);
|
||||
|
||||
@@ -70,7 +70,7 @@ public class Xowe_repo_mgr implements Xow_repo_mgr, GfoInvkAble {
|
||||
public Xof_repo_pair[] Repos_ary() {if (repos_ary == null) repos_ary = (Xof_repo_pair[])repos.To_ary(Xof_repo_pair.class); return repos_ary;} private Xof_repo_pair[] repos_ary;
|
||||
public boolean Xfer_by_meta(Xof_xfer_itm xfer_itm, Xof_xfer_queue queue) {
|
||||
byte[] ttl = xfer_itm.Lnki_ttl();
|
||||
Xof_meta_itm meta_itm = xfer_itm.Meta_itm();
|
||||
Xof_meta_itm meta_itm = xfer_itm.Dbmeta_itm();
|
||||
boolean chk_all = false;
|
||||
byte[] src_wiki_key = wiki.Domain_bry();
|
||||
if (meta_itm.State_new()) {
|
||||
@@ -107,9 +107,9 @@ public class Xowe_repo_mgr implements Xow_repo_mgr, GfoInvkAble {
|
||||
byte[] trg_wiki_key = Bry_.Empty;
|
||||
if (repo_idx != Xof_meta_itm.Repo_unknown) {
|
||||
trg_wiki_key = wiki.File_mgr().Repo_mgr().Repos_get_at(repo_idx).Wiki_domain();
|
||||
trg_wiki = wiki.Appe().Wiki_mgr().Get_by_key_or_make(trg_wiki_key);
|
||||
trg_wiki = wiki.Appe().Wiki_mgr().Get_by_or_make(trg_wiki_key);
|
||||
}
|
||||
Xof_meta_itm redirect_meta = trg_wiki.File_mgr().Meta_mgr().Get_itm_or_new(redirect, md5);
|
||||
Xof_meta_itm redirect_meta = trg_wiki.File_mgr().Dbmeta_mgr().Get_itm_or_new(redirect, md5);
|
||||
if (tmp_rslt.Redirect() == Xop_redirect_mgr.Redirect_null_bry) {
|
||||
if (redirect_meta.State_new()) {
|
||||
if (repo_idx == Xof_meta_itm.Repo_unknown) {
|
||||
@@ -152,8 +152,8 @@ public class Xowe_repo_mgr implements Xow_repo_mgr, GfoInvkAble {
|
||||
boolean make = xfer_mgr.Make_file(wiki);
|
||||
if (make) {
|
||||
xfer_itm.Trg_repo_itm_(pair.Trg());
|
||||
if (second_chance && xfer_itm.Meta_itm().Vrtl_repo() == 0) // second_chance and item found; change vrtl_repo from commons back to same; EX: tarball and [[Image:Rembrandt De aartsengel verlaat Tobias en zijn gezin. 1637.jpg|120px]]
|
||||
xfer_itm.Meta_itm().Vrtl_repo_(Xof_meta_itm.Repo_same);
|
||||
if (second_chance && xfer_itm.Dbmeta_itm().Vrtl_repo() == 0) // second_chance and item found; change vrtl_repo from commons back to same; EX: tarball and [[Image:Rembrandt De aartsengel verlaat Tobias en zijn gezin. 1637.jpg|120px]]
|
||||
xfer_itm.Dbmeta_itm().Vrtl_repo_(Xof_meta_itm.Repo_same);
|
||||
return true; // file was made; return; if not continue looking at other repos
|
||||
}
|
||||
}
|
||||
@@ -211,7 +211,7 @@ public class Xowe_repo_mgr implements Xow_repo_mgr, GfoInvkAble {
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xof_repo_pair pair = (Xof_repo_pair)repos.Get_at(i);
|
||||
if (i != repo_idx) { // try other wikis
|
||||
file.Meta_itm().Orig_exists_(Xof_meta_itm.Exists_unknown); // always reset orig exists; this may have been flagged to missing above and should be cleared
|
||||
file.Dbmeta_itm().Orig_exists_(Xof_meta_itm.Exists_unknown); // always reset orig exists; this may have been flagged to missing above and should be cleared
|
||||
make_pass = Xfer_file_exec(file, pair, i);
|
||||
if (make_pass) break;
|
||||
}
|
||||
@@ -220,7 +220,7 @@ public class Xowe_repo_mgr implements Xow_repo_mgr, GfoInvkAble {
|
||||
}
|
||||
private boolean Xfer_file_exec(Xof_xfer_itm file, Xof_repo_pair pair, int repo_idx) {
|
||||
xfer_mgr.Atrs_by_itm(file, pair.Src(), pair.Trg());
|
||||
Xof_meta_itm meta_itm = xfer_mgr.Meta_itm();
|
||||
Xof_meta_itm meta_itm = xfer_mgr.Dbmeta_itm();
|
||||
boolean rv = xfer_mgr.Make_file(wiki);
|
||||
if (rv) {
|
||||
meta_itm.Vrtl_repo_(repo_idx); // update repo_idx to whatever is found
|
||||
|
||||
@@ -34,14 +34,14 @@ public class Xof_xfer_mgr {
|
||||
this.orig_file_len = xfer_itm.Orig_file_len();
|
||||
this.src_repo = src_repo; src_repo_is_wmf = src_repo.Wmf_fsys();
|
||||
this.trg_repo = trg_repo;
|
||||
this.meta_itm = xfer_itm.Meta_itm();
|
||||
this.meta_itm = xfer_itm.Dbmeta_itm();
|
||||
ext_rule = src_repo.Ext_rules().Get_or_null(orig_ext.Ext());
|
||||
orig_w = 0; orig_h = 0; file_w = 0; file_h = 0;
|
||||
} private byte lnki_type;
|
||||
private Xof_xfer_itm xfer_itm; private double lnki_thumbtime = Xof_lnki_time.Null; private boolean lnki_thumbable; private int lnki_w, lnki_h, file_w, file_h; private double lnki_upright;
|
||||
private Xof_ext orig_ext; private Xof_rule_itm ext_rule; private Xof_repo_itm src_repo, trg_repo; private boolean src_repo_is_wmf; private byte[] orig_ttl, orig_ttl_md5; private int orig_w, orig_h; private long orig_file_len;
|
||||
private int lnki_page = Xof_lnki_page.Null;
|
||||
public Xof_meta_itm Meta_itm() {return meta_itm;} private Xof_meta_itm meta_itm;
|
||||
public Xof_meta_itm Dbmeta_itm() {return meta_itm;} private Xof_meta_itm meta_itm;
|
||||
public boolean Download_allowed_by_ext() {return orig_file_len < ext_rule.Make_max();}
|
||||
public Xof_xfer_mgr Check_file_exists_before_xfer_n_() {check_file_exists_before_xfer = false; return this;} private boolean check_file_exists_before_xfer = true;
|
||||
public boolean Make_file(Xowe_wiki wiki) {
|
||||
|
||||
@@ -43,13 +43,13 @@ public class Xof_xfer_queue {
|
||||
for (int i = 0; i < xfer_len; i++) {
|
||||
if (wiki.Appe().Usr_dlg().Canceled()) break;
|
||||
Xof_xfer_itm xfer_itm = (Xof_xfer_itm)xfer_list.Get_at(i);
|
||||
meta_mgr = xfer_itm.Meta_itm().Owner_fil().Owner_mgr();
|
||||
meta_mgr = xfer_itm.Dbmeta_itm().Owner_fil().Owner_mgr();
|
||||
byte[] meta_mgr_key = meta_mgr.Wiki().Domain_bry();
|
||||
if (!dirty_meta_mgrs.Has(meta_mgr_key)) dirty_meta_mgrs.Add(meta_mgr_key, meta_mgr); // only add if new
|
||||
String queue_msg = usr_dlg.Prog_many("", "", "downloading ~{0} of ~{1}: ~{2};", i + List_adp_.Base1, xfer_len, xfer_itm.Lnki_ttl());
|
||||
wiki.App().Wmf_mgr().Download_wkr().Download_xrg().Prog_fmt_hdr_(queue_msg);
|
||||
wiki.File_mgr().Repo_mgr().Xfer_by_meta(xfer_itm, this);
|
||||
xfer_itm.Set__meta(xfer_itm.Meta_itm(), xfer_itm.Meta_itm().Repo_itm(wiki), wiki.Html_mgr().Img_thumb_width());
|
||||
xfer_itm.Set__meta(xfer_itm.Dbmeta_itm(), xfer_itm.Dbmeta_itm().Repo_itm(wiki), wiki.Html_mgr().Img_thumb_width());
|
||||
xfer_itm.Calc_by_meta();
|
||||
if (!xfer_itm.File_exists()) continue; // file not found; don't call Update_img, else invalid src will be passed and caption box will be incorrectly resized; EX:ar.d:جَبَّارَة; DATE:2014-04-13
|
||||
if (Bry_.Len_gt_0(xfer_itm.Html_view_url().To_http_file_bry()) // only update images that have been found; otherwise "Undefined" shows up in image box
|
||||
|
||||
@@ -33,7 +33,7 @@ class Xogv_page_load_wkr implements Gfo_thread_wkr, GfoInvkAble {
|
||||
tab.Show_page(old_itm, new_itm, new_hpg);
|
||||
}
|
||||
private Xoh_page Fetch_page(byte[] wiki_domain, byte[] page_bry, byte[] qarg_bry) {
|
||||
Xowv_wiki wiki = wiki_mgr.Get_by_domain(wiki_domain);
|
||||
Xowv_wiki wiki = (Xowv_wiki)wiki_mgr.Get_by_or_null(wiki_domain);
|
||||
if (wiki == null) return new Xoh_page().Exists_n_(); // wiki does not exist; happens with xwiki; PAGE:s.w:Photon; EX:[[wikt:transmit]]; DATE:2015-04-27
|
||||
Xoa_ttl ttl = wiki.Ttl_parse(page_bry);
|
||||
Gfo_url url = url_parser.Parse(Bry_.Add(wiki_domain, Byte_ascii.Slash_bry, page_bry, qarg_bry));
|
||||
|
||||
@@ -27,7 +27,7 @@ public abstract class Xogv_tab_base {
|
||||
public void Ctor(Xoav_wiki_mgr wiki_mgr, Gfo_thread_pool thread_pool, Gfo_url_parser url_parser) {this.wiki_mgr = wiki_mgr; this.thread_pool = thread_pool; this.url_parser = url_parser;}
|
||||
public Xog_history_stack History_stack() {return history_stack;} private final Xog_history_stack history_stack = new Xog_history_stack();
|
||||
public Xog_history_itm Cur_itm() {return history_stack.Cur_itm();}
|
||||
public Xow_wiki Get_wiki_or_null(byte[] key) {return wiki_mgr.Get_by_domain(key);}
|
||||
public Xow_wiki Get_wiki_or_null(byte[] key) {return wiki_mgr.Get_by_or_null(key);}
|
||||
public Xoh_page Go_to(byte[] page) {return Go_to(history_stack.Cur_itm().Wiki(), page, Bry_.Empty, Bry_.Empty, false, "");}
|
||||
public Xoh_page Go_to(byte[] wiki, byte[] page) {return Go_to(wiki, page, Bry_.Empty, Bry_.Empty, false, "");}
|
||||
public Xoh_page Go_to(byte[] wiki, byte[] page, byte[] anch, byte[] qarg, boolean redirect_force, String bmk_pos) {
|
||||
|
||||
@@ -61,7 +61,7 @@ class Xog_launcher_tabs {
|
||||
private void Launch_tab(Xog_win_itm win, Xowe_wiki home_wiki, String launch_str) {
|
||||
Xoae_app app = win.App();
|
||||
Xoa_url launch_url = home_wiki.Utl__url_parser().Parse_by_urlbar_or_null(launch_str); if (launch_url == null) return;
|
||||
Xowe_wiki launch_wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_key_or_make_init_y(launch_url.Wiki_bry());
|
||||
Xowe_wiki launch_wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_or_make_init_y(launch_url.Wiki_bry());
|
||||
Xoa_ttl launch_ttl = Xoa_ttl.parse(launch_wiki, launch_url.Page_bry());
|
||||
Xog_tab_itm tab = win.Tab_mgr().Tabs_new_init(launch_wiki, Xoae_page.New(launch_wiki, launch_ttl)); // WORKAROUND: set the tab to an empty page, else null ref later; DATE:2014-07-23
|
||||
tab.Show_url_bgn(launch_url);
|
||||
|
||||
@@ -113,7 +113,7 @@ public class Xog_tab_itm implements GfoInvkAble {
|
||||
if (page != null) page.Tab_data().Close_mgr().When_close(this, url); // cancel any current search cmds
|
||||
app.Log_wtr().Queue_enabled_(true);
|
||||
usr_dlg.Gui_wkr().Clear();
|
||||
this.wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_key_or_make_init_y(url.Wiki_bry()); // NOTE: must update wiki variable; DATE:????-??-??; NOTE: must load wiki; DATE:2015-07-22
|
||||
this.wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_or_make_init_y(url.Wiki_bry()); // NOTE: must update wiki variable; DATE:????-??-??; NOTE: must load wiki; DATE:2015-07-22
|
||||
if (url.Page_is_main()) url.Page_bry_(wiki.Props().Main_page());
|
||||
if (url.Vnt_bry() != null) Cur_vnt_(wiki, url.Vnt_bry());
|
||||
Xoa_ttl ttl = Xoa_ttl.parse(wiki, url.Page_bry());
|
||||
|
||||
@@ -253,7 +253,7 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj {
|
||||
boolean output_html = String_.Eq(output_str, "html");
|
||||
Xowe_wiki home_wiki = app.Usere().Wiki();
|
||||
Xoa_url url = home_wiki.Utl__url_parser().Parse_by_urlbar_or_null(url_str); if (url == null) return Bry_.Empty;
|
||||
Xowe_wiki wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_key_or_make_init_y(url.Wiki_bry());
|
||||
Xowe_wiki wiki = (Xowe_wiki)app.Wiki_mgr().Get_by_or_make_init_y(url.Wiki_bry());
|
||||
Xoa_ttl ttl = Xoa_ttl.parse(wiki, url.Page_bry());
|
||||
Xoae_page new_page = wiki.Data_mgr().Load_page_by_ttl(url, ttl);
|
||||
if (new_page.Missing()) {return Bry_.Empty;}
|
||||
|
||||
@@ -23,7 +23,7 @@ import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.skins.*;
|
||||
public class Xow_hdump_mgr__load {
|
||||
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 Hash_adp_bry page_overrides;
|
||||
private Xow_override_mgr override_mgr__html, override_mgr__page;
|
||||
public Xow_hdump_mgr__load(Xow_wiki wiki, Xoh_hzip_mgr hzip_mgr, Io_stream_zip_mgr zip_mgr, Xoh_page tmp_hpg, Bry_bfr tmp_bfr) {
|
||||
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(wiki.App().Usr_dlg(), wiki.App().Fsys_mgr(), gplx.langs.htmls.encoders.Gfo_url_encoder_.Fsys_lnx, wiki.Domain_bry());
|
||||
@@ -37,11 +37,21 @@ public class Xow_hdump_mgr__load {
|
||||
}
|
||||
public boolean Load(Xoh_page hpg, Xoa_ttl ttl) {
|
||||
synchronized (tmp_dbpg) {
|
||||
if (page_overrides == null) page_overrides = Init_page_overrides(wiki);
|
||||
if (!Load__dbpg(wiki, tmp_dbpg.Clear(), hpg, ttl)) return Load__fail(hpg); // nothing in "page" table
|
||||
Xowd_db_file html_db = wiki.Data__core_mgr().Dbs__get_at(tmp_dbpg.Html_db_id());
|
||||
if (override_mgr__page == null) {
|
||||
Io_url override_root_url = wiki.Fsys_mgr().Root_dir().GenSubDir_nest("data", "wiki");
|
||||
this.override_mgr__page = new Xow_override_mgr(override_root_url.GenSubDir_nest("page"));
|
||||
this.override_mgr__html = new Xow_override_mgr(override_root_url.GenSubDir_nest("html"));
|
||||
}
|
||||
boolean loaded = Load__dbpg(wiki, tmp_dbpg.Clear(), hpg, ttl);
|
||||
hpg.Init(hpg.Wiki(), hpg.Url(), ttl, tmp_dbpg.Id());
|
||||
if (!html_db.Tbl__html().Select_by_page(hpg)) return Load__fail(hpg); // nothing in "html_page" table
|
||||
if (!loaded) { // nothing in "page" table
|
||||
byte[] page_override = override_mgr__page.Get_or_same(ttl.Page_db(), null);
|
||||
if (page_override == null) return Load__fail(hpg);
|
||||
hpg.Body_(page_override);
|
||||
return true;
|
||||
}
|
||||
Xowd_db_file html_db = wiki.Data__core_mgr().Dbs__get_at(tmp_dbpg.Html_db_id());
|
||||
if (!html_db.Tbl__html().Select_by_page(hpg)) return Load__fail(hpg); // nothing in "html" table
|
||||
byte[] src = Parse(hpg, hpg.Body_zip_tid(), hpg.Body_hzip_tid(), hpg.Body());
|
||||
hpg.Body_(src);
|
||||
return true;
|
||||
@@ -52,8 +62,7 @@ public class Xow_hdump_mgr__load {
|
||||
if (zip_tid > gplx.core.ios.Io_stream_.Tid_raw)
|
||||
src = zip_mgr.Unzip((byte)zip_tid, src);
|
||||
if (hzip_tid == Xoh_hzip_dict_.Hzip__v1) {
|
||||
byte[] page_override_src = (byte[])page_overrides.Get_by_bry(hpg.Ttl().Page_db());
|
||||
if (page_override_src != null) src = page_override_src;
|
||||
src = override_mgr__html.Get_or_same(hpg.Ttl().Page_db(), src);
|
||||
hpg.Section_mgr().Add(0, 2, Bry_.Empty, Bry_.Empty).Content_bgn_(0); // +1 to skip \n
|
||||
src = Decode_as_bry(tmp_bfr.Clear(), hpg, src, Bool_.N);
|
||||
hpg.Section_mgr().Set_content(hpg.Section_mgr().Len() - 1, src, src.length);
|
||||
@@ -88,19 +97,28 @@ public class Xow_hdump_mgr__load {
|
||||
if (redirect_id == -1) break;
|
||||
}
|
||||
}
|
||||
private static Hash_adp_bry Init_page_overrides(Xow_wiki wiki) {
|
||||
Hash_adp_bry rv = Hash_adp_bry.cs();
|
||||
Io_url[] page_urls = Io_mgr.Instance.QueryDir_fils(wiki.Fsys_mgr().Root_dir().GenSubDir_nest("data", "page"));
|
||||
int page_urls_len = page_urls.length;
|
||||
for (int i = 0; i < page_urls_len; ++i) {
|
||||
Io_url page_url = page_urls[i];
|
||||
byte[] page_raw = Io_mgr.Instance.LoadFilBry(page_url);
|
||||
int page_raw_len = page_raw.length;
|
||||
int page_nl = Bry_find_.Find_fwd(page_raw, Byte_ascii.Nl, 0, page_raw_len); if (page_nl == Bry_find_.Not_found) continue;
|
||||
byte[] page_ttl_bry = Bry_.Mid(page_raw, 0, page_nl);
|
||||
byte[] page_src_bry = Bry_.Mid(page_raw, page_nl + 1, page_raw_len);
|
||||
rv.Add_bry_obj(page_ttl_bry, page_src_bry);
|
||||
}
|
||||
class Xow_override_mgr {
|
||||
private final Hash_adp_bry hash = Hash_adp_bry.cs();
|
||||
private final Io_url root_dir;
|
||||
private boolean init = true;
|
||||
public Xow_override_mgr(Io_url root_dir) {this.root_dir = root_dir;}
|
||||
public void Clear() {hash.Clear();}
|
||||
public byte[] Get_or_same(byte[] ttl, byte[] src) {
|
||||
if (init) {init = false; Load_from_fsys(hash, root_dir);}
|
||||
byte[] rv = (byte[])hash.Get_by_bry(ttl);
|
||||
return rv == null ? src : rv;
|
||||
}
|
||||
private static void Load_from_fsys(Hash_adp_bry hash, Io_url root_dir) {
|
||||
Io_url[] urls = Io_mgr.Instance.QueryDir_args(root_dir).Recur_(true).ExecAsUrlAry();
|
||||
int urls_len = urls.length;
|
||||
for (int i = 0; i < urls_len; ++i) {
|
||||
Io_url url = urls[i];
|
||||
byte[] raw = Io_mgr.Instance.LoadFilBry(url); int bry_len = raw.length;
|
||||
int nl_pos = Bry_find_.Find_fwd(raw, Byte_ascii.Nl, 0, bry_len); if (nl_pos == Bry_find_.Not_found) continue;
|
||||
byte[] ttl = Bry_.Mid(raw, 0, nl_pos);
|
||||
byte[] src = Bry_.Mid(raw, nl_pos + 1, bry_len);
|
||||
hash.Add_bry_obj(ttl, src);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ public class Xob_hdump_bldr implements GfoInvkAble {
|
||||
return true;
|
||||
}
|
||||
public void Insert(Xoae_page page) {
|
||||
tmp_hpg.Clear(); // NOTE: must clear tmp_hpg or else will leak memory during mass build; DATE:2016-01-09
|
||||
page.File_queue().Clear(); // need to reset uid to 0, else xowa_file_# will resume from last
|
||||
wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_page_.Tid_read).Write_body(tmp_bfr, Xoh_wtr_ctx.Hdump, page); // write to html in hdump mode
|
||||
byte[] orig_bry = tmp_bfr.To_bry_and_clear();
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.htmls.core.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*;
|
||||
import gplx.dbs.*;
|
||||
class Xob_link_dump_tbl implements Rls_able {
|
||||
public static final String Tbl_name = "link_dump"; private static final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
public static final String Tbl_name = "link_dump"; private static final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
public static final String
|
||||
Fld_uid = flds.Add_int_pkey_autonum("uid")
|
||||
, Fld_src_page_id = flds.Add_int("src_page_id")
|
||||
@@ -33,16 +33,16 @@ class Xob_link_dump_tbl implements Rls_able {
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public Db_conn Conn() {return conn;} private final Db_conn conn;
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(Tbl_name, flds));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(Tbl_name, flds));}
|
||||
public void Create_idx_1() {
|
||||
conn.Ddl_create_idx
|
||||
( Db_meta_idx.new_normal_by_tbl(Tbl_name, "src", Fld_src_page_id, Fld_src_html_uid)
|
||||
, Db_meta_idx.new_normal_by_tbl(Tbl_name, "trg_temp", Fld_trg_ns, Fld_trg_ttl)
|
||||
( Dbmeta_idx_itm.new_normal_by_tbl(Tbl_name, "src", Fld_src_page_id, Fld_src_html_uid)
|
||||
, Dbmeta_idx_itm.new_normal_by_tbl(Tbl_name, "trg_temp", Fld_trg_ns, Fld_trg_ttl)
|
||||
);
|
||||
}
|
||||
public void Create_idx_2() {
|
||||
conn.Ddl_create_idx
|
||||
( Db_meta_idx.new_normal_by_tbl(Tbl_name, "trg", Fld_trg_page_id, Fld_src_page_id, Fld_src_html_uid)
|
||||
( Dbmeta_idx_itm.new_normal_by_tbl(Tbl_name, "trg", Fld_trg_page_id, Fld_src_page_id, Fld_src_html_uid)
|
||||
);
|
||||
}
|
||||
public void Rls() {
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.htmls.core.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*;
|
||||
import gplx.dbs.*; import gplx.core.brys.*;
|
||||
public class Xoh_page_tbl implements Rls_able {
|
||||
private final String tbl_name = "html"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name = "html"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_page_id, fld_head_flag, fld_body_flag, fld_display_ttl, fld_content_sub, fld_sidebar_div, fld_body;
|
||||
private final Db_conn conn; private Db_stmt stmt_select, stmt_insert, stmt_delete, stmt_update;
|
||||
private final Int_flag_bldr body_flag_bldr = new Int_flag_bldr().Pow_ary_bld_(3, 2); // 8 different zip types; 4 different hzip types
|
||||
@@ -34,7 +34,7 @@ public class Xoh_page_tbl implements Rls_able {
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public Db_conn Conn() {return conn;}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds));}
|
||||
public void Insert_bgn() {conn.Txn_bgn("html__insert"); stmt_insert = conn.Stmt_insert(tbl_name, flds);}
|
||||
public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);}
|
||||
public void Insert(Xoh_page hpg, int zip_tid, int hzip_tid, byte[] body) {Insert(hpg.Page_id(), hpg.Head_mgr().Flag(), zip_tid, hzip_tid, hpg.Display_ttl(), hpg.Content_sub(), hpg.Sidebar_div(), body);}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.htmls.core.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*;
|
||||
import gplx.dbs.*;
|
||||
public class Xoh_redlink_tbl implements Rls_able {
|
||||
private final String tbl_name = "html_redlink"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private final String tbl_name = "html_redlink"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private final String fld_page_id, fld_redlink_uids;
|
||||
private final Db_conn conn; private Db_stmt stmt_select, stmt_insert, stmt_delete, stmt_update;
|
||||
public Xoh_redlink_tbl(Db_conn conn) {
|
||||
@@ -28,7 +28,7 @@ public class Xoh_redlink_tbl implements Rls_able {
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public Db_conn Conn() {return conn;}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds));}
|
||||
public void Insert_bgn() {conn.Txn_bgn("html_redlink__insert"); stmt_insert = conn.Stmt_insert(tbl_name, flds);}
|
||||
public void Insert_end() {conn.Txn_end(); stmt_insert = Db_stmt_.Rls(stmt_insert);}
|
||||
public void Insert(int page_id, byte[] redlink_uids) {
|
||||
|
||||
@@ -1,63 +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.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*;
|
||||
import gplx.core.primitives.*; import gplx.core.encoders.*;
|
||||
public class Xoh_hzip_int_ {
|
||||
public static final int Neg_1_adj = 1;
|
||||
public static void Encode(int reqd, Bry_bfr bfr, int val) {
|
||||
int bfr_len = bfr.Len();
|
||||
int len_in_base85 = Base85_.Bry_len(val);
|
||||
boolean abrv = val < Base85_.Pow85[reqd];
|
||||
int adj = abrv ? 0 : 1;
|
||||
int actl_len = len_in_base85 + adj;
|
||||
if (actl_len < reqd) actl_len = reqd;
|
||||
bfr.Add_byte_repeat(Byte_ascii.Bang, actl_len); // fill with 0s; this asserts that there underlying array will be large enough for following write
|
||||
byte[] bfr_bry = bfr.Bfr(); // NOTE: set bry reference here b/c Add_byte_repeat may create a new one
|
||||
Base85_.Set_bry(val, bfr_bry, bfr_len + adj, reqd); // calc base85 val for val; EX: 7224 -> "uu"
|
||||
if (!abrv) {
|
||||
byte base85_byte = Base85_len__2;
|
||||
switch (len_in_base85) {
|
||||
case 3: base85_byte = Base85_len__3; break;
|
||||
case 4: base85_byte = Base85_len__4; break;
|
||||
case 5: base85_byte = Base85_len__5; break;
|
||||
}
|
||||
bfr_bry[bfr_len] = base85_byte;
|
||||
}
|
||||
}
|
||||
public static int Decode(int reqd, byte[] src, int src_len, int src_bgn, Int_obj_ref pos_ref) {
|
||||
byte b0 = src[src_bgn];
|
||||
int base85_bgn = src_bgn + 1;
|
||||
int len_in_base85 = 1; // default to 1
|
||||
switch (b0) {
|
||||
case Base85_len__2: len_in_base85 = 2; break;
|
||||
case Base85_len__3: len_in_base85 = 3; break;
|
||||
case Base85_len__4: len_in_base85 = 4; break;
|
||||
case Base85_len__5: len_in_base85 = 5; break;
|
||||
default: --base85_bgn; break;
|
||||
}
|
||||
if (len_in_base85 < reqd) len_in_base85 = reqd;
|
||||
int base85_end = base85_bgn + len_in_base85;
|
||||
pos_ref.Val_(base85_end);
|
||||
return Base85_.To_int_by_bry(src, base85_bgn, base85_end - 1);
|
||||
}
|
||||
private static final byte
|
||||
Base85_len__2 = Byte_ascii.Curly_bgn
|
||||
, Base85_len__3 = Byte_ascii.Pipe
|
||||
, Base85_len__4 = Byte_ascii.Curly_end
|
||||
, Base85_len__5 = Byte_ascii.Tilde;
|
||||
}
|
||||
@@ -16,7 +16,7 @@ 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.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*;
|
||||
import org.junit.*;
|
||||
import org.junit.*; import gplx.core.encoders.*;
|
||||
public class Xoh_hzip_int__tst {
|
||||
private final Xoh_hzip_int__fxt fxt = new Xoh_hzip_int__fxt();
|
||||
@Test public void Reqd__1() {
|
||||
@@ -40,9 +40,9 @@ class Xoh_hzip_int__fxt {
|
||||
private final Bry_bfr bfr = Bry_bfr.new_();
|
||||
private final gplx.core.primitives.Int_obj_ref count_ref = gplx.core.primitives.Int_obj_ref.neg1_();
|
||||
public void Test__encode(int reqd, int val, String expd) {
|
||||
Xoh_hzip_int_.Encode(reqd, bfr, val);
|
||||
Gfo_hzip_int_.Encode(reqd, bfr, val);
|
||||
byte[] actl = bfr.To_bry_and_clear();
|
||||
Tfds.Eq(expd, String_.new_u8(actl));
|
||||
Tfds.Eq(val, Xoh_hzip_int_.Decode(reqd, actl, actl.length, 0, count_ref));
|
||||
Tfds.Eq(val, Gfo_hzip_int_.Decode(reqd, actl, actl.length, 0, count_ref));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gp
|
||||
import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.htmls.core.makes.imgs.*; import gplx.xowa.htmls.core.hzips.*;
|
||||
import gplx.xowa.wikis.pages.*;
|
||||
public class Xoh_stat_tbl implements Rls_able {
|
||||
private static final String tbl_name = "hdump_stats"; private static final Db_meta_fld_list flds = Db_meta_fld_list.new_();
|
||||
private static final String tbl_name = "hdump_stats"; private static final Dbmeta_fld_list flds = Dbmeta_fld_list.new_();
|
||||
private static final String
|
||||
fld_page_id = flds.Add_int_pkey("page_id"), fld_wtxt_len = flds.Add_int("wtxt_len"), fld_row_orig_len = flds.Add_int("row_orig_len"), fld_row_zip_len = flds.Add_int("row_zip_len")
|
||||
, fld_body_len = flds.Add_int("body_len"), fld_display_ttl_len = flds.Add_int("display_ttl_len"), fld_content_sub_len = flds.Add_int("content_sub_len"), fld_sidebar_div_len = flds.Add_int("sidebar_div_len")
|
||||
@@ -36,7 +36,7 @@ public class Xoh_stat_tbl implements Rls_able {
|
||||
conn.Stmt_delete(tbl_name).Exec_delete(); // always zap table
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, flds, Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_page_id)));}
|
||||
public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_tbl(tbl_name, "pkey", fld_page_id)));}
|
||||
public void Rls() {
|
||||
stmt_insert = Db_stmt_.Rls(stmt_insert);
|
||||
}
|
||||
|
||||
@@ -1,91 +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/>.
|
||||
*/
|
||||
//namespace gplx.xowa.htmls.core.makes {
|
||||
// import org.junit.*;
|
||||
// public class Xoh_make_mgr__file__tst {
|
||||
// private final Xoh_make_mgr_fxt fxt = new Xoh_make_mgr_fxt();
|
||||
// @Before public void init() {
|
||||
// fxt.Clear();
|
||||
// fxt.Init_data_img_basic("A.png", 0, 220, 110);
|
||||
// }
|
||||
// @Test public void Img() {
|
||||
// fxt .Init_body("<img xowa_img='0' />")
|
||||
// .Test_html("<img src='file:///mem/xowa/file/commons.wikimedia.org/thumb/7/0/A.png/220px.png' width='220' height='110' />");
|
||||
// }
|
||||
// @Test public void Img_style() {
|
||||
// fxt .Init_body("<div xowa_img_style='0'>")
|
||||
// .Test_html("<div style='width:220px;'>");
|
||||
// }
|
||||
// @Test public void File_info() {
|
||||
// fxt .Init_body("<xowa_info id='0'/>")
|
||||
// .Test_html(String_.Concat_lines_nl_skip_last
|
||||
// ( ""
|
||||
// , " <div>"
|
||||
// , " <a href=\"/wiki/File:A.png\" class=\"image\" title=\"About this file\">"
|
||||
// , " <img src=\"file:///mem/xowa/bin/any/xowa/file/mediawiki.file/info.png\" width=\"22\" height=\"22\" />"
|
||||
// , " </a>"
|
||||
// , " </div>"
|
||||
// ));
|
||||
// }
|
||||
// @Test public void File_mgnf() {
|
||||
// fxt .Init_body("<xowa_mgnf id='0'/>")
|
||||
// .Test_html(String_.Concat_lines_nl_skip_last
|
||||
// ( ""
|
||||
// , " <div class=\"magnify\">"
|
||||
// , " <a href=\"/wiki/File:A.png\" class=\"internal\" title=\"A.png\">"
|
||||
// , " <img src=\"file:///mem/xowa/bin/any/xowa/file/mediawiki.file/magnify-clip.png\" width=\"15\" height=\"11\" alt=\"\" />"
|
||||
// , " </a>"
|
||||
// , " </div>"
|
||||
// ));
|
||||
// }
|
||||
// @Test public void File_play() {
|
||||
// fxt .Init_body("<xowa_play id='0'/>")
|
||||
// .Test_html(String_.Concat_lines_nl_skip_last
|
||||
// ( ""
|
||||
// , " <div>"
|
||||
// , " <a id=\"xowa_file_play_0\" href=\"/wiki/File:A.png\" xowa_title=\"A.png\" class=\"xowa_anchor_button\" style=\"width:220px;max-width:1024px;\">"
|
||||
// , " <img src=\"file:///mem/xowa/bin/any/xowa/file/mediawiki.file/play.png\" width=\"22\" height=\"22\" alt=\"Play sound\" />"
|
||||
// , " </a>"
|
||||
// , " </div>"
|
||||
// ));
|
||||
// }
|
||||
// @Test public void Hiero_dir() {
|
||||
// fxt .Init_body("<img src='~{xowa_hiero_dir}hiero_a&A1.png' />")
|
||||
// .Test_html("<img src='file:///mem/xowa/bin/any/xowa/xtns/Wikihiero/img/hiero_a&A1.png' />");
|
||||
// }
|
||||
// @Test public void Gallery() {
|
||||
// fxt.Clear_imgs();
|
||||
// fxt .Init_data_gly(0, 800);
|
||||
// fxt .Init_data_img_gly("A.png", 0, 220, 110, 155, 150, 15);
|
||||
// fxt .Init_body(String_.Concat_lines_nl_skip_last
|
||||
// ( "<ul xowa_gly_box_max='0'>"
|
||||
// , " <li class='gallerybox' xowa_gly_box_w='0'>"
|
||||
// , " <div xowa_gly_box_w='0'>"
|
||||
// , " <div class='thumb' xowa_gly_img_w='0'>"
|
||||
// , " <div xowa_gly_img_pad='0'>"
|
||||
// ))
|
||||
// .Test_html(String_.Concat_lines_nl_skip_last
|
||||
// ( "<ul style=\"max-width:800px;_width:800px;\">"
|
||||
// , " <li class='gallerybox' style=\"width:155px;\">"
|
||||
// , " <div style=\"width:155px;\">"
|
||||
// , " <div class='thumb' style=\"width:150px;\">"
|
||||
// , " <div style=\"margin:15px auto;\">"
|
||||
// ));
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
@@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.htmls.core.wkrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*;
|
||||
import gplx.xowa.apps.urls.*;
|
||||
import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.xndes.tags.*; import gplx.xowa.htmls.core.wkrs.xndes.dicts.*;
|
||||
import gplx.xowa.files.*; import gplx.xowa.apps.fsys.*;
|
||||
import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.apps.metas.*;
|
||||
import gplx.xowa.files.*; import gplx.xowa.apps.fsys.*; import gplx.xowa.files.caches.*;
|
||||
import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.apps.metas.*;
|
||||
public class Xoh_hdoc_ctx {
|
||||
private byte[] fsys__file;
|
||||
public byte[] Fsys__root() {return fsys__root;} private byte[] fsys__root;
|
||||
@@ -30,7 +30,7 @@ public class Xoh_hdoc_ctx {
|
||||
public Xow_ttl_parser Wiki__ttl_parser() {return wiki__ttl_parser;} private Xow_ttl_parser wiki__ttl_parser;
|
||||
public Xoa_url_parser Wiki__url_parser() {return wiki__url_parser;} private Xoa_url_parser wiki__url_parser;
|
||||
public boolean Xwiki_mgr__missing(byte[] domain){return app.Xwiki_mgr__missing(domain);}
|
||||
public Xoa_file_mgr File__mgr() {return file__mgr;} private final Xoa_file_mgr file__mgr = new Xoa_file_mgr();
|
||||
public Xou_cache_finder File__mgr() {return file__mgr;} private Xou_cache_finder file__mgr = Xou_cache_finder_.Noop;
|
||||
public Xof_url_bldr File__url_bldr() {return file__url_bldr;} private final Xof_url_bldr file__url_bldr = new Xof_url_bldr();
|
||||
public byte[] Page__url() {return page__url;} private byte[] page__url;
|
||||
public Xoh_pool_mgr__hzip Pool_mgr__hzip() {return pool_mgr__hzip;} private final Xoh_pool_mgr__hzip pool_mgr__hzip = new Xoh_pool_mgr__hzip();
|
||||
@@ -48,6 +48,8 @@ public class Xoh_hdoc_ctx {
|
||||
this.fsys__root = fsys_mgr.Root_dir().To_http_file_bry();
|
||||
this.fsys__file = fsys_mgr.File_dir().To_http_file_bry();
|
||||
this.fsys__file__comm = Bry_.Add(fsys__file, Xow_domain_itm_.Bry__commons, Byte_ascii.Slash_bry);
|
||||
Xou_cache_mgr cache_mgr = app.User().User_db_mgr().Cache_mgr();
|
||||
if (cache_mgr != null) file__mgr = Xou_cache_finder_.New_db(cache_mgr); // NOTE: this effectively only loads the cache db in app mode (and not in test mode)
|
||||
pool_mgr__hzip.Init();
|
||||
}
|
||||
public void Init_by_page(Xow_wiki wiki, byte[] page_url) {
|
||||
|
||||
@@ -42,6 +42,12 @@ public class Xoh_hzip_fxt {
|
||||
parser_fxt.Wiki().Xwiki_mgr().Add_by_atrs(Bry_.new_u8(alias), Bry_.new_u8(domain), null);
|
||||
return rv;
|
||||
}
|
||||
public void Init__ns_alias__add(String alias, int ns_id) {
|
||||
parser_fxt.Wiki().Ns_mgr().Aliases_add(ns_id, alias).Init();
|
||||
}
|
||||
public void Init__ns_alias__del(String alias) {
|
||||
parser_fxt.Wiki().Ns_mgr().Aliases_del(alias);
|
||||
}
|
||||
public void Test__bicode(String hzip, String html) {Test__bicode(hzip, html, html);}
|
||||
public void Test__bicode(String hzip, String html_enc, String html_dec) {
|
||||
html_enc = Gfh_utl.Replace_apos(html_enc);
|
||||
|
||||
@@ -20,7 +20,7 @@ import gplx.core.brys.*;
|
||||
public class Bfr_arg__hatr_id implements Bfr_arg_clearable {
|
||||
private final byte[] atr_bgn;
|
||||
private final byte[] bry; private int num;
|
||||
public Bfr_arg__hatr_id(byte[] bry) {this.bry = bry; this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(gplx.langs.htmls.Gfh_atr_.Bry__id);}
|
||||
public Bfr_arg__hatr_id(byte[] atr_key, byte[] bry) {this.bry = bry; this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(atr_key);}
|
||||
public Bfr_arg__hatr_id Set(int num) {this.num = num; return this;}
|
||||
public void Bfr_arg__clear() {num = -1;}
|
||||
public boolean Bfr_arg__missing() {return num == -1;}
|
||||
@@ -31,6 +31,6 @@ public class Bfr_arg__hatr_id implements Bfr_arg_clearable {
|
||||
bfr.Add_int_variable(num);
|
||||
bfr.Add_byte_quote();
|
||||
}
|
||||
public static Bfr_arg__hatr_id New(String v) {return new Bfr_arg__hatr_id(Bry_.new_u8(v));}
|
||||
public static Bfr_arg__hatr_id New(byte[] v) {return new Bfr_arg__hatr_id(v);}
|
||||
public static Bfr_arg__hatr_id New_id(String v) {return new Bfr_arg__hatr_id(gplx.langs.htmls.Gfh_atr_.Bry__id, Bry_.new_u8(v));}
|
||||
public static Bfr_arg__hatr_id New_id(byte[] v) {return new Bfr_arg__hatr_id(gplx.langs.htmls.Gfh_atr_.Bry__id, v);}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,13 @@ import gplx.core.brys.*;
|
||||
import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.langs.htmls.styles.*; import gplx.langs.htmls.clses.*;
|
||||
import gplx.xowa.htmls.core.hzips.*;
|
||||
import gplx.xowa.xtns.gallery.*;
|
||||
public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { //
|
||||
public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr {
|
||||
private final List_adp itms_list = List_adp_.new_();
|
||||
public int Src_bgn() {return src_bgn;} private int src_bgn;
|
||||
public int Src_end() {return src_end;} private int src_end;
|
||||
public int Gly_tid() {return gly_tid;} private int gly_tid;
|
||||
public int Gly_w() {return gly_w;} private int gly_w;
|
||||
public int Ul_style_max_w() {return ul_style_max_w;} private int ul_style_max_w;
|
||||
public int Ul_style_w() {return ul_style_w;} private int ul_style_w;
|
||||
public int Xtra_atr_bgn() {return xtra_atr_bgn;} private int xtra_atr_bgn;
|
||||
public int Xtra_atr_end() {return xtra_atr_end;} private int xtra_atr_end;
|
||||
public boolean Xtra_atr_exists() {return xtra_atr_end > xtra_atr_bgn;}
|
||||
@@ -39,7 +40,7 @@ public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { /
|
||||
public Xoh_gly_itm_data Itms__get_at(int i) {return (Xoh_gly_itm_data)itms_list.Get_at(i);}
|
||||
private void Clear() {
|
||||
this.gly_tid = Byte_.Max_value_127;
|
||||
this.gly_w = 0;
|
||||
this.ul_style_max_w = ul_style_w = 0;
|
||||
this.xtra_atr_bgn = xtra_atr_end = xtra_cls_bgn = xtra_cls_end = xtra_style_bgn = xtra_style_end = -1;
|
||||
itms_list.Clear();
|
||||
}
|
||||
@@ -92,8 +93,11 @@ public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { /
|
||||
}
|
||||
}
|
||||
public boolean On_cls(byte[] src, int atr_idx, int atr_bgn, int atr_end, int val_bgn, int val_end) {
|
||||
if (Bry_.Match(src, val_bgn, val_end, Atr__cls__gallery)) {} // ignore "gallery"
|
||||
else if (Bry_.Match(src, val_bgn, val_bgn + Atr__cls__mw_gallery.length, Atr__cls__mw_gallery)) { // starts with 'mw-gallery-'
|
||||
int val_pos = val_bgn - atr_bgn;
|
||||
if ( Bry_.Match(src, val_bgn, val_end, Atr__cls__gallery) // ignore "gallery"
|
||||
&& val_pos == 0) {} // only if 1st; EX:'gallery mw-traditional gallery'; PAGE:en.w:Butuan; DATE:2016-01-05
|
||||
else if (Bry_.Match(src, val_bgn, val_bgn + Atr__cls__mw_gallery.length, Atr__cls__mw_gallery) // starts with 'mw-gallery-'
|
||||
&& val_pos == 8) { // occurs after "gallery "
|
||||
int tid_bgn = val_bgn + Atr__cls__mw_gallery.length;
|
||||
this.gly_tid = Gallery_mgr_base_.Hash.Get_as_byte_or(src, tid_bgn, val_end, Byte_.Max_value_127);
|
||||
return true;
|
||||
@@ -106,15 +110,22 @@ public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { /
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end) {
|
||||
if (Bry_.Match(src, key_bgn, key_end, Style__max_width)) // 'max-width'
|
||||
gly_w = Bry_.To_int_or__lax(src, val_bgn, val_end, 0);
|
||||
else if (Bry_.Match(src, key_bgn, key_end, Style___width)) {} // '_width'
|
||||
else {
|
||||
if (this.xtra_style_bgn == -1) {
|
||||
this.xtra_style_bgn = key_bgn;
|
||||
this.xtra_style_end = atr_end;
|
||||
}
|
||||
public boolean On_atr(byte[] src, int atr_idx, int atr_val_bgn, int atr_val_end, int itm_bgn, int itm_end, int key_bgn, int key_end, int val_bgn, int val_end) {
|
||||
if (Bry_.Match(src, key_bgn, key_end, Style__max_width)) { // 'max-width'
|
||||
if (ul_style_max_w == 0) {
|
||||
ul_style_max_w = Bry_.To_int_or__lax(src, val_bgn, val_end, 0);
|
||||
return true;
|
||||
} // else if already set, fall-thru to below
|
||||
}
|
||||
else if (Bry_.Match(src, key_bgn, key_end, Style___width)) { // '_width'
|
||||
if (ul_style_w == 0) {
|
||||
ul_style_w = Bry_.To_int_or__lax(src, val_bgn, val_end, 0);
|
||||
return true;
|
||||
} // else if already set, fall-thru to below
|
||||
}
|
||||
if (this.xtra_style_bgn == -1) {
|
||||
this.xtra_style_bgn = itm_bgn;
|
||||
this.xtra_style_end = atr_val_end;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -20,14 +20,14 @@ import gplx.core.brys.*; import gplx.core.brys.fmtrs.*;
|
||||
import gplx.langs.htmls.*; import gplx.xowa.htmls.core.wkrs.bfr_args.*;
|
||||
class Xoh_gly_grp_wtr implements Bfr_arg {
|
||||
private final Bfr_arg_clearable[] arg_ary;
|
||||
private final Bfr_arg__hatr_id ul_id = Bfr_arg__hatr_id.New("xogly_li_");
|
||||
private final Bfr_arg__hatr_id ul_id = Bfr_arg__hatr_id.New_id("xogly_li_");
|
||||
private final Bfr_arg__hatr_gly_style ul_style = new Bfr_arg__hatr_gly_style(Gfh_atr_.Bry__style);
|
||||
private byte[] ul_cls, xtra_cls, xtra_atr_bry, ul_nl;
|
||||
private final Xoh_gly_itm_list_wtr itm_list_wtr = new Xoh_gly_itm_list_wtr();
|
||||
public Xoh_gly_grp_wtr() {
|
||||
arg_ary = new Bfr_arg_clearable[] {ul_id};
|
||||
}
|
||||
public void Init(boolean mode_is_diff, int id, byte[] cls, int ul_w, byte[] xtra_cls, byte[] xtra_style_bry, byte[] xtra_atr_bry, Xoh_gly_itm_wtr[] ary) {
|
||||
public void Init(boolean mode_is_diff, int id, byte[] cls, int ul_style_max_w, int ul_style_w, byte[] xtra_cls, byte[] xtra_style_bry, byte[] xtra_atr_bry, Xoh_gly_itm_wtr[] ary) {
|
||||
this.Clear();
|
||||
if (!mode_is_diff)
|
||||
ul_id.Set(id);
|
||||
@@ -36,7 +36,7 @@ class Xoh_gly_grp_wtr implements Bfr_arg {
|
||||
this.xtra_atr_bry = xtra_atr_bry;
|
||||
this.ul_nl = ary.length == 0 ? Bry_.Empty : Byte_ascii.Nl_bry; // TIDY: <ul></ul> should be on same line if 0 items
|
||||
itm_list_wtr.Init(ary);
|
||||
ul_style.Set_args(ul_w, xtra_style_bry);
|
||||
ul_style.Set_args(ul_style_max_w, ul_style_w, xtra_style_bry);
|
||||
}
|
||||
public void Clear() {
|
||||
for (Bfr_arg_clearable arg : arg_ary)
|
||||
@@ -72,35 +72,38 @@ class Xoh_gly_itm_list_wtr implements Bfr_arg {
|
||||
}
|
||||
class Bfr_arg__hatr_gly_style implements Bfr_arg {
|
||||
private final byte[] atr_bgn;
|
||||
private int width;
|
||||
private int max_w, w;
|
||||
private byte[] xtra_cls;
|
||||
public Bfr_arg__hatr_gly_style(byte[] key) {
|
||||
this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(key);
|
||||
this.Clear();
|
||||
}
|
||||
public void Set_args(int w, byte[] xtra_cls) {this.width = w; this.xtra_cls = xtra_cls;}
|
||||
public void Clear() {width = 0; xtra_cls = null;}
|
||||
public void Set_args(int max_w, int w, byte[] xtra_cls) {this.max_w = max_w; this.w = w; this.xtra_cls = xtra_cls;}
|
||||
public void Clear() {max_w = 0; w = 0; xtra_cls = null;}
|
||||
public void Bfr_arg__clear() {this.Clear();}
|
||||
public boolean Bfr_arg__missing() {return width == 0 && xtra_cls == null;}
|
||||
public boolean Bfr_arg__missing() {return max_w == 0 && xtra_cls == null;}
|
||||
public void Bfr_arg__add(Bry_bfr bfr) {
|
||||
if (Bfr_arg__missing()) return;
|
||||
bfr.Add(atr_bgn);
|
||||
if (width > 0) {
|
||||
if (max_w > 0) {
|
||||
bfr.Add(Style__frag_1);
|
||||
bfr.Add_int_variable(width);
|
||||
bfr.Add_int_variable(max_w);
|
||||
bfr.Add(Style__frag_3);
|
||||
}
|
||||
if (w > 0) {
|
||||
bfr.Add_byte_space();
|
||||
bfr.Add(Style__frag_2);
|
||||
bfr.Add_int_variable(width);
|
||||
bfr.Add_int_variable(w);
|
||||
bfr.Add(Style__frag_3);
|
||||
}
|
||||
if (xtra_cls != null) {
|
||||
if (width > 0) bfr.Add_byte_space();
|
||||
bfr.Add(xtra_cls);
|
||||
}
|
||||
bfr.Add_byte_quote();
|
||||
}
|
||||
private static final byte[]
|
||||
Style__frag_1 = Bry_.new_a7("max-width:")
|
||||
, Style__frag_2 = Bry_.new_a7("px; _width:")
|
||||
, Style__frag_2 = Bry_.new_a7("_width:")
|
||||
, Style__frag_3 = Bry_.new_a7("px;")
|
||||
;
|
||||
}
|
||||
@@ -23,8 +23,8 @@ public class Xoh_gly_html__dump__tst {
|
||||
@Test public void Basic() {
|
||||
fxt.Test__html(String_.Concat_lines_nl_skip_last
|
||||
( "<gallery>"
|
||||
, "File:A.jpg|A1"
|
||||
, "File:B.jpg|B1"
|
||||
, "File:A.png|A1"
|
||||
, "File:B.png|B1"
|
||||
, "</gallery>"
|
||||
), String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional'>"
|
||||
@@ -32,7 +32,7 @@ public class Xoh_gly_html__dump__tst {
|
||||
, " <div style='width:155px;'>"
|
||||
, " <div class='thumb' style='width:150px;'>"
|
||||
, " <div style='margin:15px auto;'>"
|
||||
, " <a href='/wiki/File:A.jpg' class='image' xowa_title='A.jpg'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''/></a>"
|
||||
, " <a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title=\"A.png\" data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''/></a>"
|
||||
, " </div>"
|
||||
, " </div>"
|
||||
, " <div class='gallerytext'><p>A1"
|
||||
@@ -45,7 +45,7 @@ public class Xoh_gly_html__dump__tst {
|
||||
, " <div style='width:155px;'>"
|
||||
, " <div class='thumb' style='width:150px;'>"
|
||||
, " <div style='margin:15px auto;'>"
|
||||
, " <a href='/wiki/File:B.jpg' class='image' xowa_title='B.jpg'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''/></a>"
|
||||
, " <a href='/wiki/File:B.png' class='image' xowa_title='B.png'><img data-xowa-title=\"B.png\" data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''/></a>"
|
||||
, " </div>"
|
||||
, " </div>"
|
||||
, " <div class='gallerytext'><p>B1"
|
||||
|
||||
@@ -16,7 +16,7 @@ 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.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*;
|
||||
import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.threads.poolables.*;
|
||||
import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.threads.poolables.*; import gplx.core.encoders.*;
|
||||
import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.hrefs.*; import gplx.xowa.htmls.core.hzips.*;
|
||||
import gplx.xowa.htmls.core.wkrs.bfr_args.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.lnkis.anchs.*;
|
||||
import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.ttls.*;
|
||||
@@ -29,19 +29,22 @@ public class Xoh_gly_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm {
|
||||
public byte[] Hook() {return hook;} private byte[] hook;
|
||||
public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) {
|
||||
Xoh_gly_grp_data data = (Xoh_gly_grp_data)data_obj;
|
||||
boolean xtra_atr = flag_bldr.Set_as_bool(Flag__ul__xtra_atr , data.Xtra_atr_exists());
|
||||
boolean xtra_cls = flag_bldr.Set_as_bool(Flag__ul__xtra_cls , data.Xtra_cls_exists());
|
||||
boolean xtra_style = flag_bldr.Set_as_bool(Flag__ul__xtra_style , data.Xtra_style_exists());
|
||||
int ul_style_max_w = data.Ul_style_max_w(), ul_style_w = data.Ul_style_w();
|
||||
boolean ul_style_w_diff = flag_bldr.Set_as_bool(Flag__ul__style_w_diff , ul_style_max_w != ul_style_w);
|
||||
boolean xtra_atr = flag_bldr.Set_as_bool(Flag__ul__xtra_atr , data.Xtra_atr_exists());
|
||||
boolean xtra_cls = flag_bldr.Set_as_bool(Flag__ul__xtra_cls , data.Xtra_cls_exists());
|
||||
boolean xtra_style = flag_bldr.Set_as_bool(Flag__ul__xtra_style , data.Xtra_style_exists());
|
||||
flag_bldr.Set(Flag__gly_tid, data.Gly_tid());
|
||||
int itms_len = data.Itms__len();
|
||||
|
||||
bfr.Add(hook);
|
||||
Xoh_hzip_int_.Encode(1, bfr, flag_bldr.Encode());
|
||||
Xoh_hzip_int_.Encode(1, bfr, data.Gly_w());
|
||||
Gfo_hzip_int_.Encode(1, bfr, flag_bldr.Encode());
|
||||
Gfo_hzip_int_.Encode(1, bfr, ul_style_max_w);
|
||||
if (ul_style_w_diff) Gfo_hzip_int_.Encode(1, bfr, ul_style_w);
|
||||
if (xtra_cls) bfr.Add_hzip_mid(src, data.Xtra_cls_bgn(), data.Xtra_cls_end());
|
||||
if (xtra_style) bfr.Add_hzip_mid(src, data.Xtra_style_bgn(), data.Xtra_style_end());
|
||||
if (xtra_atr) bfr.Add_hzip_mid(src, data.Xtra_atr_bgn(), data.Xtra_atr_end());
|
||||
Xoh_hzip_int_.Encode(1, bfr, itms_len);
|
||||
Gfo_hzip_int_.Encode(1, bfr, itms_len);
|
||||
for (int i = 0; i < itms_len; ++i) {
|
||||
Xoh_gly_itm_data itm_parser = data.Itms__get_at(i);
|
||||
bfr.Add_hzip_int(1, itm_parser.Li_w());
|
||||
@@ -50,19 +53,21 @@ public class Xoh_gly_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm {
|
||||
bfr.Add_byte((byte)(itm_parser.Capt_tid() + gplx.core.encoders.Base85_.A7_offset));
|
||||
bfr.Add_hzip_mid(src, itm_parser.Capt_bgn(), itm_parser.Capt_end());
|
||||
Xoh_hzip_wkr hzip_wkr = hctx.Pool_mgr__hzip().Mw__img();
|
||||
hzip_wkr.Encode1(bfr, hdoc_wkr, hctx, hpg, false, src, itm_parser.Img_parser());
|
||||
hzip_wkr.Encode1(bfr, hdoc_wkr, hctx, hpg, false, src, itm_parser.Img_data());
|
||||
hzip_wkr.Pool__rls();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) {
|
||||
int flag = rdr.Read_hzip_int(1); flag_bldr.Decode(flag);
|
||||
boolean xtra_atr = flag_bldr.Get_as_bool(Flag__ul__xtra_atr);
|
||||
boolean xtra_cls = flag_bldr.Get_as_bool(Flag__ul__xtra_cls);
|
||||
boolean xtra_style = flag_bldr.Get_as_bool(Flag__ul__xtra_style);
|
||||
byte cls_tid = flag_bldr.Get_as_byte(Flag__gly_tid);
|
||||
boolean ul_style_w_diff = flag_bldr.Get_as_bool(Flag__ul__style_w_diff);
|
||||
boolean xtra_atr = flag_bldr.Get_as_bool(Flag__ul__xtra_atr);
|
||||
boolean xtra_cls = flag_bldr.Get_as_bool(Flag__ul__xtra_cls);
|
||||
boolean xtra_style = flag_bldr.Get_as_bool(Flag__ul__xtra_style);
|
||||
byte cls_tid = flag_bldr.Get_as_byte(Flag__gly_tid);
|
||||
byte[] cls_bry = Gallery_mgr_base_.Get_bry_by_tid(cls_tid);
|
||||
int ul_w = rdr.Read_hzip_int(1);
|
||||
int ul_style_max_w = rdr.Read_hzip_int(1);
|
||||
int ul_style_w = ul_style_w_diff ? rdr.Read_hzip_int(1) : ul_style_max_w;
|
||||
byte[] xtra_cls_bry = xtra_cls ? rdr.Read_bry_to(): null;
|
||||
byte[] xtra_style_bry = xtra_style ? rdr.Read_bry_to(): null;
|
||||
byte[] xtra_atr_bry = xtra_atr ? rdr.Read_bry_to(): null;
|
||||
@@ -85,16 +90,17 @@ public class Xoh_gly_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm {
|
||||
img_data.Pool__rls();
|
||||
img_hzip.Pool__rls();
|
||||
}
|
||||
grp_wtr.Init(hctx.Mode_is_diff(), uid, cls_bry, ul_w, xtra_cls_bry, xtra_style_bry, xtra_atr_bry, itm_ary);
|
||||
grp_wtr.Init(hctx.Mode_is_diff(), uid, cls_bry, ul_style_max_w, ul_style_w, xtra_cls_bry, xtra_style_bry, xtra_atr_bry, itm_ary);
|
||||
grp_wtr.Bfr_arg__add(bfr);
|
||||
}
|
||||
public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx;
|
||||
public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_gly_hzip rv = new Xoh_gly_hzip(); rv.pool_mgr = mgr; rv.pool_idx = idx; rv.hook = (byte[])args[0]; return rv;}
|
||||
private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_(1, 1, 1, 3);
|
||||
private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_(1, 1, 1, 1, 3);
|
||||
private static final int // SERIALIZED
|
||||
Flag__ul__xtra_atr = 0
|
||||
, Flag__ul__xtra_cls = 1
|
||||
, Flag__ul__xtra_style = 2
|
||||
, Flag__gly_tid = 3
|
||||
Flag__ul__style_w_diff = 0
|
||||
, Flag__ul__xtra_atr = 1
|
||||
, Flag__ul__xtra_cls = 2
|
||||
, Flag__ul__xtra_style = 3
|
||||
, Flag__gly_tid = 4
|
||||
;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ public class Xoh_gly_hzip_tst {
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
@@ -35,7 +35,32 @@ public class Xoh_gly_hzip_tst {
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:B.png' class='image' xowa_title='B.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:B.png' class='image' xowa_title='B.png'><img data-xowa-title='B.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>B1</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>abc"));
|
||||
}
|
||||
@Test public void Clear_state() { // page # wasn't being cleared between gallery itms; PAGE:en.w:Almagest; DATE:2016-01-05
|
||||
fxt.Test__bicode("~'!{,L#{\"g{\"b0!A1~!1A.png~{\"d\"D\"D!#{\"g{\"b0!B1~!1B.png~{\"d\"D\"D!$abc", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional' style='max-width:978px; _width:978px;'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|2' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:B.png' class='image' xowa_title='B.png'><img data-xowa-title='B.png' data-xoimg='0|120|120|-1|-1|3' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>B1</p>"
|
||||
@@ -50,7 +75,7 @@ public class Xoh_gly_hzip_tst {
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'></div>"
|
||||
, "</div>"
|
||||
@@ -58,7 +83,7 @@ public class Xoh_gly_hzip_tst {
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'></div>"
|
||||
, "</div>"
|
||||
@@ -66,12 +91,14 @@ public class Xoh_gly_hzip_tst {
|
||||
, "</ul><p>abc</p>"));
|
||||
}
|
||||
@Test public void Capt_is_br() { // PURPOSE: handle captions which have <br>, not <p>; PAGE:s.w:Sociology; DATE:2015-12-20
|
||||
fxt.Test__bicode("~'!!\"{\"g{\"b0\"<b><i>A1</i></b>~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
fxt.Test__bicode(String_.Concat_lines_nl_skip_last
|
||||
( "~'!!\"{\"g{\"b0\"<b><i>A1</i></b>"
|
||||
, "~!1A.png~9\"D\"D"), String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'><br>"
|
||||
, "<b><i>A1</i></b>"
|
||||
@@ -80,13 +107,161 @@ public class Xoh_gly_hzip_tst {
|
||||
, "</li>"
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void No_max_width() { // PURPOSE: if no perrow=# then no "style='max-width:###; _width:###;'"
|
||||
@Test public void Capt_has_multiple_p() { // PURPOSE: handle captions with multiple <p>; PAGE:en.w:Wikipedia:Bot_requests/Archive_25; DATE:2016-01-12
|
||||
fxt.Test__bicode(String_.Concat_lines_nl_skip_last
|
||||
( "~'!!\"{\"g{\"b0!a<br>"
|
||||
, "b</p>"
|
||||
, "<p><br>"
|
||||
, "~!1A.png~9\"D\"D"), String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>a<br>"
|
||||
, "b</p>"
|
||||
, "<p><br>"
|
||||
, "</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void Capt_has_complicated_nl_behavior() {// handle complicated captions which force <div> on different line PAGE:en.w:Tamago_kake_gohan; DATE:2016-01-05
|
||||
fxt.Test__bicode(String_.Concat_lines_nl_skip_last
|
||||
( "~'!!\"{\"g{\"b>\"<div class=\"center\"><a href=\"/wiki/B.png\" class=\"image\" xowa_title=\"B.png\"><img data-xowa-title=\"A.png\" data-xoimg=\"0|120|-1|-1|-1|-1\" src=\"\" width=\"0\" height=\"0\" alt=\"\"></a></div>"
|
||||
, "abc~\"\\A.png~#9\"D\"D"
|
||||
), String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:29px auto;'><a href='/wiki/A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'><br>"
|
||||
, "<div class='center'><a href='/wiki/B.png' class='image' xowa_title='B.png'><img data-xowa-title='A.png' data-xoimg='0|120|-1|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "abc</div>" // NOTE: tidy forces </div> to be on same line instead of next
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"
|
||||
));
|
||||
}
|
||||
@Test public void Style__no_max_width() { // PURPOSE: if no perrow=# then no "style='max-width:###; _width:###;'"
|
||||
fxt.Test__bicode("~'!!\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void Style__no_width() { // PURPOSE: if "_width" omitted, do not add back; EX: style="max-width:648px; margin:auto; background:transparent;"; PAGE:en.w:Wikipedia:Village_pump_(technical)/Archive_86 DATE:2016-01-12
|
||||
fxt.Test__bicode("~'i{,L! color:blue;~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional' style='max-width:978px; color:blue;'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void Style__max_width_duped() { // PURPOSE: if max-width duped, do not delete 2nd; EX: style="max-width:648px; color:blue; max-width:648px;"; PAGE:en.w:Wikipedia:Village_pump_(technical)/Archive_86 DATE:2016-01-12
|
||||
fxt.Test__bicode("~'){(Z max-width:648px; color:blue;~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional' style='max-width:652px; _width:652px; max-width:648px; color:blue;'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void Style__append() { // PURPOSE: handle appended style; EX: <gallery perrow=4 style='color:blue; float:left;'>
|
||||
fxt.Test__bicode("~'){,L color:blue; float:left;~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional' style='max-width:978px; _width:978px; color:blue; float:left;'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void Style__invalid_unclosed() { // handle broken styles; EX: <gallery style='center'>
|
||||
fxt.Test__bicode("~'9!center~center~\"{\"g{\"bl!abc~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional center' style='center'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:75px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>abc</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"
|
||||
));
|
||||
}
|
||||
@Test public void Style__extra_colon() { // handle broken styles; EX: <gallery style='a:b:c:d;' PAGE:en.w:Bronze_Horseman DATE:2016-01-05
|
||||
fxt.Test__bicode("~'9!center~color:red:float:right;~\"{\"g{\"bl!abc~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional center' style='color:red:float:right;'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:75px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>abc</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"
|
||||
));
|
||||
}
|
||||
@Test public void Style__replace() { // PURPOSE: handle replaced style; EX: <gallery style='color:blue; float:left;'>
|
||||
fxt.Test__bicode("~')!color:blue; float:left;~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional' style='color:blue; float:left;'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void Style__ws() { // PURPOSE: handle ws in style; EX: <gallery class="gallery mw-gallery-traditional" style="max-width:1115px; _width:1115px; color:blue;'>; PAGE:en.w:Anti-Serb_sentiment; DATE:2016-01-08
|
||||
fxt.Test__bicode("~'){,L color:blue;~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional' style='max-width:978px; _width:978px; color:blue;'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
@@ -101,7 +276,7 @@ public class Xoh_gly_hzip_tst {
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
@@ -110,28 +285,13 @@ public class Xoh_gly_hzip_tst {
|
||||
, "</li>"
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void Xtra_style__append() { // PURPOSE: handle appended style; EX: <gallery perrow=4 style='color:blue; float:left;'>
|
||||
fxt.Test__bicode("~'){,Lcolor:blue; float:left;~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional' style='max-width:978px; _width:978px; color:blue; float:left;'>"
|
||||
@Test public void Extra_cls__gallery() { // handle redundant gallery; EX: <gallery class='gallery'>; PAGE:en.w:Butuan; DATE:2016-01-05
|
||||
fxt.Test__bicode("~'1!gallery~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional gallery'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
, "</div>"
|
||||
, "</div>"
|
||||
, "</li>"
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void Xtra_style__replace() { // PURPOSE: handle replaced style; EX: <gallery style='color:blue; float:left;'>
|
||||
fxt.Test__bicode("~')!color:blue; float:left;~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional' style='color:blue; float:left;'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
@@ -146,7 +306,7 @@ public class Xoh_gly_hzip_tst {
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1</p>"
|
||||
@@ -156,12 +316,15 @@ public class Xoh_gly_hzip_tst {
|
||||
, "</ul>"));
|
||||
}
|
||||
@Test public void Tidy__br_at_end() { // PURPOSE: handle inconsistent tidy behavior where <p> is put on one line ("<p>a</p>") unless it ends with <br> ("<p>a<br>\n</p>")
|
||||
fxt.Test__bicode("~'!!\"{\"g{\"b0!A1<br>~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last
|
||||
fxt.Test__bicode(String_.Concat_lines_nl_skip_last
|
||||
( "~'!!\"{\"g{\"b0!A1<br>"
|
||||
, "~!1A.png~9\"D\"D"
|
||||
), String_.Concat_lines_nl_skip_last
|
||||
( "<ul class='gallery mw-gallery-traditional'>"
|
||||
, "<li class='gallerybox' style='width:155px;'>"
|
||||
, "<div style='width:155px;'>"
|
||||
, "<div class='thumb' style='width:150px;'>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "<div style='margin:15px auto;'><a href='/wiki/File:A.png' class='image' xowa_title='A.png'><img data-xowa-title='A.png' data-xoimg='0|120|120|-1|-1|-1' src='' width='0' height='0' alt=''></a></div>"
|
||||
, "</div>"
|
||||
, "<div class='gallerytext'>"
|
||||
, "<p>A1<br>" // TIDY: <br> forces </p> to be on next line
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user