display favicon

This commit is contained in:
Athou
2013-04-03 15:53:57 +02:00
parent 8b9c1786b3
commit 81cbb541b8
11 changed files with 162 additions and 29 deletions

View File

@@ -38,6 +38,7 @@ import org.reflections.vfs.ZipDir;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.commafeed.frontend.pages.FaviconPage;
import com.commafeed.frontend.pages.HomePage;
import com.commafeed.frontend.pages.LoginPage;
import com.commafeed.frontend.pages.LogoutPage;
@@ -57,6 +58,7 @@ public class CommaFeedApplication extends AuthenticatedWebApplication {
mountPage("login", LoginPage.class);
mountPage("logout", LogoutPage.class);
mountPage("error", DisplayExceptionPage.class);
mountPage("favicon", FaviconPage.class);
setupInjection();

View File

@@ -8,6 +8,7 @@ public class Subscription implements Serializable {
private Long id;
private String name;
private String message;
private String feedUrl;
private int unread;
public Long getId() {
@@ -42,4 +43,12 @@ public class Subscription implements Serializable {
this.message = message;
}
public String getFeedUrl() {
return feedUrl;
}
public void setFeedUrl(String feedUrl) {
this.feedUrl = feedUrl;
}
}

View File

@@ -0,0 +1,81 @@
package com.commafeed.frontend.pages;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import javax.inject.Inject;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.request.IRequestCycle;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.commafeed.backend.HttpGetter;
import com.commafeed.backend.model.UserRole.Role;
import com.commafeed.frontend.SecurityCheck;
@SuppressWarnings("serial")
@SecurityCheck(Role.USER)
public class FaviconPage extends BasePage {
private static final Logger log = LoggerFactory
.getLogger(FaviconPage.class);
@Inject
HttpGetter getter;
public FaviconPage(PageParameters params) {
final String url = params.get("url").toString();
getRequestCycle().scheduleRequestHandlerAfterCurrent(
new IRequestHandler() {
@Override
public void respond(IRequestCycle requestCycle) {
requestCycle.getResponse().write(getImage(url));
}
@Override
public void detach(IRequestCycle requestCycle) {
}
});
}
private byte[] getImage(String url) {
byte[] img = null;
try {
if (StringUtils.isNotBlank(url)) {
int index = Math.max(url.length(), url.lastIndexOf("?"));
url = url.substring(0, index);
String iconUrl = "http://g.etfv.co/"
+ URLEncoder.encode(url, "UTF-8") + "?defaulticon=none";
img = getter.getBinary(iconUrl);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
if (img == null) {
img = getDefaultIcon();
}
return img;
}
private byte[] getDefaultIcon() {
byte[] bytes = null;
InputStream is = null;
try {
is = getClass().getResourceAsStream("/favicon.gif");
bytes = IOUtils.toByteArray(is);
} catch (IOException e) {
log.error(e.getMessage(), e);
} finally {
IOUtils.closeQuietly(is);
}
return bytes;
}
}

View File

@@ -59,13 +59,12 @@ public class SubscriptionsREST extends AbstractREST {
Feed fetchedFeed = fetchFeed(req.getUrl());
Feed feed = feedService.findByUrl(fetchedFeed.getUrl());
if (feed == null) {
feed = new Feed();
feed.setUrl(fetchedFeed.getUrl());
feed = fetchedFeed;
feedService.save(feed);
}
FeedSubscription sub = new FeedSubscription();
sub.setCategory("all".equals(req.getCategoryId()) ? null
sub.setCategory(EntriesREST.ALL.equals(req.getCategoryId()) ? null
: feedCategoryService.findById(Long.valueOf(req.getCategoryId())));
sub.setFeed(feed);
sub.setTitle(req.getTitle());
@@ -206,6 +205,7 @@ public class SubscriptionsREST extends AbstractREST {
sub.setId(subscription.getId());
sub.setName(subscription.getTitle());
sub.setMessage(subscription.getFeed().getMessage());
sub.setFeedUrl(subscription.getFeed().getLink());
int size = feedEntryService.getEntries(subscription.getFeed(),
getUser(), true).size();
sub.setUnread(size);
@@ -220,5 +220,4 @@ public class SubscriptionsREST extends AbstractREST {
});
return category;
}
}