Cfg: Auto-load previous section; better upsert behavior for items

v3.3.4
gnosygnu 8 years ago
parent 5e159233ab
commit f6b4d5f153

@ -39,9 +39,11 @@ public class Xocfg_mgr {
cache_mgr.Sub(sub, ctx, key, key); cache_mgr.Sub(sub, ctx, key, key);
return cache_mgr.Get(ctx, key); return cache_mgr.Get(ctx, key);
} }
public String Get_str_app(String key) {return Get_str(gplx.xowa.addons.apps.cfgs.specials.edits.objs.Xoedit_itm.Ctx__app, key);}
public String Get_str(String ctx, String key) { public String Get_str(String ctx, String key) {
return cache_mgr.Get(ctx, key); return cache_mgr.Get(ctx, key);
} }
public void Set_str_app(String key, String val) {Set_str(gplx.xowa.addons.apps.cfgs.specials.edits.objs.Xoedit_itm.Ctx__app, key, val);}
public void Set_str(String ctx, String key, String val) { public void Set_str(String ctx, String key, String val) {
cache_mgr.Set(ctx, key, val); cache_mgr.Set(ctx, key, val);
} }

@ -41,6 +41,11 @@ public class Xocfg_itm_tbl implements Db_tbl {
public void Upsert(int itm_id, int scope_id, String db_type, int gui_type, String gui_args, String itm_key, String itm_dflt) { public void Upsert(int itm_id, int scope_id, String db_type, int gui_type, String gui_args, String itm_key, String itm_dflt) {
Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, itm_key, scope_id, db_type, gui_type, gui_args, itm_dflt); Db_tbl__crud_.Upsert(conn, tbl_name, flds, String_.Ary(fld__itm_id), itm_id, itm_key, scope_id, db_type, gui_type, gui_args, itm_dflt);
} }
public int Select_id_or(String key, int or) {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_key).Crt_str(fld__itm_key, key).Exec_select__rls_auto();
try {return rdr.Move_next() ? rdr.Read_int(fld__itm_id) : or;}
finally {rdr.Rls();}
}
public Xocfg_itm_row Select_by_key_or_null(String key) { public Xocfg_itm_row Select_by_key_or_null(String key) {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_key).Crt_str(fld__itm_key, key).Exec_select__rls_auto(); Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__itm_key).Crt_str(fld__itm_key, key).Exec_select__rls_auto();
try {return rdr.Move_next() ? Load(rdr) : null;} try {return rdr.Move_next() ? Load(rdr) : null;}

@ -19,7 +19,20 @@ package gplx.xowa.addons.apps.cfgs.mgrs.types; import gplx.*; import gplx.xowa.*
public class Xocfg_type_mgr { public class Xocfg_type_mgr {
private final Ordered_hash list_hash = Ordered_hash_.New(); private final Ordered_hash list_hash = Ordered_hash_.New();
public Xocfg_type_mgr() { public Xocfg_type_mgr() {
this.Lists__add("list:Xo_load_html_type", Keyval_.new_("mem"), Keyval_.new_("url")); this.Lists__add("list:xowa.app.security.privacy.load_mode", "mem", "url");
this.Lists__add("list:xowa.app.startup.window.mode", "previous", "maximized", "absolute", "relative", "default");
this.Lists__add("list:xowa.app.startup.pages.type", "blank", "xowa", "absolute", "previous", "custom");
this.Lists__add("list:xowa.gui.window.html_box.adj_type", "none", "absolute", "relative");
this.Lists__add("list:xowa.wiki.dbs.html.basic.html_mode", Keyval_.new_("shown", "Shown"), Keyval_.new_("hdump_save", "Saved for HTML DB"), Keyval_.new_("hdump_load", "Loaded by HTML DB"));
this.Lists__add("list:xowa.wiki.database.general.zip_mode", "text", "gzip", "bz2", "xz");
}
public void Lists__add(String key, String... vals) {
int len = vals.length;
Keyval[] itms = new Keyval[len];
for (int i = 0; i < len; i++) {
itms[i] = Keyval_.new_(vals[i]);
}
Lists__add(key, itms);
} }
public void Lists__add(String key, Keyval... itms) { public void Lists__add(String key, Keyval... itms) {
list_hash.Add(key, itms); list_hash.Add(key, itms);

@ -25,6 +25,9 @@ public class Xocfg_edit_special implements Xow_special_page {
String ctx = url_args.Read_str_or("ctx", "app"); String ctx = url_args.Read_str_or("ctx", "app");
String lang = url_args.Read_str_or("lang", wiki.App().User().Wikii().Lang().Key_str()); String lang = url_args.Read_str_or("lang", wiki.App().User().Wikii().Lang().Key_str());
if (String_.Eq(grp, "")) {
grp = wiki.App().Cfg().Get_str_app("xowa.app.cfg.general.previous_section");
}
new Xocfg_edit_html(grp, ctx, lang).Bld_page_by_mustache(wiki.App(), page, this); new Xocfg_edit_html(grp, ctx, lang).Bld_page_by_mustache(wiki.App(), page, this);
} }

@ -46,6 +46,7 @@ public class Xocfg_edit_svc {
String key = args.Get_as_str("key"); String key = args.Get_as_str("key");
if (edit_loader == null) edit_loader = Xocfg_edit_loader.New(app); if (edit_loader == null) edit_loader = Xocfg_edit_loader.New(app);
Xoedit_root root = edit_loader.Load_root(key, ctx, "en"); Xoedit_root root = edit_loader.Load_root(key, ctx, "en");
app.Cfg().Set_str_app("xowa.app.cfg.general.previous_section", key);
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.load__recv", root.To_nde()); app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.cfg_edit.load__recv", root.To_nde());
} }
} }

@ -63,9 +63,11 @@ public class Xocfg_maint_svc {
public static void Create_itm(Xocfg_db_app db_app, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args) { public static void Create_itm(Xocfg_db_app db_app, String key, String owner, String name, String help, String scope, String db_type, String dflt, String gui_type, String gui_args) {
// insert itm_meta // insert itm_meta
int grp_id = db_app.Tbl__grp().Select_id_by_key_or_fail(owner); int grp_id = db_app.Tbl__grp().Select_id_by_key_or_fail(owner);
int itm_id = db_app.Conn().Sys_mgr().Autonum_next("cfg_itm_meta.itm_id");
int scope_id = Xoitm_scope_tid.To_int(scope); int scope_id = Xoitm_scope_tid.To_int(scope);
int gui_type_id = Xoitm_gui_tid.To_tid(gui_type); int gui_type_id = Xoitm_gui_tid.To_tid(gui_type);
int itm_id = db_app.Tbl__itm().Select_id_or(key, -1);
if (itm_id == -1)
itm_id = db_app.Conn().Sys_mgr().Autonum_next("cfg_itm_meta.itm_id");
db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt); db_app.Tbl__itm().Upsert(itm_id, scope_id, db_type, gui_type_id, gui_args, key, dflt);
// insert grp_map // insert grp_map

Loading…
Cancel
Save