/* XOWA: the XOWA Offline Wiki Application Copyright (C) 2012-2017 gnosygnu@gmail.com XOWA is licensed under the terms of the General Public License (GPL) Version 3, or alternatively under the terms of the Apache License Version 2.0. You may use XOWA according to either of these licenses as is most appropriate for your project on a case-by-case basis. The terms of each license can be found in the source code repository: GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt */ 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.*; 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 Xof_repo_itm repo; private Io_url orig_dir; public Fs_root_mgr(Xowe_wiki wiki) { this.wiki = wiki; } public Fs_root_wkr Wkr() {return wkr;} public boolean Find_file(Xof_fsdb_itm fsdb_itm) { // get orig; exit if not found in dir byte[] orig_ttl = fsdb_itm.Orig_ttl(); Orig_fil_row orig_itm = wkr.Get_by_ttl(orig_ttl); if (orig_itm == Orig_fil_row.Null) return false; // 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()) { // 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 { // 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 } } return true; } public void Root_dir_(Io_url v) { Io_url root_dir = v; orig_dir = root_dir.GenSubDir("orig"); orig_dir_mgr_init(orig_dir); } public void Orig_dir_(Io_url v) { orig_dir = v; orig_dir_mgr_init(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); } }