diff --git a/400_xowa/src/gplx/core/net/qargs/Gfo_qarg_mgr.java b/400_xowa/src/gplx/core/net/qargs/Gfo_qarg_mgr.java
index 1da11be1b..9b22f2171 100644
--- a/400_xowa/src/gplx/core/net/qargs/Gfo_qarg_mgr.java
+++ b/400_xowa/src/gplx/core/net/qargs/Gfo_qarg_mgr.java
@@ -38,9 +38,11 @@ public class Gfo_qarg_mgr {
}
public String Read_str_or_fail(String key) {String rv = Read_str_or_null(Bry_.new_u8(key)); if (rv == null) Fail_when_missing(key); return rv;}
public String Read_str_or_null(String key) {return Read_str_or_null(Bry_.new_u8(key));}
- public String Read_str_or_null(byte[] key) {
+ public String Read_str_or_null(byte[] key) {return Read_str_or(key, null);}
+ public String Read_str_or(String key, String or) {return Read_str_or(Bry_.new_u8(key), or);}
+ public String Read_str_or(byte[] key, String or) {
Gfo_qarg_itm arg = (Gfo_qarg_itm)hash.Get_by_bry(key);
- return arg == null ? null : String_.new_u8(arg.Val_bry());
+ return arg == null ? or : String_.new_u8(arg.Val_bry());
}
public int Read_int_or(String key, int or) {return Read_int_or(Bry_.new_u8(key), or);}
public int Read_int_or(byte[] key, int or) {
diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/Xou_regy_addon.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/Xou_regy_addon.java
index c7bd47223..27fceb466 100644
--- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/Xou_regy_addon.java
+++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/Xou_regy_addon.java
@@ -47,7 +47,6 @@ public class Xou_regy_addon implements Xoax_addon_itm, Xoax_addon_itm__special,
if (!conn.Meta_tbl_exists(Xou_wiki_tbl.Tbl_name_dflt)) return;
// register
- // Xou_regy_addon addon = new Xou_regy_addon();
Xouw_db_mgr db_mgr = new Xouw_db_mgr(conn);
Xou_wiki_itm[] itms = db_mgr.Tbl__wiki().Select_all();
int len = itms.length;
diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_tbl.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_tbl.java
index 05976a59c..d6033ae18 100644
--- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_tbl.java
+++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/dbs/Xou_wiki_tbl.java
@@ -45,6 +45,18 @@ public class Xou_wiki_tbl implements Db_tbl {
.Exec_insert()
;
}
+ public void Upsert(int id, String key, String name, String file) {
+ if (id == -1) {
+ }
+ else {
+ conn.Stmt_update_exclude(tbl_name, flds, fld__wiki_id)
+ .Val_int(fld__wiki_type, 0).Val_str(fld__wiki_domain, key).Val_str(fld__wiki_name, name)
+ .Val_str(fld__wiki_data_date, "").Val_str(fld__wiki_core_url, file).Val_str(fld__wiki_data, "")
+ .Crt_int(fld__wiki_id, id)
+ .Exec_update()
+ ;
+ }
+ }
public Xou_wiki_itm[] Select_all() {
Db_rdr rdr = conn.Stmt_select(tbl_name, flds).Exec_select__rls_auto();
try {
@@ -56,6 +68,15 @@ public class Xou_wiki_tbl implements Db_tbl {
}
finally {rdr.Rls();}
}
+ public Xou_wiki_itm Select_by_key_or_null(String key) {
+ Db_rdr rdr = conn.Stmt_select(tbl_name, flds, fld__wiki_domain).Clear().Crt_str(fld__wiki_domain, key).Exec_select__rls_auto();
+ try {
+ return rdr.Move_next()
+ ? Make(rdr)
+ : null;
+ }
+ finally {rdr.Rls();}
+ }
private Xou_wiki_itm Make(Db_rdr rdr) {
return new Xou_wiki_itm(rdr.Read_int(fld__wiki_id), rdr.Read_int(fld__wiki_type)
, rdr.Read_str(fld__wiki_domain), rdr.Read_str(fld__wiki_name), Io_url_.new_fil_(rdr.Read_str(fld__wiki_core_url)), rdr.Read_str(fld__wiki_data)
diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java
index d70205e03..489e53f60 100644
--- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java
+++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_bridge.java
@@ -17,18 +17,23 @@ along with this program. If not, see .
*/
package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*;
import gplx.langs.jsons.*;
+import gplx.xowa.addons.users.wikis.regys.dbs.*;
public class Xouw_itm_bridge implements gplx.xowa.htmls.bridges.Bridge_cmd_itm {
- public void Init_by_app(Xoa_app app) {}
+ private Xoa_app app;
+ public void Init_by_app(Xoa_app app) {
+ this.app = app;
+ }
public String Exec(Json_nde data) {
+ Xouw_db_mgr db_mgr = new Xouw_db_mgr(app.User().User_db_mgr().Conn());
byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Msg__proc, null), Byte_ascii.Max_7_bit);
- //Json_nde args = data.Get_kv(Msg__args).Val_as_nde();
+ Json_nde args = data.Get_kv(Msg__args).Val_as_nde();
switch (proc_id) {
- case Proc__save: break;
+ case Proc__save: db_mgr.Tbl__wiki().Upsert(args.Get_as_int("id"), args.Get_as_str("key"), args.Get_as_str("name"), args.Get_as_str("file")); break;
default: throw Err_.new_unhandled_default(proc_id);
}
return "";
}
- private static final byte[] Msg__proc = Bry_.new_a7("proc"); //, Msg__args = Bry_.new_a7("args");
+ private static final byte[] Msg__proc = Bry_.new_a7("proc"), Msg__args = Bry_.new_a7("args");
private static final byte Proc__save = 0;
private static final Hash_adp_bry proc_hash = Hash_adp_bry.cs()
.Add_str_byte("save" , Proc__save)
diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_doc.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_doc.java
index f28538f48..e861b502e 100644
--- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_doc.java
+++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_doc.java
@@ -20,8 +20,8 @@ import gplx.core.ios.*;
import gplx.langs.mustaches.*;
class Xouw_itm_doc implements Mustache_doc_itm {
private final int id;
- private final byte[] domain, name, file;
- public Xouw_itm_doc(int id, byte[] domain, byte[] name, byte[] file) {
+ private final String domain, name, file;
+ public Xouw_itm_doc(int id, String domain, String name, String file) {
this.id = id;
this.domain = domain;
this.name = name;
@@ -29,9 +29,9 @@ class Xouw_itm_doc implements Mustache_doc_itm {
}
public boolean Mustache__write(String key, Mustache_bfr bfr) {
if (String_.Eq(key, "id")) bfr.Add_int(id);
- else if (String_.Eq(key, "domain")) bfr.Add_bry(domain);
- else if (String_.Eq(key, "name")) bfr.Add_bry(name);
- else if (String_.Eq(key, "file")) bfr.Add_bry(file);
+ else if (String_.Eq(key, "domain")) bfr.Add_str_u8(domain);
+ else if (String_.Eq(key, "name")) bfr.Add_str_u8(name);
+ else if (String_.Eq(key, "file")) bfr.Add_str_u8(file);
else return false;
return true;
}
diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java
index 3e919b88b..a65c7e79a 100644
--- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java
+++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_html.java
@@ -17,13 +17,21 @@ along with this program. If not, see .
*/
package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.users.*; import gplx.xowa.addons.users.wikis.*; import gplx.xowa.addons.users.wikis.regys.*; import gplx.xowa.addons.users.wikis.regys.specials.*;
import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*;
+import gplx.dbs.*; import gplx.xowa.addons.users.wikis.regys.dbs.*;
class Xouw_itm_html extends Xow_special_wtr__base {
- public Xouw_itm_html() {
+ private final String key;
+ public Xouw_itm_html(String key) {
+ this.key = key;
}
@Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "user", "wiki", "itm");}
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xouw_itm.mustache.html");}
@Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) {
- return new Xouw_itm_doc(1, Bry_.new_a7("domain"), Bry_.new_a7("name"), Bry_.new_a7("file"));
+ Db_conn conn = app.User().User_db_mgr().Conn();
+ Xouw_db_mgr db_mgr = new Xouw_db_mgr(conn);
+ Xou_wiki_itm itm = db_mgr.Tbl__wiki().Select_by_key_or_null(key);
+ if (itm == null)
+ itm = new Xou_wiki_itm(-1, 0, "", "", Io_url_.Empty, "");
+ return new Xouw_itm_doc(itm.Id(), itm.Domain(), itm.Name(), itm.Url().Xto_api());
}
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
Xopg_tag_mgr head_tags = page_data.Head_tags();
diff --git a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_special.java b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_special.java
index 72a882586..1110359d6 100644
--- a/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_special.java
+++ b/400_xowa/src/gplx/xowa/addons/users/wikis/regys/specials/itms/Xouw_itm_special.java
@@ -19,9 +19,11 @@ package gplx.xowa.addons.users.wikis.regys.specials.itms; import gplx.*; import
import gplx.xowa.specials.*; import gplx.core.net.qargs.*;
public class Xouw_itm_special implements Xow_special_page {
public void Special__gen(Xow_wiki wiki, Xoa_page page, Xoa_url url, Xoa_ttl ttl) {
- // Gfo_qarg_mgr url_args = new Gfo_qarg_mgr().Init(url.Qargs_ary());
+ Gfo_qarg_mgr url_args = new Gfo_qarg_mgr().Init(url.Qargs_ary());
+
+ String key = url_args.Read_str_or("key", "");
- new Xouw_itm_html().Bld_page_by_mustache(wiki.App(), page, this);
+ new Xouw_itm_html(key).Bld_page_by_mustache(wiki.App(), page, this);
}
Xouw_itm_special(Xow_special_meta special__meta) {this.special__meta = special__meta;}
public Xow_special_meta Special__meta() {return special__meta;} private final Xow_special_meta special__meta;