diff --git a/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java b/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java index 7d03b98d508282c069fe0a236c766dafe1784052..042cc433f0795d238275bd473bcdc5f21315f33c 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java @@ -24,7 +24,7 @@ public class ArchiveServlet extends HttpServlet { renderRootIndex(resp); return; } else if (path.endsWith(Archive.INDEX_FILE)) { - renderSummary(resp); + renderSummary(req.getHeader("If-None-Match"), resp); } else if (path.indexOf("export.zip") != -1) { ExportServlet.export(req, resp); } else { @@ -92,14 +92,18 @@ public class ArchiveServlet extends HttpServlet { public static final String HEADER_EXPORT_CAPABLE = "X-Syndie-Export-Capable"; - private void renderSummary(HttpServletResponse resp) throws ServletException, IOException { + private void renderSummary(String etag, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/plain;charset=utf-8"); //resp.setCharacterEncoding("UTF-8"); ArchiveIndex index = BlogManager.instance().getArchive().getIndex(); byte[] indexUTF8 = DataHelper.getUTF8(index.toString()); + String newEtag = "\"" + I2PAppContext.getGlobalContext().sha().calculateHash(indexUTF8).toBase64() + "\""; + if (etag != null && etag.equals(newEtag)) { + resp.sendError(304, "Archive not modified"); + return; + } resp.setHeader(HEADER_EXPORT_CAPABLE, "true"); - Hash hash = I2PAppContext.getGlobalContext().sha().calculateHash(indexUTF8); - resp.setHeader("ETag", "\"" + hash.toBase64() + "\""); + resp.setHeader("ETag", newEtag); OutputStream out = resp.getOutputStream(); out.write(indexUTF8); out.close(); diff --git a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java index 759c28cdb0980d73f1438ad9160dfef524e8dd60..48912327659027df2aa95ba180447c8ea54b8b55 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java @@ -336,7 +336,9 @@ public class RemoteArchiveBean { _statusMessages.add("Fetch of " + HTMLRenderer.sanitizeString(url) + " successful"); _fetchIndexInProgress = false; ArchiveIndex i = new ArchiveIndex(I2PAppContext.getGlobalContext(), false); - if (!notModified) { + if (notModified) { + _statusMessages.add("Archive unchanged since last fetch."); + } else { try { i.load(_archiveFile); _statusMessages.add("Archive fetched and loaded");