From 726eb587240f2153409d91c46b85d233be698cc0 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Fri, 28 Jun 2013 12:19:56 +0000
Subject: [PATCH]  * i2psnark:    - Show comment metadata on details page    -
 Fix rar icon    - Escape [] in URLs, chrome doesn't do it for us    - Tweak
 column spacing

---
 .../java/src/org/klomp/snark/MetaInfo.java    | 59 +++++++++++++++++++
 .../org/klomp/snark/web/I2PSnarkServlet.java  | 40 ++++++++++++-
 .../resources/themes/snark/light/snark.css    |  2 +-
 .../resources/themes/snark/ubergine/snark.css |  2 +-
 .../resources/themes/snark/vanilla/snark.css  |  2 +-
 5 files changed, 100 insertions(+), 5 deletions(-)

diff --git a/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java b/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java
index 138f7d6341..6e1047ae50 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java
@@ -62,6 +62,9 @@ public class MetaInfo
   private final long length;
   private final boolean privateTorrent;
   private final List<List<String>> announce_list;
+  private final String comment;
+  private final String created_by;
+  private final long creation_date;
   private Map<String, BEValue> infoMap;
 
   /**
@@ -87,6 +90,9 @@ public class MetaInfo
     this.length = length;
     this.privateTorrent = privateTorrent;
     this.announce_list = announce_list;
+    this.comment = null;
+    this.created_by = null;
+    this.creation_date = 0;
 
     // TODO if we add a parameter for other keys
     //if (other != null) {
@@ -162,6 +168,32 @@ public class MetaInfo
         }
     }
 
+    // misc. optional  top-level stuff
+    val = m.get("comment");
+    String st = null;
+    if (val != null) {
+        try {
+            st = val.getString();
+        } catch (InvalidBEncodingException ibee) {}
+    }
+    this.comment = st;
+    val = m.get("created by");
+    st = null;
+    if (val != null) {
+        try {
+            st = val.getString();
+        } catch (InvalidBEncodingException ibee) {}
+    }
+    this.created_by = st;
+    val = m.get("creation date");
+    long time = 0;
+    if (val != null) {
+        try {
+            time = val.getLong() * 1000;
+        } catch (InvalidBEncodingException ibee) {}
+    }
+    this.creation_date = time;
+
     val = m.get("info");
     if (val == null)
         throw new InvalidBEncodingException("Missing info map");
@@ -381,6 +413,33 @@ public class MetaInfo
     return lengths;
   }
 
+  /**
+   * The comment string or null.
+   * Not available for locally-created torrents.
+   * @since 0.9.7
+   */
+  public String getComment() {
+      return this.comment;
+  }
+
+  /**
+   * The created-by string or null.
+   * Not available for locally-created torrents.
+   * @since 0.9.7
+   */
+  public String getCreatedBy() {
+      return this.created_by;
+  }
+
+  /**
+   * The creation date (ms) or zero.
+   * Not available for locally-created torrents.
+   * @since 0.9.7
+   */
+  public long getCreationDate() {
+      return this.creation_date;
+  }
+
   /**
    * Returns the number of pieces.
    */
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 54f50061a7..20cb23a0a0 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -9,10 +9,12 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.text.Collator;
 import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
@@ -2181,7 +2183,8 @@ public class I2PSnarkServlet extends BasicServlet {
     
     /** @since 0.8.13 */
     private static String urlEncode(String s) {
-        return s.replace(";", "%3B").replace("&", "&amp;").replace(" ", "%20");
+        return s.replace(";", "%3B").replace("&", "&amp;").replace(" ", "%20")
+                .replace("[", "%5B").replace("]", "%5D");
     }
 
     private static final String DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
@@ -2343,6 +2346,38 @@ public class I2PSnarkServlet extends BasicServlet {
                 }
             }
 
