From e389bcbee9984fd2c84a32bff2369849330e3c73 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Fri, 24 Feb 2017 14:08:35 -0500 Subject: [PATCH] App_update: Redownload update_db if download fails --- .../addons/apps/updates/js/Xojs_wkr__base.java | 17 +++++++++++++---- .../apps/updates/js/Xojs_wkr__download.java | 2 +- .../apps/updates/js/Xojs_wkr__replace.java | 2 +- .../addons/apps/updates/js/Xojs_wkr__unzip.java | 2 +- .../apps/updates/specials/Xoa_update_html.java | 2 ++ .../updates/specials/svcs/Xoa_update_svc.java | 15 ++++++++++++--- 6 files changed, 30 insertions(+), 10 deletions(-) diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__base.java b/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__base.java index fdebbd9be..0d737fb38 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__base.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__base.java @@ -18,24 +18,33 @@ import gplx.core.gfobjs.*; import gplx.core.progs.*; import gplx.core.progs.rate import gplx.xowa.guis.cbks.*; public class Xojs_wkr__base implements Gfo_prog_ui, Gfo_invk { private final Gfo_invk_cmd done_cbk; + private final Gfo_invk_cmd fail_cbk; private final Gfo_rate_list rate_list = new Gfo_rate_list(32); private final long notify_delay = 1000; private final double delta_threshold = .25d; // allow variance of up to 25% before updating rate private final String js_cbk, task_type; private long time_prv; private double rate_cur; - public Xojs_wkr__base(Xog_cbk_mgr cbk_mgr, Xog_cbk_trg cbk_trg, String js_cbk, Gfo_invk_cmd done_cbk, String task_type) { + public Xojs_wkr__base(Xog_cbk_mgr cbk_mgr, Xog_cbk_trg cbk_trg, String js_cbk, Gfo_invk_cmd done_cbk, Gfo_invk_cmd fail_cbk, String task_type) { this.cbk_mgr = cbk_mgr; this.cbk_trg = cbk_trg; this.js_cbk = js_cbk; this.done_cbk = done_cbk; + this.fail_cbk = fail_cbk; this.task_type = task_type; rate_list.Add(1024 * 1024, 1); // add default rate of 1 MB per second; } public void Exec() { - this.time_prv = gplx.core.envs.System_.Ticks(); - this.Exec_run(); - done_cbk.Exec_by_ctx(GfsCtx.Instance, GfoMsg_.new_cast_("m").Add("v", this)); + try { + this.time_prv = gplx.core.envs.System_.Ticks(); + this.Exec_run(); + done_cbk.Exec_by_ctx(GfsCtx.Instance, GfoMsg_.new_cast_("m").Add("v", this)); + } catch (Exception e) { + Gfo_usr_dlg_.Instance.Warn_many("", "", "failed to run task; task=~{0} err=~{1}", task_type, Err_.Message_gplx_log(e)); + cbk_mgr.Send_notify(cbk_trg, String_.Format("failed to run task: task={0} err={1}", task_type, Err_.Message_lang(e))); + if (fail_cbk != null) + fail_cbk.Exec(); + } } @gplx.Virtual protected void Exec_run() {} public void Exec_async(String thread_name) { diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__download.java b/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__download.java index 2ad76ce29..8d6f15da8 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__download.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__download.java @@ -17,7 +17,7 @@ package gplx.xowa.addons.apps.updates.js; import gplx.*; import gplx.xowa.*; imp import gplx.xowa.guis.cbks.*; import gplx.core.net.downloads.*; public class Xojs_wkr__download extends Xojs_wkr__base { - public Xojs_wkr__download(Xog_cbk_mgr cbk_mgr, Xog_cbk_trg cbk_trg, String js_cbk, Gfo_invk_cmd done_cbk, String src, Io_url trg, long src_len) {super(cbk_mgr, cbk_trg, js_cbk, done_cbk, "downloading"); + public Xojs_wkr__download(Xog_cbk_mgr cbk_mgr, Xog_cbk_trg cbk_trg, String js_cbk, Gfo_invk_cmd done_cbk, Gfo_invk_cmd fail_cbk, String src, Io_url trg, long src_len) {super(cbk_mgr, cbk_trg, js_cbk, done_cbk, fail_cbk, "downloading"); this.src = src; this.src_len = src_len; this.trg = trg; diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__replace.java b/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__replace.java index a143a7211..20db9f84e 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__replace.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__replace.java @@ -18,7 +18,7 @@ import gplx.xowa.guis.cbks.*; public class Xojs_wkr__replace extends Xojs_wkr__base { private final Io_url src_dir, trg_dir; private final Io_url[] src_fils; - public Xojs_wkr__replace(Xog_cbk_mgr cbk_mgr, Xog_cbk_trg cbk_trg, String js_cbk, Gfo_invk_cmd done_cbk, Io_url src_dir, Io_url trg_dir) {super(cbk_mgr, cbk_trg, js_cbk, done_cbk, "unzipping"); + public Xojs_wkr__replace(Xog_cbk_mgr cbk_mgr, Xog_cbk_trg cbk_trg, String js_cbk, Gfo_invk_cmd done_cbk, Io_url src_dir, Io_url trg_dir) {super(cbk_mgr, cbk_trg, js_cbk, done_cbk, null, "replacing"); this.src_dir = src_dir; this.trg_dir = trg_dir; this.src_fils = Io_mgr.Instance.QueryDir_args(src_dir).Recur_().ExecAsUrlAry(); diff --git a/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__unzip.java b/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__unzip.java index d73a81f36..8c3a99b95 100644 --- a/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__unzip.java +++ b/400_xowa/src/gplx/xowa/addons/apps/updates/js/Xojs_wkr__unzip.java @@ -17,7 +17,7 @@ package gplx.xowa.addons.apps.updates.js; import gplx.*; import gplx.xowa.*; imp import gplx.xowa.guis.cbks.*; import gplx.core.ios.zips.*; public class Xojs_wkr__unzip extends Xojs_wkr__base { - public Xojs_wkr__unzip(Xog_cbk_mgr cbk_mgr, Xog_cbk_trg cbk_trg, String js_cbk, Gfo_invk_cmd done_cbk, Io_url src, Io_url trg, long prog_data_end) {super(cbk_mgr, cbk_trg, js_cbk, done_cbk, "unzipping"); + public Xojs_wkr__unzip(Xog_cbk_mgr cbk_mgr, Xog_cbk_trg cbk_trg, String js_cbk, Gfo_invk_cmd done_cbk, Io_url src, Io_url trg, long prog_data_end) {super(cbk_mgr, cbk_trg, js_cbk, done_cbk, null, "unzipping"); this.src = src; this.trg = trg; this.Prog_data_end_(prog_data_end); } 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 64c7787c4..a4d237238 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 @@ -63,6 +63,8 @@ public class Xoa_update_html extends Xow_special_wtr__base { Xopg_tag_wtr_.Add__xolog (head_tags, app.Fsys_mgr().Http_root()); Xopg_tag_wtr_.Add__gui__progbars (head_tags, app.Fsys_mgr().Http_root()); Xopg_tag_wtr_.Add__xoajax (head_tags, app.Fsys_mgr().Http_root(), app); + Xopg_tag_wtr_.Add__jquery (head_tags, app.Fsys_mgr().Http_root()); + Xopg_tag_wtr_.Add__xonotify (head_tags, app.Fsys_mgr().Http_root()); Xopg_alertify_.Add_tags (head_tags, app.Fsys_mgr().Http_root()); head_tags.Add(Xopg_tag_itm.New_css_file(addon_dir.GenSubFil_nest("bin", "xoa_update.css"))); 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 1c53ec00a..b3e146564 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 @@ -23,6 +23,7 @@ class Xoa_update_svc implements Gfo_invk { private Xoa_app app; private Io_url app_root_dir, update_dir, update_jar_fil, version_root; private Xoa_app_version_itm version_itm; + private Xoa_update_db_mgr db_mgr; public Xoa_update_svc(Xoa_app app) {this.app = app;} private Xoa_update_db_mgr Init_db() { this.app_root_dir = app.Fsys_mgr().Root_dir(); @@ -32,7 +33,7 @@ class Xoa_update_svc implements Gfo_invk { } public void Install(String version_name) { // get app_version from db - Xoa_update_db_mgr db_mgr = Init_db(); + this.db_mgr = Init_db(); this.version_itm = db_mgr.Tbl__app_version().Select_by_name_or_null(version_name); // get src, trg, etc.. @@ -45,7 +46,7 @@ class Xoa_update_svc implements Gfo_invk { // start download Xojs_wkr__download download_wkr = new Xojs_wkr__download ( app.Gui__cbk_mgr(), Xog_cbk_trg.New(Xoa_update_special.Prototype.Special__meta().Ttl_bry()) - , "xo.app_updater.download__prog", Gfo_invk_cmd.New_by_key(this, Invk__download_done), src, trg, src_len); + , "xo.app_updater.download__prog", Gfo_invk_cmd.New_by_key(this, Invk__download_done), Gfo_invk_cmd.New_by_key(this, Invk__download_fail), src, trg, src_len); download_wkr.Exec_async("app_updater"); } public void Skip(String version_name) { @@ -59,6 +60,12 @@ class Xoa_update_svc implements Gfo_invk { Xojs_wkr__unzip unzip_wkr = new Xojs_wkr__unzip(download_wkr.Cbk_mgr(), download_wkr.Cbk_trg(), "xo.app_updater.download__prog", Gfo_invk_cmd.New_by_key(this, Invk__unzip_done), src, trg, -1); unzip_wkr.Exec_async("app_updater"); } + private void On_download_fail(GfoMsg m) { + // in case of bad urls or withdrawn patches, delete update_db and force redownload + db_mgr.Conn().Rls_conn(); + Io_mgr.Instance.DeleteFil(db_mgr.Url()); + Xoa_update_db_mgr_.Download_from_inet(app, Bool_.N, db_mgr.Url()); + } private void On_unzip_done(GfoMsg m) { Xojs_wkr__unzip unzip_wkr = (Xojs_wkr__unzip)m.ReadObj("v"); Io_url src = unzip_wkr.Trg(); @@ -106,11 +113,13 @@ class Xoa_update_svc implements Gfo_invk { } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk__download_done)) On_download_done(m); + else if (ctx.Match(k, Invk__download_fail)) On_download_fail(m); else if (ctx.Match(k, Invk__unzip_done)) On_unzip_done(m); else if (ctx.Match(k, Invk__replace_done)) On_replace_done(m); else return Gfo_invk_.Rv_unhandled; return this; - } private static final String Invk__download_done = "download_done", Invk__unzip_done = "unzip_done", Invk__replace_done = "replace_done"; + } + private static final String Invk__download_done = "download_done", Invk__download_fail = "download_fail", Invk__unzip_done = "unzip_done", Invk__replace_done = "replace_done"; public static String App__update__restart_cmd(String current, Io_url app_url, byte op_sys_tid, byte bitness) { String rv = current; if (!String_.Eq(rv, String_.Empty)) return rv; // something specified; return it