From: David ‘Bombe’ Roden Date: Sat, 5 Nov 2011 15:55:54 +0000 (+0100) Subject: Merge branch 'link-filter-26' into next X-Git-Tag: 0.7.3^2~17 X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=commitdiff_plain;h=b28eb5baea51a37d9765833e0184e2a10a86819b;hp=49f646dc72f59ebd385915ba8362902459557b7f Merge branch 'link-filter-26' into next --- diff --git a/src/main/java/net/pterodactylus/sone/core/FreenetInterface.java b/src/main/java/net/pterodactylus/sone/core/FreenetInterface.java index af680a1..c63231a 100644 --- a/src/main/java/net/pterodactylus/sone/core/FreenetInterface.java +++ b/src/main/java/net/pterodactylus/sone/core/FreenetInterface.java @@ -26,7 +26,6 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import net.pterodactylus.sone.core.SoneException.Type; import net.pterodactylus.sone.data.Image; import net.pterodactylus.sone.data.Sone; import net.pterodactylus.sone.data.TemporaryImage; @@ -154,7 +153,7 @@ public class FreenetInterface { ClientPutter clientPutter = client.insert(insertBlock, false, null, false, insertContext, insertToken, RequestStarter.INTERACTIVE_PRIORITY_CLASS); insertToken.setClientPutter(clientPutter); } catch (InsertException ie1) { - throw new SoneException(Type.INSERT_FAILED, "Could not start image insert.", ie1); + throw new SoneInsertException("Could not start image insert.", ie1); } } @@ -175,7 +174,7 @@ public class FreenetInterface { try { return client.insertManifest(insertUri, manifestEntries, defaultFile); } catch (InsertException ie1) { - throw new SoneException(null, ie1); + throw new SoneException(ie1); } } diff --git a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java index db26d80..b085ade 100644 --- a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java +++ b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java @@ -219,8 +219,10 @@ public class SoneDownloader extends AbstractService { * @param soneInputStream * The input stream to parse the Sone from * @return The parsed Sone + * @throws SoneException + * if a parse error occurs, or the protocol is invalid */ - public Sone parseSone(Sone originalSone, InputStream soneInputStream) { + public Sone parseSone(Sone originalSone, InputStream soneInputStream) throws SoneException { /* TODO - impose a size limit? */ Document document; @@ -336,8 +338,8 @@ public class SoneDownloader extends AbstractService { if (profileFieldsXml != null) { for (SimpleXML fieldXml : profileFieldsXml.getNodes("field")) { String fieldName = fieldXml.getValue("field-name", null); - String fieldValue = fieldXml.getValue("field-value", null); - if ((fieldName == null) || (fieldValue == null)) { + String fieldValue = fieldXml.getValue("field-value", ""); + if (fieldName == null) { logger.log(Level.WARNING, "Downloaded profile field for Sone %s with missing data! Name: %s, Value: %s", new Object[] { sone, fieldName, fieldValue }); return null; } diff --git a/src/main/java/net/pterodactylus/sone/core/SoneException.java b/src/main/java/net/pterodactylus/sone/core/SoneException.java index 271627e..683a148 100644 --- a/src/main/java/net/pterodactylus/sone/core/SoneException.java +++ b/src/main/java/net/pterodactylus/sone/core/SoneException.java @@ -25,88 +25,42 @@ package net.pterodactylus.sone.core; public class SoneException extends Exception { /** - * Defines the different error. This is an enum instead of custom exceptions - * to keep the number of exceptions down. Specialized exceptions might still - * exist, though. - */ - public static enum Type { - - /** An invalid Sone name was specified. */ - INVALID_SONE_NAME, - - /** An invalid URI was specified. */ - INVALID_URI, - - /** An insert failed. */ - INSERT_FAILED, - - } - - /** The type of the exception. */ - private final Type type; - - /** * Creates a new Sone exception. - * - * @param type - * The type of the occured error */ - public SoneException(Type type) { - this.type = type; + public SoneException() { + super(); } /** * Creates a new Sone exception. * - * @param type - * The type of the occured error * @param message * The message of the exception */ - public SoneException(Type type, String message) { + public SoneException(String message) { super(message); - this.type = type; } /** * Creates a new Sone exception. * - * @param type - * The type of the occured error * @param cause * The cause of the exception */ - public SoneException(Type type, Throwable cause) { + public SoneException(Throwable cause) { super(cause); - this.type = type; } /** * Creates a new Sone exception. * - * @param type - * The type of the occured error * @param message * The message of the exception * @param cause * The cause of the exception */ - public SoneException(Type type, String message, Throwable cause) { + public SoneException(String message, Throwable cause) { super(message, cause); - this.type = type; - } - - // - // ACCESSORS - // - - /** - * Returns the type of this exception. - * - * @return The type of this exception (may be {@code null}) - */ - public Type getType() { - return type; } } diff --git a/src/main/java/net/pterodactylus/sone/core/SoneInsertException.java b/src/main/java/net/pterodactylus/sone/core/SoneInsertException.java new file mode 100644 index 0000000..350c3d8 --- /dev/null +++ b/src/main/java/net/pterodactylus/sone/core/SoneInsertException.java @@ -0,0 +1,66 @@ +/* + * Sone - SoneInsertException.java - Copyright © 2011 David Roden + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.pterodactylus.sone.core; + +/** + * Exception that signals a problem with an insert. + * + * @author David ‘Bombe’ Roden + */ +public class SoneInsertException extends SoneException { + + /** + * Creates a new Sone insert exception. + */ + public SoneInsertException() { + super(); + } + + /** + * Creates a new Sone insert exception. + * + * @param message + * The message of the exception + */ + public SoneInsertException(String message) { + super(message); + } + + /** + * Creates a new Sone insert exception. + * + * @param cause + * The cause of the exception + */ + public SoneInsertException(Throwable cause) { + super(cause); + } + + /** + * Creates a new Sone insert exception. + * + * @param message + * The message of the exception + * @param cause + * The cause of the exception + */ + public SoneInsertException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/src/main/java/net/pterodactylus/sone/template/ImageLinkFilter.java b/src/main/java/net/pterodactylus/sone/template/ImageLinkFilter.java index 063a1de..d7b5eea 100644 --- a/src/main/java/net/pterodactylus/sone/template/ImageLinkFilter.java +++ b/src/main/java/net/pterodactylus/sone/template/ImageLinkFilter.java @@ -39,7 +39,7 @@ import net.pterodactylus.util.template.TemplateParser; public class ImageLinkFilter implements Filter { /** The template to render for the <img> tag. */ - private static final Template linkTemplate = TemplateParser.parse(new StringReader(" class=\"<%class|css>\"<%/if> src=\"<%src|html>\" alt=\"<%alt|html>\" title=\"<%title|html>\" width=\"<%width|html>\" height=\"<%height|html>\" style=\"position: relative;<%ifnull ! top>top: <% top|html>;<%/if><%ifnull ! left>left: <% left|html>;<%/if>\"/>")); + private static final Template linkTemplate = TemplateParser.parse(new StringReader(" class=\"<%class|css>\"<%/if> src=\"<%src|html><%if forceDownload>?forcedownload=true<%/if>\" alt=\"<%alt|html>\" title=\"<%title|html>\" width=\"<%width|html>\" height=\"<%height|html>\" style=\"position: relative;<%ifnull ! top>top: <% top|html>;<%/if><%ifnull ! left>left: <% left|html>;<%/if>\"/>")); /** The template context factory. */ private final TemplateContextFactory templateContextFactory; @@ -73,6 +73,7 @@ public class ImageLinkFilter implements Filter { linkTemplateContext.set("class", imageClass); if (image.isInserted()) { linkTemplateContext.set("src", "/" + image.getKey()); + linkTemplateContext.set("forceDownload", true); } else { linkTemplateContext.set("src", "getImage.html?image=" + image.getId()); } diff --git a/src/main/java/net/pterodactylus/sone/web/BookmarksPage.java b/src/main/java/net/pterodactylus/sone/web/BookmarksPage.java index ad1717b..41a3e65 100644 --- a/src/main/java/net/pterodactylus/sone/web/BookmarksPage.java +++ b/src/main/java/net/pterodactylus/sone/web/BookmarksPage.java @@ -70,7 +70,7 @@ public class BookmarksPage extends SoneTemplatePage { }); List sortedPosts = new ArrayList(loadedPosts); Collections.sort(sortedPosts, Post.TIME_COMPARATOR); - Pagination pagination = new Pagination(sortedPosts, 25).setPage(Numbers.safeParseInteger(request.getHttpRequest().getParam("page"), 0)); + Pagination pagination = new Pagination(sortedPosts, webInterface.getCore().getPreferences().getPostsPerPage()).setPage(Numbers.safeParseInteger(request.getHttpRequest().getParam("page"), 0)); templateContext.set("pagination", pagination); templateContext.set("posts", pagination.getItems()); templateContext.set("postsNotLoaded", allPosts.size() != loadedPosts.size()); diff --git a/src/main/resources/templates/bookmarks.html b/src/main/resources/templates/bookmarks.html index 8768b5a..cf4e7ce 100644 --- a/src/main/resources/templates/bookmarks.html +++ b/src/main/resources/templates/bookmarks.html @@ -5,6 +5,7 @@

<%= Page.Bookmarks.Page.Title|l10n|html>

+ <%= page|store key=pageParameter> <%include include/pagination.html> <%foreach posts post> <%include include/viewPost.html>