display error messages

This commit is contained in:
Athou
2013-03-31 18:47:17 +02:00
parent a9e5c50b3f
commit 5994369e01
8 changed files with 34 additions and 6 deletions

View File

@@ -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);

View File

@@ -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<SyndEntry> items = rss.getEntries();
for (SyndEntry item : items) {

View File

@@ -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<Entry> 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;
}
}

View File

@@ -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));
}

View File

@@ -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());

View File

@@ -3,9 +3,9 @@
ng-class="{selected: (node.id == selectedId && selectedType == 'category')}">{{formatCategoryName({category:node})}}
</label>
<ul>
<li ng-repeat="feed in node.feeds" ng-mouseenter="hovered=feed" ng-mouseleave="hovered=null">
<li ng-repeat="feed in node.feeds" ng-mouseenter="hovered=feed" ng-mouseleave="hovered=null" ng-class="{error: feed.message}">
<div class="dropdown pull-right" ng-show="hovered==feed">
<a dropdown-toggle class="pull-right feed-menu-icon"><i class="icon icon-chevron-down" ng-class="{error: feed.message}"></i> </a>
<a dropdown-toggle class="pull-right feed-menu-icon"><i class="icon icon-chevron-down"></i> </a>
<ul class="dropdown-menu">
<li>
<a ng-click="edit(feed)">Edit</a>

View File

@@ -106,6 +106,7 @@ module.controller('FeedListCtrl', function($scope, $stateParams, $http, $route,
$scope.selectedId = $stateParams._id;
$scope.name = null;
$scope.message = null;
$scope.entries = [];
$scope.settingsService = SettingsService;
@@ -144,6 +145,7 @@ module.controller('FeedListCtrl', function($scope, $stateParams, $http, $route,
$scope.entries.push(data.entries[i]);
}
$scope.name = data.name;
$scope.message = data.message;
$scope.busy = false;
$scope.hasMore = data.entries.length == limit;
});

View File

@@ -22,6 +22,7 @@
<div ng-bind-html-unsafe="entry.content"></div>
</div>
</div>
<div class="no-entries" ng-show="entries.length.name && entries.length == 0 && !busy">"{{name}}" has no unread items.</div>
<div class="no-entries" ng-show="!message && name && entries.length == 0 && !busy">"{{name}}" has no unread items.</div>
<div ng-show="message">Error while loading this feed : {{message}}</div>
</div>
</div>