mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
'v3.9.2.1'
This commit is contained in:
@@ -18,7 +18,8 @@ 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 gplx.core.primitives.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.bldrs.cmds.ctgs.*; import gplx.xowa.wikis.ctgs.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
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.*;
|
||||
public interface Xodb_load_mgr {
|
||||
void Load_init (Xowe_wiki wiki);
|
||||
void Load_page (Xowd_page_itm rv, Xow_ns ns);
|
||||
@@ -27,9 +28,8 @@ public interface Xodb_load_mgr {
|
||||
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_view_ctg rv, byte[] ttl);
|
||||
boolean Load_ctg_v2 (Xoctg_data_ctg rv, byte[] ttl);
|
||||
void Load_ctg_v2a (Xoctg_view_ctg rv, Xoctg_url url_ctg, byte[] ttl_bry, int limit, boolean app_is_cmd);
|
||||
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);
|
||||
|
||||
@@ -17,10 +17,11 @@ 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 gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.cfgs.*;
|
||||
import gplx.xowa.apps.gfs.*; import gplx.xowa.bldrs.cmds.ctgs.*; import gplx.xowa.wikis.ctgs.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.xowa.apps.gfs.*; import gplx.xowa.addons.wikis.ctgs.bldrs.*; import gplx.xowa.addons.wikis.ctgs.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
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.*;
|
||||
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;}
|
||||
@@ -57,20 +58,19 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
}
|
||||
public boolean Load_by_id (Xowd_page_itm rv, int id) {return db_mgr.Core_data_mgr().Tbl__page().Select_by_id(rv, id);}
|
||||
public void Load_by_ids(Cancelable cancelable, List_adp rv, int bgn, int end) {db_mgr.Core_data_mgr().Tbl__page().Select_in__id(cancelable, false, true, rv, bgn, end);}
|
||||
public boolean Load_ctg_v1(Xoctg_view_ctg rv, byte[] ctg_bry) {
|
||||
public boolean Load_ctg_v1(Xoctg_catpage_ctg rv, byte[] ctg_bry) {
|
||||
int cat_page_id = db_mgr.Core_data_mgr().Tbl__page().Select_id(Xow_ns_.Tid__category, ctg_bry); if (cat_page_id == Xowd_page_itm.Id_null) return false;
|
||||
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 boolean Load_ctg_v2(Xoctg_data_ctg rv, byte[] ctg_bry) {throw Err_.new_unimplemented();}
|
||||
public void Load_ctg_v2a(Xoctg_view_ctg rv, Xoctg_url ctg_url, byte[] ctg_ttl, int load_max, boolean app_is_cmd) {
|
||||
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_view_ctg rv, Xoctg_url ctg_url, int cat_page_id, int load_max, int cat_link_db_idx, List_adp list, boolean app_is_cmd) {
|
||||
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;
|
||||
@@ -80,16 +80,16 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
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_last_sortkey_(last_ctg.Sortkey());
|
||||
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_view_ctg rv, Xowd_category_itm ctg, List_adp 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_view_grp view_grp = null;
|
||||
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
|
||||
@@ -100,17 +100,10 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
prv_tid = cur_tid;
|
||||
}
|
||||
Xoa_ttl ttl = Xoa_ttl.Parse(wiki, db_page.Ns_id(), db_page.Ttl_page_db());
|
||||
Xoctg_view_itm view_itm = new Xoctg_view_itm();
|
||||
view_itm.Set__page(cur_tid, db_page.Id());
|
||||
view_itm.Set__ttl__sortkey(ttl, db_ctg.Sortkey());
|
||||
view_grp.Itms_add(view_itm);
|
||||
}
|
||||
len = Xoa_ctg_mgr.Tid__max;
|
||||
for (byte i = Xoa_ctg_mgr.Tid_subc; i < len; i++) {
|
||||
view_grp = rv.Grp_by_tid(i);
|
||||
view_grp.Itms_make();
|
||||
view_grp.Total_(ctg.Count_by_tid(i));
|
||||
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);
|
||||
@@ -152,7 +145,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
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_view_ctg view_ctg, int link_db_id, Xowd_category_itm ctg) {
|
||||
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());
|
||||
int link_list_len = link_list.Count();
|
||||
@@ -163,19 +156,20 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
for (int i = 0; i < link_list.Count(); i++) {
|
||||
Xowd_page_itm page = (Xowd_page_itm)link_list.Get_at(i);
|
||||
if (page.Ns_id() == Int_.Min_value) continue; // HACK: page not found; ignore
|
||||
byte ctg_tid = Xodb_load_mgr_txt.Load_ctg_v1_tid(page.Ns_id());
|
||||
Xoctg_view_grp ctg_grp = view_ctg.Grp_by_tid(ctg_tid);
|
||||
Xoctg_view_itm ctg_itm = new Xoctg_view_itm();
|
||||
ctg_itm.Set__page(ctg_tid, page.Id());
|
||||
ctg_itm.Set__ttl__sortkey(Xoa_ttl.Parse(wiki, page.Ns_id(), page.Ttl_page_db()), page.Ttl_page_db());
|
||||
ctg_grp.Itms_add(ctg_itm);
|
||||
byte ctg_tid = Load_ctg_v1_tid(page.Ns_id());
|
||||
Xoctg_catpage_grp ctg_grp = view_ctg.Grp_by_tid(ctg_tid);
|
||||
Xoctg_catpage_itm ctg_itm = new Xoctg_catpage_itm(page.Id(), Xoa_ttl.Parse(wiki, page.Ns_id(), page.Ttl_page_db()), page.Ttl_page_db());
|
||||
ctg_grp.Itms__add(ctg_itm);
|
||||
rv = true;
|
||||
}
|
||||
for (byte i = 0; i < Xoa_ctg_mgr.Tid__max; i++) {
|
||||
Xoctg_view_grp ctg_grp = view_ctg.Grp_by_tid(i);
|
||||
ctg_grp.Itms_make();
|
||||
ctg_grp.Total_(ctg_grp.Itms().length);
|
||||
}
|
||||
view_ctg.Make_itms();
|
||||
return rv;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,8 @@ 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.wikis.ctgs.*; import gplx.dbs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.wikis.nss.*;
|
||||
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();}
|
||||
@@ -31,9 +32,9 @@ public class Xodb_load_mgr_sql_tst {
|
||||
fxt.Test_load_ctg_list(ctgs);
|
||||
}
|
||||
}
|
||||
class Xoctg_url_mok extends Xoctg_url { public Xoctg_url_mok Page_bgn_(String v) {return Grp(Xoa_ctg_mgr.Tid_page, Bool_.Y, v);}
|
||||
public Xoctg_url_mok Page_end_(String v) {return Grp(Xoa_ctg_mgr.Tid_page, Bool_.N, v);}
|
||||
Xoctg_url_mok Grp(byte tid, boolean v, String bmk) {
|
||||
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;
|
||||
@@ -61,7 +62,8 @@ class Xodb_load_mgr_sql_fxt {
|
||||
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 = db_mgr.Core_data_mgr().Db__cat_core().Tbl__cat_core().Create_tbl();
|
||||
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();
|
||||
@@ -96,25 +98,25 @@ class Xodb_load_mgr_sql_fxt {
|
||||
}
|
||||
return bfr.To_str_and_clear();
|
||||
}
|
||||
public Xoctg_url_mok ctg_url_() {return new Xoctg_url_mok();}
|
||||
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_url ctg_url, Xoctg_mok_ctg expd) {
|
||||
Xoctg_view_ctg view_ctg = new Xoctg_view_ctg();
|
||||
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_view_grp view_grp = view_ctg.Grp_by_tid(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_last_sortkey()));
|
||||
Tfds.Eq(String_.new_a7(mok_grp.Last_plus_one_sortkey()), String_.new_a7(view_grp.Itms__nth_sortkey()));
|
||||
}
|
||||
}
|
||||
String[] Xto_str(Xoctg_view_grp grp) {
|
||||
Xoctg_view_itm[] ary = grp.Itms();
|
||||
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_view_itm itm = ary[i];
|
||||
rv[i] = itm.Ttl().Page_db_as_str();
|
||||
Xoctg_catpage_itm itm = ary[i];
|
||||
rv[i] = itm.Page_ttl().Page_db_as_str();
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -17,13 +17,14 @@ 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 gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.flds.*; import gplx.core.envs.*;
|
||||
import gplx.xowa.bldrs.cmds.ctgs.*; import gplx.xowa.wikis.ctgs.*; import gplx.core.encoders.*;
|
||||
import gplx.xowa.addons.wikis.ctgs.bldrs.*; import gplx.xowa.addons.wikis.ctgs.*; import gplx.core.encoders.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*;
|
||||
import gplx.xowa.wikis.tdbs.*; import gplx.xowa.wikis.tdbs.hives.*; import gplx.xowa.wikis.tdbs.xdats.*;
|
||||
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.*;
|
||||
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();
|
||||
@@ -129,57 +130,6 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
|
||||
// if (match.Itms_len() == max_results) break;
|
||||
}
|
||||
}
|
||||
public boolean Load_ctg_v2(Xoctg_data_ctg ctg, byte[] name) {
|
||||
boolean rv = Load_xdat_itm(tmp_xdat_itm, Xotdb_dir_info_.Tid_category2_link, name, true); if (!rv) return false;
|
||||
byte[] src = tmp_xdat_itm.Itm_bry();
|
||||
Load_ctg_v2_data(wiki.Appe().Usr_dlg(), wiki.Appe().Utl_fld_rdr(), ctg, name, src, tmp_ctg_grp_lens);
|
||||
Load_ctg_v2_main(ctg, name);
|
||||
return true;
|
||||
} int[] tmp_ctg_grp_lens = new int[3];
|
||||
private void Load_ctg_v2_data(Gfo_usr_dlg usr_dlg, Gfo_fld_rdr fld_rdr, Xoctg_data_ctg ctg, byte[] ctg_name, byte[] src, int[] tmp_grp_lens) { // Name|subc_len|file_len|page_len|subc_bfr|file_bfr|page_bfr
|
||||
fld_rdr.Data_(src); fld_rdr.Read_bry_escape(); // 1st field is name; skip;
|
||||
Load_ctg_v2_data_lens(fld_rdr, tmp_grp_lens);
|
||||
Load_ctg_v2_data_mgrs(usr_dlg, ctg_name, src, fld_rdr.Pos(), tmp_grp_lens, ctg.Grp_mgrs());
|
||||
}
|
||||
private void Load_ctg_v2_data_lens(Gfo_fld_rdr fld_rdr, int[] grp_lens) {
|
||||
for (int i = 0; i < 3; i++)
|
||||
grp_lens[i] = fld_rdr.Read_int_base85_len5();
|
||||
}
|
||||
private void Load_ctg_v2_data_mgrs(Gfo_usr_dlg usr_dlg, byte[] ctg_name, byte[] src, int bgn, int[] grp_lens, Xoctg_idx_mgr[] grp_mgrs) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
int grp_len = grp_lens[i]; if (grp_len == 0) continue;
|
||||
int end = bgn + grp_len;
|
||||
Xoctg_idx_mgr grp_mgr = new Xoctg_idx_mgr();
|
||||
byte[] grp_src = Bry_.Mid(src, bgn, end);
|
||||
grp_mgr.Src_(grp_src);
|
||||
grp_mgr.Index(usr_dlg, ctg_name, grp_src);
|
||||
grp_mgrs[i] = grp_mgr;
|
||||
bgn = end;
|
||||
}
|
||||
}
|
||||
private void Load_ctg_v2_main(Xoctg_data_ctg rv, byte[] name) {
|
||||
if (!Load_xdat_itm(tmp_xdat_itm, Xotdb_dir_info_.Tid_category2_main, name, true)) return;
|
||||
if (tmp_xdat_itm.Missing()) return;
|
||||
byte[] bry = tmp_xdat_itm.Itm_bry();
|
||||
int bgn = name.length + 1;
|
||||
boolean hidden = bry[bgn] == Byte_ascii.Ltr_y;
|
||||
int count_subcs = Base85_.To_int_by_bry(bry, bgn + 2, bgn + 6);
|
||||
int count_files = Base85_.To_int_by_bry(bry, bgn + 8, bgn + 12);
|
||||
int count_pages = Base85_.To_int_by_bry(bry, bgn + 14, bgn + 18);
|
||||
rv.Hidden_(hidden);
|
||||
for (byte i = 0; i < Xoa_ctg_mgr.Tid__max; i++) {
|
||||
Xoctg_idx_mgr idx_mgr = rv.Grp_by_tid(i);
|
||||
if (idx_mgr == null) continue;
|
||||
int count = 0;
|
||||
switch (i) {
|
||||
case Xoa_ctg_mgr.Tid_subc: count = count_subcs; break;
|
||||
case Xoa_ctg_mgr.Tid_file: count = count_files; break;
|
||||
case Xoa_ctg_mgr.Tid_page: count = count_pages; break;
|
||||
default: throw Err_.new_unhandled(i);
|
||||
}
|
||||
idx_mgr.Total_(count);
|
||||
}
|
||||
}
|
||||
public boolean Load_by_id(Xowd_page_itm page, int id) {Base85_.Set_bry(id, tmp_id_bry, 0, 5); return Load_by_id(page, tmp_id_bry);} private byte[] tmp_id_bry = new byte[5];
|
||||
boolean Load_by_id(Xowd_page_itm page, byte[] id_bry) {
|
||||
if (!Load_xdat_itm(tmp_xdat_itm, Xotdb_dir_info_.Tid_id, id_bry, true)) return false;;
|
||||
@@ -286,8 +236,8 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
|
||||
count.Val_(tmp_count);
|
||||
return rv;
|
||||
}
|
||||
public boolean Load_ctg_v1(Xoctg_view_ctg view_ctg, byte[] ctg_ttl) {return Load_ctg_v1_wkr(view_ctg, ctg_ttl, null);}
|
||||
private boolean Load_ctg_v1_wkr(Xoctg_view_ctg view_ctg, byte[] ctg_ttl, Int_obj_ref count_only) {
|
||||
public boolean Load_ctg_v1(Xoctg_catpage_ctg view_ctg, byte[] ctg_ttl) {return Load_ctg_v1_wkr(view_ctg, ctg_ttl, null);}
|
||||
private boolean Load_ctg_v1_wkr(Xoctg_catpage_ctg view_ctg, byte[] ctg_ttl, Int_obj_ref count_only) {
|
||||
Xowd_regy_mgr ctg_regy = Get_regy_by_site(Xotdb_dir_info_.Tid_category);
|
||||
int fil_idx = ctg_regy.Files_find(ctg_ttl);
|
||||
if (fil_idx == Xowd_regy_mgr.Regy_null) return false; // NOTE: must check for -1, not 0; else defect in which entries in file 0 are ignored; DATE:2013-04-11
|
||||
@@ -308,17 +258,11 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
|
||||
}
|
||||
for (int i = 0; i < ctgs_len; i++) {
|
||||
Xowd_page_itm itm = (Xowd_page_itm)ctgs.Get_at(i);
|
||||
byte itm_tid = Load_ctg_v1_tid(itm.Ns_id());
|
||||
Xoctg_view_itm sub = new Xoctg_view_itm();
|
||||
sub.Set__page(itm_tid, itm.Id());
|
||||
sub.Set__ttl__sortkey(Xoa_ttl.Parse(wiki, itm.Ns_id(), itm.Ttl_page_db()), itm.Ttl_page_db());
|
||||
view_ctg.Grp_by_tid(itm_tid).Itms_add(sub);
|
||||
}
|
||||
for (byte i = 0; i < Xoa_ctg_mgr.Tid__max; i++) {
|
||||
Xoctg_view_grp grp = view_ctg.Grp_by_tid(i);
|
||||
grp.Itms_make();
|
||||
grp.Total_(grp.Itms().length);
|
||||
byte itm_tid = Xodb_load_mgr_sql.Load_ctg_v1_tid(itm.Ns_id());
|
||||
Xoctg_catpage_itm sub = new Xoctg_catpage_itm(itm.Id(), Xoa_ttl.Parse(wiki, itm.Ns_id(), itm.Ttl_page_db()), itm.Ttl_page_db());
|
||||
view_ctg.Grp_by_tid(itm_tid).Itms__add(sub);
|
||||
}
|
||||
view_ctg.Make_itms();
|
||||
return true;
|
||||
}
|
||||
private static void Load_ctg_v1_parse(List_adp rv, Gfo_usr_dlg usr_dlg, byte[] ary) {
|
||||
@@ -345,13 +289,6 @@ public class Xodb_load_mgr_txt 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;
|
||||
}
|
||||
}
|
||||
public static boolean Load_page_or_false(Xowd_page_itm page, Xob_xdat_itm xdat, int ns_id) {
|
||||
byte[] src = xdat.Src(); int itm_end = xdat.Itm_end();
|
||||
int bgn = xdat.Itm_bgn();
|
||||
@@ -502,18 +439,7 @@ 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) {return wiki.Db_mgr().Category_version() == Xoa_ctg_mgr.Version_1 ? Load_ctg_count_v1(ttl) : Load_ctg_count_v2(ttl);}
|
||||
int Load_ctg_count_v1(byte[] ttl) {
|
||||
Xoctg_view_ctg view_ctg = new Xoctg_view_ctg();
|
||||
Int_obj_ref count = Int_obj_ref.New_zero();
|
||||
Load_ctg_v1_wkr(view_ctg, ttl, count);
|
||||
return count.Val();
|
||||
}
|
||||
int Load_ctg_count_v2(byte[] ttl) {
|
||||
Xoctg_data_ctg data_ctg = new Xoctg_data_ctg(ttl);
|
||||
Load_ctg_v2(data_ctg, ttl);
|
||||
return data_ctg.Total_count();
|
||||
}
|
||||
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;
|
||||
@@ -521,36 +447,8 @@ 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_view_ctg rv, Xoctg_url url_ctg, byte[] ttl_bry, int limit, boolean app_is_cmd) {
|
||||
Xoctg_html_mgr ctg_mgr = wiki.Html_mgr().Ns_ctg();
|
||||
Xoctg_data_cache data_cache = ctg_mgr.Data_cache();
|
||||
Xoctg_data_ctg data_ctg = data_cache.Get_or_null(ttl_bry);
|
||||
if (data_ctg == null) {
|
||||
data_ctg = data_cache.Load_or_null(wiki, ttl_bry);
|
||||
if (data_ctg == null) return;
|
||||
}
|
||||
rv.Fill(url_ctg, data_ctg);
|
||||
ctg_mgr.Get_titles(wiki.Appe().Usr_dlg(), wiki, rv);
|
||||
rv.Num_(data_ctg);
|
||||
}
|
||||
public Xowd_page_itm[] Load_ctg_list(byte[][] ttls) {
|
||||
int len = ttls.length;
|
||||
Xowd_page_itm[] rv = new Xowd_page_itm[len];
|
||||
Xow_ns ns = wiki.Ns_mgr().Ns_category();
|
||||
|
||||
Xoctg_data_ctg ctg_temp = new Xoctg_data_ctg(Bry_.Empty);
|
||||
for (int i = 0; i < len; i++) {
|
||||
byte[] ttl = Xoa_ttl.Replace_spaces(ttls[i]); // NOTE: ctg_ttls has spaces since v1 rendered it literally;
|
||||
Xowd_page_itm page = new Xowd_page_itm();
|
||||
this.Load_by_ttl(page, ns, ttl);
|
||||
|
||||
Load_ctg_v2_main(ctg_temp, page.Ttl_page_db());
|
||||
Xowd_category_itm ctg_itm = Xowd_category_itm.load_(page.Id(), page.Text_db_id(), ctg_temp.Hidden(), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_subc), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_file), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_page));
|
||||
page.Xtn_(ctg_itm);
|
||||
rv[i] = page;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
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";
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ 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 gplx.core.ios.*; import gplx.core.ios.streams.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*;
|
||||
import gplx.xowa.apps.gfs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.wikis.ctgs.*; import gplx.xowa.htmls.core.*;
|
||||
import gplx.xowa.apps.gfs.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.addons.wikis.ctgs.*; import gplx.xowa.htmls.core.*;
|
||||
import gplx.xowa.wikis.*; import gplx.xowa.wikis.data.*;
|
||||
public class Xodb_mgr_sql implements Xodb_mgr, Gfo_invk {
|
||||
public Xodb_mgr_sql(Xowe_wiki wiki) {
|
||||
|
||||
@@ -17,7 +17,7 @@ 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 gplx.core.ios.*; import gplx.core.ios.streams.*;
|
||||
import gplx.dbs.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.ctgs.*; import gplx.xowa.htmls.core.*; import gplx.xowa.wikis.tdbs.*; import gplx.xowa.wikis.nss.*;
|
||||
import gplx.dbs.*; import gplx.xowa.wikis.data.*; import gplx.xowa.addons.wikis.ctgs.*; import gplx.xowa.htmls.core.*; import gplx.xowa.wikis.tdbs.*; import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.wikis.pages.*;
|
||||
public class Xodb_mgr_txt implements Xodb_mgr {
|
||||
public Xodb_mgr_txt(Xowe_wiki wiki, Xow_page_mgr data_mgr) {
|
||||
|
||||
@@ -63,7 +63,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
|
||||
}
|
||||
public void Data_update(Xoae_page page, byte[] text) {Data_update_under(page, text, null);}
|
||||
public void Data_rename(Xoae_page page, int trg_ns, byte[] trg_ttl) {
|
||||
if (wiki.Domain_tid() != Xow_domain_tid_.Int__home) {
|
||||
if (wiki.Domain_tid() != Xow_domain_tid_.Tid__home) {
|
||||
wiki.Appe().Usr_dlg().Warn_many("", "", "Only pages in the home wiki can be renamed");
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user