mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
uca category support and other changes
This commit is contained in:
@@ -27,7 +27,6 @@ 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);
|
||||
boolean Load_ctg_v1 (Xoctg_catpage_ctg rv, byte[] ttl);
|
||||
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);
|
||||
|
||||
@@ -58,11 +58,6 @@ 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_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 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);
|
||||
}
|
||||
@@ -74,31 +69,4 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr {
|
||||
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() {}
|
||||
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();
|
||||
link_list.Sort_by(Xowd_page_itm_sorter.IdAsc);
|
||||
core_data_mgr.Tbl__page().Select_in__id(Cancelable_.Never, false, true, link_list, 0, link_list_len);
|
||||
link_list.Sort_by(Xowd_page_itm_sorter.Ns_id_TtlAsc);
|
||||
boolean rv = false;
|
||||
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 = 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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
|
||||
public void Load_page(Xowd_page_itm rv, Xow_ns ns) {Load_page(rv, rv.Text_db_id(), rv.Tdb_row_idx(), ns, false, tmp_xdat_file, tmp_xdat_itm);}
|
||||
public void Load_page(Xowd_page_itm rv, int txt_fil_idx, int txt_row_idx, Xow_ns ns, boolean timestamp_enabled, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm) {
|
||||
Io_url file = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ns.Id(), txt_fil_idx);
|
||||
byte[] bry = gplx.core.ios.streams.Io_stream_rdr_.Load_all(file); int bry_len = bry.length;
|
||||
byte[] bry = Io_mgr.Instance.LoadFilBry(file); int bry_len = bry.length;
|
||||
xdat_file.Clear().Parse(bry, bry_len, file).GetAt(xdat_itm, txt_row_idx);
|
||||
Load_page_parse(rv, bry, bry_len, xdat_itm.Itm_bgn(), xdat_itm.Itm_end(), timestamp_enabled);
|
||||
}
|
||||
@@ -236,59 +236,6 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr {
|
||||
count.Val_(tmp_count);
|
||||
return rv;
|
||||
}
|
||||
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
|
||||
Io_url fil = fsys_mgr.Url_site_fil(Xotdb_dir_info_.Tid_category, fil_idx);
|
||||
Load_xdat_file(Cancelable_.Never, tmp_xdat_file, fil);
|
||||
tmp_xdat_file.Find(tmp_xdat_itm, ctg_ttl, 0, Byte_ascii.Pipe, true);
|
||||
if (tmp_xdat_itm.Missing()) return false;
|
||||
List_adp ctgs = List_adp_.New();
|
||||
Load_ctg_v1_parse(ctgs, wiki.Appe().Usr_dlg(), tmp_xdat_itm.Itm_bry());
|
||||
ctgs.Sort_by(Xowd_page_itm_sorter.IdAsc);
|
||||
this.Load_by_ids(Cancelable_.Never, ctgs, 0, ctgs.Count());
|
||||
ctgs.Sort_by(Xowd_page_itm_sorter.Ns_id_TtlAsc);
|
||||
|
||||
int ctgs_len = ctgs.Count(); if (ctgs_len == 0) return false;
|
||||
if (count_only != null) { // Ctg_count specificed
|
||||
count_only.Val_(ctgs_len);
|
||||
return true;
|
||||
}
|
||||
for (int i = 0; i < ctgs_len; i++) {
|
||||
Xowd_page_itm itm = (Xowd_page_itm)ctgs.Get_at(i);
|
||||
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) {
|
||||
int aryLen = ary.length;
|
||||
int pos = Bry_find_.Find_fwd(ary, Byte_ascii.Pipe, 0, aryLen);
|
||||
int rowCount = (aryLen - pos + 1) / (Base85_.Len_int + gplx.xowa.apps.progs.Xoa_prog_mgr.Len_dlm_fld);
|
||||
rv.Clear();
|
||||
boolean garbage = false;
|
||||
for (int i = 0; i < rowCount; i++) {
|
||||
Xowd_page_itm row = new Xowd_page_itm();
|
||||
rv.Add(row);
|
||||
if (garbage) continue;
|
||||
int bgn = pos + 1 + (i * (Base85_.Len_int + gplx.xowa.apps.progs.Xoa_prog_mgr.Len_dlm_fld));
|
||||
try {
|
||||
int id = Base85_.To_int_by_bry(ary, bgn, bgn + Base85_.Len_int - 1);
|
||||
if (id < 0) throw Err_.new_wo_type("invalid id", "id", id);
|
||||
row.Id_(id);
|
||||
}
|
||||
catch (Exception e) {
|
||||
row.Id_(0);
|
||||
usr_dlg.Warn_many("xowa.ttl_request", "parse", "failed to parse row: row=~{0} err=~{1}", String_.new_u8(ary), Err_.Message_lang(e));
|
||||
garbage = true;
|
||||
continue; // NOTE: must break b/c rest of ids are garbage
|
||||
}
|
||||
}
|
||||
}
|
||||
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();
|
||||
|
||||
@@ -45,7 +45,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, Gfo_invk {
|
||||
core_data_mgr.Tbl__cfg().Insert_byte(grp, key, category_version);
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_data_storage_format)) return Io_stream_.Obsolete_to_str(core_data_mgr.Props().Zip_tid_text());
|
||||
if (ctx.Match(k, Invk_data_storage_format)) return Io_stream_tid_.Obsolete_to_str(core_data_mgr.Props().Zip_tid_text());
|
||||
else if (ctx.Match(k, Invk_data_storage_format_)) {} // SERIALIZED:000.sqlite3|xowa_cfg; ignore; read from Xow_db_props
|
||||
else if (ctx.Match(k, Invk_category_version)) return category_version;
|
||||
else if (ctx.Match(k, Invk_category_version_)) category_version = m.ReadByte("v");
|
||||
|
||||
@@ -27,7 +27,7 @@ public class Xodb_mgr_txt implements Xodb_mgr {
|
||||
} private Xowe_wiki wiki;
|
||||
public byte Tid() {return Tid_txt;} public static final byte Tid_txt = 0;
|
||||
public String Tid_name() {return "xdat";}
|
||||
public byte Data_storage_format() {return data_storage_format;} public void Data_storage_format_(byte v) {data_storage_format = v;} private byte data_storage_format = gplx.core.ios.streams.Io_stream_.Tid_raw;
|
||||
public byte Data_storage_format() {return data_storage_format;} public void Data_storage_format_(byte v) {data_storage_format = v;} private byte data_storage_format = gplx.core.ios.streams.Io_stream_tid_.Tid__raw;
|
||||
public Xodb_load_mgr Load_mgr() {return load_mgr;} private Xodb_load_mgr_txt load_mgr;
|
||||
public Xodb_save_mgr Save_mgr() {return save_mgr;} private Xodb_save_mgr_txt save_mgr;
|
||||
public DateAdp Dump_date_query() {
|
||||
@@ -46,8 +46,8 @@ public class Xodb_mgr_txt implements Xodb_mgr {
|
||||
public byte Search_version() {return gplx.xowa.addons.wikis.searchs.specials.Srch_special_page.Version_2;}
|
||||
public void Search_version_refresh() {throw Err_.new_unimplemented();}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk_data_storage_format)) return Io_stream_.Obsolete_to_str(data_storage_format);
|
||||
else if (ctx.Match(k, Invk_data_storage_format_)) data_storage_format = Io_stream_.Obsolete_to_tid(m.ReadStr("v"));
|
||||
if (ctx.Match(k, Invk_data_storage_format)) return Io_stream_tid_.Obsolete_to_str(data_storage_format);
|
||||
else if (ctx.Match(k, Invk_data_storage_format_)) data_storage_format = Io_stream_tid_.Obsolete_to_tid(m.ReadStr("v"));
|
||||
else if (ctx.Match(k, Invk_category_version)) return this.Category_version();
|
||||
else if (ctx.Match(k, Invk_category_version_)) category_version = m.ReadByte("v");
|
||||
else if (ctx.Match(k, Invk_search_version)) return this.Search_version();
|
||||
|
||||
@@ -49,7 +49,7 @@ public class Xodb_page_rdr__tdb implements Xodb_page_rdr {
|
||||
continue;
|
||||
}
|
||||
this.cur_file = cur_file_ary[cur_file_idx];
|
||||
byte[] bry = Io_stream_rdr_.Load_all(cur_file);
|
||||
byte[] bry = Io_mgr.Instance.LoadFilBry(cur_file);
|
||||
cur_xdat_file.Clear().Parse(bry, bry.length, cur_file);
|
||||
this.cur_xdat_len = cur_xdat_file.Count();
|
||||
this.cur_xdat_idx = -1;
|
||||
|
||||
@@ -43,7 +43,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr {
|
||||
int ns_id = ttl.Ns().Id();
|
||||
Xotdb_page_itm_.Txt_page_save(tmp, page_id, Datetime_now.Get(), ttl_bry, text, true);
|
||||
Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ns_id, fil_idx);
|
||||
byte[] page_rdr_bry = gplx.core.ios.streams.Io_stream_rdr_.Load_all(page_rdr_url);
|
||||
byte[] page_rdr_bry = Io_mgr.Instance.LoadFilBry(page_rdr_url);
|
||||
Xob_xdat_file page_rdr = new Xob_xdat_file();
|
||||
if (Bry_.Len_gt_0(page_rdr_bry)) page_rdr.Parse(page_rdr_bry, page_rdr_bry.length, page_rdr_url);
|
||||
int row_idx = page_rdr.Count();
|
||||
|
||||
Reference in New Issue
Block a user