mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
'v3.9.4.1'
This commit is contained in:
@@ -22,6 +22,8 @@ public class Xow_page_tid {
|
||||
public static byte Identify(int wiki_tid, int ns_id, byte[] ttl) {
|
||||
switch (ns_id) {
|
||||
case Xow_ns_.Tid__mediawiki:
|
||||
byte rv = Identify_by_ttl(ttl);
|
||||
return rv == Tid_wikitext ? Tid_msg : rv; // if mediawiki ns, but not css / js, return msg, not wikitext; DATE:2016-09-12
|
||||
case Xow_ns_.Tid__user:
|
||||
return Identify_by_ttl(ttl);
|
||||
case Xow_ns_.Tid__module:
|
||||
@@ -38,5 +40,5 @@ public class Xow_page_tid {
|
||||
else return Tid_wikitext;
|
||||
}
|
||||
private static final byte[] Ext_js = Bry_.new_a7(".js"), Ext_css = Bry_.new_a7(".css"), Ext_doc= Bry_.new_a7("/doc");
|
||||
public static final byte Tid_wikitext = 1, Tid_json = 2, Tid_js = 3, Tid_css = 4, Tid_lua = 5;
|
||||
public static final byte Tid_wikitext = 1, Tid_json = 2, Tid_js = 3, Tid_css = 4, Tid_lua = 5, Tid_msg = 6;
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ public class Xowv_repo_mgr implements Xow_repo_mgr {
|
||||
int len = repos.Count();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xof_repo_pair pair = (Xof_repo_pair)repos.Get_at(i);
|
||||
if (pair.Repo_idx() == id) return pair;
|
||||
if (pair.Id() == id) return pair;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ public class Xow_cache_mgr {
|
||||
ifexist_cache.Clear();
|
||||
wiki.Appe().Wiki_mgr().Wdata_mgr().Clear(); // moved from ctx.Clear(); DATE:2016-07-21
|
||||
}
|
||||
wiki.Html_mgr().Catpage_mgr().Free_mem_all();
|
||||
tmpl_result_cache.Clear();
|
||||
defn_cache.Free_mem_all();
|
||||
misc_cache.Clear();
|
||||
|
||||
@@ -21,7 +21,12 @@ public class Xowd_cfg_tbl_ {
|
||||
public static final String Tbl_name = "xowa_cfg";
|
||||
public static Db_cfg_tbl New(gplx.dbs.Db_conn conn) {return New(conn, Tbl_name);}
|
||||
public static Db_cfg_tbl New(gplx.dbs.Db_conn conn, String tbl_name) {return new Db_cfg_tbl(conn, tbl_name);}
|
||||
public static Db_cfg_tbl Get_or_null(gplx.dbs.Db_conn conn) {
|
||||
public static Db_cfg_tbl Get_or_null(Db_conn conn) {
|
||||
return conn.Meta_tbl_exists(Tbl_name) ? new Db_cfg_tbl(conn, Tbl_name) : null;
|
||||
}
|
||||
public static Db_cfg_tbl Get_or_fail(Db_conn conn) {
|
||||
Db_cfg_tbl rv = Get_or_null(conn);
|
||||
if (rv == null) throw Err_.New("xowa_cfg tbl does not exist: file={0}", conn.Conn_info().Raw());
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,9 +28,9 @@ public class Xowd_category_itm {
|
||||
public int Count_pages() {return count_pages;} private int count_pages;
|
||||
public int Count_by_tid(byte tid) {
|
||||
switch (tid) {
|
||||
case Xoa_ctg_mgr.Tid_subc: return count_subcs;
|
||||
case Xoa_ctg_mgr.Tid_page: return count_pages;
|
||||
case Xoa_ctg_mgr.Tid_file: return count_files;
|
||||
case Xoa_ctg_mgr.Tid__subc: return count_subcs;
|
||||
case Xoa_ctg_mgr.Tid__page: return count_pages;
|
||||
case Xoa_ctg_mgr.Tid__file: return count_files;
|
||||
default: throw Err_.new_unhandled(tid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ package gplx.xowa.wikis.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa
|
||||
import gplx.core.primitives.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.bldrs.*; import gplx.xowa.addons.wikis.ctgs.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.catpages.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.doms.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.catpages.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.doms.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.urls.*;
|
||||
public interface Xodb_load_mgr {
|
||||
void Load_init (Xowe_wiki wiki);
|
||||
void Load_page (Xowd_page_itm rv, Xow_ns ns);
|
||||
@@ -27,10 +27,7 @@ public interface Xodb_load_mgr {
|
||||
void Load_by_ids (Cancelable cancelable, List_adp rv, int bgn, int end);
|
||||
boolean Load_by_ttl (Xowd_page_itm rv, Xow_ns ns, byte[] ttl);
|
||||
void Load_by_ttls (Cancelable cancelable, Ordered_hash rv, boolean fill_idx_fields_only, int bgn, int end);
|
||||
int Load_ctg_count (byte[] ttl);
|
||||
boolean Load_ctg_v1 (Xoctg_catpage_ctg rv, byte[] ttl);
|
||||
void Load_ctg_v2a (Xoctg_catpage_ctg rv, Xoctg_catpage_url url_ctg, byte[] ttl_bry, int limit, boolean app_is_cmd);
|
||||
Xowd_page_itm[] Load_ctg_list (byte[][] ctg_ttls);
|
||||
void Load_ttls_for_all_pages (Cancelable cancelable, List_adp rslt_list, Xowd_page_itm rslt_nxt, Xowd_page_itm rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item);
|
||||
void Load_ttls_for_search_suggest(Cancelable cancelable, List_adp rslt_list, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item);
|
||||
byte[] Find_random_ttl (Xow_ns ns);
|
||||
|
||||
@@ -21,7 +21,7 @@ import gplx.xowa.apps.gfs.*; import gplx.xowa.addons.wikis.ctgs.bldrs.*; import
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.wikis.*; import gplx.xowa.wikis.metas.*; import gplx.xowa.wikis.data.*;
|
||||
import gplx.xowa.addons.wikis.searchs.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.catpages.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.doms.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.catpages.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.doms.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.urls.*;
|
||||
public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
private Xodb_mgr_sql db_mgr; Xow_db_mgr fsys_mgr;
|
||||
public Xodb_load_mgr_sql(Xow_wiki wiki, Xodb_mgr_sql db_mgr, Xow_db_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;}
|
||||
@@ -63,88 +63,17 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
Xowd_category_itm ctg = fsys_mgr.Db__cat_core().Tbl__cat_core().Select(cat_page_id); if (ctg == Xowd_category_itm.Null) return false;
|
||||
return Ctg_select_v1(db_mgr.Wiki(), db_mgr.Core_data_mgr(), rv, ctg.File_idx(), ctg);
|
||||
}
|
||||
public void Load_ctg_v2a(Xoctg_catpage_ctg rv, Xoctg_catpage_url ctg_url, byte[] ctg_ttl, int load_max, boolean app_is_cmd) {
|
||||
int cat_page_id = db_mgr.Core_data_mgr().Tbl__page().Select_id(Xow_ns_.Tid__category, ctg_ttl); if (cat_page_id == Xowd_page_itm.Id_null) return;
|
||||
Xowd_category_itm ctg = fsys_mgr.Db__cat_core().Tbl__cat_core().Select(cat_page_id); if (ctg == Xowd_category_itm.Null) return;
|
||||
List_adp list = List_adp_.New();
|
||||
Load_ctg_v2a_db_retrieve(rv, ctg_url, cat_page_id, load_max, ctg.File_idx(), list, app_is_cmd);
|
||||
Load_ctg_v2a_ui_sift(rv, ctg, list);
|
||||
}
|
||||
private void Load_ctg_v2a_db_retrieve(Xoctg_catpage_ctg rv, Xoctg_catpage_url ctg_url, int cat_page_id, int load_max, int cat_link_db_idx, List_adp list, boolean app_is_cmd) {
|
||||
int len = Xoa_ctg_mgr.Tid__max;
|
||||
for (byte i = Xoa_ctg_mgr.Tid_subc; i < len; i++) {
|
||||
boolean arg_is_from = ctg_url.Grp_fwds()[i] == Bool_.N_byte;
|
||||
byte[] arg_sortkey = ctg_url.Grp_idxs()[i];
|
||||
Xowd_cat_link_tbl cat_link_tbl = db_mgr.Core_data_mgr().Dbs__get_by_id_or_fail(cat_link_db_idx).Tbl__cat_link();
|
||||
int found = cat_link_tbl.Select_by_type(list, cat_page_id, i, arg_sortkey, arg_is_from, load_max);
|
||||
if (found > 0 && found == load_max + 1) {
|
||||
Xowd_page_itm last_page = (Xowd_page_itm)List_adp_.Pop(list);
|
||||
Xoctg_page_xtn last_ctg = (Xoctg_page_xtn)last_page.Xtn();
|
||||
rv.Grp_by_tid(i).Itms__nth_sortkey_(last_ctg.Sortkey());
|
||||
}
|
||||
}
|
||||
db_mgr.Core_data_mgr().Tbl__page().Select_in__id(Cancelable_.Never, !app_is_cmd, list);
|
||||
}
|
||||
private void Load_ctg_v2a_ui_sift(Xoctg_catpage_ctg rv, Xowd_category_itm ctg, List_adp list) {
|
||||
int len = list.Count();
|
||||
Xowe_wiki wiki = this.db_mgr.Wiki();
|
||||
byte prv_tid = Byte_.Max_value_127;
|
||||
Xoctg_catpage_grp view_grp = null;
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowd_page_itm db_page = (Xowd_page_itm)list.Get_at(i);
|
||||
if (db_page.Ns_id() == Int_.Min_value) continue; // HACK: page not found; ignore
|
||||
Xoctg_page_xtn db_ctg = (Xoctg_page_xtn)db_page.Xtn();
|
||||
byte cur_tid = db_ctg.Tid();
|
||||
if (prv_tid != cur_tid) {
|
||||
view_grp = rv.Grp_by_tid(cur_tid);
|
||||
prv_tid = cur_tid;
|
||||
}
|
||||
Xoa_ttl ttl = Xoa_ttl.Parse(wiki, db_page.Ns_id(), db_page.Ttl_page_db());
|
||||
Xoctg_catpage_itm view_itm = new Xoctg_catpage_itm(db_page.Id(), ttl, db_ctg.Sortkey());
|
||||
view_grp.Itms__add(view_itm);
|
||||
}
|
||||
rv.Make_itms();
|
||||
}
|
||||
public void Load_ttls_for_all_pages(Cancelable cancelable, List_adp rslt_list, Xowd_page_itm rslt_nxt, Xowd_page_itm rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
|
||||
db_mgr.Core_data_mgr().Tbl__page().Select_for_special_all_pages(cancelable, rslt_list, rslt_nxt, rslt_prv, rslt_count, ns, key, max_results, min_page_len, browse_len, include_redirects, fetch_prv_item);
|
||||
}
|
||||
public void Load_ttls_for_search_suggest(Cancelable cancelable, List_adp rslt_list, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) {
|
||||
db_mgr.Core_data_mgr().Tbl__page().Select_for_search_suggest(cancelable, rslt_list, ns, key, max_results, min_page_len, browse_len, include_redirects, fetch_prv_item);
|
||||
}
|
||||
public int Load_ctg_count(byte[] ttl) {
|
||||
if (db_mgr.Core_data_mgr().Db__cat_core() == null) return 0;
|
||||
int page_id = db_mgr.Core_data_mgr().Tbl__page().Select_id(Xow_ns_.Tid__category, ttl);
|
||||
if (page_id == Xowd_page_itm.Id_null) return 0; // title not found; return 0;
|
||||
return db_mgr.Core_data_mgr().Db__cat_core().Tbl__cat_core().Select(page_id).Count_all();
|
||||
}
|
||||
public byte[] Load_qid(byte[] wiki_alias, byte[] ns_num, byte[] ttl) {return db_mgr.Core_data_mgr().Db__wbase().Tbl__wbase_qid().Select_qid(wiki_alias, ns_num, ttl);}
|
||||
public int Load_pid(byte[] lang_key, byte[] pid_name) {return db_mgr.Core_data_mgr().Db__wbase().Tbl__wbase_pid().Select_pid(lang_key, pid_name);}
|
||||
public byte[] Find_random_ttl(Xow_ns ns) {return db_mgr.Core_data_mgr().Tbl__page().Select_random(ns);}
|
||||
public Xodb_page_rdr Get_page_rdr(Xowe_wiki wiki) {return new Xodb_page_rdr__sql(wiki);}
|
||||
public void Clear() {}
|
||||
public Xowd_page_itm[] Load_ctg_list(byte[][] ctg_ttls) {
|
||||
if (db_mgr.Core_data_mgr().Db__cat_core() == null) return Xowd_page_itm.Ary_empty;
|
||||
int len = ctg_ttls.length;
|
||||
Ordered_hash hash = Ordered_hash_.New_bry();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowd_page_itm page = new Xowd_page_itm();
|
||||
byte[] ttl = Xoa_ttl.Replace_spaces(ctg_ttls[i]); // NOTE: ctg_ttls has spaces since v1 rendered it literally;
|
||||
page.Ttl_page_db_(ttl);
|
||||
if (!hash.Has(ttl))
|
||||
hash.Add(ttl, page);
|
||||
}
|
||||
len = hash.Count(); // must update len (!hash.Has() may have skipped titles)
|
||||
db_mgr.Core_data_mgr().Tbl__page().Select_in__ttl(Cancelable_.Never, hash, Xow_ns_.Tid__category, 0, len);
|
||||
Ordered_hash hash2 = Ordered_hash_.New();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowd_page_itm page = (Xowd_page_itm)hash.Get_at(i);
|
||||
if (!hash2.Has(page.Id_val()))
|
||||
hash2.Add(page.Id_val(), page);
|
||||
}
|
||||
len = hash2.Count(); // must update len (!hash2.Has() may have skipped titles)
|
||||
db_mgr.Core_data_mgr().Db__cat_core().Tbl__cat_core().Select_by_cat_id_in(Cancelable_.Never, hash2, 0, len);
|
||||
return (Xowd_page_itm[])hash.To_ary(Xowd_page_itm.class);
|
||||
}
|
||||
private static boolean Ctg_select_v1(Xowe_wiki wiki, Xow_db_mgr core_data_mgr, Xoctg_catpage_ctg view_ctg, int link_db_id, Xowd_category_itm ctg) {
|
||||
List_adp link_list = List_adp_.New();
|
||||
core_data_mgr.Dbs__get_by_id_or_fail(link_db_id).Tbl__cat_link().Select_in(link_list, ctg.Id());
|
||||
@@ -167,9 +96,9 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
}
|
||||
public static byte Load_ctg_v1_tid(int ns_id) {
|
||||
switch (ns_id) {
|
||||
case Xow_ns_.Tid__category: return Xoa_ctg_mgr.Tid_subc;
|
||||
case Xow_ns_.Tid__file: return Xoa_ctg_mgr.Tid_file;
|
||||
default: return Xoa_ctg_mgr.Tid_page;
|
||||
case Xow_ns_.Tid__category: return Xoa_ctg_mgr.Tid__subc;
|
||||
case Xow_ns_.Tid__file: return Xoa_ctg_mgr.Tid__file;
|
||||
default: return Xoa_ctg_mgr.Tid__page;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,174 +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.wikis.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*;
|
||||
import org.junit.*; import gplx.core.primitives.*; import gplx.xowa.bldrs.*; import gplx.xowa.addons.wikis.ctgs.*; import gplx.dbs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.catpages.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.doms.*; import gplx.xowa.addons.wikis.ctgs.dbs.*;
|
||||
public class Xodb_load_mgr_sql_tst {
|
||||
@Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Clear();} private Xodb_load_mgr_sql_fxt fxt = new Xodb_load_mgr_sql_fxt();
|
||||
@After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();}
|
||||
@Test public void Load_ctg_ttls() {
|
||||
if (Xoa_test_.Db_skip()) return;
|
||||
Xowd_page_itm[] ctgs = fxt.pages_
|
||||
( fxt.ctg_(1, "Ctg_1", Bool_.Y, 10, 11, 12)
|
||||
, fxt.ctg_(2, "Ctg_2", Bool_.N, 20, 21, 22)
|
||||
, fxt.ctg_(3, "Ctg_3", Bool_.Y, 30, 31, 32)
|
||||
);
|
||||
fxt.Init_save_ctgs(ctgs);
|
||||
fxt.Test_load_ctg_list(ctgs);
|
||||
}
|
||||
}
|
||||
class Xoctg_catpage_url_mok extends Xoctg_catpage_url { public Xoctg_catpage_url_mok Page_bgn_(String v) {return Grp(Xoa_ctg_mgr.Tid_page, Bool_.Y, v);}
|
||||
public Xoctg_catpage_url_mok Page_end_(String v) {return Grp(Xoa_ctg_mgr.Tid_page, Bool_.N, v);}
|
||||
Xoctg_catpage_url_mok Grp(byte tid, boolean v, String bmk) {
|
||||
this.Grp_fwds()[tid] = v ? Bool_.Y_byte : Bool_.N_byte;
|
||||
this.Grp_idxs()[tid] = Bry_.new_a7(bmk);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
class Xodb_load_mgr_sql_fxt {
|
||||
Db_mgr_fxt fxt; Int_obj_ref next_id = Int_obj_ref.New(1); Xoae_app app; Xowe_wiki wiki;
|
||||
public void Clear() {
|
||||
if (fxt == null) {
|
||||
fxt = new Db_mgr_fxt();
|
||||
fxt.Ctor_fsys();
|
||||
fxt.Init_db_sqlite();
|
||||
wiki = fxt.Wiki();
|
||||
app = wiki.Appe();
|
||||
}
|
||||
}
|
||||
public void Rls() {fxt.Rls();}
|
||||
public Xowd_page_itm[] pages_(Xowd_page_itm... ary) {return ary;}
|
||||
public Xowd_page_itm ctg_(int id, String ttl, boolean hidden, int count_subcs, int count_files, int count_pages) {
|
||||
Xowd_page_itm rv = new Xowd_page_itm().Ns_id_(Xow_ns_.Tid__category).Id_(id).Ttl_page_db_(Bry_.new_a7(ttl));
|
||||
Xowd_category_itm ctg = Xowd_category_itm.load_(id, 0, hidden, count_subcs, count_files, count_pages);
|
||||
rv.Xtn_(ctg);
|
||||
return rv;
|
||||
}
|
||||
public void Init_save_ctgs(Xowd_page_itm[] ary) {
|
||||
int len = ary.length;
|
||||
Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql();
|
||||
Xowd_cat_core_tbl cat_core_tbl = Xodb_cat_db_.Get_cat_core_or_fail(db_mgr.Core_data_mgr());
|
||||
cat_core_tbl.Create_tbl();
|
||||
DateAdp modified = Datetime_now.Get();
|
||||
Xowd_page_tbl tbl_page = wiki.Db_mgr_as_sql().Core_data_mgr().Tbl__page();
|
||||
tbl_page.Insert_bgn();
|
||||
cat_core_tbl.Insert_bgn();
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowd_page_itm page = ary[i];
|
||||
tbl_page.Insert_cmd_by_batch(page.Id(), page.Ns_id(), page.Ttl_page_db(), false, modified, 10, page.Id(), 0, 0);
|
||||
Xowd_category_itm ctg_itm = (Xowd_category_itm)page.Xtn();
|
||||
cat_core_tbl.Insert_cmd_by_batch(ctg_itm.Id(), ctg_itm.Count_pages(), ctg_itm.Count_subcs(), ctg_itm.Count_files(), Bool_.To_byte(ctg_itm.Hidden()), 0);
|
||||
}
|
||||
cat_core_tbl.Insert_end();
|
||||
tbl_page.Insert_end();
|
||||
}
|
||||
public void Test_load_ctg_list(Xowd_page_itm[] ary) {
|
||||
int len = ary.length;
|
||||
byte[][] ttls = new byte[len][];
|
||||
for (int i = 0; i < len; i++) {
|
||||
ttls[i] = ary[i].Ttl_page_db();
|
||||
}
|
||||
Xowd_page_itm[] actl = wiki.Db_mgr_as_sql().Load_mgr().Load_ctg_list(ttls);
|
||||
Tfds.Eq_str_lines(Xto_str(ary), Xto_str(actl));
|
||||
}
|
||||
private static String Xto_str(Xowd_page_itm[] ary) {
|
||||
Bry_bfr bfr = Bry_bfr_.New();
|
||||
int len = ary.length;
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xowd_page_itm page = ary[i];
|
||||
Xowd_category_itm ctg_itm = (Xowd_category_itm)page.Xtn();
|
||||
bfr.Add_int_variable(page.Id()).Add_byte_pipe();
|
||||
bfr.Add(page.Ttl_page_db()).Add_byte_pipe();
|
||||
bfr.Add_byte(Bool_.To_byte(ctg_itm.Hidden())).Add_byte_nl();
|
||||
}
|
||||
return bfr.To_str_and_clear();
|
||||
}
|
||||
public Xoctg_catpage_url_mok ctg_url_() {return new Xoctg_catpage_url_mok();}
|
||||
public Xodb_load_mgr_sql_fxt Init_limit_(int v) {limit = v; return this;} private int limit = 3;
|
||||
public void Test_select(Xoctg_catpage_url ctg_url, Xoctg_mok_ctg expd) {
|
||||
Xoctg_catpage_ctg view_ctg = new Xoctg_catpage_ctg(expd.Ttl());
|
||||
wiki.Db_mgr_as_sql().Load_mgr().Load_ctg_v2a(view_ctg, ctg_url, expd.Ttl(), limit, false);
|
||||
for (byte i = 0; i < Xoa_ctg_mgr.Tid__max; i++) {
|
||||
Xoctg_catpage_grp view_grp = view_ctg.Grp_by_tid(i);
|
||||
Xoctg_mok_grp mok_grp = expd.Grps_get_or_new(i);
|
||||
Tfds.Eq_ary_str(Xto_str(mok_grp), Xto_str(view_grp));
|
||||
Tfds.Eq(String_.new_a7(mok_grp.Last_plus_one_sortkey()), String_.new_a7(view_grp.Itms__nth_sortkey()));
|
||||
}
|
||||
}
|
||||
String[] Xto_str(Xoctg_catpage_grp grp) {
|
||||
Xoctg_catpage_itm[] ary = grp.Itms();
|
||||
int len = ary.length;
|
||||
String[] rv = new String[len];
|
||||
for (int i = 0; i< len; i++) {
|
||||
Xoctg_catpage_itm itm = ary[i];
|
||||
rv[i] = itm.Page_ttl().Page_db_as_str();
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
String[] Xto_str(Xoctg_mok_grp grp) {
|
||||
List_adp list = grp.Itms();
|
||||
int len = list.Count();
|
||||
String[] rv = new String[len];
|
||||
for (int i = 0; i< len; i++) {
|
||||
Xowd_page_itm itm = (Xowd_page_itm)list.Get_at(i);
|
||||
rv[i] = String_.new_a7(itm.Ttl_page_db());
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
public Xoctg_mok_ctg ctg_() {
|
||||
Xoctg_mok_ctg rv = new Xoctg_mok_ctg(next_id);
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
class Xoctg_mok_grp {
|
||||
public byte Tid() {return tid;} public Xoctg_mok_grp Tid_(byte v) {this.tid = v; return this;} private byte tid;
|
||||
public byte[] Last_plus_one_sortkey() {return last_plus_one_sortkey;} public Xoctg_mok_grp Last_plus_one_sortkey_(byte[] v) {this.last_plus_one_sortkey = v; return this;} private byte[] last_plus_one_sortkey;
|
||||
public List_adp Itms() {return itms;} List_adp itms = List_adp_.New();
|
||||
}
|
||||
class Xoctg_mok_ctg {
|
||||
public Xoctg_mok_ctg(Int_obj_ref next_id) {this.next_id = next_id;} Int_obj_ref next_id;
|
||||
public byte[] Ttl() {return ttl;}
|
||||
public Xoctg_mok_ctg Ttl_(String v) {return Ttl_(Bry_.new_a7(v));}
|
||||
public Xoctg_mok_ctg Ttl_(byte[] v) {this.ttl = v; return this;} private byte[] ttl;
|
||||
public Xoctg_mok_grp[] Grps() {return grps;} private Xoctg_mok_grp[] grps = new Xoctg_mok_grp[3];
|
||||
public Xoctg_mok_grp Grps_get_or_new(byte tid) {
|
||||
Xoctg_mok_grp rv = grps[tid];
|
||||
if (rv == null) {
|
||||
rv = new Xoctg_mok_grp().Tid_(tid);
|
||||
grps[tid] = rv;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
public Xoctg_mok_ctg Grp_pages_(int count) {return Grp_pages_(0, count, null);}
|
||||
public Xoctg_mok_ctg Grp_pages_(int bgn, int end, String last_itm_plus_one_sortkey) {
|
||||
Xoctg_mok_grp grp = Grps_get_or_new(Xoa_ctg_mgr.Tid_page);
|
||||
byte[] ttl_prefix = Bry_.new_a7("Page_");
|
||||
int ns_id = Xow_ns_.Tid__main;
|
||||
byte ctg_tid = Xoa_ctg_mgr.Tid_page;
|
||||
for (int i = bgn; i < end; i++) {
|
||||
byte[] ttl = Bry_.Add(ttl_prefix, Bry_.new_a7(Int_.To_str_pad_bgn_zero(i, 3)));
|
||||
Xoctg_page_xtn db_ctg = new Xoctg_page_xtn(ctg_tid, ttl);
|
||||
Xowd_page_itm page = new Xowd_page_itm();
|
||||
int page_id = next_id.Val_add_post();
|
||||
page.Id_(page_id).Ns_id_(ns_id).Ttl_page_db_(ttl).Xtn_(db_ctg);
|
||||
grp.Itms().Add(page);
|
||||
}
|
||||
grp.Last_plus_one_sortkey_(Bry_.new_a7(last_itm_plus_one_sortkey));
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,7 @@ import gplx.xowa.wikis.tdbs.*; import gplx.xowa.wikis.tdbs.hives.*; import gplx.
|
||||
import gplx.xowa.wikis.pages.*;
|
||||
import gplx.xowa.addons.wikis.searchs.specials.*;
|
||||
import gplx.xowa.guis.views.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.catpages.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.doms.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.htmls.catpages.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.doms.*; import gplx.xowa.addons.wikis.ctgs.htmls.catpages.urls.*;
|
||||
public class Xodb_load_mgr_txt implements Xodb_load_mgr {
|
||||
private final Xob_xdat_file tmp_xdat_file = new Xob_xdat_file(); private final Xob_xdat_itm tmp_xdat_itm = new Xob_xdat_itm();
|
||||
private final Xowd_page_itm tmp_page = new Xowd_page_itm();
|
||||
@@ -439,7 +439,6 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
|
||||
Xob_xdat_itm pid_itm = Load_xdat_itm_by_dir(pids_root.GenSubDir(String_.new_u8(lang_key)), pid_name); if (pid_itm == null) return gplx.xowa.xtns.wbases.Wdata_wiki_mgr.Pid_null;
|
||||
return Bry_.To_int_or(pid_itm.Src(), pid_itm.Itm_bgn() + pid_name.length + 1 + 1, pid_itm.Itm_end(), gplx.xowa.xtns.wbases.Wdata_wiki_mgr.Pid_null); // extract pid; note that all itms have format of "ttl|pid"; +1=skip pipe; +1 skip p
|
||||
} Io_url pids_root;
|
||||
public int Load_ctg_count(byte[] ttl) {throw Err_.new_deprecated("XOWA no longer supports categories for text databases");}
|
||||
Xob_xdat_itm Load_xdat_itm_by_dir(Io_url dir, byte[] ttl) {
|
||||
Xoa_hive_mgr hive_mgr = wiki.Appe().Hive_mgr();
|
||||
int fil_idx = hive_mgr.Find_fil(dir, ttl); if (fil_idx == Xowd_regy_mgr.Regy_null) return null; // sub_dir not found; EX: commonswiki if qid; fr if pid;
|
||||
@@ -447,8 +446,6 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
|
||||
rdr.Find(tmp_xdat_itm, ttl, 0, Byte_ascii.Pipe, true);
|
||||
return tmp_xdat_itm.Found_exact() ? tmp_xdat_itm : null;
|
||||
}
|
||||
public void Load_ctg_v2a(Xoctg_catpage_ctg rv, Xoctg_catpage_url url_ctg, byte[] ttl_bry, int limit, boolean app_is_cmd) {throw Err_.new_deprecated("XOWA no longer supports categories for text databases");}
|
||||
public Xowd_page_itm[] Load_ctg_list(byte[][] ttls) {throw Err_.new_deprecated("XOWA no longer supports categories for text databases");}
|
||||
public Xodb_page_rdr Get_page_rdr(Xowe_wiki wiki) {return new Xodb_page_rdr__tdb(wiki);}
|
||||
static final String GRP_KEY = "xowa.wiki.db.load";
|
||||
}
|
||||
|
||||
@@ -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.wikis.nss; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*;
|
||||
import gplx.xowa.bldrs.cmds.*; import gplx.xowa.apps.urls.*;
|
||||
import gplx.xowa.bldrs.cmds.*; import gplx.xowa.apps.utls.*;
|
||||
public class Xow_ns implements Gfo_invk {
|
||||
public Xow_ns(int id, byte case_match, byte[] name, boolean is_alias) {
|
||||
this.id = id; this.case_match = case_match; this.is_alias = is_alias;
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.wikis.tdbs.hives; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.tdbs.*;
|
||||
import gplx.core.ios.zips.*;
|
||||
import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.xowa.bldrs.sqls.*;
|
||||
import gplx.xowa.bldrs.sql_dumps.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.specials.*; import gplx.xowa.specials.allPages.*;
|
||||
import gplx.xowa.wikis.tdbs.xdats.*;
|
||||
|
||||
@@ -23,7 +23,7 @@ import gplx.xowa.wikis.domains.*;
|
||||
public class Xow_xwiki_itm_bldr {
|
||||
private final Bry_bfr tmp_bfr = Bry_bfr_.New();
|
||||
private final Gfo_url_parser url_parser = new Gfo_url_parser(); private final Gfo_url url = new Gfo_url();
|
||||
public Xow_xwiki_itm Bld_mw(Xow_domain_itm cur_domain, byte[] key, byte[] mw_url, byte[] domain_name) {return Bld_xo(cur_domain, key, Xoa_gfs_php_mgr.Xto_gfs(tmp_bfr, mw_url), domain_name);} // EX: "//commons.wikimedia.org/wiki/Category:$1" -> "//commons.wikimedia.org/wiki/Category:~{0}"
|
||||
public Xow_xwiki_itm Bld_mw(Xow_domain_itm cur_domain, byte[] key, byte[] mw_url, byte[] domain_name) {return Bld_xo(cur_domain, key, Gfs_php_converter.To_gfs(tmp_bfr, mw_url), domain_name);} // EX: "//commons.wikimedia.org/wiki/Category:$1" -> "//commons.wikimedia.org/wiki/Category:~{0}"
|
||||
public Xow_xwiki_itm Bld_xo(Xow_domain_itm cur_domain, byte[] key, byte[] xo_url, byte[] domain_name) {
|
||||
byte[] domain_bry = Xow_xwiki_mgr.Get_domain_from_url(url_parser, url, xo_url);
|
||||
Xow_domain_itm domain_itm = Xow_domain_itm_.parse(domain_bry);
|
||||
|
||||
Reference in New Issue
Block a user