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-03-27 23:44:59 -04:00
import gplx.xowa.wikis.domains.* ; import gplx.xowa.wikis.nss.* ; import gplx.xowa.files.gui.* ;
2016-04-04 21:26:29 -04:00
import gplx.xowa.addons.apps.searchs.searchers.rslts.* ; import gplx.xowa.specials.randoms.* ;
2016-01-24 22:50:55 -05:00
import gplx.langs.htmls.encoders.* ; import gplx.xowa.htmls.hrefs.* ;
2016-04-04 21:26:29 -04:00
import gplx.xowa.addons.apps.searchs.* ; import gplx.xowa.addons.apps.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-01-17 23:18:07 -05:00
public void Page__load_files ( Xow_wiki wiki , Xod_page_itm pg , Xog_js_wkr js_wkr ) {
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 ( ) ;
}
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
}