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:
@@ -33,6 +33,7 @@ public abstract class Xobc_cmd__base implements Xobc_cmd_itm {
|
||||
public long Prog_data_cur() {return data_cur;} private long data_cur; public void Prog_data_cur_(long v) {this.data_cur = v;}
|
||||
public long Prog_data_end() {return data_end;} private long data_end; public void Prog_data_end_(long v) {this.data_end = v;}
|
||||
public byte Prog_status() {return status;} private byte status = Gfo_prog_ui_.Status__init; public void Prog_status_(byte v) {status = v;}
|
||||
public void Prog_notify_by_msg(String msg) {task_mgr.Work_mgr().On_stat(task_id, msg);}
|
||||
public boolean Canceled() {return status == Gfo_prog_ui_.Status__suspended;}
|
||||
public void Cancel() {status = Gfo_prog_ui_.Status__suspended;}
|
||||
|
||||
@@ -64,7 +65,7 @@ public abstract class Xobc_cmd__base implements Xobc_cmd_itm {
|
||||
Gfo_log_.Instance.Info("xobc_cmd task end", "task_id", task_id, "step_id", step_id, "cmd_id", cmd_id);
|
||||
switch (status) {
|
||||
case Gfo_prog_ui_.Status__suspended: task_mgr.Work_mgr().On_suspended(this); break;
|
||||
case Gfo_prog_ui_.Status__fail: task_mgr.Work_mgr().On_fail(this, Bool_.N, cmd_exec_err); break;
|
||||
case Gfo_prog_ui_.Status__fail: task_mgr.Work_mgr().On_fail(this, this.Cmd_fail_resumes(), cmd_exec_err); break;
|
||||
case Gfo_prog_ui_.Status__working:
|
||||
this.Prog_notify_and_chk_if_suspended(data_end, data_end); // fire one more time for 100%; note that 100% may not fire due to timer logic below
|
||||
task_mgr.Work_mgr().On_done(this);
|
||||
|
||||
@@ -18,10 +18,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.addons.bldrs.centrals.cmds; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.bldrs.*; import gplx.xowa.addons.bldrs.centrals.*;
|
||||
import gplx.core.progs.*; import gplx.core.net.downloads.*;
|
||||
public class Xobc_cmd__download extends Xobc_cmd__base {
|
||||
private final Xobc_task_mgr task_mgr;
|
||||
private final String src_url; private final Io_url trg_url;
|
||||
private final long expd_size;
|
||||
private final Http_download_wkr wkr;
|
||||
public Xobc_cmd__download(Xobc_task_mgr task_mgr, int task_id, int step_id, int cmd_id, String src_url, Io_url trg_url, long file_size_zip) {super(task_mgr, task_id, step_id, cmd_id);
|
||||
this.task_mgr = task_mgr;
|
||||
this.src_url = src_url; this.trg_url = trg_url; this.expd_size = file_size_zip;
|
||||
this.wkr = Http_download_wkr_.Proto.Make_new();
|
||||
this.Prog_data_end_(expd_size);
|
||||
@@ -31,8 +33,31 @@ public class Xobc_cmd__download extends Xobc_cmd__base {
|
||||
@Override public boolean Cmd_suspendable() {return true;}
|
||||
|
||||
@Override protected void Cmd_exec_hook(Xobc_cmd_ctx ctx) {
|
||||
if (wkr.Exec(this, src_url, trg_url, expd_size) == Gfo_prog_ui_.Status__fail)
|
||||
this.Cmd_exec_err_(wkr.Fail_msg());
|
||||
int error_wait = 10000, error_tries_max = 6, error_tries_cur = 0; // retry every 10 seconds for a total of 6 tries (1 min)
|
||||
while (true) {
|
||||
long trg_size_bgn = Io_mgr.Instance.QueryFil(wkr.Tmp_url()).Size();
|
||||
byte status = wkr.Exec(this, src_url, trg_url, expd_size);
|
||||
if (status == Gfo_prog_ui_.Status__fail) {
|
||||
// check if anything more downloaded; if so, then reset to 0; DATE:2016-09-03
|
||||
long trg_size_cur = Io_mgr.Instance.QueryFil(wkr.Tmp_url()).Size();
|
||||
if (trg_size_cur > trg_size_bgn) {
|
||||
error_tries_cur = 0;
|
||||
trg_size_bgn = trg_size_cur;
|
||||
}
|
||||
|
||||
// retry
|
||||
if (error_tries_cur++ < error_tries_max) {
|
||||
task_mgr.Work_mgr().On_stat(this.Task_id(), String_.Format("connection interrupted: retrying in {0} seconds; attempt {1} of {2}", error_wait / 1000, error_tries_cur, error_tries_max));
|
||||
Gfo_usr_dlg_.Instance.Log_many("", "", "xobc_cmd task download interrupted; ~{0} ~{1} ~{2} ~{3}", this.Task_id(), this.Step_id(), trg_url, Io_mgr.Instance.QueryFil(trg_url).Size());
|
||||
gplx.core.threads.Thread_adp_.Sleep(error_wait);
|
||||
continue;
|
||||
}
|
||||
this.Cmd_exec_err_(wkr.Fail_msg());
|
||||
break;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
Gfo_log_.Instance.Info("xobc_cmd task download", "task_id", this.Task_id(), "step_id", this.Step_id(), "trg_url", trg_url, "trg_len", Io_mgr.Instance.QueryFil(trg_url).Size());
|
||||
}
|
||||
@Override public void Cmd_cleanup() {
|
||||
|
||||
@@ -137,4 +137,7 @@ public class Xobc_task_regy__work extends Xobc_task_regy__base {
|
||||
Xod_power_mgr_.Instance.Wake_lock__rls("task_mgr");
|
||||
task_mgr.Send_json("xo.bldr.work.prog__fail__recv", Gfobj_nde.New().Add_int("task_id", task.Task_id()).Add_str("err", msg).Add_bool("resume", resume));
|
||||
}
|
||||
public void On_stat(int task_id, String msg) {
|
||||
task_mgr.Send_json("xo.bldr.work.prog__stat__recv", Gfobj_nde.New().Add_int("task_id", task_id).Add_str("msg", msg));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.bldrs.
|
||||
import gplx.xowa.addons.bldrs.files.dbs.*; import gplx.xowa.addons.bldrs.mass_parses.parses.*; import gplx.xowa.addons.bldrs.mass_parses.parses.utls.*;
|
||||
import gplx.xowa.addons.bldrs.wmdumps.imglinks.*;
|
||||
public class Xobldr__lnki_temp__create extends Xob_dump_mgr_base implements gplx.xowa.parsers.lnkis.files.Xop_file_logger {
|
||||
private Xob_lnki_temp_tbl tbl; private boolean wdata_enabled = true, xtn_ref_enabled = true, gen_html, gen_hdump;
|
||||
private Xob_lnki_temp_tbl tbl; private boolean wdata_enabled = true, xtn_ref_enabled = true, gen_html, gen_hdump, load_all_imglinks;
|
||||
private Xop_log_invoke_wkr invoke_wkr; private Xop_log_property_wkr property_wkr;
|
||||
private boolean ns_file_is_case_match_all = true; private Xowe_wiki commons_wiki;
|
||||
private final Xob_hdump_bldr hdump_bldr = new Xob_hdump_bldr(); private Vnt_convert_lang converter_lang;
|
||||
@@ -65,7 +65,7 @@ public class Xobldr__lnki_temp__create extends Xob_dump_mgr_base implements gplx
|
||||
// create imglinks
|
||||
Xof_orig_wkr__img_links orig_wkr = new Xof_orig_wkr__img_links(wiki);
|
||||
wiki.File__orig_mgr().Wkrs__set(orig_wkr);
|
||||
Xof_orig_wkr__img_links_.Load_all(orig_wkr);
|
||||
if (load_all_imglinks) Xof_orig_wkr__img_links_.Load_all(orig_wkr);
|
||||
|
||||
Xow_wiki_utl_.Clone_repos(wiki);
|
||||
|
||||
@@ -162,6 +162,7 @@ public class Xobldr__lnki_temp__create extends Xob_dump_mgr_base implements gplx
|
||||
else if (ctx.Match(k, Invk_ns_ids_)) ns_ids = Int_.Ary_parse(m.ReadStr("v"), "|");
|
||||
else if (ctx.Match(k, Invk_ns_ids_by_aliases)) ns_ids = Xobldr__lnki_temp__create_.Ns_ids_by_aliases(wiki, m.ReadStrAry("v", "|"));
|
||||
else if (ctx.Match(k, Invk_gen_html_)) gen_html = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk__load_all_imglinks_)) load_all_imglinks = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk_hdump_bldr)) return hdump_bldr;
|
||||
else if (ctx.Match(k, Invk_property_wkr)) return this.Property_wkr();
|
||||
else if (ctx.Match(k, Invk_invoke_wkr)) return this.Invoke_wkr();
|
||||
@@ -171,6 +172,7 @@ public class Xobldr__lnki_temp__create extends Xob_dump_mgr_base implements gplx
|
||||
private static final String Invk_wdata_enabled_ = "wdata_enabled_", Invk_xtn_ref_enabled_ = "xtn_ref_enabled_", Invk_gen_html_ = "gen_html_"
|
||||
, Invk_ns_ids_ = "ns_ids_", Invk_ns_ids_by_aliases = "ns_ids_by_aliases"
|
||||
, Invk_invoke_wkr = "invoke_wkr", Invk_property_wkr = "property_wkr", Invk_hdump_bldr = "hdump_bldr"
|
||||
, Invk__load_all_imglinks_ = "load_all_imglinks_"
|
||||
;
|
||||
public static final String BLDR_CMD_KEY = "file.lnki_temp";
|
||||
@Override public String Cmd_key() {return BLDR_CMD_KEY;}
|
||||
|
||||
@@ -66,7 +66,7 @@ class Xobc_info_html extends Xow_special_wtr__base {
|
||||
String src_dir = host_eval.Eval_src_dir(data_db, host_id, wiki_domain);
|
||||
String[] ary = String_.Split(key, "|");
|
||||
ary[0] = String_.new_u8(wiki_domain.Abrv_wm());
|
||||
torrent_fil = String_.Format("{0}Xowa_{1}_latest_archive.torrent", src_dir, wiki_domain.Abrv_wm(), ary[1]); // EX: https://archive.org/download/Xowa_dewiki_latest/Xowa_dewiki_latest_archive.torrent
|
||||
torrent_fil = String_.Format("{0}Xowa_{1}wiki_latest_archive.torrent", src_dir, wiki_domain.Lang_orig_key()); // EX: https://archive.org/download/Xowa_dewiki_latest/Xowa_dewiki_latest_archive.torrent
|
||||
}
|
||||
|
||||
return new Xobc_info_doc
|
||||
@@ -77,6 +77,9 @@ class Xobc_info_html extends Xow_special_wtr__base {
|
||||
, step_urls
|
||||
);
|
||||
}
|
||||
public static String Make_torrent_fil(String src_dir, Xow_domain_itm domain) {
|
||||
return String_.Format("{0}Xowa_{1}wiki_latest_archive.torrent", src_dir, domain.Lang_orig_key()); // EX: https://archive.org/download/Xowa_dewiki_latest/Xowa_dewiki_latest_archive.torrent
|
||||
}
|
||||
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
|
||||
Xopg_tag_mgr head_tags = page_data.Head_tags();
|
||||
Xopg_tag_wtr_.Add__xocss (head_tags, app.Fsys_mgr().Http_root());
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
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.addons.bldrs.infos; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.bldrs.*;
|
||||
import org.junit.*; import gplx.core.tests.*; import gplx.xowa.wikis.domains.*;
|
||||
public class Xobc_info_html__tst {
|
||||
private final Xobc_info_html__fxt fxt = new Xobc_info_html__fxt();
|
||||
@Test public void Torrent__en_w() {fxt.Test__torrent_link("en.wikipedia.org" , "https://archive.org/download/Xowa_enwiki_latest_archive.torrent");}
|
||||
@Test public void Torrent__fr_d() {fxt.Test__torrent_link("fr.wiktionary.org" , "https://archive.org/download/Xowa_frwiki_latest_archive.torrent");}
|
||||
}
|
||||
class Xobc_info_html__fxt {
|
||||
public void Test__torrent_link(String domain_str, String expd) {
|
||||
Gftest.Eq__str(expd, Xobc_info_html.Make_torrent_fil("https://archive.org/download/", Xow_domain_itm_.parse(Bry_.new_u8(domain_str))));
|
||||
}
|
||||
}
|
||||
@@ -52,7 +52,8 @@ class Xomp_make_lnki {
|
||||
if (wkr_uid_max > tmp_xomp_uid_max)
|
||||
tmp_xomp_uid_max = wkr_uid_max;
|
||||
}
|
||||
if (tmp_xomp_uid_max >= max_xomp_uid || tmp_xomp_uid_max == -1) break; // if max_xomp_uid seen, break; note that ">" necessary because max_xomp_uid may not be in set of wkrs;
|
||||
// NOTE: not ">=" else small wikis will fail with 0 images; EX:cs.q; DATE:2016-09-04
|
||||
if (tmp_xomp_uid_max > max_xomp_uid || tmp_xomp_uid_max == -1) break; // if max_xomp_uid seen, break; note that ">" necessary because max_xomp_uid may not be in set of wkrs;
|
||||
cur_xomp_uid += uid_count; // note that this sequentially counts up by uid_count (1000), so inevitable that cur_xomp_uid will exceed wkr_uid_max
|
||||
Gfo_usr_dlg_.Instance.Prog_many("", "", "building lnki_temp; cur_xomp_uid=~{0}", cur_xomp_uid);
|
||||
Save_rows(rows, lnki_temp_tbl);
|
||||
|
||||
@@ -30,7 +30,7 @@ public class Xomp_parse_mgr {
|
||||
Xomp_mgr_db mgr_db = Xomp_mgr_db.New__load(cfg.Mgr_url());
|
||||
|
||||
// init page_pool
|
||||
Xomp_page_pool_loader page_pool_loader = new Xomp_page_pool_loader(wiki, mgr_db.Conn(), cfg.Num_pages_in_pool());
|
||||
Xomp_page_pool_loader page_pool_loader = new Xomp_page_pool_loader(wiki, mgr_db.Conn(), cfg.Num_pages_in_pool(), cfg.Show_msg__fetched_pool());
|
||||
Xomp_page_pool page_pool = new Xomp_page_pool(page_pool_loader, cfg.Num_pages_per_wkr());
|
||||
Xomp_prog_mgr prog_mgr = new Xomp_prog_mgr();
|
||||
prog_mgr.Init(page_pool_loader.Get_pending_count(), cfg.Progress_interval());
|
||||
|
||||
@@ -25,6 +25,7 @@ public class Xomp_parse_mgr_cfg implements Gfo_invk {
|
||||
public int Commit_interval() {return commit_interval;} private int commit_interval = 10000;
|
||||
public int Cleanup_interval() {return cleanup_interval;} private int cleanup_interval = 50; // setting at 1000 uses lots of memory
|
||||
public boolean Hdump_enabled() {return hdump_enabled;} private boolean hdump_enabled = true;
|
||||
public boolean Hdump_catboxs() {return hdump_catboxs;} private boolean hdump_catboxs = false;
|
||||
public boolean Hzip_enabled() {return hzip_enabled;} private boolean hzip_enabled = true;
|
||||
public boolean Hdiff_enabled() {return hdiff_enabled;} private boolean hdiff_enabled = true;
|
||||
public boolean Log_file_lnkis() {return log_file_lnkis;} private boolean log_file_lnkis = true;
|
||||
@@ -33,6 +34,7 @@ public class Xomp_parse_mgr_cfg implements Gfo_invk {
|
||||
public byte Zip_tid() {return zip_tid;} private byte zip_tid = Io_stream_.Tid_gzip;
|
||||
public Io_url Mgr_url() {return mgr_url;} private Io_url mgr_url;
|
||||
public String Wkr_machine_name() {return wkr_machine_name;} private String wkr_machine_name;
|
||||
public boolean Show_msg__fetched_pool() {return show_msg__fetched_pool;} private boolean show_msg__fetched_pool;
|
||||
public void Init(Xowe_wiki wiki) {
|
||||
if (num_wkrs == -1) num_wkrs = gplx.core.envs.Runtime_.Cpu_count();
|
||||
if (num_pages_in_pool == -1) num_pages_in_pool = num_wkrs * 1000;
|
||||
@@ -41,21 +43,23 @@ public class Xomp_parse_mgr_cfg implements Gfo_invk {
|
||||
}
|
||||
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
if (ctx.Match(k, Invk__num_wkrs_)) num_wkrs = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__num_pages_in_pool_)) num_pages_in_pool = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__num_pages_per_wkr_)) num_pages_per_wkr = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__progress_interval_)) progress_interval = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__commit_interval_)) commit_interval = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__cleanup_interval_)) cleanup_interval = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__hdump_enabled_)) hdump_enabled = m.ReadBool("v");
|
||||
else if (ctx.Match(k, Invk__hzip_enabled_)) hzip_enabled = m.ReadBool("v");
|
||||
else if (ctx.Match(k, Invk__hdiff_enabled_)) hdiff_enabled = m.ReadBool("v");
|
||||
else if (ctx.Match(k, Invk__zip_tid_)) zip_tid = m.ReadByte("v");
|
||||
else if (ctx.Match(k, Invk__load_all_templates_)) load_all_templates = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk__load_all_imglnks_)) load_all_imglnks = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk__manual_now_)) Datetime_now.Manual_and_freeze_(m.ReadDate("v"));
|
||||
else if (ctx.Match(k, Invk__mgr_url_)) mgr_url = m.ReadIoUrl("v");
|
||||
else if (ctx.Match(k, Invk__wkr_machine_name_)) wkr_machine_name = m.ReadStr("v");
|
||||
if (ctx.Match(k, Invk__num_wkrs_)) num_wkrs = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__num_pages_in_pool_)) num_pages_in_pool = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__num_pages_per_wkr_)) num_pages_per_wkr = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__progress_interval_)) progress_interval = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__commit_interval_)) commit_interval = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__cleanup_interval_)) cleanup_interval = m.ReadInt("v");
|
||||
else if (ctx.Match(k, Invk__hdump_enabled_)) hdump_enabled = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk__hzip_enabled_)) hzip_enabled = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk__hdiff_enabled_)) hdiff_enabled = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk__zip_tid_)) zip_tid = m.ReadByte("v");
|
||||
else if (ctx.Match(k, Invk__load_all_templates_)) load_all_templates = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk__load_all_imglnks_)) load_all_imglnks = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk__manual_now_)) Datetime_now.Manual_and_freeze_(m.ReadDate("v"));
|
||||
else if (ctx.Match(k, Invk__mgr_url_)) mgr_url = m.ReadIoUrl("v");
|
||||
else if (ctx.Match(k, Invk__wkr_machine_name_)) wkr_machine_name = m.ReadStr("v");
|
||||
else if (ctx.Match(k, Invk__show_msg__fetched_pool_)) show_msg__fetched_pool = m.ReadYn("v");
|
||||
else if (ctx.Match(k, Invk__hdump_catboxes_)) hdump_catboxs = m.ReadYn("v");
|
||||
else return Gfo_invk_.Rv_unhandled;
|
||||
return this;
|
||||
}
|
||||
@@ -64,6 +68,8 @@ public class Xomp_parse_mgr_cfg implements Gfo_invk {
|
||||
, Invk__progress_interval_ = "progress_interval_", Invk__commit_interval_ = "commit_interval_", Invk__cleanup_interval_ = "cleanup_interval_"
|
||||
, Invk__hdump_enabled_ = "hdump_enabled_", Invk__hzip_enabled_ = "hzip_enabled_", Invk__hdiff_enabled_ = "hdiff_enabled_", Invk__zip_tid_ = "zip_tid_"
|
||||
, Invk__load_all_templates_ = "load_all_templates_", Invk__load_all_imglnks_ = "load_all_imglnks_", Invk__manual_now_ = "manual_now_"
|
||||
, Invk__hdump_catboxes_ = "hdump_catboxes_"
|
||||
, Invk__mgr_url_ = "mgr_url_", Invk__wkr_machine_name_ = "wkr_machine_name_"
|
||||
, Invk__show_msg__fetched_pool_ = "show_msg__fetched_pool_"
|
||||
;
|
||||
}
|
||||
|
||||
@@ -22,11 +22,13 @@ public class Xomp_page_pool_loader {
|
||||
private final Xow_wiki wiki;
|
||||
private final int num_pages_per_load;
|
||||
private final Db_attach_mgr attach_mgr;
|
||||
public Xomp_page_pool_loader(Xow_wiki wiki, Db_conn make_conn, int num_pages_per_load) {
|
||||
private final boolean show_msg__fetched_pool;
|
||||
public Xomp_page_pool_loader(Xow_wiki wiki, Db_conn make_conn, int num_pages_per_load, boolean show_msg__fetched_pool) {
|
||||
this.wiki = wiki;
|
||||
this.make_conn = make_conn;
|
||||
this.attach_mgr = new Db_attach_mgr(make_conn);
|
||||
this.num_pages_per_load = num_pages_per_load;
|
||||
this.show_msg__fetched_pool = show_msg__fetched_pool;
|
||||
}
|
||||
public Db_conn Conn() {return make_conn;} private final Db_conn make_conn;
|
||||
public int Get_pending_count() {
|
||||
@@ -50,7 +52,8 @@ public class Xomp_page_pool_loader {
|
||||
int uid_new = 0;
|
||||
try {uid_new = this.Load_from_db(rv, uid_db);}
|
||||
finally {lock_mgr.Uid_prv__rls(machine_name, uid_new);}
|
||||
Gfo_usr_dlg_.Instance.Note_many("", "", "fetched new pool: old=~{0} new=~{1}", uid_db, uid_new);
|
||||
if (show_msg__fetched_pool)
|
||||
Gfo_usr_dlg_.Instance.Note_many("", "", "fetched new pool: old=~{0} new=~{1}", uid_db, uid_new);
|
||||
return rv;
|
||||
}
|
||||
private int Load_from_db(List_adp list, int uid_prv) {
|
||||
|
||||
@@ -67,8 +67,8 @@ public class Xomp_parse_wkr implements Gfo_invk {
|
||||
wiki.File__orig_mgr().Wkrs__set(file_orig_wkr);
|
||||
wiki.File_mgr().Fsdb_mode().Tid__v2__mp__y_();
|
||||
|
||||
// disable categories else progress messages written (also for PERF)
|
||||
wiki.Html_mgr().Page_wtr_mgr().Wkr(gplx.xowa.wikis.pages.Xopg_page_.Tid_read).Ctgs_enabled_(false);
|
||||
// disable categories b/c categories will be retrieved at run-time
|
||||
wiki.Html_mgr().Page_wtr_mgr().Wkr(gplx.xowa.wikis.pages.Xopg_page_.Tid_read).Ctgs_enabled_(cfg.Hdump_catboxs());
|
||||
|
||||
// enable lnki_temp
|
||||
Xomp_lnki_temp_wkr logger = null;
|
||||
|
||||
@@ -27,7 +27,7 @@ public class Imglnk_bldr_cmd extends Xob_sql_dump_base implements Sql_file_parse
|
||||
@Override public String Sql_file_name() {return "imagelinks";}
|
||||
|
||||
@Override public void Cmd_bgn_hook(Xob_bldr bldr, Sql_file_parser parser) {
|
||||
parser.Fld_cmd_(this).Flds_req_idx_(3, 0, 1);
|
||||
parser.Save_csv_n_().Fld_cmd_(this).Flds_req_idx_(3, 0, 1);
|
||||
mgr = new Imglnk_bldr_mgr(wiki);
|
||||
}
|
||||
public void Exec(byte[] src, byte[] fld_key, int fld_idx, int fld_bgn, int fld_end, Bry_bfr file_bfr, Sql_file_parser_data data) {
|
||||
|
||||
@@ -62,15 +62,15 @@ public class Xof_orig_wkr__img_links implements Xof_orig_wkr {
|
||||
hash.Add(itm.Ttl(), itm);
|
||||
}
|
||||
private Xof_orig_itm Load_from_db(byte[] ttl) {
|
||||
if (imglnk_conn == null)
|
||||
imglnk_conn = Xob_db_file.New__img_link(wiki).Conn();
|
||||
Xof_orig_itm rv = Xof_orig_wkr__img_links_.Load_itm(this, imglnk_conn, wiki, ttl);
|
||||
if (rv == Xof_orig_itm.Null)
|
||||
rv = Missing;
|
||||
synchronized (hash) { // LOCK:used by multiple threads in xomp
|
||||
synchronized (hash) { // LOCK:orig_wkr is shared by multiple threads; NullPointerException on statement sometimes when concurrent; DATE:2016-09-03
|
||||
if (imglnk_conn == null)
|
||||
imglnk_conn = Xob_db_file.New__img_link(wiki).Conn();
|
||||
Xof_orig_itm rv = Xof_orig_wkr__img_links_.Load_itm(this, imglnk_conn, wiki, ttl);
|
||||
if (rv == Xof_orig_itm.Null)
|
||||
rv = Missing;
|
||||
hash.Add(ttl, rv);
|
||||
return rv;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
private static final Xof_orig_itm Missing = new Xof_orig_itm(Byte_.Max_value_127, Bry_.Empty, -1, -1, -1, Bry_.Empty);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user