diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_core.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_core.java index a3fac4380..ab639bab5 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_core.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_core.java @@ -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) { 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_thumb_dir_)) mgr.Thumb_dir_(To_url(m.ReadBry("v"))); + else if (ctx.Match(k, Invk_thumb_dir_)) {} else return Gfo_invk_.Rv_unhandled; return this; } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_mgr.java index 0b66e2fd5..b5dfcdbb6 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_mgr.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_mgr.java @@ -17,13 +17,15 @@ along with this program. If not, see . */ 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.xowa.files.repos.*; import gplx.fsdb.meta.*; +import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.fsdb.meta.*; class Fs_root_mgr { private final Xowe_wiki wiki; 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 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) { this.wiki = wiki; } @@ -34,36 +36,41 @@ class Fs_root_mgr { Orig_fil_row orig_itm = wkr.Get_by_ttl(orig_ttl); if (orig_itm == Orig_fil_row.Null) return false; - // update orig - 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); - Io_url orig_url = orig_itm.Url(); + // update fsdb.orig metadata + Xof_ext orig_ext = Xof_ext_.new_by_id_(orig_itm.Ext_id()); + 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()) { - fsdb_itm.Html_size_(orig_itm.W(), orig_itm.H()); - fsdb_itm.Html_view_url_(orig_url); - fsdb_itm.Html_orig_url_(orig_url); - return true; + // copy orig to cache + if (!Io_mgr.Instance.ExistsFil(cache_orig_url)) { + Io_mgr.Instance.CopyFil(actl_orig_url, cache_orig_url, false); + 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 { - String thumb_rel = orig_url.GenRelUrl_orEmpty(orig_dir); - int upright_patch = wiki.File_mgr().Patch_upright(); - 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); - int html_w = img_size.Html_w(), html_h = img_size.Html_h(); - 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)) + // make thumb by imagemagick + Io_url cache_thumb_url = url_bldr.To_url_trg(repo, fsdb_itm, Bool_.N); + if (!Io_mgr.Instance.ExistsFil(cache_thumb_url)) { + 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)) 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) { Io_url root_dir = v; orig_dir = root_dir.GenSubDir("orig"); - thumb_dir = root_dir.GenSubDir("thumb"); orig_dir_mgr_init(orig_dir); } 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) { wkr.Init(wiki.Appe().File_mgr().Img_mgr().Wkr_query_img_size(), orig_dir); } - public void Thumb_dir_(Io_url v) { - thumb_dir = v; - } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_tst.java index 57f163571..9e45e10e5 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_tst.java @@ -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)); } @Test public void Recurse() { - fxt.Init_fs("mem/dir/sub1/A1.png", 200, 100); - fxt.Test_get("A1.png", fxt.itm_().Url_("mem/dir/sub1/A1.png").Size_(200, 100)); + fxt.Init_fs("mem/dir/A/A1.png", 200, 100); + fxt.Test_get("A1.png", fxt.itm_().Url_("mem/dir/A/A1.png").Size_(200, 100)); } } class Fs_root_wkr_fxt {