1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

App_update: Add app-update check to startup

This commit is contained in:
gnosygnu
2017-01-06 13:22:19 -05:00
parent 3c1898b9ef
commit 0ef1a82a16
29 changed files with 338 additions and 218 deletions

View File

@@ -63,6 +63,10 @@ public class Xocfg_mgr implements Gfo_invk {
String rv = cache_mgr.Get_or(Ctx__app, key, null);
return rv == null ? or : Long_.parse_or(rv, or);
}
public DateAdp Get_date_app_or(String key, DateAdp or) {
String rv = cache_mgr.Get_or(Ctx__app, key, null);
return rv == null ? or : DateAdp_.parse_fmt_or(rv, Fmt__time, or);
}
public String[] Get_strary_app_or(String key, String dlm, String... or) {
String rv = cache_mgr.Get_or(Ctx__app, key, null);
return rv == null ? or : String_.Ary_parse(String_.Trim(rv), dlm);
@@ -111,8 +115,11 @@ public class Xocfg_mgr implements Gfo_invk {
public void Set_bool_app(String key, boolean val) {Set_str(Xocfg_mgr.Ctx__app, key, Yn.To_str(val));}
public void Set_float_app(String key, float val) {Set_str(Xocfg_mgr.Ctx__app, key, Float_.To_str(val));}
public void Set_str_app(String key, String val) {Set_str(Xocfg_mgr.Ctx__app, key, val);}
public void Set_date_app(String key, DateAdp val) {Set_str(Xocfg_mgr.Ctx__app, key, val.XtoStr_fmt(Fmt__time));}
public void Set_int_app(String key, int val) {Set_str(Xocfg_mgr.Ctx__app, key, Int_.To_str(val));}
public void Set_bry_wiki(Xowe_wiki wiki, String key, byte[] val) {Set_str(wiki.Domain_itm().Abrv_xo_str(), key, String_.new_u8(val));}
public void Set_str(String ctx, String key, String val) {
cache_mgr.Set(ctx, key, val);
}
@@ -139,4 +146,5 @@ public class Xocfg_mgr implements Gfo_invk {
}
return rv;
}
private static final String Fmt__time = "yyyy-MM-dd HH:mm:ss";
}

View File

