mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
121 lines
5.7 KiB
Java
121 lines
5.7 KiB
Java
/*
|
|
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.fsdb; import gplx.*;
|
|
import gplx.dbs.*; import gplx.xowa.files.fsdb.*;
|
|
public class Fsdb_mnt_mgr implements GfoInvkAble {
|
|
private Db_provider provider;
|
|
private Fsdb_cfg_tbl tbl_cfg;
|
|
private Fsdb_db_abc_mgr[] ary; int ary_len = 0;
|
|
public Gfo_usr_dlg Usr_dlg() {return usr_dlg;} public Fsdb_mnt_mgr Usr_dlg_(Gfo_usr_dlg v) {usr_dlg = v; return this;} private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Null;
|
|
public void Init(Io_url cur_dir) {
|
|
Fsdb_mnt_itm[] mnts = Db_load_or_make(cur_dir);
|
|
ary_len = mnts.length;
|
|
ary = new Fsdb_db_abc_mgr[ary_len];
|
|
for (int i = 0; i < ary_len; i++) {
|
|
Fsdb_mnt_itm itm = mnts[i];
|
|
Io_url abc_url = cur_dir.GenSubFil_nest(itm.Url(), "fsdb.abc.sqlite3");
|
|
ary[i] = new Fsdb_db_abc_mgr(this).Init(abc_url.OwnerDir());
|
|
}
|
|
insert_to_mnt = tbl_cfg.Select_as_int_or_fail("core", "mnt.insert_idx");
|
|
}
|
|
public int Insert_to_mnt() {return insert_to_mnt;} public Fsdb_mnt_mgr Insert_to_mnt_(int v) {insert_to_mnt = v; return this;} private int insert_to_mnt = Mnt_idx_user;
|
|
public int Abc_mgr_len() {return ary == null ? 0 : ary.length;}
|
|
public Fsdb_db_abc_mgr Abc_mgr_at(int i) {return ary[i];}
|
|
private Fsdb_mnt_itm[] Db_load_or_make(Io_url cur_dir) {
|
|
Bool_obj_ref created = Bool_obj_ref.n_();
|
|
provider = Sqlite_engine_.Provider_load_or_make_(cur_dir.GenSubFil("wiki.mnt.sqlite3"), created);
|
|
tbl_cfg = new Fsdb_cfg_tbl_sql().Ctor(provider, created.Val());
|
|
if (created.Val()) {
|
|
Fsdb_mnt_tbl.Create_table(provider);
|
|
Fsdb_mnt_tbl.Insert(provider, Mnt_idx_main, "fsdb.main", "fsdb.main");
|
|
Fsdb_mnt_tbl.Insert(provider, Mnt_idx_user, "fsdb.user", "fsdb.user");
|
|
tbl_cfg.Insert("core", "mnt.insert_idx", Int_.Xto_str(Mnt_idx_user));
|
|
}
|
|
return Fsdb_mnt_tbl.Select_all(provider);
|
|
}
|
|
public Fsdb_db_bin_fil Bin_db_get(int mnt_id, int bin_db_id) {
|
|
return ary[mnt_id].Bin_mgr().Get_at(bin_db_id);
|
|
}
|
|
public Fsdb_fil_itm Fil_select_bin(byte[] dir, byte[] fil, boolean is_thumb, int width, double thumbtime) {
|
|
for (int i = 0; i < ary_len; i++) {
|
|
Fsdb_fil_itm rv = ary[i].Fil_select_bin(dir, fil, is_thumb, width, thumbtime);
|
|
if (rv != Fsdb_fil_itm.Null && rv.Db_bin_id() != Fsdb_bin_tbl.Null_db_bin_id) { // NOTE: mnt_0 can have thumb, but mnt_1 can have itm; check for itm with Db_bin_id; DATE:2013-11-16
|
|
rv.Mnt_id_(i);
|
|
return rv;
|
|
}
|
|
}
|
|
return Fsdb_fil_itm.Null;
|
|
}
|
|
public boolean Thm_select_bin(byte[] dir, byte[] fil, Fsdb_xtn_thm_itm thm) {
|
|
for (int i = 0; i < ary_len; i++) {
|
|
boolean rv = ary[i].Thm_select_bin(dir, fil, thm);
|
|
if (rv) {
|
|
thm.Mnt_id_(i);
|
|
return rv;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
public void Fil_insert(Fsdb_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
|
|
ary[insert_to_mnt].Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr);
|
|
}
|
|
public void Thm_insert(Fsdb_xtn_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {
|
|
ary[insert_to_mnt].Thm_insert(rv, dir, fil, ext_id, w, h, thumbtime, page, modified, hash, bin_len, bin_rdr);
|
|
}
|
|
public void Img_insert(Fsdb_xtn_img_itm rv, byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr, int img_w, int img_h) {
|
|
ary[insert_to_mnt].Img_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr, img_w, img_h);
|
|
}
|
|
public void Bin_db_max_(long v) {
|
|
for (int i = 0; i < ary_len; i++)
|
|
ary[i].Bin_mgr().Db_bin_max_(v);
|
|
}
|
|
public void Insert_to_bin_(int v) {
|
|
for (int i = 0; i < ary_len; i++)
|
|
ary[i].Bin_mgr().Insert_to_bin_(v);
|
|
}
|
|
public void Txn_open() {
|
|
for (int i = 0; i < ary_len; i++)
|
|
ary[i].Txn_open();
|
|
}
|
|
public void Txn_save() {
|
|
for (int i = 0; i < ary_len; i++)
|
|
ary[i].Txn_save();
|
|
}
|
|
public void Rls() {
|
|
for (int i = 0; i < ary_len; i++)
|
|
ary[i].Rls();
|
|
tbl_cfg.Rls();
|
|
}
|
|
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
|
if (ctx.Match(k, Invk_bin_db_max_in_mb_)) this.Bin_db_max_(m.ReadLong("v") * Io_mgr.Len_mb);
|
|
else if (ctx.Match(k, Invk_insert_to_mnt_)) insert_to_mnt = m.ReadInt("v");
|
|
else if (ctx.Match(k, Invk_insert_to_bin_)) this.Insert_to_bin_(m.ReadInt("v"));
|
|
else return GfoInvkAble_.Rv_unhandled;
|
|
return this;
|
|
} private static final String Invk_bin_db_max_in_mb_ = "bin_db_max_in_mb_", Invk_insert_to_mnt_ = "insert_to_mnt_", Invk_insert_to_bin_ = "insert_to_bin_";
|
|
public static final int Mnt_idx_main = 0, Mnt_idx_user = 1, Insert_to_bin_null = -1;
|
|
public static void Patch(Fsdb_mnt_mgr mnt_mgr) {
|
|
mnt_mgr.Abc_mgr_at(Fsdb_mnt_mgr.Mnt_idx_main).Cfg_mgr()
|
|
.Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_fix_defaults , "y")
|
|
.Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_gallery_packed , "y")
|
|
.Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_use_thumb_w , "y")
|
|
.Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_fix_default , "y")
|
|
;
|
|
}
|
|
}
|