Merge pull request #144 from kankri/master

Make subscription errors visible and avoid a NPE if the public URL is not set
This commit is contained in:
Athou
2013-05-20 12:52:53 -07:00
3 changed files with 25 additions and 4 deletions

View File

@@ -3,6 +3,7 @@ package com.commafeed.backend.services;
import java.util.List;
import javax.ejb.Stateless;
import javax.ejb.ApplicationException;
import javax.inject.Inject;
import com.commafeed.backend.dao.FeedEntryDAO;
@@ -19,6 +20,12 @@ import com.google.api.client.util.Lists;
@Stateless
public class FeedSubscriptionService {
@ApplicationException
public class FeedSubscriptionException extends RuntimeException {
public FeedSubscriptionException(String msg) {
super(msg);
}
}
@Inject
FeedService feedService;
@@ -41,7 +48,12 @@ public class FeedSubscriptionService {
public Feed subscribe(User user, String url, String title,
FeedCategory category) {
if (url.startsWith(applicationSettingsService.get().getPublicUrl())) {
final String pubUrl = applicationSettingsService.get().getPublicUrl();
if (pubUrl == null) {
throw new FeedSubscriptionException(
"Public URL of this CommaFeed is unset");
}
if (url.startsWith(pubUrl)) {
throw new RuntimeException(
"Could not subscribe to a feed from this CommaFeed instance");
}

View File

@@ -224,9 +224,15 @@ public class FeedREST extends AbstractResourceREST {
FeedCategory category = CategoryREST.ALL.equals(req.getCategoryId()) ? null
: feedCategoryDAO.findById(Long.valueOf(req.getCategoryId()));
FeedInfo info = (FeedInfo) fetchFeed(url).getEntity();
feedSubscriptionService.subscribe(getUser(), info.getUrl(),
try {
feedSubscriptionService.subscribe(getUser(), info.getUrl(),
req.getTitle(), category);
} catch (Exception e) {
log.info("Failed to subscribe to URL {}: {}", url, e.getMessage());
return Response.status(Status.SERVICE_UNAVAILABLE).entity(
"Failed to subscribe to URL " + url + ": " + e.getMessage()
).build();
}
return Response.ok(Status.OK).build();
}

View File

@@ -75,8 +75,11 @@ function($scope, FeedService, CategoryService) {
}
FeedService.subscribe($scope.sub, function() {
CategoryService.init();
$scope.close();
}, function(data) {
$scope.state = 'failed';
$scope.sub.title = 'ERROR: ' + data.data;
});
$scope.close();
};
$scope.openImport = function() {