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:
@@ -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
|
||||
}
|
||||
|
||||
123
400_xowa/src/gplx/xowa/guis/views/Xog_startup_tabs.java
Normal file
123
400_xowa/src/gplx/xowa/guis/views/Xog_startup_tabs.java
Normal 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"
|
||||
;
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user