mirror of https://github.com/gnosygnu/xowa
parent
063cc43047
commit
2dc6d8c20b
@ -0,0 +1,30 @@
|
||||
/*
|
||||
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.files.shrinks; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.bldrs.*; import gplx.xowa.addons.bldrs.files.*;
|
||||
import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wkrs.*;
|
||||
public class Xoshrink_cmd extends Xob_cmd__base {
|
||||
public Xoshrink_cmd(Xob_bldr bldr, Xowe_wiki wiki) {super(bldr, wiki);}
|
||||
@Override public void Cmd_run() {
|
||||
wiki.Init_assert();
|
||||
new Xoshrink_mgr().Exec(wiki);
|
||||
}
|
||||
|
||||
@Override public String Cmd_key() {return BLDR_CMD_KEY;} private static final String BLDR_CMD_KEY = "fsdb.shrink";
|
||||
public static final Xob_cmd Prototype = new Xoshrink_cmd(null, null);
|
||||
@Override public Xob_cmd Cmd_clone(Xob_bldr bldr, Xowe_wiki wiki) {return new Xoshrink_cmd(bldr, wiki);}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
/*
|
||||
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.files.shrinks; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.bldrs.*; import gplx.xowa.addons.bldrs.files.*;
|
||||
import gplx.core.envs.*;
|
||||
import gplx.dbs.*;
|
||||
import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.fsdb.meta.*;
|
||||
class Xoshrink_mgr {
|
||||
private Io_url src_url, trg_url;
|
||||
private Process_adp convert_cmd;
|
||||
public void Exec(Xowe_wiki wiki) {
|
||||
// init
|
||||
src_url = wiki.Fsys_mgr().Root_dir().GenSubFil_nest("tmp", "shrink", "src.file");
|
||||
trg_url = wiki.Fsys_mgr().Root_dir().GenSubFil_nest("tmp", "shrink", "trg.file");
|
||||
Io_url convert_exe_url = wiki.Appe().Prog_mgr().App_resize_img().Exe_url();
|
||||
convert_cmd = Process_adp.New(Gfo_usr_dlg_.Instance, wiki.Appe().Url_cmd_eval(), Process_adp.Run_mode_sync_timeout, 1 * 60, convert_exe_url.Raw(), "-resample ~{w}x~{h}");
|
||||
|
||||
// get bin_mgr
|
||||
Fsm_bin_mgr bin_mgr = wiki.File__mnt_mgr().Mnts__get_main().Bin_mgr();
|
||||
int len = bin_mgr.Dbs__len();
|
||||
|
||||
// loop bin_dbs
|
||||
for (int i = 0; i < len; i++) {
|
||||
Shrink(bin_mgr.Dbs__get_at(i));
|
||||
}
|
||||
}
|
||||
private void Shrink(Fsm_bin_fil fil) {
|
||||
// init
|
||||
Fsd_bin_tbl tbl = fil.Tbl();
|
||||
Db_conn conn = fil.Conn();
|
||||
|
||||
// prep for update
|
||||
conn.Txn_bgn("tbl_update");
|
||||
Db_stmt stmt = conn.Stmt_update(tbl.Tbl_name(), String_.Ary(tbl.fld__owner_id), tbl.fld__data);
|
||||
|
||||
// get rdr
|
||||
Db_rdr rdr = conn.Stmt_select_all(tbl.Tbl_name(), tbl.Flds()).Exec_select__rls_auto();
|
||||
try {
|
||||
// loop each row and convert
|
||||
while (rdr.Move_next()) {
|
||||
// db.read and fs.save
|
||||
int id = rdr.Read_int(tbl.fld__owner_id);
|
||||
byte[] data = rdr.Read_bry(tbl.fld__data);
|
||||
Io_mgr.Instance.SaveFilBry(src_url, data);
|
||||
|
||||
// convert
|
||||
convert_cmd.Run();// get w and h
|
||||
|
||||
// fs.load and db.save
|
||||
data = Io_mgr.Instance.LoadFilBry(trg_url);
|
||||
tbl.Update(stmt, id, data);
|
||||
}
|
||||
} finally {
|
||||
conn.Txn_end();
|
||||
rdr.Rls();
|
||||
stmt.Rls();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue