mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
'v3.7.2.1'
This commit is contained in:
@@ -79,6 +79,7 @@ public class Xoav_app implements Xoa_app, Gfo_invk {
|
||||
public Xog_cbk_mgr Gui__cbk_mgr() {return gui__cbk_mgr;} private final Xog_cbk_mgr gui__cbk_mgr = new Xog_cbk_mgr();
|
||||
public Xog_tab_mgr Gui__tab_mgr() {return gui__tab_mgr;} private final Xog_tab_mgr gui__tab_mgr;
|
||||
public Gfo_thread_mgr Thread_mgr() {return thread_mgr;} private final Gfo_thread_mgr thread_mgr = new Gfo_thread_mgr();
|
||||
public Xop_amp_mgr Parser_amp_mgr() {return parser_amp_mgr;} private final Xop_amp_mgr parser_amp_mgr = Xop_amp_mgr.Instance;
|
||||
|
||||
public Xowmf_mgr Wmf_mgr() {return wmf_mgr;} private final Xowmf_mgr wmf_mgr = new Xowmf_mgr();
|
||||
public Gfo_usr_dlg Usr_dlg() {return usr_dlg;} public void Usr_dlg_(Gfo_usr_dlg v) {usr_dlg = v; Xoa_app_.Usr_dlg_(usr_dlg);} private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Noop;
|
||||
|
||||
@@ -108,7 +108,7 @@ public class Xoa_boot_mgr {
|
||||
if (app_type_is_gui)
|
||||
app.Gui_mgr().Run(splash_win);
|
||||
else // teardown app, else lua will keep process running
|
||||
if (gplx.xowa.xtns.scribunto.Scrib_core.Core() != null) gplx.xowa.xtns.scribunto.Scrib_core.Core().Term();
|
||||
gplx.xowa.xtns.scribunto.Scrib_core_mgr.Term_all();
|
||||
}
|
||||
}
|
||||
catch (Exception e) {usr_dlg.Warn_many("", "", "app launch failed: ~{0}", Err_.Message_gplx_full(e));}
|
||||
|
||||
@@ -99,28 +99,36 @@ public class Http_server_mgr implements Gfo_invk {
|
||||
// get the url / ttl
|
||||
if (Bry_.Len_eq_0(ttl_bry)) ttl_bry = wiki.Props().Main_page();
|
||||
Xoa_url url = wiki.Utl__url_parser().Parse(ttl_bry);
|
||||
Xoa_ttl ttl = Xoa_ttl.parse(wiki, ttl_bry);
|
||||
Xoa_ttl ttl = Xoa_ttl.Parse(wiki, ttl_bry);
|
||||
|
||||
// get the page
|
||||
gplx.xowa.guis.views.Xog_tab_itm tab = Gxw_html_server.Assert_tab2(app, wiki); // HACK: assert tab exists
|
||||
Xoae_page page = wiki.Page_mgr().Load_page(url, ttl, tab);
|
||||
app.Gui_mgr().Browser_win().Active_page_(page); // HACK: init gui_mgr's page for output (which server ordinarily doesn't need)
|
||||
if (page.Missing()) { // if page does not exist, replace with message; else null_ref error; DATE:2014-03-08
|
||||
page.Data_raw_(Bry_.new_a7("'''Page not found.'''"));
|
||||
if (page.Db().Page().Exists_n()) { // if page does not exist, replace with message; else null_ref error; DATE:2014-03-08
|
||||
page.Db().Text().Text_bry_(Bry_.new_a7("'''Page not found.'''"));
|
||||
wiki.Parser_mgr().Parse(page, false);
|
||||
}
|
||||
page.Html_data().Head_mgr().Itm__server().Init_by_http(data__client).Enabled_y_();
|
||||
|
||||
// generate html
|
||||
String rv = String_.new_u8(wiki.Html_mgr().Page_wtr_mgr().Gen(page, Xopg_page_.Tid_read)); // NOTE: must generate HTML now in order for "wait" and "async_server" to work with text_dbs; DATE:2016-07-10
|
||||
boolean rebuild_html = false;
|
||||
switch (retrieve_mode) {
|
||||
case File_retrieve_mode.Mode_skip: break; // noop
|
||||
case File_retrieve_mode.Mode_async_server: app.Gui_mgr().Browser_win().Page__async__bgn(tab); break;
|
||||
case File_retrieve_mode.Mode_skip: // noop
|
||||
break;
|
||||
case File_retrieve_mode.Mode_async_server:
|
||||
rebuild_html = true;
|
||||
app.Gui_mgr().Browser_win().Page__async__bgn(tab);
|
||||
break;
|
||||
case File_retrieve_mode.Mode_wait:
|
||||
rebuild_html = true;
|
||||
gplx.xowa.guis.views.Xog_async_wkr.Async(page, tab.Html_itm());
|
||||
page = wiki.Page_mgr().Load_page(url, ttl, tab); // HACK: fetch page again so that HTML will now include img data
|
||||
break;
|
||||
}
|
||||
return String_.new_u8(wiki.Html_mgr().Page_wtr_mgr().Gen(page, Xopg_page_.Tid_read));
|
||||
if (rebuild_html) rv = String_.new_u8(wiki.Html_mgr().Page_wtr_mgr().Gen(page, Xopg_page_.Tid_read));
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
private void Note(String s) {
|
||||
|
||||
@@ -22,6 +22,7 @@ import gplx.xowa.langs.*; import gplx.xowa.langs.vnts.*;
|
||||
import gplx.xowa.wikis.nss.*;
|
||||
import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.files.*;
|
||||
public class Xow_url_parser {
|
||||
private final Object thread_lock = new Object();
|
||||
private final Gfo_url_encoder encoder;
|
||||
private final Bry_bfr tmp_bfr = Bry_bfr_.Reset(255);
|
||||
private final Gfo_url_parser url_parser = new Gfo_url_parser(); private final Gfo_url gfo_url = new Gfo_url();
|
||||
@@ -65,52 +66,54 @@ public class Xow_url_parser {
|
||||
public Xoa_url Parse(byte[] src, int bgn, int end) {Xoa_url rv = Xoa_url.blank(); Parse(rv, src, bgn, end); return rv;}
|
||||
public boolean Parse(Xoa_url rv, byte[] src) {return Parse(rv, src, 0, src.length);}
|
||||
public boolean Parse(Xoa_url rv, byte[] src, int bgn, int end) {
|
||||
if (end - bgn == 0) {Init_tmp_vars(Gfo_url.Empty); Make(rv); return false;}
|
||||
src = encoder.Decode(src, bgn, end); // NOTE: must decode any url-encoded parameters
|
||||
int src_len = src.length;
|
||||
url_parser.Parse(gfo_url, src, 0, src_len); // parse to plain gfo_url
|
||||
Init_tmp_vars(gfo_url);
|
||||
if (src[0] == Byte_ascii.Hash) // src is anch; EX: #A
|
||||
Bld_anch();
|
||||
else {
|
||||
switch (tmp_protocol_tid) {
|
||||
case Gfo_protocol_itm.Tid_file:
|
||||
if (src_len > 5 && src[5] != Byte_ascii.Slash) // src is ttl in [[File]] ns; EX: "File:A.png"
|
||||
Bld_page_by_file_ns();
|
||||
else // src is file:///; EX: EX: "file:///C:/A.png"
|
||||
tmp_tid = Xoa_url_.Tid_file;
|
||||
break;
|
||||
case Gfo_protocol_itm.Tid_xowa:
|
||||
Bld_xowa();
|
||||
break;
|
||||
case Gfo_protocol_itm.Tid_http:
|
||||
case Gfo_protocol_itm.Tid_https:
|
||||
case Gfo_protocol_itm.Tid_relative_1:
|
||||
if (tmp_protocol_tid == Gfo_protocol_itm.Tid_relative_1) // interpret relative protocol links to match wiki's protocol; EX: [//a.org] -> https://a.org for all WMF wikis; DATE:2015-07-27
|
||||
tmp_protocol_tid = wiki.Props().Protocol_tid();
|
||||
if (app.User().Wikii().Xwiki_mgr().Get_by_key(tmp_wiki) != null)// src is offline wiki; EX: http://fr.wikipedia.org/wiki/A
|
||||
synchronized (thread_lock) {
|
||||
if (end - bgn == 0) {Init_tmp_vars(Gfo_url.Empty); Make(rv); return false;}
|
||||
src = encoder.Decode(src, bgn, end); // NOTE: must decode any url-encoded parameters
|
||||
int src_len = src.length;
|
||||
url_parser.Parse(gfo_url, src, 0, src_len); // parse to plain gfo_url
|
||||
Init_tmp_vars(gfo_url);
|
||||
if (src[0] == Byte_ascii.Hash) // src is anch; EX: #A
|
||||
Bld_anch();
|
||||
else {
|
||||
switch (tmp_protocol_tid) {
|
||||
case Gfo_protocol_itm.Tid_file:
|
||||
if (src_len > 5 && src[5] != Byte_ascii.Slash) // src is ttl in [[File]] ns; EX: "File:A.png"
|
||||
Bld_page_by_file_ns();
|
||||
else // src is file:///; EX: EX: "file:///C:/A.png"
|
||||
tmp_tid = Xoa_url_.Tid_file;
|
||||
break;
|
||||
case Gfo_protocol_itm.Tid_xowa:
|
||||
Bld_xowa();
|
||||
break;
|
||||
case Gfo_protocol_itm.Tid_http:
|
||||
case Gfo_protocol_itm.Tid_https:
|
||||
case Gfo_protocol_itm.Tid_relative_1:
|
||||
if (tmp_protocol_tid == Gfo_protocol_itm.Tid_relative_1) // interpret relative protocol links to match wiki's protocol; EX: [//a.org] -> https://a.org for all WMF wikis; DATE:2015-07-27
|
||||
tmp_protocol_tid = wiki.Props().Protocol_tid();
|
||||
if (app.User().Wikii().Xwiki_mgr().Get_by_key(tmp_wiki) != null)// src is offline wiki; EX: http://fr.wikipedia.org/wiki/A
|
||||
Bld_page(0);
|
||||
else if (Bry_.Eq(tmp_wiki, Bry_upload_wikimedia_org)) // src is upload.wikimedia.org; EX: "http://upload.wikimedia.org/wikipedia/commons/a/ab/C.svg"
|
||||
Bld_page_from_upload_wikimedia_org();
|
||||
else // src is unknown site: EX: "http://a.org"
|
||||
tmp_tid = Xoa_url_.Tid_inet;
|
||||
break;
|
||||
case Gfo_protocol_itm.Tid_unknown:
|
||||
Bld_page(0);
|
||||
else if (Bry_.Eq(tmp_wiki, Bry_upload_wikimedia_org)) // src is upload.wikimedia.org; EX: "http://upload.wikimedia.org/wikipedia/commons/a/ab/C.svg"
|
||||
Bld_page_from_upload_wikimedia_org();
|
||||
else // src is unknown site: EX: "http://a.org"
|
||||
break;
|
||||
default:
|
||||
tmp_tid = Xoa_url_.Tid_inet;
|
||||
break;
|
||||
case Gfo_protocol_itm.Tid_unknown:
|
||||
Bld_page(0);
|
||||
break;
|
||||
default:
|
||||
tmp_tid = Xoa_url_.Tid_inet;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
Bld_qargs();
|
||||
if (tmp_page_is_main) tmp_page = Xoa_page_.Main_page_bry_empty;
|
||||
if (tmp_anch != null) {
|
||||
byte[] anchor_bry = gplx.langs.htmls.encoders.Gfo_url_encoder_.Id.Encode(tmp_anch); // reencode for anchors (which use . encoding, not % encoding); PAGE:en.w:Enlightenment_Spain#Enlightened_despotism_.281759%E2%80%931788.29
|
||||
tmp_anch = anchor_bry;
|
||||
}
|
||||
Make(rv);
|
||||
return true;
|
||||
}
|
||||
Bld_qargs();
|
||||
if (tmp_page_is_main) tmp_page = Xoa_page_.Main_page_bry_empty;
|
||||
if (tmp_anch != null) {
|
||||
byte[] anchor_bry = gplx.langs.htmls.encoders.Gfo_url_encoder_.Id.Encode(tmp_anch); // reencode for anchors (which use . encoding, not % encoding); PAGE:en.w:Enlightenment_Spain#Enlightened_despotism_.281759%E2%80%931788.29
|
||||
tmp_anch = anchor_bry;
|
||||
}
|
||||
Make(rv);
|
||||
return true;
|
||||
}
|
||||
private void Init_tmp_vars(Gfo_url gfo_url) {
|
||||
tmp_tid = Xoa_url_.Tid_unknown;
|
||||
|
||||
Reference in New Issue
Block a user