1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00
This commit is contained in:
gnosygnu
2016-01-17 23:18:07 -05:00
parent 096045614c
commit 235228976e
314 changed files with 4458 additions and 2694 deletions

View File

@@ -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;
// }
// }
//}

View File

@@ -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();
}

View File

@@ -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 {

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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_();

View File

@@ -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));

View File

@@ -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();

View File

@@ -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);

View 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);
}

View 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) {}
}

View File

@@ -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();

View File

@@ -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())

View File

@@ -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)
);
}
}

View File

@@ -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);
}

View File

@@ -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;}

View File

@@ -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);

View File

@@ -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

View File

@@ -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) {

View File

@@ -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