From d4e546b6c18916af1304b6d97bdebc7b6360dd67 Mon Sep 17 00:00:00 2001 From: Shinokuni Date: Thu, 1 Oct 2020 19:29:59 +0200 Subject: [PATCH] Fix rss url parsing bug --- .../com/readrops/api/localfeed/RSSQuery.java | 11 ++++---- .../com/readrops/app/utils/HtmlParser.java | 28 +++++++++++-------- .../app/viewmodels/AddFeedsViewModel.java | 3 +- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/api/src/main/java/com/readrops/api/localfeed/RSSQuery.java b/api/src/main/java/com/readrops/api/localfeed/RSSQuery.java index 75b8c8fc..0700a02e 100644 --- a/api/src/main/java/com/readrops/api/localfeed/RSSQuery.java +++ b/api/src/main/java/com/readrops/api/localfeed/RSSQuery.java @@ -71,7 +71,7 @@ public class RSSQuery { if (type == RSSType.RSS_UNKNOWN) { RSSType contentType = getContentRSSType(response.body().string()); return contentType != RSSType.RSS_UNKNOWN; - } else return type != null; + } else return true; } else return false; } @@ -103,17 +103,16 @@ public class RSSQuery { switch (header) { case LibUtils.RSS_DEFAULT_CONTENT_TYPE: return RSSType.RSS_2; - case LibUtils.RSS_TEXT_CONTENT_TYPE: - case LibUtils.HTML_CONTENT_TYPE: - case LibUtils.RSS_APPLICATION_CONTENT_TYPE: - return RSSType.RSS_UNKNOWN; case LibUtils.ATOM_CONTENT_TYPE: return RSSType.RSS_ATOM; case LibUtils.JSON_CONTENT_TYPE: return RSSType.RSS_JSON; + case LibUtils.RSS_TEXT_CONTENT_TYPE: + case LibUtils.HTML_CONTENT_TYPE: + case LibUtils.RSS_APPLICATION_CONTENT_TYPE: default: Log.d(TAG, "bad content type : " + contentType); - return null; + return RSSType.RSS_UNKNOWN; } } diff --git a/app/src/main/java/com/readrops/app/utils/HtmlParser.java b/app/src/main/java/com/readrops/app/utils/HtmlParser.java index c1f5b7d2..85c7965d 100644 --- a/app/src/main/java/com/readrops/app/utils/HtmlParser.java +++ b/app/src/main/java/com/readrops/app/utils/HtmlParser.java @@ -15,6 +15,7 @@ import org.jsoup.select.Elements; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.regex.Pattern; @@ -33,25 +34,30 @@ public final class HtmlParser { * @param url url to request * @return a list of rss urls with their title */ - public static List getFeedLink(String url) throws Exception { + public static List getFeedLink(String url) { List results = new ArrayList<>(); - Document document = Jsoup.parse(getHTMLHeadFromUrl(url), url); + String head = getHTMLHeadFromUrl(url); + if (head != null) { + Document document = Jsoup.parse(head, url); - Elements elements = document.select("link"); + Elements elements = document.select("link"); - for (Element element : elements) { - String type = element.attributes().get("type"); + for (Element element : elements) { + String type = element.attributes().get("type"); - if (isTypeRssFeed(type)) { - String feedUrl = element.absUrl("href"); - String label = element.attributes().get("title"); + if (isTypeRssFeed(type)) { + String feedUrl = element.absUrl("href"); + String label = element.attributes().get("title"); - results.add(new ParsingResult(feedUrl, label)); + results.add(new ParsingResult(feedUrl, label)); + } } - } - return results; + return results; + } else { + return Collections.emptyList(); + } } private static boolean isTypeRssFeed(String type) { diff --git a/app/src/main/java/com/readrops/app/viewmodels/AddFeedsViewModel.java b/app/src/main/java/com/readrops/app/viewmodels/AddFeedsViewModel.java index 804ae2eb..562e370d 100644 --- a/app/src/main/java/com/readrops/app/viewmodels/AddFeedsViewModel.java +++ b/app/src/main/java/com/readrops/app/viewmodels/AddFeedsViewModel.java @@ -54,8 +54,9 @@ public class AddFeedsViewModel extends AndroidViewModel { ParsingResult parsingResult = new ParsingResult(url, null); results.add(parsingResult); - } else + } else { results.addAll(HtmlParser.getFeedLink(url)); + } emitter.onSuccess(results); });