/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.
You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.
The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
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()));
// save prev_selected
int prev_selected = app.Gui_mgr().Browser_win().Tab_mgr().Tabs_len() == 0 // must check for 0 tabs, else null ref
? -1
: app.Gui_mgr().Browser_win().Tab_mgr().Active_tab().Tab_idx();
app.Cfg().Set_int_app(Cfg__prev_selected, prev_selected);
}
}
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"
;
}