From d5212999878d42a8a3f1376178020a5982965631 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Mon, 29 May 2017 14:43:13 -0400 Subject: [PATCH] Embeddable: Handle redirects --- 400_xowa/src/gplx/xowa/Xoa_app_.java | 4 ++-- .../parsers/mediawikis/Xop_mediawiki_wkr.java | 2 +- .../Xow_page_cache_wkr__embeddable.java | 24 +++++++++++++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index 71634c5af..7486a5628 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -30,8 +30,8 @@ public class Xoa_app_ { } } public static final String Name = "xowa"; - public static final int Version_id = 526; - public static final String Version = "4.5.4.1705"; + public static final int Version_id = 527; + public static final String Version = "4.5.5.1705"; public static String Build_date = "2012-12-30 00:00:00"; public static String Build_date_fmt = "yyyy-MM-dd HH:mm:ss"; public static String Op_sys_str; diff --git a/400_xowa/src/gplx/xowa/addons/parsers/mediawikis/Xop_mediawiki_wkr.java b/400_xowa/src/gplx/xowa/addons/parsers/mediawikis/Xop_mediawiki_wkr.java index dbba04258..ec4d01825 100644 --- a/400_xowa/src/gplx/xowa/addons/parsers/mediawikis/Xop_mediawiki_wkr.java +++ b/400_xowa/src/gplx/xowa/addons/parsers/mediawikis/Xop_mediawiki_wkr.java @@ -25,7 +25,7 @@ public class Xop_mediawiki_wkr { } public void Loader_(Xop_mediawiki_loader loader) { if (loader != null) - wiki.Cache_mgr().Load_wkr_(new Xow_page_cache_wkr__embeddable(loader)); + wiki.Cache_mgr().Load_wkr_(new Xow_page_cache_wkr__embeddable(wiki, loader)); } public void Free_memory() { wiki.Cache_mgr().Tmpl_result_cache().Clear(); diff --git a/400_xowa/src/gplx/xowa/addons/parsers/mediawikis/Xow_page_cache_wkr__embeddable.java b/400_xowa/src/gplx/xowa/addons/parsers/mediawikis/Xow_page_cache_wkr__embeddable.java index 76df47055..a3b33315c 100644 --- a/400_xowa/src/gplx/xowa/addons/parsers/mediawikis/Xow_page_cache_wkr__embeddable.java +++ b/400_xowa/src/gplx/xowa/addons/parsers/mediawikis/Xow_page_cache_wkr__embeddable.java @@ -14,12 +14,32 @@ GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt */ package gplx.xowa.addons.parsers.mediawikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.parsers.*; +import gplx.xowa.parsers.utils.*; class Xow_page_cache_wkr__embeddable implements gplx.xowa.wikis.caches.Xow_page_cache_wkr { private final Xop_mediawiki_loader cbk; - public Xow_page_cache_wkr__embeddable(Xop_mediawiki_loader cbk) { + private final Xop_redirect_mgr redirect_mgr; + public Xow_page_cache_wkr__embeddable(Xowe_wiki wiki, Xop_mediawiki_loader cbk) { this.cbk = cbk; + this.redirect_mgr = new Xop_redirect_mgr(wiki); } public byte[] Get_page_or_null(byte[] full_db) { - return Bry_.new_u8(cbk.LoadWikitext(String_.new_u8(full_db))); + byte[] wikitext = null; + + // loop to handle redirects + int loops = 0; + while (loops++ < 5) { + wikitext = Bry_.new_u8(cbk.LoadWikitext(String_.new_u8(full_db))); + Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(wikitext); + // not a redirect; exit loop + if (redirect_ttl == null) { + break; + } + // redirect + else { + full_db = redirect_ttl.Full_db(); + continue; + } + } + return wikitext; } }