App_update: Use version_id as cutoff, not version_date

pull/620/head
gnosygnu 8 years ago
parent 19571facdd
commit 5840ebe592

@ -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;

@ -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";
}

@ -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;

@ -16,42 +16,44 @@ 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.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"

@ -32,7 +32,7 @@ public class Xoa_update_html extends Xow_special_wtr__base {
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));
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__

@ -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 "";

@ -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());

Loading…
Cancel
Save