diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index 68c7f78b2..e7675c340 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -32,7 +32,8 @@ public class Xoa_app_ { } } public static final String Name = "xowa"; - public static final String Version = "4.0.0.1701"; // RELEASE:2017-01-03 20:30 + public static final int Version_id = 513; + public static final String Version = "4.1.1.1701"; // RELEASE:2017-01-03 20:30 public static String Build_date = "2012-12-30 00:00:00"; public static String Build_date_fmt = "yyyy-MM-dd HH:mm:ss"; public static String Op_sys_str; diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/Xoa_update_startup.java b/400_xowa/src/gplx/xowa/addons/apps/updates/Xoa_update_startup.java index d5698a7a3..efdc2e62d 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/Xoa_update_startup.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/Xoa_update_startup.java @@ -21,29 +21,29 @@ import gplx.xowa.addons.apps.updates.dbs.*; public class Xoa_update_startup { public static boolean Show_at_startup(Xoa_app app) { try { - // exit if disabled + // set default to this version Xocfg_mgr cfg = app.Cfg(); + cfg.Dflt_mgr().Add(Cfg__version_cutoff, Int_.To_str(Xoa_app_.Version_id)); + + // exit if disabled if (!cfg.Get_bool_app_or(Cfg__enabled, true)) return false; // check online for updates Io_url db_url = Xoa_update_db_mgr_.Url(app); - boolean offline_exists = Io_mgr.Instance.ExistsFil(db_url); - if (Xoa_update_db_mgr_.Download_from_inet(app, Bool_.Y, db_url)) { - return offline_exists; // if !offline_exists, then application is brand-new install; don't bother showing update - } + Xoa_update_db_mgr_.Download_from_inet(app, Bool_.Y, db_url); // check offline for updates - DateAdp ignore_date = cfg.Get_date_app_or(Cfg__ignore_date, DateAdp_.parse_fmt(Xoa_app_.Build_date, Xoa_app_.Build_date_fmt)); - if (Xoa_update_db_mgr_.Select(db_url, ignore_date).length > 0) - return true; - } catch (Exception exc) {Gfo_usr_dlg_.Instance.Warn_many("", "", "starup:fatal error while looking up app-update-reminder; err=~{0}", Err_.Message_gplx_log(exc));} - return false; - } - public static void Set_ignore_date_to_now(Xoa_app app) { - app.Cfg().Set_date_app(Cfg__ignore_date, Datetime_now.Get()); + int version_cutoff = cfg.Get_int_app_or(Cfg__version_cutoff, Xoa_app_.Version_id); + return Xoa_update_db_mgr_.Select(db_url, version_cutoff).length > 0; + } catch (Exception exc) { + Gfo_usr_dlg_.Instance.Warn_many("", "", "starup:fatal error while looking up app-update-reminder; err=~{0}", Err_.Message_gplx_log(exc)); + return false; + } } + public static int Version_cutoff(Xoa_app app) {return app.Cfg().Get_int_app_or(Cfg__version_cutoff, Xoa_app_.Version_id);} + public static void Version_cutoff_(Xoa_app app, int id) {app.Cfg().Set_int_app(Cfg__version_cutoff, id);} private static final String Cfg__enabled = "xowa.app.update.startup.enabled" - , Cfg__ignore_date = "xowa.app.update.startup.ignore_date"; + , Cfg__version_cutoff = "xowa.app.update.startup.version_cutoff"; } diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/dbs/Xoa_app_version_tbl.java b/400_xowa/src/gplx/xowa/addons/apps/updates/dbs/Xoa_app_version_tbl.java index 729d17cb6..607595f1b 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/dbs/Xoa_app_version_tbl.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/dbs/Xoa_app_version_tbl.java @@ -34,17 +34,15 @@ public class Xoa_app_version_tbl implements Db_tbl { } public String Tbl_name() {return tbl_name;} private final String tbl_name = TBL_NAME; public void Create_tbl() { - conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds - , Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, fld__version_date, fld__version_date)) - ); + conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds)); } - public Xoa_app_version_itm[] Select_by_date(String date) { // NOTE: use version_date b/c (a) version_id is not available; (b) version_name is not easy to sort; + public Xoa_app_version_itm[] Select_by_id(int id) { String sql = Db_sql_.Make_by_fmt(String_.Ary ( "SELECT *" , "FROM app_version" - , "WHERE version_date > '{0}'" - // , "ORDER BY version_date DESC" - ), date); + , "WHERE version_id > {0}" + , "ORDER BY version_id" + ), id); Db_rdr rdr = conn.Stmt_sql(sql).Exec_select__rls_auto(); try { @@ -55,7 +53,7 @@ public class Xoa_app_version_tbl implements Db_tbl { return (Xoa_app_version_itm[])list.To_ary_and_clear(Xoa_app_version_itm.class); } finally {rdr.Rls();} } - public Xoa_app_version_itm Select_by_version_or_null(String name) { + public Xoa_app_version_itm Select_by_name_or_null(String name) { Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__version_name).Crt_str(fld__version_name, name).Exec_select__rls_auto(); try { return rdr.Move_next() ? Load(rdr) : null; diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/dbs/Xoa_update_db_mgr_.java b/400_xowa/src/gplx/xowa/addons/apps/updates/dbs/Xoa_update_db_mgr_.java index d71476d7a..f32a42e76 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/dbs/Xoa_update_db_mgr_.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/dbs/Xoa_update_db_mgr_.java @@ -16,42 +16,44 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.addons.apps.updates.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*; +import gplx.langs.jsons.*; import gplx.xowa.addons.apps.cfgs.*; public class Xoa_update_db_mgr_ { public static Io_url Url(Xoa_app app) {return app.Fsys_mgr().Root_dir().GenSubFil_nest("user", "install", "update", "xoa_update.sqlite3");} - public static Xoa_app_version_itm[] Select(Io_url db_url, DateAdp cutoff_date) { + public static Xoa_app_version_itm[] Select(Io_url db_url, int id) { Xoa_update_db_mgr db_mgr = new Xoa_update_db_mgr(db_url); - return db_mgr.Tbl__app_version().Select_by_date(cutoff_date.XtoStr_fmt(Xocfg_mgr.Fmt__time)); + return db_mgr.Tbl__app_version().Select_by_id(id); } public static boolean Download_from_inet(Xoa_app app, boolean exit_if_too_soon, Io_url db_url) { - // exit if web_access disabled - if (!gplx.core.ios.IoEngine_system.Web_access_enabled) return false; + try { + // exit if web_access disabled + if (!gplx.core.ios.IoEngine_system.Web_access_enabled) return false; - // exit if inet checked too soon - if (exit_if_too_soon) { - Xocfg_mgr cfg = app.Cfg(); - int inet_interval = cfg.Get_int_app_or(Cfg__inet_interval, 7); - DateAdp inet_date = cfg.Get_date_app_or(Cfg__inet_date, DateAdp_.MinValue); - if (Datetime_now.Get().Diff_days(inet_date) < inet_interval) return false; - cfg.Set_date_app(Cfg__inet_date, Datetime_now.Get()); - } + // exit if inet checked too soon + if (exit_if_too_soon) { + Xocfg_mgr cfg = app.Cfg(); + int inet_interval = cfg.Get_int_app_or(Cfg__inet_interval, 7); + DateAdp inet_date = cfg.Get_date_app_or(Cfg__inet_date, DateAdp_.MinValue); + if (Datetime_now.Get().Diff_days(inet_date) < inet_interval) return false; + cfg.Set_date_app(Cfg__inet_date, Datetime_now.Get()); + } - // check text file to see if version changed - Io_url trg_summary_fil = db_url.OwnerDir().GenSubFil("xoa_update.txt"); - int trg_summary_version = Bry_.To_int_or(Io_mgr.Instance.LoadFilBryOr(trg_summary_fil, Bry_.new_a7("-1")), -1); - String src_summary_server = app.Cfg().Get_str_app_or("xowa.app.update.inet.server_url", "http://xowa.org"); // CFG:Cfg__ - byte[] src_summary_bry = Io_mgr.Instance.DownloadFil_args("", Io_url_.Empty).Exec_as_bry(src_summary_server + "/admin/app_update/xoa_update.txt"); - if (src_summary_bry == null) return false; - int src_summary_version = Bry_.To_int(src_summary_bry); + // get online version + String latest_version_url = app.Cfg().Get_str_app_or("xowa.app.update.inet.server_url", "http://xowa.org"); // CFG:Cfg__ + byte[] latest_version_bry = Io_mgr.Instance.DownloadFil_args("", Io_url_.Empty).Exec_as_bry(latest_version_url + "/admin/app_update/xoa_update.json"); + Json_doc jdoc = new Json_parser().Parse(latest_version_bry); + int latest_version_id = jdoc.Root_nde().Get_as_int_or("version_id", -1); - // download database - if (src_summary_version > trg_summary_version) { - String src_details_url = src_summary_server + "/admin/app_update/xoa_update.sqlite3"; - Io_url trg_details_url = db_url; - Io_mgr.Instance.DownloadFil(src_details_url, trg_details_url); - Io_mgr.Instance.SaveFilStr(trg_summary_fil, Int_.To_str(src_summary_version)); + // compare and download if necessary + if (latest_version_id > Xoa_app_.Version_id) { + String update_db_url = latest_version_url + "/admin/app_update/xoa_update.sqlite3"; + Io_mgr.Instance.DownloadFil(update_db_url, db_url); + } + return true; + } catch (Exception exc) { + Gfo_usr_dlg_.Instance.Warn_many("", "", "app_update:db download failed;err=~{0}", Err_.Message_gplx_log(exc)); + return false; } - return true; } private static final String Cfg__inet_interval = "xowa.app.update.inet.check_interval" diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/specials/Xoa_update_html.java b/400_xowa/src/gplx/xowa/addons/apps/updates/specials/Xoa_update_html.java index 16b0fc065..127aada3d 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/specials/Xoa_update_html.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/specials/Xoa_update_html.java @@ -31,8 +31,8 @@ public class Xoa_update_html extends Xow_special_wtr__base { boolean web_access_enabled = gplx.core.ios.IoEngine_system.Web_access_enabled; Xoa_update_db_mgr_.Download_from_inet(app, Bool_.N, db_url); - // load from db - Xoa_app_version_itm[] db_itms = Xoa_update_db_mgr_.Select(db_url, DateAdp_.parse_fmt(Xoa_app_.Build_date, Xoa_app_.Build_date_fmt)); + // load from db + Xoa_app_version_itm[] db_itms = Xoa_update_db_mgr_.Select(db_url, Xoa_update_startup.Version_cutoff(app)); // build root String check_date = app.Cfg().Get_str_app_or("xowa.app.update.startup.inet_date", null); // CFG:Cfg__ diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/specials/svcs/Xoa_update_bridge.java b/400_xowa/src/gplx/xowa/addons/apps/updates/specials/svcs/Xoa_update_bridge.java index d04f3c3ca..02da3fc68 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/specials/svcs/Xoa_update_bridge.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/specials/svcs/Xoa_update_bridge.java @@ -29,7 +29,7 @@ public class Xoa_update_bridge implements Bridge_cmd_itm { Xoa_update_svc svc = new Xoa_update_svc(app); switch (proc_id) { case Proc__install: svc.Install(args.Get_as_str("version"));break; - case Proc__skip: svc.Skip(); break; + case Proc__skip: svc.Skip(args.Get_as_str("version")); break; default: throw Err_.new_unhandled_default(proc_id); } return ""; diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/specials/svcs/Xoa_update_svc.java b/400_xowa/src/gplx/xowa/addons/apps/updates/specials/svcs/Xoa_update_svc.java index 726a951b8..472d5a62a 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/specials/svcs/Xoa_update_svc.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/specials/svcs/Xoa_update_svc.java @@ -24,14 +24,18 @@ import gplx.core.envs.*; class Xoa_update_svc implements Gfo_invk { private Xoa_app app; private Io_url app_root_dir, update_dir, update_jar_fil; + private Xoa_app_version_itm version_itm; public Xoa_update_svc(Xoa_app app) {this.app = app;} - public void Install(String version_name) { - // get app_version from db + private Xoa_update_db_mgr Init_db() { this.app_root_dir = app.Fsys_mgr().Root_dir(); this.update_dir = app_root_dir.GenSubDir_nest("user", "install", "update"); Io_url update_db_fil = update_dir.GenSubFil_nest("xoa_update.sqlite3"); - Xoa_update_db_mgr db_mgr = new Xoa_update_db_mgr(update_db_fil); - Xoa_app_version_itm version_itm = db_mgr.Tbl__app_version().Select_by_version_or_null(version_name); + return new Xoa_update_db_mgr(update_db_fil); + } + public void Install(String version_name) { + // get app_version from db + Xoa_update_db_mgr db_mgr = Init_db(); + this.version_itm = db_mgr.Tbl__app_version().Select_by_name_or_null(version_name); // get src, trg, etc.. String src = version_itm.Package_url(); @@ -45,8 +49,9 @@ class Xoa_update_svc implements Gfo_invk { , "xo.app_updater.download__prog", Gfo_invk_cmd.New_by_key(this, Invk__download_done), src, trg, src_len); download_wkr.Exec_async("app_updater"); } - public void Skip() { - Xoa_update_startup.Set_ignore_date_to_now(app); + public void Skip(String version_name) { + Xoa_update_db_mgr db_mgr = Init_db(); + Xoa_update_startup.Version_cutoff_(app, db_mgr.Tbl__app_version().Select_by_name_or_null(version_name).Id()); } private void On_download_done(GfoMsg m) { Xojs_wkr__download download_wkr = (Xojs_wkr__download)m.ReadObj("v"); @@ -90,7 +95,7 @@ class Xoa_update_svc implements Gfo_invk { // update prog as finished replace_wkr.Cbk_mgr().Send_json(replace_wkr.Cbk_trg(), "xo.app_updater.download__prog", Gfobj_nde.New().Add_bool("done", true)); - Xoa_update_startup.Set_ignore_date_to_now(app); // update ignore_date so current offline updates are ignore + Xoa_update_startup.Version_cutoff_(app, version_itm.Id()); // run standalone app Runtime_.Exec("java -jar " + update_jar_fil.Raw()+ " " + manifest_url.Raw());