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

@@ -34,14 +34,15 @@ class Xog_launcher_tabs {
app.Usr_dlg().Log_wkr().Log_to_session_direct(log_bfr.Xto_str());
}
private boolean Restore_tabs(Xoae_app app, Xowe_wiki home_wiki, Xog_win_itm win, Io_fil_marker fil_marker) {
String[] launch_urls = Xog_startup_tabs_.Calc_startup_strs(app);
Xog_startup_tabs startup_tabs = new Xog_startup_tabs().Init_by_app(app).Calc();
String[] launch_urls = startup_tabs.Startup_urls();
try {
int launch_urls_len = launch_urls.length;
for (int i = 0; i < launch_urls_len; ++i) {
String launch_url = launch_urls[i];
Launch_tab(win, home_wiki, launch_url);
}
Xog_startup_tabs_.Select_startup_tab(app);
app.Gui_mgr().Browser_win().Tab_mgr().Tabs_select_by_idx(startup_tabs.Startup_idx());
fil_marker.End();
return true;
}
@@ -52,12 +53,8 @@ class Xog_launcher_tabs {
}
}
private void Restore_tab_failover(Xoae_app app, Xowe_wiki home_wiki, Xog_win_itm win) {
try {
Launch_tab(win, home_wiki, Xog_startup_tabs_.Page_xowa);
}
catch (Exception e) {
app.Usr_dlg().Warn_many("", "", "failed to launch failover tab: err=~{0}", Err_.Message_gplx_full(e));
}
try {Launch_tab(win, home_wiki, Xog_startup_tabs.Url__home_main);}
catch (Exception e) {app.Usr_dlg().Warn_many("", "", "failed to launch failover tab: err=~{0}", Err_.Message_gplx_full(e));}
}
private void Launch_tab(Xog_win_itm win, Xowe_wiki home_wiki, String launch_str) {
Xoae_app app = win.App();
@@ -78,13 +75,13 @@ class Io_fil_marker {
boolean rv = false;
synchronized (this) {
try {
rv = !Io_mgr.Instance.ExistsFil(url); // exists = fail; !exists = pass;
if (rv) // pass: file does not exist;
Io_mgr.Instance.SaveFilStr(url, ""); // create
else // file exists from previous run
rv = !Io_mgr.Instance.ExistsFil(url); // exists = fail; !exists = pass;
if (rv) // pass: file does not exist;
Io_mgr.Instance.SaveFilStr(url, ""); // create
else // file exists from previous run
Io_mgr.Instance.DeleteFil(url); // delete
}
catch (Exception exc) { // something unexpected happened
catch (Exception exc) { // something unexpected happened
usr_dlg.Warn_many("", "", "marker.bgn failed: url=~{0} err=~{1}", url.Raw(), Err_.Message_gplx_full(exc));
Io_mgr.Instance.DeleteFil(url); // try to delete it again
}

View File

@@ -0,0 +1,123 @@
/*
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.guis.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*;
import gplx.xowa.addons.apps.cfgs.*; import gplx.xowa.addons.apps.updates.specials.*;
public class Xog_startup_tabs {
private String type, custom_list, prev_list, prev_version, curr_version;
private boolean show_app_update;
public int Startup_idx() {return startup_idx;} private int startup_idx;
public String[] Startup_urls() {return startup_urls;} private String[] startup_urls = String_.Ary_empty;
public Xog_startup_tabs Init_by_app(Xoae_app app) {
Xocfg_mgr cfg = app.Cfg();
this.type = cfg.Get_str_app_or(Cfg__startup_type, Opt__startup_type__previous);
this.custom_list = cfg.Get_str_app_or(Cfg__custom_list, "");
this.prev_list = cfg.Get_str_app_or(Cfg__prev_list, "");
this.prev_version = cfg.Get_str_app_or(Cfg__prev_version, "");
this.curr_version = Xoa_app_.Version;
this.startup_idx = cfg.Get_int_app_or(Cfg__prev_selected, -1);
this.show_app_update = gplx.xowa.addons.apps.updates.Xoa_update_startup.Show_at_startup(app);
return this;
}
public Xog_startup_tabs Calc() {
List_adp list = List_adp_.New(); // NOTE: do not change to hash; duplicate urls are possible
// process main types
if (Manual == null) {
if (String_.Eq(type, "blank")) list.Add(gplx.xowa.specials.Xow_special_meta_.Itm__default_tab.Ttl_str());
else if (String_.Eq(type, "xowa")) list.Add(Url__home_main);
else if (String_.Eq(type, "custom")) Parse_ary(list, custom_list);
else if (String_.Eq(type, Opt__startup_type__previous)) Parse_ary(list, prev_list);
else throw Err_.new_unhandled(type);
}
else
list.Add(Manual);
// if new version, add home/wiki/Main_Page
if (gplx.xowa.apps.versions.Xoa_version_.Compare(prev_version, curr_version) == CompareAble_.Less) {
startup_idx = Add_if_absent(list, Url__home_main);
}
// if show_app_update, add page
if (show_app_update) {
startup_idx = Add_if_absent(list, Xoa_update_special.Prototype.Special__meta().Url__home());
}
// generate urls
startup_urls = (String[])list.To_ary_and_clear(String.class);
// do bounds check
if (startup_idx < 0 || startup_idx >= startup_urls.length)
startup_idx = startup_urls.length - 1;
return this;
}
private static int Add_if_absent(List_adp list, String page) {
// check list for page
int len = list.Len();
for (int i = 0; i < len; i++) {
String itm = (String)list.Get_at(i);
// page found; return its index
if (String_.Eq(itm, page)) {
return i;
}
}
// add if not found
list.Add(page);
return list.Len();
}
private static void Parse_ary(List_adp list, String s) {
if (String_.Len_eq_0(s)) return;
String[] ary = String_.SplitLines_nl(String_.Trim(s));
int len = ary.length;
for (int i = 0; i < len; i++) {
String itm = ary[i];
if (String_.Len_eq_0(itm)) continue;
list.Add(itm);
}
}
public static String Version_previous(Xoa_app app) {return app.Cfg().Get_str_app_or(Cfg__prev_version, "");}
public static void Shutdown(Xoae_app app) {
app.Cfg().Set_str_app(Cfg__prev_version, Xoa_app_.Version);
if (String_.Eq(app.Cfg().Get_str_app_or(Cfg__startup_type, Opt__startup_type__previous), Opt__startup_type__previous)) {
app.Cfg().Set_str_app(Cfg__prev_list , Calc_previous_tabs(app.Gui_mgr().Browser_win().Tab_mgr()));
app.Cfg().Set_int_app(Cfg__prev_selected, app.Gui_mgr().Browser_win().Tab_mgr().Active_tab().Tab_idx());
}
}
private static String Calc_previous_tabs(gplx.xowa.guis.views.Xog_tab_mgr tab_mgr) {
Bry_bfr bfr = Bry_bfr_.New();
int len = tab_mgr.Tabs_len();
for (int i = 0; i < len; ++i) {
if (i != 0) bfr.Add_byte_nl();
gplx.xowa.guis.views.Xog_tab_itm tab = tab_mgr.Tabs_get_at(i);
bfr.Add_str_u8(tab.Page().Url().To_str());
}
return bfr.To_str_and_clear();
}
public static String Manual = null; // note set by command-line at startup;
private static final String
Cfg__startup_type = "xowa.app.startup.tabs.type"
, Cfg__custom_list = "xowa.app.startup.tabs.custom"
, Cfg__prev_list = "xowa.app.startup.tabs.previous_list"
, Cfg__prev_selected = "xowa.app.startup.tabs.previous_selected"
, Cfg__prev_version = "xowa.app.setup.previous_version"
, Opt__startup_type__previous = "previous";
public static final String
Url__home_main = "home/wiki/Main_Page"
;
}

View File

@@ -1,100 +0,0 @@
/*
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.guis.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*;
import gplx.xowa.addons.apps.cfgs.*;
public class Xog_startup_tabs_ {
public static String Manual = null; // note should only be set once, at startup;
public static void Shutdown(Xoae_app app) {
if (String_.Eq(app.Cfg().Get_str_app_or(Cfg__tabs_type, Opt__tabs_type__previous), Opt__tabs_type__previous)) {
app.Cfg().Set_str_app(Cfg__prev_list , Calc_previous_tabs(app.Gui_mgr().Browser_win().Tab_mgr()));
app.Cfg().Set_int_app(Cfg__prev_selected, app.Gui_mgr().Browser_win().Tab_mgr().Active_tab().Tab_idx());
}
}
private static String Calc_previous_tabs(gplx.xowa.guis.views.Xog_tab_mgr tab_mgr) {
Bry_bfr bfr = Bry_bfr_.New();
int len = tab_mgr.Tabs_len();
for (int i = 0; i < len; ++i) {
if (i != 0) bfr.Add_byte_nl();
gplx.xowa.guis.views.Xog_tab_itm tab = tab_mgr.Tabs_get_at(i);
bfr.Add_str_u8(tab.Page().Url().To_str());
}
return bfr.To_str_and_clear();
}
public static void Select_startup_tab(Xoae_app app) {
if (String_.Eq(app.Cfg().Get_str_app_or(Cfg__tabs_type, Opt__tabs_type__previous), Opt__tabs_type__previous)) {
int selected_tab = app.Cfg().Get_int_app_or(Cfg__prev_selected, -1);
if (selected_tab != -1) {
app.Gui_mgr().Browser_win().Tab_mgr().Tabs_select_by_idx(selected_tab);
}
}
}
public static final String Page_xowa = "home/wiki/Main_Page";
public static String[] Calc_startup_strs(Xoae_app app) {
List_adp rv = List_adp_.New();
Xocfg_mgr cfg = app.Cfg();
String xowa_home = Page_xowa;
String type = cfg.Get_str_app_or(Cfg__tabs_type, Opt__tabs_type__previous);
if (Manual == null) {
if (String_.Eq(type, "blank")) {rv.Add(gplx.xowa.specials.Xow_special_meta_.Itm__default_tab.Ttl_str());}
else if (String_.Eq(type, "xowa")) {rv.Add(xowa_home);}
else if (String_.Eq(type, "custom")) {Add_pages_to_list(rv, cfg.Get_str_app_or(Cfg__tabs_custom, ""));}
else if (String_.Eq(type, Opt__tabs_type__previous)) {Add_pages_to_list(rv, cfg.Get_str_app_or(Cfg__prev_list, ""));}
else {throw Err_.new_unhandled(type);}
}
else
rv.Add(Manual);
Add_xowa_home_if_new_version(rv, app, xowa_home);
return rv.To_str_ary();
}
private static void Add_pages_to_list(List_adp list, String s) {
if (String_.Len_eq_0(s)) return;
String[] ary = String_.SplitLines_nl(String_.Trim(s));
int len = ary.length;
for (int i = 0; i < len; ++i) {
String itm = ary[i];
if (String_.Len_eq_0(itm)) continue;
list.Add(itm);
}
}
public static String Version_previous(Xoa_app app) {return app.Cfg().Get_str_app_or(Cfg__prev_version, "");}
private static void Add_xowa_home_if_new_version(List_adp rv, Xoae_app app, String xowa_home) {
if (gplx.xowa.apps.versions.Xoa_version_.Compare(Version_previous(app), Xoa_app_.Version) == CompareAble_.Less) {
boolean xowa_home_exists = false;
int len = rv.Count();
for (int i = 0; i < len; ++i) {
String itm = (String)rv.Get_at(i);
if (String_.Eq(itm, xowa_home)) {
xowa_home_exists = true;
break;
}
}
if (!xowa_home_exists) {
rv.Add(xowa_home);
app.Cfg().Set_int_app(Cfg__prev_selected, rv.Len());
}
}
}
private static final String
Cfg__tabs_type = "xowa.app.startup.tabs.type"
, Cfg__tabs_custom = "xowa.app.startup.tabs.custom"
, Cfg__prev_list = "xowa.app.startup.tabs.previous_list"
, Cfg__prev_selected = "xowa.app.startup.tabs.previous_selected"
, Opt__tabs_type__previous = "previous"
;
public static final String Cfg__prev_version = "xowa.app.setup.previous_version";
}

View File

@@ -79,9 +79,7 @@ public class Xog_startup_win_ {
cfg_mgr.Set_str_app(Cfg__prev_rect , win.Rect().Xto_str());
cfg_mgr.Set_str_app(Cfg__prev_maximized , Yn.To_str(win.Maximized()));
}
Xog_startup_tabs_.Shutdown(app);
cfg_mgr.Set_str_app(gplx.xowa.guis.views.Xog_startup_tabs_.Cfg__prev_version, Xoa_app_.Version);
Xog_startup_tabs.Shutdown(app);
}
public static SizeAdp Screen_maximized_calc() {
Op_sys os = Op_sys.Cur();

View File

@@ -181,7 +181,7 @@ public class Xog_tab_mgr implements Gfo_evt_itm {
tab_mgr.Tabs_select_by_idx(new_idx);
}
public void Tabs_select_by_idx(int v) {
if (v >= tab_regy.Count()) return;
if (v < 0 || v >= tab_regy.Count()) return;
tab_mgr.Tabs_select_by_idx(v);
}
public void Tabs_move(boolean fwd) {