From 5994369e010cfabdca7137f692e4d41e39153f23 Mon Sep 17 00:00:00 2001 From: Athou Date: Sun, 31 Mar 2013 18:47:17 +0200 Subject: [PATCH] display error messages --- .../java/com/commafeed/backend/feeds/FeedFetcher.java | 9 ++++++++- .../java/com/commafeed/backend/feeds/FeedParser.java | 2 +- .../java/com/commafeed/frontend/model/Entries.java | 9 +++++++++ .../commafeed/frontend/rest/resources/EntriesREST.java | 1 + .../frontend/rest/resources/SubscriptionsREST.java | 10 +++++++++- src/main/webapp/directives/category.html | 4 ++-- src/main/webapp/js/controllers.js | 2 ++ src/main/webapp/templates/feeds.view.html | 3 ++- 8 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/commafeed/backend/feeds/FeedFetcher.java b/src/main/java/com/commafeed/backend/feeds/FeedFetcher.java index dc4e55cb..0bc40ba6 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedFetcher.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedFetcher.java @@ -43,6 +43,13 @@ public class FeedFetcher { HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); String content = EntityUtils.toString(entity, "UTF-8"); + String extractedUrl = extractFeedUrl(content); + if (extractedUrl != null) { + httpget = new HttpGet(feedUrl); + response = httpclient.execute(httpget); + entity = response.getEntity(); + content = EntityUtils.toString(entity, "UTF-8"); + } feed = parser.parse(feedUrl, content); } catch (Exception e) { throw new FeedException(e.getMessage(), e); @@ -52,7 +59,7 @@ public class FeedFetcher { return feed; } - public String extractFeedUrl(String html) { + private String extractFeedUrl(String html) { String foundUrl = null; Document doc = Jsoup.parse(html); diff --git a/src/main/java/com/commafeed/backend/feeds/FeedParser.java b/src/main/java/com/commafeed/backend/feeds/FeedParser.java index e2edd353..fd5506ab 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedParser.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedParser.java @@ -27,11 +27,11 @@ public class FeedParser { @SuppressWarnings("unchecked") public Feed parse(String feedUrl, String xml) throws FeedException { Feed feed = new Feed(); - feed.setUrl(feedUrl); feed.setLastUpdated(Calendar.getInstance().getTime()); try { SyndFeed rss = new SyndFeedInput().build(new StringReader(xml)); + feed.setUrl(rss.getLink() != null ? rss.getLink() : feedUrl); feed.setTitle(rss.getTitle()); List items = rss.getEntries(); for (SyndEntry item : items) { diff --git a/src/main/java/com/commafeed/frontend/model/Entries.java b/src/main/java/com/commafeed/frontend/model/Entries.java index 10cd7358..2eaa25be 100644 --- a/src/main/java/com/commafeed/frontend/model/Entries.java +++ b/src/main/java/com/commafeed/frontend/model/Entries.java @@ -8,6 +8,7 @@ import com.google.common.collect.Lists; @SuppressWarnings("serial") public class Entries implements Serializable { private String name; + private String message; private List entries = Lists.newArrayList(); public String getName() { @@ -26,4 +27,12 @@ public class Entries implements Serializable { this.entries = entries; } + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/EntriesREST.java b/src/main/java/com/commafeed/frontend/rest/resources/EntriesREST.java index ffba9fe4..84a6524a 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/EntriesREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/EntriesREST.java @@ -56,6 +56,7 @@ public class EntriesREST extends AbstractREST { getUser(), Long.valueOf(id)); if (subscription != null) { entries.setName(subscription.getTitle()); + entries.setMessage(subscription.getFeed().getMessage()); entries.getEntries().addAll( buildEntries(subscription, offset, limit, unreadOnly)); } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java b/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java index 4fa07dfd..348eed13 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java @@ -53,7 +53,15 @@ public class SubscriptionsREST extends AbstractREST { Preconditions.checkNotNull(req.getTitle()); Preconditions.checkNotNull(req.getUrl()); - Feed feed = feedService.findByUrl(req.getUrl()); + Feed fetchedFeed = null; + try { + fetchedFeed = feedFetcher.fetch(req.getUrl()); + } catch (FeedException e) { + return Response.status(Status.NOT_FOUND).entity(e.getMessage()) + .build(); + } + + Feed feed = feedService.findByUrl(fetchedFeed.getUrl()); if (feed == null) { feed = new Feed(); feed.setUrl(req.getUrl()); diff --git a/src/main/webapp/directives/category.html b/src/main/webapp/directives/category.html index f4138c84..98e2278e 100644 --- a/src/main/webapp/directives/category.html +++ b/src/main/webapp/directives/category.html @@ -3,9 +3,9 @@ ng-class="{selected: (node.id == selectedId && selectedType == 'category')}">{{formatCategoryName({category:node})}}
    -
  • +
  • -
    "{{name}}" has no unread items.
    +
    "{{name}}" has no unread items.
    +
    Error while loading this feed : {{message}}
    \ No newline at end of file