From 2ac934c7f9bec230fc33ac9e77266c7b8456abf9 Mon Sep 17 00:00:00 2001 From: Floens Date: Wed, 24 Jan 2018 21:31:14 +0100 Subject: [PATCH] rename 8chan to vichan, rework resolvables disallows sites that were already added from being added again. --- .../org/floens/chan/core/site/Resolvable.java | 10 +- .../java/org/floens/chan/core/site/Site.java | 4 +- .../floens/chan/core/site/SiteResolver.java | 36 +++++-- .../java/org/floens/chan/core/site/Sites.java | 6 +- .../chan/core/site/sites/chan4/Chan4.java | 96 +++++++++---------- .../{chan8/Chan8.java => vichan/ViChan.java} | 94 +++++++++--------- .../ViChanParserHandler.java} | 4 +- .../ViChanReplyHttpCall.java} | 6 +- 8 files changed, 132 insertions(+), 124 deletions(-) rename Clover/app/src/main/java/org/floens/chan/core/site/sites/{chan8/Chan8.java => vichan/ViChan.java} (78%) rename Clover/app/src/main/java/org/floens/chan/core/site/sites/{chan8/Chan8ParserHandler.java => vichan/ViChanParserHandler.java} (97%) rename Clover/app/src/main/java/org/floens/chan/core/site/sites/{chan8/Chan8ReplyHttpCall.java => vichan/ViChanReplyHttpCall.java} (96%) diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/Resolvable.java b/Clover/app/src/main/java/org/floens/chan/core/site/Resolvable.java index 9ca282b6..a91c1f13 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/Resolvable.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/Resolvable.java @@ -1,14 +1,12 @@ package org.floens.chan.core.site; +import okhttp3.HttpUrl; + public interface Resolvable { - enum ResolveResult { - NO, - NAME_MATCH, - FULL_MATCH - } + boolean matchesName(String value); - ResolveResult matchesName(String value); + boolean respondsTo(HttpUrl url); Class getSiteClass(); } diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/Site.java b/Clover/app/src/main/java/org/floens/chan/core/site/Site.java index 39672dac..dc33d39c 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/Site.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/Site.java @@ -134,9 +134,9 @@ public interface Site { SiteIcon icon(); - boolean respondsTo(HttpUrl url); + Resolvable resolvable(); - Loadable resolve(HttpUrl url); + Loadable resolveLoadable(HttpUrl url); boolean feature(Feature feature); diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/SiteResolver.java b/Clover/app/src/main/java/org/floens/chan/core/site/SiteResolver.java index 65f0c3dc..51a68fe7 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/SiteResolver.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/SiteResolver.java @@ -41,11 +41,24 @@ public class SiteResolver { HttpUrl httpUrl = sanitizeUrl(url); if (httpUrl == null) { + for (Site site : Sites.allSites()) { + Resolvable resolvable = site.resolvable(); + + if (resolvable.matchesName(url)) { + return site; + } + } + return null; } + if (!httpUrl.scheme().equals("https")) { + httpUrl = httpUrl.newBuilder().scheme("https").build(); + } + for (Site site : Sites.allSites()) { - if (site.respondsTo(httpUrl)) { + Resolvable resolvable = site.resolvable(); + if (resolvable.respondsTo(httpUrl)) { return site; } } @@ -60,12 +73,14 @@ public class SiteResolver { if (httpUrl == null) { for (Resolvable resolvable : resolvables) { - if (resolvable.matchesName(url) == Resolvable.ResolveResult.NAME_MATCH) { - return new SiteResolverResult(SiteResolverResult.Match.BUILTIN, resolvable.getSiteClass(), null); + if (resolvable.matchesName(url)) { + return new SiteResolverResult(SiteResolverResult.Match.BUILTIN, + resolvable.getSiteClass(), null); } } - return new SiteResolverResult(SiteResolverResult.Match.NONE, null, null); + return new SiteResolverResult(SiteResolverResult.Match.NONE, + null, null); } if (!httpUrl.scheme().equals("https")) { @@ -73,8 +88,9 @@ public class SiteResolver { } for (Resolvable resolvable : resolvables) { - if (resolvable.matchesName(httpUrl.toString()) == Resolvable.ResolveResult.FULL_MATCH) { - return new SiteResolverResult(SiteResolverResult.Match.BUILTIN, resolvable.getSiteClass(), null); + if (resolvable.respondsTo(httpUrl)) { + return new SiteResolverResult(SiteResolverResult.Match.BUILTIN, + resolvable.getSiteClass(), null); } } @@ -89,10 +105,12 @@ public class SiteResolver { } for (Site site : Sites.allSites()) { - Loadable resolved = site.resolve(httpUrl); + if (site.resolvable().respondsTo(httpUrl)) { + Loadable resolved = site.resolveLoadable(httpUrl); - if (resolved != null) { - return new LoadableResult(resolved); + if (resolved != null) { + return new LoadableResult(resolved); + } } } diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/Sites.java b/Clover/app/src/main/java/org/floens/chan/core/site/Sites.java index 87b2a67e..df663410 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/Sites.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/Sites.java @@ -3,7 +3,7 @@ package org.floens.chan.core.site; import android.util.SparseArray; import org.floens.chan.core.site.sites.chan4.Chan4; -import org.floens.chan.core.site.sites.chan8.Chan8; +import org.floens.chan.core.site.sites.vichan.ViChan; import java.util.ArrayList; import java.util.Collections; @@ -18,14 +18,14 @@ public class Sites { // find the correct class to use. SITE_CLASSES.put(0, Chan4.class); - SITE_CLASSES.put(1, Chan8.class); + SITE_CLASSES.put(1, ViChan.class); } public static final List RESOLVABLES = new ArrayList<>(); static { RESOLVABLES.add(Chan4.RESOLVABLE); - RESOLVABLES.add(Chan8.RESOLVABLE); + RESOLVABLES.add(ViChan.RESOLVABLE); } private static List ALL_SITES = Collections.unmodifiableList(new ArrayList()); diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan4/Chan4.java b/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan4/Chan4.java index 1a633051..e2fcc831 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan4/Chan4.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan4/Chan4.java @@ -63,20 +63,20 @@ import okhttp3.Request; public class Chan4 extends SiteBase { public static final Resolvable RESOLVABLE = new Resolvable() { @Override - public ResolveResult matchesName(String value) { - switch (value) { - case "4chan": - return ResolveResult.NAME_MATCH; - case "https://4chan.org/": - return ResolveResult.FULL_MATCH; - default: - return ResolveResult.NO; - } + public Class getSiteClass() { + return Chan4.class; } @Override - public Class getSiteClass() { - return Chan4.class; + public boolean matchesName(String value) { + return value.equals("4chan"); + } + + @Override + public boolean respondsTo(HttpUrl url) { + return url.host().equals("4chan.org") || + url.host().equals("www.4chan.org") || + url.host().equals("boards.4chan.org"); } }; @@ -310,53 +310,49 @@ public class Chan4 extends SiteBase { } @Override - public boolean respondsTo(HttpUrl url) { - return url.host().equals("4chan.org") || - url.host().equals("www.4chan.org") || - url.host().equals("boards.4chan.org"); + public Resolvable resolvable() { + return RESOLVABLE; } @Override - public Loadable resolve(HttpUrl url) { - if (respondsTo(url)) { - List parts = url.pathSegments(); - - if (!parts.isEmpty()) { - String boardCode = parts.get(0); - Board board = board(boardCode); - if (board != null) { - if (parts.size() < 3) { - // Board mode - return loadableProvider.get(Loadable.forCatalog(board)); - } else if (parts.size() >= 3) { - // Thread mode - int no = -1; - try { - no = Integer.parseInt(parts.get(2)); - } catch (NumberFormatException ignored) { - } + public Loadable resolveLoadable(HttpUrl url) { + List parts = url.pathSegments(); + + if (!parts.isEmpty()) { + String boardCode = parts.get(0); + Board board = board(boardCode); + if (board != null) { + if (parts.size() < 3) { + // Board mode + return loadableProvider.get(Loadable.forCatalog(board)); + } else if (parts.size() >= 3) { + // Thread mode + int no = -1; + try { + no = Integer.parseInt(parts.get(2)); + } catch (NumberFormatException ignored) { + } - int post = -1; - String fragment = url.fragment(); - if (fragment != null) { - int index = fragment.indexOf("p"); - if (index >= 0) { - try { - post = Integer.parseInt(fragment.substring(index + 1)); - } catch (NumberFormatException ignored) { - } + int post = -1; + String fragment = url.fragment(); + if (fragment != null) { + int index = fragment.indexOf("p"); + if (index >= 0) { + try { + post = Integer.parseInt(fragment.substring(index + 1)); + } catch (NumberFormatException ignored) { } } + } - if (no >= 0) { - Loadable loadable = loadableProvider.get( - Loadable.forThread(this, board, no)); - if (post >= 0) { - loadable.markedNo = post; - } - - return loadable; + if (no >= 0) { + Loadable loadable = loadableProvider.get( + Loadable.forThread(this, board, no)); + if (post >= 0) { + loadable.markedNo = post; } + + return loadable; } } } diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8.java b/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChan.java similarity index 78% rename from Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8.java rename to Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChan.java index 7d94dbba..b5a24e57 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChan.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.floens.chan.core.site.sites.chan8; +package org.floens.chan.core.site.sites.vichan; import android.support.annotation.Nullable; @@ -51,25 +51,23 @@ import okhttp3.Request; import static org.floens.chan.Chan.injector; -public class Chan8 extends SiteBase { - private static final String TAG = "Chan8"; +public class ViChan extends SiteBase { + private static final String TAG = "ViChan"; public static final Resolvable RESOLVABLE = new Resolvable() { @Override - public ResolveResult matchesName(String value) { - switch (value) { - case "8chan": - return ResolveResult.NAME_MATCH; - case "https://8ch.net/": - return ResolveResult.FULL_MATCH; - default: - return ResolveResult.NO; - } + public Class getSiteClass() { + return ViChan.class; } @Override - public Class getSiteClass() { - return Chan8.class; + public boolean matchesName(String value) { + return value.equals("8chan") || value.equals("8ch"); + } + + @Override + public boolean respondsTo(HttpUrl url) { + return url.host().equals("8ch.net"); } }; @@ -187,48 +185,46 @@ public class Chan8 extends SiteBase { } @Override - public boolean respondsTo(HttpUrl url) { - return url.host().equals("8ch.net"); + public Resolvable resolvable() { + return RESOLVABLE; } @Override - public Loadable resolve(HttpUrl url) { - if (respondsTo(url)) { - List parts = url.pathSegments(); - - if (!parts.isEmpty()) { - String boardCode = parts.get(0); - Board board = board(boardCode); - if (board != null) { - if (parts.size() < 3) { - // Board mode - return loadableProvider.get(Loadable.forCatalog(board)); - } else if (parts.size() >= 3) { - // Thread mode - int no = -1; + public Loadable resolveLoadable(HttpUrl url) { + List parts = url.pathSegments(); + + if (!parts.isEmpty()) { + String boardCode = parts.get(0); + Board board = board(boardCode); + if (board != null) { + if (parts.size() < 3) { + // Board mode + return loadableProvider.get(Loadable.forCatalog(board)); + } else if (parts.size() >= 3) { + // Thread mode + int no = -1; + try { + no = Integer.parseInt(parts.get(2).replace(".html", "")); + } catch (NumberFormatException ignored) { + } + + int post = -1; + String fragment = url.fragment(); + if (fragment != null) { try { - no = Integer.parseInt(parts.get(2).replace(".html", "")); + post = Integer.parseInt(fragment); } catch (NumberFormatException ignored) { } + } - int post = -1; - String fragment = url.fragment(); - if (fragment != null) { - try { - post = Integer.parseInt(fragment); - } catch (NumberFormatException ignored) { - } + if (no >= 0) { + Loadable loadable = loadableProvider.get( + Loadable.forThread(this, board, no)); + if (post >= 0) { + loadable.markedNo = post; } - if (no >= 0) { - Loadable loadable = loadableProvider.get( - Loadable.forThread(this, board, no)); - if (post >= 0) { - loadable.markedNo = post; - } - - return loadable; - } + return loadable; } } } @@ -278,7 +274,7 @@ public class Chan8 extends SiteBase { @Override public ChanReader chanReader() { - FutabaChanParser parser = new FutabaChanParser(new Chan8ParserHandler()); + FutabaChanParser parser = new FutabaChanParser(new ViChanParserHandler()); return new FutabaChanReader(parser); } @@ -286,7 +282,7 @@ public class Chan8 extends SiteBase { public void post(Reply reply, final PostListener postListener) { // TODO HttpCallManager httpCallManager = injector().instance(HttpCallManager.class); - httpCallManager.makeHttpCall(new Chan8ReplyHttpCall(this, reply), + httpCallManager.makeHttpCall(new ViChanReplyHttpCall(this, reply), new HttpCall.HttpCallback() { @Override public void onHttpSuccess(CommonReplyHttpCall httpPost) { diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8ParserHandler.java b/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanParserHandler.java similarity index 97% rename from Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8ParserHandler.java rename to Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanParserHandler.java index 8c2a0e41..84c6d82a 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8ParserHandler.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanParserHandler.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.floens.chan.core.site.sites.chan8; +package org.floens.chan.core.site.sites.vichan; import android.text.SpannableString; @@ -30,7 +30,7 @@ import org.jsoup.nodes.Element; import java.util.Set; -public class Chan8ParserHandler extends DefaultFutabaChanParserHandler { +public class ViChanParserHandler extends DefaultFutabaChanParserHandler { @Override public CharSequence handleParagraph(FutabaChanParser parser, Theme theme, Post.Builder post, CharSequence text, Element element) { if (element.hasClass("quote")) { diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8ReplyHttpCall.java b/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanReplyHttpCall.java similarity index 96% rename from Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8ReplyHttpCall.java rename to Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanReplyHttpCall.java index ab77eb22..955dd990 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8ReplyHttpCall.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanReplyHttpCall.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.floens.chan.core.site.sites.chan8; +package org.floens.chan.core.site.sites.vichan; import android.text.TextUtils; @@ -36,12 +36,12 @@ import okhttp3.MultipartBody; import okhttp3.RequestBody; import okhttp3.Response; -public class Chan8ReplyHttpCall extends CommonReplyHttpCall { +public class ViChanReplyHttpCall extends CommonReplyHttpCall { private static final Pattern REQUIRE_AUTHENTICATION = Pattern.compile(".*\"captcha\": ?true.*"); private static final Pattern ERROR_MESSAGE = Pattern.compile(".*

Error

.*]*>(.*?)<\\/h2>.*"); - public Chan8ReplyHttpCall(Site site, Reply reply) { + public ViChanReplyHttpCall(Site site, Reply reply) { super(site, reply); }