1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00
Files
gnosygnu_xowa/400_xowa/src/gplx/xowa/drds/Xod_app.java

68 lines
3.5 KiB
Java
Raw Normal View History

2015-07-12 21:10:02 -04:00
/*
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/>.
*/
2015-11-01 20:50:05 -05:00
package gplx.xowa.drds; import gplx.*; import gplx.xowa.*;
2015-12-06 23:12:52 -05:00
import gplx.xowa.drds.pages.*; import gplx.xowa.drds.files.*;
2015-11-01 20:50:05 -05:00
import gplx.xowa.apps.*; import gplx.xowa.wikis.data.tbls.*;
2016-07-03 22:41:56 -04:00
import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.guis.cbks.js.*;
2016-06-19 23:58:10 -04:00
import gplx.xowa.addons.wikis.searchs.searchers.rslts.*;
2016-01-24 22:50:55 -05:00
import gplx.langs.htmls.encoders.*; import gplx.xowa.htmls.hrefs.*;
2016-06-19 23:58:10 -04:00
import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.addons.wikis.searchs.searchers.*;
2016-03-27 23:44:59 -04:00
import gplx.xowa.langs.cases.*;
2015-11-01 20:50:05 -05:00
public class Xod_app {
2016-03-27 23:44:59 -04:00
private final Xoav_app app;
private final Xod_page_mgr page_mgr = new Xod_page_mgr();
private final Xod_file_mgr file_mgr = new Xod_file_mgr();
private final Srch_ns_mgr ns_mgr = new Srch_ns_mgr();
2015-11-01 20:50:05 -05:00
public Xod_app(Xoav_app app) {
this.app = app;
2016-03-27 23:44:59 -04:00
ns_mgr.Add_main_if_empty();
2015-11-01 20:50:05 -05:00
}
2016-01-17 23:18:07 -05:00
public Xow_wiki Wikis__get_by_domain(String wiki_domain) {
Xow_wiki rv = app.Wiki_mgri().Get_by_or_make_init_y(Bry_.new_u8(wiki_domain));
if (rv != null && rv.Data__core_mgr() == null) rv.Init_by_wiki();
2016-01-03 21:27:38 -05:00
return rv;
2015-12-06 23:12:52 -05:00
}
2016-01-17 23:18:07 -05:00
public Xod_page_itm Wiki__get_by_url(Xow_wiki wiki, Xoa_url page_url) {
2016-01-03 21:27:38 -05:00
return page_mgr.Get_page(wiki, page_url);
2015-11-01 20:50:05 -05:00
}
2016-01-17 23:18:07 -05:00
public Xod_page_itm Wiki__get_random(Xow_wiki wiki, Xow_ns ns) {
byte[] random_ttl_bry = wiki.Data__core_mgr().Tbl__page().Select_random(ns);
Xoa_url url = wiki.Utl__url_parser().Parse(random_ttl_bry);
return Wiki__get_by_url(wiki, url);
2015-12-06 23:12:52 -05:00
}
2016-03-27 23:44:59 -04:00
public void Wiki__search(Cancelable cxl, Srch_rslt_cbk cbk, Xow_wiki wiki, String search, int bgn, int end) {
Srch_search_addon addon = Get_addon(wiki);
Srch_search_qry qry = Srch_search_qry.New__drd(wiki, ns_mgr, Bry_.new_u8(search), bgn, end);
addon.Search(qry, cbk);
2016-01-24 22:50:55 -05:00
}
2016-06-21 18:32:10 -04:00
public void Page__on_load_end(Xow_wiki wiki, Xod_page_itm pg, Xog_js_wkr js_wkr) {
2016-01-17 23:18:07 -05:00
file_mgr.Load_files(wiki, pg, js_wkr);
2016-01-24 22:50:55 -05:00
app.User().User_db_mgr().Cache_mgr().Db_save();
2016-06-21 18:32:10 -04:00
gplx.xowa.wikis.pages.lnkis.Xopg_redlink_mgr.Run_async(pg.Hpg(), js_wkr);
2016-01-24 22:50:55 -05:00
}
public static byte[] To_page_url(Xow_wiki wiki, String canonical_str) {// NOTE: need canonical_url to handle "A:B" where "A:" is not a ns, even though PageTitle treats "A:" as a namespace
byte[] canonical_bry = Bry_.new_u8(canonical_str);
int page_bgn = Bry_find_.Move_fwd(canonical_bry, Xoh_href_.Bry__wiki, 0); if (page_bgn == Bry_find_.Not_found) throw Err_.new_("drd", "uknown url format: no '/wiki/'", "url", canonical_bry);
byte[] page_bry = Bry_.Mid(canonical_bry, page_bgn, canonical_bry.length); // get bry; EX: https://en.wikipedia.org/wiki/A -> A
page_bry = Gfo_url_encoder_.Http_url.Decode(page_bry); // decode %-encoding; convert + to space
page_bry = Xoa_ttl.Replace_spaces(page_bry); // convert spaces to unders; canonical-url has spaces
return page_bry;
2016-01-17 23:18:07 -05:00
}
2016-03-27 23:44:59 -04:00
private Srch_search_addon Get_addon(Xow_wiki wiki) {return Srch_search_addon.Get(wiki);}
2015-07-12 21:10:02 -04:00
}