Custom_wiki: Integrate fs_root files into app image_cache

pull/620/head
gnosygnu 8 years ago
parent 3581371d29
commit ac13d00ef8

@ -48,7 +48,7 @@ public class Fs_root_core implements Xof_fsdb_mgr, Gfo_invk { // reads images fr
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_root_dir_)) mgr.Root_dir_(To_url(m.ReadBry("v"))); if (ctx.Match(k, Invk_root_dir_)) mgr.Root_dir_(To_url(m.ReadBry("v")));
else if (ctx.Match(k, Invk_orig_dir_)) mgr.Orig_dir_(To_url(m.ReadBry("v"))); else if (ctx.Match(k, Invk_orig_dir_)) mgr.Orig_dir_(To_url(m.ReadBry("v")));
else if (ctx.Match(k, Invk_thumb_dir_)) mgr.Thumb_dir_(To_url(m.ReadBry("v"))); else if (ctx.Match(k, Invk_thumb_dir_)) {}
else return Gfo_invk_.Rv_unhandled; else return Gfo_invk_.Rv_unhandled;
return this; return this;
} }

@ -17,13 +17,15 @@ 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.*; package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*;
import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.cfgs.*;
import gplx.xowa.files.repos.*; import gplx.fsdb.meta.*; import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.fsdb.meta.*;
class Fs_root_mgr { class Fs_root_mgr {
private final Xowe_wiki wiki; private final Xowe_wiki wiki;
private final Fs_root_wkr wkr = new Fs_root_wkr(); private final Fs_root_wkr wkr = new Fs_root_wkr();
private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2();
private final Xof_img_size img_size = new Xof_img_size(); private final Xof_img_size img_size = new Xof_img_size();
private final String_obj_ref tmp_resize_result = String_obj_ref.null_(); private final String_obj_ref tmp_resize_result = String_obj_ref.null_();
private Io_url orig_dir, thumb_dir; private Xof_repo_itm repo;
private Io_url orig_dir;
public Fs_root_mgr(Xowe_wiki wiki) { public Fs_root_mgr(Xowe_wiki wiki) {
this.wiki = wiki; this.wiki = wiki;
} }
@ -34,36 +36,41 @@ class Fs_root_mgr {
Orig_fil_row orig_itm = wkr.Get_by_ttl(orig_ttl); Orig_fil_row orig_itm = wkr.Get_by_ttl(orig_ttl);
if (orig_itm == Orig_fil_row.Null) return false; if (orig_itm == Orig_fil_row.Null) return false;
// update orig // update fsdb.orig metadata
fsdb_itm.Init_at_orig(Xof_repo_tid_.Tid__local, wiki.Domain_bry(), orig_ttl, Xof_ext_.new_by_id_(orig_itm.Ext_id()), orig_itm.W(), orig_itm.H(), null); Xof_ext orig_ext = Xof_ext_.new_by_id_(orig_itm.Ext_id());
Io_url orig_url = orig_itm.Url(); fsdb_itm.Init_at_orig(Xof_repo_tid_.Tid__local, wiki.Domain_bry(), orig_ttl, orig_ext, orig_itm.W(), orig_itm.H(), null);
// gen cache_orig_url
if (repo == null) repo = wiki.File__repo_mgr().Repos_get_by_wiki(wiki.Domain_bry()).Trg(); // assert repo
Io_url cache_orig_url = url_bldr.To_url_trg(repo, fsdb_itm, Bool_.Y);
fsdb_itm.Html_orig_url_(cache_orig_url);
// update html_w, html_h, html_orig_url, html_view_url
Io_url actl_orig_url = orig_itm.Url();
fsdb_itm.Init_at_html(Xof_exec_tid.Tid_wiki_page, img_size, repo, url_bldr);
// if cache_file doesn't exist, either copy file
if (fsdb_itm.File_is_orig()) { if (fsdb_itm.File_is_orig()) {
fsdb_itm.Html_size_(orig_itm.W(), orig_itm.H()); // copy orig to cache
fsdb_itm.Html_view_url_(orig_url); if (!Io_mgr.Instance.ExistsFil(cache_orig_url)) {
fsdb_itm.Html_orig_url_(orig_url); Io_mgr.Instance.CopyFil(actl_orig_url, cache_orig_url, false);
return true; fsdb_itm.File_size_(Io_mgr.Instance.QueryFil(actl_orig_url).Size()); // set size for file_cache, else clear_cache won't delete items with 0 size
}
} }
else { else {
String thumb_rel = orig_url.GenRelUrl_orEmpty(orig_dir); // make thumb by imagemagick
int upright_patch = wiki.File_mgr().Patch_upright(); Io_url cache_thumb_url = url_bldr.To_url_trg(repo, fsdb_itm, Bool_.N);
img_size.Html_size_calc(fsdb_itm.Lnki_exec_tid(), fsdb_itm.Lnki_w(), fsdb_itm.Lnki_h(), fsdb_itm.Lnki_type(), upright_patch, fsdb_itm.Lnki_upright(), fsdb_itm.Orig_ext().Id(), orig_itm.W(), orig_itm.H(), Xof_img_size.Thumb_width_img); if (!Io_mgr.Instance.ExistsFil(cache_thumb_url)) {
int html_w = img_size.Html_w(), html_h = img_size.Html_h(); if (!wiki.Appe().File_mgr().Img_mgr().Wkr_resize_img().Resize_exec(actl_orig_url, cache_thumb_url, fsdb_itm.Html_w(), fsdb_itm.Html_h(), fsdb_itm.Orig_ext().Id(), tmp_resize_result))
String thumb_name = Int_.To_str(html_w) + "." + String_.new_u8(fsdb_itm.Orig_ext().Ext_view());
Io_url thumb_url = thumb_dir.GenSubFil_ary(thumb_rel + orig_url.Info().DirSpr(), thumb_name);
if (!Io_mgr.Instance.ExistsFil(thumb_url)) {
if (!wiki.Appe().File_mgr().Img_mgr().Wkr_resize_img().Resize_exec(orig_url, thumb_url, html_w, html_h, fsdb_itm.Orig_ext().Id(), tmp_resize_result))
return false; return false;
fsdb_itm.File_size_(Io_mgr.Instance.QueryFil(cache_thumb_url).Size()); // set size for file_cache, else clear_cache won't delete items with 0 size
} }
fsdb_itm.Html_size_(html_w, html_h);
fsdb_itm.Html_view_url_(thumb_url);
fsdb_itm.Html_orig_url_(orig_url);
return true;
} }
return true;
} }
public void Root_dir_(Io_url v) { public void Root_dir_(Io_url v) {
Io_url root_dir = v; Io_url root_dir = v;
orig_dir = root_dir.GenSubDir("orig"); orig_dir = root_dir.GenSubDir("orig");
thumb_dir = root_dir.GenSubDir("thumb");
orig_dir_mgr_init(orig_dir); orig_dir_mgr_init(orig_dir);
} }
public void Orig_dir_(Io_url v) { public void Orig_dir_(Io_url v) {
@ -73,7 +80,4 @@ class Fs_root_mgr {
private void orig_dir_mgr_init(Io_url orig_dir) { private void orig_dir_mgr_init(Io_url orig_dir) {
wkr.Init(wiki.Appe().File_mgr().Img_mgr().Wkr_query_img_size(), orig_dir); wkr.Init(wiki.Appe().File_mgr().Img_mgr().Wkr_query_img_size(), orig_dir);
} }
public void Thumb_dir_(Io_url v) {
thumb_dir = v;
}
} }

@ -27,8 +27,8 @@ public class Fs_root_wkr_tst {
fxt.Test_db("A.png", fxt.itm_().Init(1, "mem/dir/7/70/A.png", 200, 100)); fxt.Test_db("A.png", fxt.itm_().Init(1, "mem/dir/7/70/A.png", 200, 100));
} }
@Test public void Recurse() { @Test public void Recurse() {
fxt.Init_fs("mem/dir/sub1/A1.png", 200, 100); fxt.Init_fs("mem/dir/A/A1.png", 200, 100);
fxt.Test_get("A1.png", fxt.itm_().Url_("mem/dir/sub1/A1.png").Size_(200, 100)); fxt.Test_get("A1.png", fxt.itm_().Url_("mem/dir/A/A1.png").Size_(200, 100));
} }
} }
class Fs_root_wkr_fxt { class Fs_root_wkr_fxt {

Loading…
Cancel
Save