@@ -36,8 +36,8 @@ public class Xocfg_dflt_mgr {
hash.Add_if_dupe_use_nth(key, invk);
}
}
public static void Run_os_gfs(gplx.xowa.apps.gfs.Xoa_gfs_mgr gfs_mgr, gplx.xowa.apps.fsys.Xoa_fsys_mgr fsys_mgr) {
Io_url url = fsys_mgr.Root_dir().GenSubFil_nest("user", "anonymous", "app", "cfg", "os.gfs");
public static void Run_os_gfs(String user_name, gplx.xowa.apps.gfs.Xoa_gfs_mgr gfs_mgr, gplx.xowa.apps.fsys.Xoa_fsys_mgr fsys_mgr) {
Io_url url = fsys_mgr.Root_dir().GenSubFil_nest("user", user_name, "app", "cfg", "os.gfs");
if (!Io_mgr.Instance.ExistsFil(url)) {
Io_url dflt_url = fsys_mgr.Bin_plat_dir().GenSubFil_nest("xowa", "cfg", "os.default.gfs");
if (Io_mgr.Instance.ExistsFil(dflt_url)) // TEST: also, DRD

View File

@@ -16,8 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.cfgs.specials.edits.services; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.cfgs.specials.*; import gplx.xowa.addons.apps.cfgs.specials.edits.*;
import gplx.langs.jsons.*;
import gplx.xowa.htmls.bridges.*;
import gplx.langs.jsons.*; import gplx.xowa.htmls.bridges.*;
public class Xocfg_edit_bridge implements Bridge_cmd_itm {
private Xocfg_edit_svc svc;
public void Init_by_app(Xoa_app app) {

View File

@@ -19,7 +19,7 @@ package gplx.xowa.addons.apps.cfgs.upgrades; import gplx.*; import gplx.xowa.*;
import gplx.dbs.*;
import gplx.langs.gfs.*;
public class Xocfg_upgrade_mgr {
public static void Convert(Xoae_app app) {
public static void Upgrade_cfg_0(Xoae_app app) {
try {
// get cfg_fil; if empty, exit
Io_url cfg_fil = app.Fsys_mgr().Root_dir().GenSubFil_nest("user", "anonymous", "app", "data", "cfg", "xowa_user_cfg.gfs");

View File

@@ -17,20 +17,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.updates; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*;
import gplx.xowa.specials.*; import gplx.xowa.htmls.bridges.*;
import gplx.xowa.addons.apps.updates.specials.*;
public class Xoa_update_addon implements Xoax_addon_itm, Xoax_addon_itm__special, Xoax_addon_itm__json {
public Xow_special_page[] Special_pages() {
return new Xow_special_page[]
{ Xoa_update_special.Prototype
{ gplx.xowa.addons.apps.updates.specials.Xoa_update_special.Prototype
};
}
public Bridge_cmd_itm[] Json_cmds() {
return new Bridge_cmd_itm[]
{ Xoa_update_bridge.Prototype
{ gplx.xowa.addons.apps.updates.specials.svcs.Xoa_update_bridge.Prototype
};
}
public String Addon__key() {return ADDON__KEY;} private static final String ADDON__KEY = "xowa.app.update";
public static void Init(Xoae_app app) {
}
}

View File

@@ -0,0 +1,47 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.updates; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*;
import gplx.xowa.addons.apps.updates.dbs.*;
public class Xoa_update_db {
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) {
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_yyyy_MM_dd_HH_mm_ss());
}
public static boolean Download_from_inet(Xoa_app app, Io_url db_url) {
// exit if web_access disabled
if (!gplx.core.ios.IoEngine_system.Web_access_enabled) return false;
// 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.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);
// 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));
}
return true;
}
}

View File

@@ -0,0 +1,55 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.updates; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*;
import gplx.xowa.addons.apps.cfgs.*;
public class Xoa_update_startup {
public static boolean Show_at_startup(Xoa_app app) {
try {
// exit if disabled
Xocfg_mgr cfg = app.Cfg();
if (!cfg.Get_bool_app_or(Cfg__enabled, true)) return false;
// get inet_interval and date
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 enough time has passed, check internet for update_db
Io_url db_url = Xoa_update_db.Url(app);
if (Datetime_now.Get().Diff_days(inet_date) > inet_interval) {
Xoa_update_db.Download_from_inet(app, db_url);
cfg.Set_date_app(Cfg__inet_date, Datetime_now.Get());
return true;
}
// check if there are versions to update
DateAdp cutoff_date = cfg.Get_date_app_or(Cfg__cutoff_date, DateAdp_.parse_fmt(Xoa_app_.Build_date, Xoa_app_.Build_date_fmt));
if (Xoa_update_db.Select(db_url, cutoff_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_cutoff_date_to_now(Xoa_app app) {
app.Cfg().Set_date_app(Cfg__cutoff_date, Datetime_now.Get());
}
private static final String
Cfg__enabled = "xowa.app.update.startup.enabled"
, Cfg__inet_interval = "xowa.app.update.startup.inet_interval"
, Cfg__inet_date = "xowa.app.update.startup.inet_date"
, Cfg__cutoff_date = "xowa.app.update.startup.cutoff_date";
}

View File

@@ -43,7 +43,7 @@ public class Xoa_app_version_tbl implements Db_tbl {
( "SELECT *"
, "FROM app_version"
, "WHERE version_date > '{0}'"
, "ORDER BY version_date DESC"
// , "ORDER BY version_date DESC"
), date);
Db_rdr rdr = conn.Stmt_sql(sql).Exec_select__rls_auto();

View File

@@ -18,44 +18,31 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.addons.apps.updates.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
import gplx.xowa.addons.apps.updates.dbs.*;
import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*;
class Xoa_update_html extends Xow_special_wtr__base {
public class Xoa_update_html extends Xow_special_wtr__base {
@Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "app", "update");}
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xoa_update.mustache.html");}
@Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) {
return Load(app);
}
private static Mustache_doc_itm Load(Xoa_app app) {
Io_url update_db_url = app.Fsys_mgr().Root_dir().GenSubFil_nest("user", "app", "update", "xoa_update.sqlite3");
Io_url db_url = Xoa_update_db.Url(app);
// get from internet
boolean web_access_enabled = gplx.core.ios.IoEngine_system.Web_access_enabled;
if (web_access_enabled) {
// check text file to see if version changed
Io_url trg_summary_fil = update_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.Api_root().Addon().App__update__update_db_src(); // "http://xowa.org";
int src_summary_version = Bry_.To_int(Io_mgr.Instance.DownloadFil_args("", Io_url_.Empty).Exec_as_bry(src_summary_server + "/admin/app_update/xoa_update.txt"));
// 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 = update_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));
}
}
Xoa_update_db.Download_from_inet(app, db_url);
// load from db
Xoa_update_db_mgr db_mgr = new Xoa_update_db_mgr(update_db_url);
String check_date = app.User().User_db_mgr().Cfg().Get_app_str_or("app.updater.last_check", null);
Xoa_app_version_itm[] db_itms = Xoa_update_db.Select(db_url, DateAdp_.parse_fmt(Xoa_app_.Build_date, Xoa_app_.Build_date_fmt));
// build root
String check_date = app.Cfg().Get_str_app_or("xowa.app.update.startup.inet_date", null); // CFG:Cfg__
if (check_date == null) check_date = Datetime_now.Get().XtoStr_fmt_yyyy_MM_dd_HH_mm_ss();
Xoa_app_version_itm[] db_itms = db_mgr.Tbl__app_version().Select_by_date(Xoa_app_.Build_date);
String build_date = String_.Mid(Xoa_app_.Build_date, 0, String_.FindFwd(Xoa_app_.Build_date, " "));
if (db_itms.length == 0) return new Xoa_update_itm__root(Xoa_app_.Version, build_date, "", check_date, web_access_enabled, "", "", Xoa_app_version_itm.Priority__trivial, "", "");
String build_date = String_.Mid(Xoa_app_.Build_date, 0, String_.FindFwd(Xoa_app_.Build_date, " ")); // remove time to show date only
if (db_itms.length == 0) return new Xoa_update_itm__root(Xoa_app_.Version, build_date, check_date, web_access_enabled, "", "", Xoa_app_version_itm.Priority__trivial, "", "", "");
// convert to gui itm
Xoa_app_version_itm db_itm = db_itms[0];
Xoa_update_itm__root root = new Xoa_update_itm__root(Xoa_app_.Version, build_date, db_itm.Package_url(), check_date, web_access_enabled, db_itm.Name(), db_itm.Date(), db_itm.Priority(), db_itm.Summary(), db_itm.Details());
Xoa_update_itm__root root = new Xoa_update_itm__root(Xoa_app_.Version, build_date, check_date, web_access_enabled, db_itm.Name(), db_itm.Date(), db_itm.Priority(), db_itm.Summary(), db_itm.Details(), db_itm.Package_url());
root.Itms_(To_gui_itm(db_itms));
return root;
}
@@ -68,9 +55,8 @@ class Xoa_update_html extends Xow_special_wtr__base {
return rv;
}
private static Xoa_update_itm__leaf To_gui_itm(Xoa_app_version_itm db_itm) {
return new Xoa_update_itm__leaf(db_itm.Name(), db_itm.Date(), db_itm.Priority(), db_itm.Summary(), db_itm.Details());
return new Xoa_update_itm__leaf(db_itm.Name(), db_itm.Date(), db_itm.Priority(), db_itm.Summary(), db_itm.Details(), db_itm.Package_url());
}
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
Xopg_tag_mgr head_tags = page_data.Head_tags();
Xopg_tag_wtr_.Add__core (head_tags, app.Fsys_mgr().Http_root());

View File

@@ -19,14 +19,15 @@ package gplx.xowa.addons.apps.updates.specials; import gplx.*; import gplx.xowa.
import gplx.langs.mustaches.*;
import gplx.xowa.addons.apps.updates.dbs.*;
class Xoa_update_itm__leaf implements Mustache_doc_itm {
private final String version, date, summary, details;
private final String version, date, summary, details, package_url;
private final int priority;
public Xoa_update_itm__leaf(String version, String date, int priority, String summary, String details) {
public Xoa_update_itm__leaf(String version, String date, int priority, String summary, String details, String package_url) {
this.version = version;
this.date = date;
this.priority = priority;
this.summary = summary;
this.details = details;
this.package_url = package_url;
}
@gplx.Virtual public boolean Mustache__write(String k, Mustache_bfr bfr) {
if (String_.Eq(k, "version")) bfr.Add_str_u8(version);
@@ -34,6 +35,7 @@ class Xoa_update_itm__leaf implements Mustache_doc_itm {
else if (String_.Eq(k, "priority")) bfr.Add_str_u8(Xoa_app_version_itm.Priority__to_name(priority));
else if (String_.Eq(k, "summary")) bfr.Add_str_u8(summary);
else if (String_.Eq(k, "details")) bfr.Add_str_u8(details);
else if (String_.Eq(k, "package_url")) bfr.Add_str_u8(package_url);
return true;
}
@gplx.Virtual public Mustache_doc_itm[] Mustache__subs(String key) {

View File

@@ -17,16 +17,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.updates.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
import gplx.langs.mustaches.*;
class Xoa_update_itm__root extends Xoa_update_itm__leaf { private final String current_version, current_date, download_url, check_date;
class Xoa_update_itm__root extends Xoa_update_itm__leaf { private final String current_version, current_date, check_date;
private final boolean web_access_enabled;
private Xoa_update_itm__leaf[] itms = Xoa_update_itm__leaf.Ary__empty;
public Xoa_update_itm__root
( String current_version, String current_date, String download_url, String check_date, boolean web_access_enabled
, String version, String date, int priority, String summary, String details
) {super(version, date, priority, summary, details);
( String current_version, String current_date, String check_date, boolean web_access_enabled
, String version, String date, int priority, String summary, String details, String package_url
) {super(version, date, priority, summary, details, package_url);
this.current_version = current_version;
this.current_date = current_date;
this.download_url = download_url;
this.check_date = check_date;
this.web_access_enabled = web_access_enabled;
}
@@ -36,7 +35,6 @@ class Xoa_update_itm__root extends Xoa_update_itm__leaf { private final Stri
@Override public boolean Mustache__write(String k, Mustache_bfr bfr) {
if (String_.Eq(k, "current_version")) bfr.Add_str_u8(current_version);
else if (String_.Eq(k, "current_date")) bfr.Add_str_u8(current_date);
else if (String_.Eq(k, "download_url")) bfr.Add_str_u8(download_url);
else if (String_.Eq(k, "check_date")) bfr.Add_str_u8(check_date);
return super.Mustache__write (k, bfr);
}

View File

@@ -15,7 +15,7 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.updates.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
package gplx.xowa.addons.apps.updates.specials.svcs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*; import gplx.xowa.addons.apps.updates.specials.*;
import gplx.langs.jsons.*; import gplx.xowa.htmls.bridges.*;
public class Xoa_update_bridge implements Bridge_cmd_itm {
private Xoa_app app;
@@ -25,19 +25,20 @@ public class Xoa_update_bridge implements Bridge_cmd_itm {
public String Exec(Json_nde data) {
byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Bridge_cmd_mgr.Msg__proc, null), Byte_ascii.Max_7_bit);
Json_nde args = data.Get_kv(Bridge_cmd_mgr.Msg__args).Val_as_nde();
Xoa_update_svc svc = new Xoa_update_svc(app);
switch (proc_id) {
case Proc__download:
Xoa_update_controller controller = new Xoa_update_controller();
controller.Update_app(app, args.Get_as_str("version"));
break;
default: throw Err_.new_unhandled_default(proc_id);
case Proc__exec: svc.Exec(args.Get_as_str("version"));break;
case Proc__skip: svc.Skip(); break;
default: throw Err_.new_unhandled_default(proc_id);
}
return "";
}
private static final byte Proc__download = 0;
private static final byte Proc__exec = 0, Proc__skip = 1;
private static final Hash_adp_bry proc_hash = Hash_adp_bry.cs()
.Add_str_byte("download" , Proc__download)
.Add_str_byte("exec" , Proc__exec)
.Add_str_byte("skip" , Proc__skip)
;
public byte[] Key() {return BRIDGE_KEY;} public static final byte[] BRIDGE_KEY = Bry_.new_a7("app.updater");

View File

@@ -15,20 +15,20 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.updates.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
package gplx.xowa.addons.apps.updates.specials.svcs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*; import gplx.xowa.addons.apps.updates.specials.*;
import gplx.xowa.guis.cbks.*;
import gplx.core.gfobjs.*;
import gplx.xowa.addons.apps.updates.dbs.*; import gplx.xowa.addons.apps.updates.js.*;
import gplx.xowa.addons.apps.updates.apps.*;
import gplx.core.envs.*;
class Xoa_update_controller implements Gfo_invk {
class Xoa_update_svc implements Gfo_invk {
private Xoa_app app;
private Io_url app_root_dir, update_dir, update_jar_fil;
public void Update_app(Xoa_app app, String version_name) {
this.app = app;
public Xoa_update_svc(Xoa_app app) {this.app = app;}
public void Exec(String version_name) {
// get app_version from db
this.app_root_dir = app.Fsys_mgr().Root_dir();
this.update_dir = app_root_dir.GenSubDir_nest("user", "app", "update");
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);
@@ -45,6 +45,9 @@ class Xoa_update_controller 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_cutoff_date_to_now(app);
}
private void On_download_done(GfoMsg m) {
Xojs_wkr__download download_wkr = (Xojs_wkr__download)m.ReadObj("v");
Io_url src = download_wkr.Trg();
@@ -59,7 +62,7 @@ class Xoa_update_controller implements Gfo_invk {
// copy update_jar
Io_url src_jar_fil = src.GenSubFil_nest("bin", "any", "xowa", "addon", "app", "update", "xoa_update.jar");
this.update_jar_fil = app_root_dir.GenSubFil_nest("user", "app", "update", "xoa_update.jar");
this.update_jar_fil = app_root_dir.GenSubFil_nest("user", "install", "update", "xoa_update.jar");
Io_mgr.Instance.MoveFil_args(src_jar_fil, update_jar_fil, true).Exec();
Xojs_wkr__replace replace_wkr = new Xojs_wkr__replace(unzip_wkr.Cbk_mgr(), unzip_wkr.Cbk_trg(), "xo.app_updater.download__prog", Gfo_invk_cmd.New_by_key(this, Invk__replace_done), src, trg);
@@ -79,12 +82,15 @@ class Xoa_update_controller implements Gfo_invk {
// write failed
Bry_bfr bfr = Bry_bfr_.New();
bfr.Add_str_u8(App__update__restart_cmd(app.Api_root().Addon().App__update__restart_cmd(), Env_.AppUrl(), Op_sys.Cur().Tid(), Op_sys.Cur().Bitness()) + "\n");
String app_update_cfg = app.Cfg().Get_str_app_or("xowa.app.update.restart_cmd", ""); // CFG:Cfg__
bfr.Add_str_u8(App__update__restart_cmd(app_update_cfg, Env_.AppUrl(), Op_sys.Cur().Tid(), Op_sys.Cur().Bitness()) + "\n");
list.Save(bfr);
Io_mgr.Instance.SaveFilBfr(update_dir.GenSubFil("xoa_update.txt"), bfr);
Io_url manifest_url = update_dir.GenSubFil("xoa_update_manifest.txt");
Io_mgr.Instance.SaveFilBfr(manifest_url, bfr);
replace_wkr.Cbk_mgr().Send_json(replace_wkr.Cbk_trg(), "xo.app_updater.download__prog", Gfobj_nde.New().Add_bool("done", true));
Runtime_.Exec("java -jar " + update_jar_fil.Raw());
Runtime_.Exec("java -jar " + update_jar_fil.Raw()+ " " + manifest_url.Raw());
System_.Exit();
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {

View File

@@ -15,10 +15,10 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.apps.updates.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
package gplx.xowa.addons.apps.updates.specials.svcs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*; import gplx.xowa.addons.apps.updates.specials.*;
import org.junit.*; import gplx.core.tests.*; import gplx.core.envs.*;
public class Xoa_update_controller__tst {
private final Xoa_update_controller__fxt fxt = new Xoa_update_controller__fxt();
public class Xoa_update_svc__tst {
private final Xoa_update_svc__fxt fxt = new Xoa_update_svc__fxt();
@Test public void Restart_cmd() {
Io_url jar_fil = Io_url_.new_dir_("/home/gnosygnu/xowa/xowa.jar");
fxt.Test__restart_cmd("manual" , jar_fil, Op_sys.Tid_lnx, Op_sys.Bitness_64, "manual");
@@ -30,8 +30,8 @@ public class Xoa_update_controller__tst {
fxt.Test__restart_cmd("" , jar_fil, Op_sys.Tid_wnt, Op_sys.Bitness_32, "/home/gnosygnu/xowa/xowa.exe");
}
}
class Xoa_update_controller__fxt {
class Xoa_update_svc__fxt {
public void Test__restart_cmd(String current, Io_url app_url, byte op_sys_tid, byte bitness, String expd) {
Gftest.Eq__str(expd, Xoa_update_controller.App__update__restart_cmd(current, app_url, op_sys_tid, bitness), "restart_cmd");
Gftest.Eq__str(expd, Xoa_update_svc.App__update__restart_cmd(current, app_url, op_sys_tid, bitness), "restart_cmd");
}
}