mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-09-28 22:40:50 +00:00
App_update: Add db table and object
This commit is contained in:
parent
6459d990a5
commit
7ea0b39553
@ -0,0 +1,41 @@
|
||||
/*
|
||||
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.addons.apps.updates.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
|
||||
public class Xoa_app_version_itm {
|
||||
public Xoa_app_version_itm(String id, String date, int priority, String summary, String details) {
|
||||
this.id = id;
|
||||
this.date = date;
|
||||
this.priority = priority;
|
||||
this.summary = summary;
|
||||
this.details = details;
|
||||
}
|
||||
public String Id() {return id;} private final String id;
|
||||
public String Date() {return date;} private final String date;
|
||||
public int Priority() {return priority;} private final int priority;
|
||||
public String Summary() {return summary;} private final String summary;
|
||||
public String Details() {return details;} private final String details;
|
||||
public String Priority_str() {
|
||||
switch (priority) {
|
||||
case 3: return "trivial";
|
||||
case 5: return "minor";
|
||||
case Priority__major: return "major";
|
||||
default: throw Err_.new_unhandled_default(priority);
|
||||
}
|
||||
}
|
||||
public static final int Priority__major = 7;
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
/*
|
||||
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.addons.apps.updates.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
|
||||
import gplx.dbs.*; import gplx.dbs.utls.*;
|
||||
public class Xoa_app_version_tbl implements Db_tbl {
|
||||
private final Dbmeta_fld_list flds = new Dbmeta_fld_list();
|
||||
private final String fld__version_id, fld__version_date, fld__version_priority, fld__version_summary, fld__version_details;
|
||||
private final Db_conn conn;
|
||||
public Xoa_app_version_tbl(Db_conn conn) {
|
||||
this.conn = conn;
|
||||
this.fld__version_id = flds.Add_str("version_id", 32);
|
||||
this.fld__version_date = flds.Add_str("version_date", 32);
|
||||
this.fld__version_priority = flds.Add_int("version_priority"); // 3:trivial; 5:minor; 7:major;
|
||||
this.fld__version_summary = flds.Add_str("version_summary", 255);
|
||||
this.fld__version_details = flds.Add_text("version_details");
|
||||
conn.Rls_reg(this);
|
||||
}
|
||||
public String Tbl_name() {return tbl_name;} private final String tbl_name = TBL_NAME;
|
||||
public void Create_tbl() {conn.Meta_tbl_create(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_normal_by_tbl(tbl_name, fld__version_date, fld__version_date)));}
|
||||
public Xoa_app_version_itm[] Select_by_date(String date) { // NOTE: version_ids are not easy to sort; using version_date instead
|
||||
String sql = Db_sql_.Make_by_fmt(String_.Ary
|
||||
( "SELECT *"
|
||||
, "FROM app_version"
|
||||
, "WHERE version_date > '{0}'"
|
||||
, "ORDER BY version_date"
|
||||
), date);
|
||||
|
||||
Db_rdr rdr = conn.Stmt_sql(sql).Crt_str(fld__version_date, date).Exec_select__rls_auto();
|
||||
try {
|
||||
List_adp list = List_adp_.New();
|
||||
while (rdr.Move_next()) {
|
||||
list.Add(Load(rdr));
|
||||
}
|
||||
return (Xoa_app_version_itm[])list.To_ary_and_clear(Xoa_app_version_itm.class);
|
||||
} finally {rdr.Rls();}
|
||||
}
|
||||
private Xoa_app_version_itm Load(Db_rdr rdr) {
|
||||
return new Xoa_app_version_itm
|
||||
( rdr.Read_str(fld__version_id)
|
||||
, rdr.Read_str(fld__version_date)
|
||||
, rdr.Read_int(fld__version_priority)
|
||||
, rdr.Read_str(fld__version_summary)
|
||||
, rdr.Read_str(fld__version_details)
|
||||
);
|
||||
}
|
||||
public void Rls() {}
|
||||
public static final String TBL_NAME = "app_version";
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
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.addons.apps.updates.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
|
||||
import gplx.dbs.*; import gplx.dbs.utls.*;
|
||||
public class Xoa_update_db_mgr {
|
||||
public Xoa_update_db_mgr(Io_url url) {
|
||||
this.url = url;
|
||||
this.conn = Db_conn_bldr.Instance.Get_or_fail(url);
|
||||
this.tbl__app_version = new Xoa_app_version_tbl(conn);
|
||||
conn.Meta_tbl_assert(tbl__app_version);
|
||||
}
|
||||
public Io_url Url() {return url;} private final Io_url url;
|
||||
public Db_conn Conn() {return conn;} private final Db_conn conn;
|
||||
public Xoa_app_version_tbl Tbl__app_version() {return tbl__app_version;} private final Xoa_app_version_tbl tbl__app_version;
|
||||
}
|
@ -16,13 +16,55 @@ 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.addons.apps.updates.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
|
||||
import gplx.xowa.addons.apps.updates.dbs.*;
|
||||
import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*;
|
||||
class Xoa_update_html extends Xow_special_wtr__base {
|
||||
@Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "app", "update");}
|
||||
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xoa_update.mustache.html");}
|
||||
@Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) {
|
||||
return Xoa_update_itm.Load(app.Fsys_mgr().Bin_addon_dir());
|
||||
Io_url update_db_url = Get_addon_dir(app).GenSubFil("xowa_update_info.sqlite3");
|
||||
Xoa_update_db_mgr db_mgr = new Xoa_update_db_mgr(update_db_url);
|
||||
return Load(db_mgr);
|
||||
}
|
||||
private static Mustache_doc_itm Load(Xoa_update_db_mgr db_mgr) {
|
||||
// get from internet
|
||||
if (gplx.core.ios.IoEngine_system.Web_access_enabled) {
|
||||
Io_url trg_url = db_mgr.Url();
|
||||
String src_url = "http://xowa.org/admin/app_update/xowa_update_info.sqlite3";
|
||||
Io_mgr.Instance.DownloadFil(src_url, trg_url);
|
||||
}
|
||||
|
||||
// load from db
|
||||
Xoa_app_version_itm[] db_itms = db_mgr.Tbl__app_version().Select_by_date(Xoa_app_.Build_date);
|
||||
if (db_itms.length == 0) return new Xoa_update_itm("up-to-date", "", "", "", "", "");
|
||||
|
||||
// convert to gui itm
|
||||
Xoa_update_itm head = To_gui_itm(db_itms[0], Find_major(db_itms));
|
||||
head.Itms_(To_gui_itm(db_itms));
|
||||
return head;
|
||||
}
|
||||
private static String Find_major(Xoa_app_version_itm[] db_itms) {
|
||||
int len = db_itms.length;
|
||||
Xoa_app_version_itm major = null;
|
||||
for (int i = 0; i < len; i++) {
|
||||
Xoa_app_version_itm db_itm = db_itms[i];
|
||||
if (db_itm.Priority() >= Xoa_app_version_itm.Priority__major)
|
||||
major = db_itm;
|
||||
}
|
||||
return major == null ? "" : String_.Format("({0}) {1}", major.Priority_str(), major.Id());
|
||||
}
|
||||
private static Xoa_update_itm[] To_gui_itm(Xoa_app_version_itm[] db_itms) {
|
||||
int len = db_itms.length;
|
||||
Xoa_update_itm[] rv = new Xoa_update_itm[len];
|
||||
for (int i = 0; i < len; i++) {
|
||||
rv[i] = To_gui_itm(db_itms[i], "");
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
private static Xoa_update_itm To_gui_itm(Xoa_app_version_itm db_itm, String major) {
|
||||
return new Xoa_update_itm(db_itm.Id(), db_itm.Date(), db_itm.Priority_str(), db_itm.Summary(), db_itm.Details(), major);
|
||||
}
|
||||
|
||||
@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();
|
||||
Xopg_tag_wtr_.Add__xocss (head_tags, app.Fsys_mgr().Http_root());
|
||||
|
@ -17,14 +17,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package gplx.xowa.addons.apps.updates.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.apps.*; import gplx.xowa.addons.apps.updates.*;
|
||||
import gplx.langs.mustaches.*;
|
||||
import gplx.xowa.addons.apps.updates.dbs.*;
|
||||
class Xoa_update_itm implements Mustache_doc_itm {
|
||||
private final String version, date, priority, summary, details;
|
||||
public Xoa_update_itm(String version, String date, String priority, String summary, String details) {
|
||||
private final String version, date, priority, summary, details, major;
|
||||
private Xoa_update_itm[] itms = Ary__empty;
|
||||
public Xoa_update_itm(String version, String date, String priority, String summary, String details, String major) {
|
||||
this.version = version;
|
||||
this.date = date;
|
||||
this.priority = priority;
|
||||
this.summary = summary;
|
||||
this.details = details;
|
||||
this.major = major;
|
||||
}
|
||||
public void Itms_(Xoa_update_itm[] v) {
|
||||
this.itms = v;
|
||||
}
|
||||
public boolean Mustache__write(String k, Mustache_bfr bfr) {
|
||||
if (String_.Eq(k, "version")) bfr.Add_str_u8(version);
|
||||
@ -32,17 +38,13 @@ class Xoa_update_itm implements Mustache_doc_itm {
|
||||
else if (String_.Eq(k, "priority")) bfr.Add_str_u8(priority);
|
||||
else if (String_.Eq(k, "summary")) bfr.Add_str_u8(summary);
|
||||
else if (String_.Eq(k, "details")) bfr.Add_str_u8(details);
|
||||
else if (String_.Eq(k, "major")) bfr.Add_str_u8(major);
|
||||
return true;
|
||||
}
|
||||
public Mustache_doc_itm[] Mustache__subs(String key) {
|
||||
if (String_.Eq(key, "itms")) return itms;
|
||||
return Mustache_doc_itm_.Ary__empty;
|
||||
}
|
||||
public static Mustache_doc_itm Load(Io_url app_root) {
|
||||
// get from internet
|
||||
// Io_url trg_url = app_root.GenSubFil_nest("app", "update", "xowa_update_info.sqlite3");
|
||||
// String src_url = "http://xowa.org/admin/app_update/xowa_update_info.sqlite3";
|
||||
// Io_mgr.Instance.DownloadFil(src_url, trg_url);
|
||||
|
||||
return new Xoa_update_itm("", "", "", "", "");
|
||||
}
|
||||
|
||||
private static final Xoa_update_itm[] Ary__empty = new Xoa_update_itm[0];
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ package gplx.xowa.addons.apps.updates.specials; import gplx.*; import gplx.xowa.
|
||||
import gplx.xowa.specials.*; import gplx.core.net.qargs.*;
|
||||
public class Xoa_update_special implements Xow_special_page {
|
||||
public void Special__gen(Xow_wiki wiki, Xoa_page page, Xoa_url url, Xoa_ttl ttl) {
|
||||
new Xoa_update_html().Bld_page_by_mustache(wiki.App(), page, this);
|
||||
}
|
||||
Xoa_update_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;
|
||||
|
@ -27,6 +27,7 @@ public class Xosync_read_mgr {
|
||||
private final Xosync_update_mgr update_mgr = new Xosync_update_mgr();
|
||||
public void Auto_update(Xow_wiki wiki, Xoa_page page, Xoa_ttl page_ttl) {
|
||||
if (wiki.Domain_itm().Domain_type_id() == gplx.xowa.wikis.domains.Xow_domain_tid_.Tid__home) return;
|
||||
if (wiki.Domain_itm().Domain_type_id() == gplx.xowa.wikis.domains.Xow_domain_tid_.Tid__other) return;
|
||||
if (page_ttl.Ns().Id_is_special()) return;
|
||||
|
||||
Xoapi_sync_api sync_api = wiki.App().Api_root().Addon().Bldr().Sync();
|
||||
|
Loading…
Reference in New Issue
Block a user