+            if (meta != null) {
+                String com = meta.getComment();
+                if (com != null) {
+                    if (com.length() > 1024)
+                        com = com.substring(0, 1024);
+                    buf.append("<tr><td><img alt=\"\" border=\"0\" src=\"")
+                       .append(_imgPath).append("details.png\"> <b>")
+                       .append(_("Comment")).append(":</b> ")
+                       .append(DataHelper.stripHTML(com))
+                       .append("</td></tr>\n");
+                }
+                long dat = meta.getCreationDate();
+                if (dat > 0) {
+                    String date = (new SimpleDateFormat("yyyy-MM-dd HH:mm")).format(new Date(dat));
+                    buf.append("<tr><td><img alt=\"\" border=\"0\" src=\"")
+                       .append(_imgPath).append("details.png\"> <b>")
+                       .append(_("Created")).append(":</b> ")
+                       .append(date).append(" UTC")
+                       .append("</td></tr>\n");
+                }
+                String cby = meta.getCreatedBy();
+                if (cby != null) {
+                    if (cby.length() > 128)
+                        cby = com.substring(0, 128);
+                    buf.append("<tr><td><img alt=\"\" border=\"0\" src=\"")
+                       .append(_imgPath).append("details.png\"> <b>")
+                       .append(_("Created By")).append(":</b> ")
+                       .append(DataHelper.stripHTML(cby))
+                       .append("</td></tr>\n");
+                }
+            }
+
             String hex = I2PSnarkUtil.toHex(snark.getInfoHash());
             if (meta == null || !meta.isPrivate()) {
                 buf.append("<tr><td><a href=\"")
@@ -2357,6 +2392,7 @@ public class I2PSnarkServlet extends BasicServlet {
                    .append(_("Private torrent"))
                    .append("</td></tr>\n");
             }
+
             // We don't have the hash of the torrent file
             //buf.append("<tr><td>").append(_("Maggot link")).append(": <a href=\"").append(MAGGOT).append(hex).append(':').append(hex).append("\">")
             //   .append(MAGGOT).append(hex).append(':').append(hex).append("</a></td></tr>");
@@ -2625,7 +2661,7 @@ public class I2PSnarkServlet extends BasicServlet {
             icon = "film";
         else if (mime.equals("application/zip") || mime.equals("application/x-gtar") ||
                  mime.equals("application/compress") || mime.equals("application/gzip") ||
-                 mime.equals("application/x-7z-compressed") || mime.equals("application/x-rar-compresed") ||
+                 mime.equals("application/x-7z-compressed") || mime.equals("application/x-rar-compressed") ||
                  mime.equals("application/x-tar") || mime.equals("application/x-bzip2"))
             icon = "compress";
         else if (plc.endsWith(".exe"))
diff --git a/installer/resources/themes/snark/light/snark.css b/installer/resources/themes/snark/light/snark.css
index 428ee1d5a4..cf61bf1029 100644
--- a/installer/resources/themes/snark/light/snark.css
+++ b/installer/resources/themes/snark/light/snark.css
@@ -246,7 +246,7 @@ tfoot tr:nth-child(n+1) {
 }
 
 td {
-     padding: 1px;
+     padding: 2px 4px;
      color: #001 !important;
       opacity: 1;
      font-size: 8pt;
diff --git a/installer/resources/themes/snark/ubergine/snark.css b/installer/resources/themes/snark/ubergine/snark.css
index f67257262d..2992488ad8 100644
--- a/installer/resources/themes/snark/ubergine/snark.css
+++ b/installer/resources/themes/snark/ubergine/snark.css
@@ -241,7 +241,7 @@ tfoot tr:nth-child(n+1) {
 }
 
 td {
-     padding: 1px;
+     padding: 2px 4px;
      color: #ddd !important;
      opacity: 1;
      font-size: 8pt;
diff --git a/installer/resources/themes/snark/vanilla/snark.css b/installer/resources/themes/snark/vanilla/snark.css
index 2ea324aa9b..6afd7c428b 100644
--- a/installer/resources/themes/snark/vanilla/snark.css
+++ b/installer/resources/themes/snark/vanilla/snark.css
@@ -254,7 +254,7 @@ tfoot tr:nth-child(n+1) {
 }
 
 td {
-     padding: 2px 1px;
+     padding: 2px 4px;
      color: #501 !important;
      opacity: 1;
      font-size: 8pt;
-- 
GitLab