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 9b4390d12..ee72fa144 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -217,7 +217,11 @@ public class I2PSnarkServlet extends BasicServlet {
//if (_log.shouldLog(Log.DEBUG))
// _manager.addMessage((_context.clock().now() / 1000) + " xhr1 p=" + req.getParameter("p"));
writeMessages(out, false, peerString);
- writeTorrents(out, req);
+ boolean canWrite;
+ synchronized(this) {
+ canWrite = _resourceBase.canWrite();
+ }
+ writeTorrents(out, req, canWrite);
return;
}
@@ -373,14 +377,14 @@ public class I2PSnarkServlet extends BasicServlet {
writeConfigForm(out, req);
writeTrackerForm(out, req);
} else {
- boolean pageOne = writeTorrents(out, req);
+ boolean canWrite;
+ synchronized(this) {
+ canWrite = _resourceBase.canWrite();
+ }
+ boolean pageOne = writeTorrents(out, req, canWrite);
// end of mainsection div
if (pageOne) {
out.write("
\n");
- boolean canWrite;
- synchronized(this) {
- canWrite = _resourceBase.canWrite();
- }
if (canWrite) {
writeAddForm(out, req);
writeSeedForm(out, req, sortedTrackers);
@@ -442,9 +446,10 @@ public class I2PSnarkServlet extends BasicServlet {
}
/**
+ * @param canWrite is the data directory writable?
* @return true if on first page
*/
- private boolean writeTorrents(PrintWriter out, HttpServletRequest req) throws IOException {
+ private boolean writeTorrents(PrintWriter out, HttpServletRequest req, boolean canWrite) throws IOException {
/** dl, ul, down rate, up rate, peers, size */
final long stats[] = {0,0,0,0,0,0};
String peerParam = req.getParameter("p");
@@ -693,7 +698,7 @@ public class I2PSnarkServlet extends BasicServlet {
Snark snark = snarks.get(i);
boolean showPeers = showDebug || "1".equals(peerParam) || Base64.encode(snark.getInfoHash()).equals(peerParam);
boolean hide = i < start || i >= start + pageSize;
- displaySnark(out, req, snark, uri, i, stats, showPeers, isDegraded, noThinsp, showDebug, hide, isRatSort);
+ displaySnark(out, req, snark, uri, i, stats, showPeers, isDegraded, noThinsp, showDebug, hide, isRatSort, canWrite);
}
if (total == 0) {
@@ -707,7 +712,7 @@ public class I2PSnarkServlet extends BasicServlet {
out.write(_t("Not a directory") + ": " + DataHelper.escapeHTML(dd.toString()));
} else if (!dd.canRead()) {
out.write(_t("Unreadable") + ": " + DataHelper.escapeHTML(dd.toString()));
- } else if (!dd.canWrite()) {
+ } else if (canWrite) {
out.write(_t("No write permissions for data directory") + ": " + DataHelper.escapeHTML(dd.toString()));
} else {
out.write(_t("No torrents loaded."));
@@ -1525,11 +1530,12 @@ public class I2PSnarkServlet extends BasicServlet {
*
* @param stats in/out param (totals)
* @param statsOnly if true, output nothing, update stats only
+ * @param canWrite is the i2psnark data directory writable?
*/
private void displaySnark(PrintWriter out, HttpServletRequest req,
Snark snark, String uri, int row, long stats[], boolean showPeers,
boolean isDegraded, boolean noThinsp, boolean showDebug, boolean statsOnly,
- boolean showRatios) throws IOException {
+ boolean showRatios, boolean canWrite) throws IOException {
// stats
long uploaded = snark.getUploaded();
stats[0] += snark.getDownloaded();
@@ -1843,7 +1849,7 @@ public class I2PSnarkServlet extends BasicServlet {
if (isDegraded)
out.write("");
}
- if (isValid) {
+ if (isValid && canWrite) {
// Remove Button
// Doesnt work with Opera so use noThinsp instead of isDegraded
if (noThinsp)
@@ -1866,26 +1872,29 @@ public class I2PSnarkServlet extends BasicServlet {
out.write("");
}
- // Delete Button
- // Doesnt work with Opera so use noThinsp instead of isDegraded
- if (noThinsp)
- out.write("
");
- if (isDegraded)
- out.write("");
+ // We can delete magnets without write privs
+ if (!isValid || canWrite) {
+ // Delete Button
+ // Doesnt work with Opera so use noThinsp instead of isDegraded
+ if (noThinsp)
+ out.write("
");
+ if (isDegraded)
+ out.write("");
+ }
}
out.write("\n\n");