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 1fb6d0064e93bec02ca84d1b1ef8f359ea213e9c..f538da98c0473dcd4658a26abac167cb2caabcf7 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -1245,10 +1245,10 @@ public class I2PSnarkServlet extends BasicServlet { String statusString; if (snark.isChecking()) { statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Checking") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Checking"); + "<td class=\"snarkTorrentStatus\">" + _("Checking"); } else if (snark.isAllocating()) { statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Allocating") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Allocating"); + "<td class=\"snarkTorrentStatus\">" + _("Allocating"); } else if (err != null && curPeers == 0) { // Also don't show if seeding... but then we won't see the not-registered error // && remaining != 0 && needed != 0) { @@ -1262,18 +1262,18 @@ public class I2PSnarkServlet extends BasicServlet { //else if (isRunning) if (isRunning) statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error") + + "<td class=\"snarkTorrentStatus\">" + _("Tracker Error") + ": " + curPeers + thinsp(noThinsp) + ngettext("1 peer", "{0} peers", knownPeers); else { if (err.length() > MAX_DISPLAYED_ERROR_LENGTH) err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "…"; statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error"); + "<td class=\"snarkTorrentStatus\">" + _("Tracker Error"); } } else if (snark.isStarting()) { statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Starting") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Starting"); + "<td class=\"snarkTorrentStatus\">" + _("Starting"); } else if (remaining == 0 || needed == 0) { // < 0 means no meta size yet // partial complete or seeding if (isRunning) { @@ -1289,60 +1289,60 @@ public class I2PSnarkServlet extends BasicServlet { } if (curPeers > 0 && !showPeers) statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + img + ".png\" title=\"" + txt + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + txt + + "<td class=\"snarkTorrentStatus\">" + txt + ": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + stParam + "\">" + curPeers + thinsp(noThinsp) + ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; else statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + img + ".png\" title=\"" + txt + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + txt + + "<td class=\"snarkTorrentStatus\">" + txt + ": " + curPeers + thinsp(noThinsp) + ngettext("1 peer", "{0} peers", knownPeers); } else { statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "complete.png\" title=\"" + _("Complete") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Complete"); + "<td class=\"snarkTorrentStatus\">" + _("Complete"); } } else { if (isRunning && curPeers > 0 && downBps > 0 && !showPeers) statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "downloading.png\" title=\"" + _("OK") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("OK") + + "<td class=\"snarkTorrentStatus\">" + _("OK") + ": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + stParam + "\">" + curPeers + thinsp(noThinsp) + ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; else if (isRunning && curPeers > 0 && downBps > 0) statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "downloading.png\" title=\"" + _("OK") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("OK") + + "<td class=\"snarkTorrentStatus\">" + _("OK") + ": " + curPeers + thinsp(noThinsp) + ngettext("1 peer", "{0} peers", knownPeers); else if (isRunning && curPeers > 0 && !showPeers) statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Stalled") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Stalled") + + "<td class=\"snarkTorrentStatus\">" + _("Stalled") + ": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + stParam + "\">" + curPeers + thinsp(noThinsp) + ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; else if (isRunning && curPeers > 0) statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Stalled") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Stalled") + + "<td class=\"snarkTorrentStatus\">" + _("Stalled") + ": " + curPeers + thinsp(noThinsp) + ngettext("1 peer", "{0} peers", knownPeers); else if (isRunning && knownPeers > 0) statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "nopeers.png\" title=\"" + _("No Peers") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("No Peers") + + "<td class=\"snarkTorrentStatus\">" + _("No Peers") + ": 0" + thinsp(noThinsp) + knownPeers ; else if (isRunning) statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "nopeers.png\" title=\"" + _("No Peers") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("No Peers"); + "<td class=\"snarkTorrentStatus\">" + _("No Peers"); else statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stopped.png\" title=\"" + _("Stopped") + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Stopped"); + "<td class=\"snarkTorrentStatus\">" + _("Stopped"); } out.write("<tr class=\"" + rowClass + "\">"); - out.write("<td class=\"center " + rowClass + "\">"); + out.write("<td class=\"center\">"); out.write(statusString + "</td>\n\t"); // (i) icon column - out.write("<td class=\"" + rowClass + "\">"); + out.write("<td>"); if (isValid && meta.getAnnounce() != null) { // Link to local details page - note that trailing slash on a single-file torrent // gets us to the details page instead of the file. @@ -1361,7 +1361,7 @@ public class I2PSnarkServlet extends BasicServlet { String encodedBaseName = urlEncode(snark.getBaseName()); // File type icon column - out.write("</td>\n<td class=\"" + rowClass + "\">"); + out.write("</td>\n<td>"); if (isValid) { // Link to local details page - note that trailing slash on a single-file torrent // gets us to the details page instead of the file. @@ -1388,7 +1388,7 @@ public class I2PSnarkServlet extends BasicServlet { } // Torrent name column - out.write("</td><td class=\"snarkTorrentName " + rowClass + "\">"); + out.write("</td><td class=\"snarkTorrentName\">"); if (remaining == 0 || isMultiFile) { StringBuilder buf = new StringBuilder(128); buf.append("<a href=\"").append(encodedBaseName); @@ -1406,11 +1406,11 @@ public class I2PSnarkServlet extends BasicServlet { if (remaining == 0 || isMultiFile) out.write("</a>"); - out.write("<td align=\"right\" class=\"snarkTorrentETA " + rowClass + "\">"); + out.write("<td align=\"right\" class=\"snarkTorrentETA\">"); if(isRunning && remainingSeconds > 0 && !snark.isChecking()) out.write(DataHelper.formatDuration2(Math.max(remainingSeconds, 10) * 1000)); // (eta 6h) out.write("</td>\n\t"); - out.write("<td align=\"right\" class=\"snarkTorrentDownloaded " + rowClass + "\">"); + out.write("<td align=\"right\" class=\"snarkTorrentDownloaded\">"); if (remaining > 0) out.write(formatSize(total-remaining) + thinsp(noThinsp) + formatSize(total)); else if (remaining == 0) @@ -1418,7 +1418,7 @@ public class I2PSnarkServlet extends BasicServlet { //else // out.write("??"); // no meta size yet out.write("</td>\n\t"); - out.write("<td align=\"right\" class=\"snarkTorrentUploaded " + rowClass + "\">"); + out.write("<td align=\"right\" class=\"snarkTorrentUploaded\">"); if(isRunning && isValid) out.write(formatSize(uploaded)); out.write("</td>\n\t"); @@ -1430,7 +1430,7 @@ public class I2PSnarkServlet extends BasicServlet { if(isRunning && isValid) out.write(formatSize(upBps) + "ps"); out.write("</td>\n\t"); - out.write("<td align=\"center\" class=\"snarkTorrentAction " + rowClass + "\">"); + out.write("<td align=\"center\" class=\"snarkTorrentAction\">"); String b64 = Base64.encode(snark.getInfoHash()); if (snark.isChecking()) { // show no buttons @@ -1511,7 +1511,7 @@ public class I2PSnarkServlet extends BasicServlet { if (!peer.isConnected()) continue; out.write("<tr class=\"" + rowClass + "\"><td></td>"); - out.write("<td colspan=\"4\" align=\"right\" class=\"" + rowClass + "\">"); + out.write("<td colspan=\"4\" align=\"right\">"); String ch = peer.toString().substring(0, 4); String client; if ("AwMD".equals(ch)) @@ -1536,9 +1536,9 @@ public class I2PSnarkServlet extends BasicServlet { if (showDebug) out.write(" inactive " + (peer.getInactiveTime() / 1000) + "s"); out.write("</td>\n\t"); - out.write("<td class=\"snarkTorrentStatus " + rowClass + "\">"); + out.write("<td class=\"snarkTorrentStatus\">"); out.write("</td>\n\t"); - out.write("<td align=\"right\" class=\"snarkTorrentStatus " + rowClass + "\">"); + out.write("<td align=\"right\" class=\"snarkTorrentStatus\">"); float pct; if (isValid) { pct = (float) (100.0 * peer.completed() / meta.getPieces()); @@ -1556,9 +1556,9 @@ public class I2PSnarkServlet extends BasicServlet { //out.write("??"); } out.write("</td>\n\t"); - out.write("<td class=\"snarkTorrentStatus " + rowClass + "\">"); + out.write("<td class=\"snarkTorrentStatus\">"); out.write("</td>\n\t"); - out.write("<td align=\"right\" class=\"snarkTorrentStatus " + rowClass + "\">"); + out.write("<td align=\"right\" class=\"snarkTorrentStatus\">"); if (needed > 0) { if (peer.isInteresting() && !peer.isChoked()) { out.write("<span class=\"unchoked\">"); @@ -1580,7 +1580,7 @@ public class I2PSnarkServlet extends BasicServlet { //} } out.write("</td>\n\t"); - out.write("<td align=\"right\" class=\"snarkTorrentStatus " + rowClass + "\">"); + out.write("<td align=\"right\" class=\"snarkTorrentStatus\">"); if (isValid && pct < 100.0) { if (peer.isInterested() && !peer.isChoking()) { out.write("<span class=\"unchoked\">"); @@ -1596,10 +1596,10 @@ public class I2PSnarkServlet extends BasicServlet { } } out.write("</td>\n\t"); - out.write("<td class=\"snarkTorrentStatus " + rowClass + "\">"); + out.write("<td class=\"snarkTorrentStatus\">"); out.write("</td></tr>\n\t"); if (showDebug) - out.write("<tr class=\"" + rowClass + "\"><td></td><td colspan=\"10\" align=\"right\" class=\"" + rowClass + "\">" + peer.getSocket() + "</td></tr>"); + out.write("<tr class=\"" + rowClass + "\"><td></td><td colspan=\"10\" align=\"right\">" + peer.getSocket() + "</td></tr>"); } } } @@ -2553,8 +2553,7 @@ public class I2PSnarkServlet extends BasicServlet { path=addPaths(path,"/"); String icon = toIcon(item); - buf.append("<TD class=\"snarkFileIcon ") - .append(rowClass).append("\">"); + buf.append("<TD class=\"snarkFileIcon\">"); if (complete) { buf.append("<a href=\"").append(path).append("\">"); // thumbnail ? @@ -2569,17 +2568,16 @@ public class I2PSnarkServlet extends BasicServlet { } else { buf.append(toImg(icon)); } - buf.append("</TD><TD class=\"snarkFileName ") - .append(rowClass).append("\">"); + buf.append("</TD><TD class=\"snarkFileName\">"); if (complete) buf.append("<a href=\"").append(path).append("\">"); buf.append(item.getName()); if (complete) buf.append("</a>"); - buf.append("</TD><TD ALIGN=right class=\"").append(rowClass).append(" snarkFileSize\">"); + buf.append("</TD><TD ALIGN=right class=\"snarkFileSize\">"); if (!item.isDirectory()) buf.append(DataHelper.formatSize2(length)).append('B'); - buf.append("</TD><TD class=\"").append(rowClass).append(" snarkFileStatus\">"); + buf.append("</TD><TD class=\"snarkFileStatus\">"); //buf.append(dfmt.format(new Date(item.lastModified()))); buf.append(status); buf.append("</TD>"); diff --git a/installer/resources/themes/snark/ubergine/snark.css b/installer/resources/themes/snark/ubergine/snark.css index 2992488ad8f5ff282a639d77bbf8ffb48d679be7..4a57291f5e781807e0d28d3ef48b77ea5bac4fdf 100644 --- a/installer/resources/themes/snark/ubergine/snark.css +++ b/installer/resources/themes/snark/ubergine/snark.css @@ -353,10 +353,15 @@ td:first-child { border-left: 0 !important; border-right: 0 !important; } + .snarkTorrentOdd td, .snarkTorrentEven td { border-top: 1px dotted #313 !important; } +table.snarkTorrents tbody tr:hover, table.snarkDirInfo tbody tr:hover { + background: #382010 !important; +} + .snarkFileIcon { width: 16px; }