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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user