forked from I2P_Developers/i2p.i2p
i2psnark: Add theme change and theme selection storage abilities.
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
package org.klomp.snark;
|
package org.klomp.snark;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileFilter;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FilenameFilter;
|
import java.io.FilenameFilter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -14,6 +15,7 @@ import java.util.Properties;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
import net.i2p.data.Base64;
|
import net.i2p.data.Base64;
|
||||||
@ -62,6 +64,8 @@ public class SnarkManager implements Snark.CompleteListener {
|
|||||||
public static final String PROP_LINK_PREFIX = "i2psnark.linkPrefix";
|
public static final String PROP_LINK_PREFIX = "i2psnark.linkPrefix";
|
||||||
public static final String DEFAULT_LINK_PREFIX = "file:///";
|
public static final String DEFAULT_LINK_PREFIX = "file:///";
|
||||||
public static final String PROP_STARTUP_DELAY = "i2psnark.startupDelay";
|
public static final String PROP_STARTUP_DELAY = "i2psnark.startupDelay";
|
||||||
|
public static final String PROP_THEME = "i2psnark.theme";
|
||||||
|
public static final String DEFAULT_THEME = "ubergine";
|
||||||
|
|
||||||
public static final int MIN_UP_BW = 2;
|
public static final int MIN_UP_BW = 2;
|
||||||
public static final int DEFAULT_MAX_UP_BW = 10;
|
public static final int DEFAULT_MAX_UP_BW = 10;
|
||||||
@ -174,9 +178,42 @@ public class SnarkManager implements Snark.CompleteListener {
|
|||||||
_config.setProperty(PROP_AUTO_START, DEFAULT_AUTO_START);
|
_config.setProperty(PROP_AUTO_START, DEFAULT_AUTO_START);
|
||||||
if (!_config.containsKey(PROP_STARTUP_DELAY))
|
if (!_config.containsKey(PROP_STARTUP_DELAY))
|
||||||
_config.setProperty(PROP_STARTUP_DELAY, "" + DEFAULT_STARTUP_DELAY);
|
_config.setProperty(PROP_STARTUP_DELAY, "" + DEFAULT_STARTUP_DELAY);
|
||||||
|
if (!_config.containsKey(PROP_THEME))
|
||||||
|
_config.setProperty(PROP_THEME, "" + DEFAULT_THEME);
|
||||||
updateConfig();
|
updateConfig();
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Get current theme.
|
||||||
|
* @return String -- the current theme
|
||||||
|
*/
|
||||||
|
public String getTheme() {
|
||||||
|
String theme = _config.getProperty(PROP_THEME);
|
||||||
|
return theme;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all themes
|
||||||
|
* @return String[] -- Array of all the themes found.
|
||||||
|
*/
|
||||||
|
public String[] getThemes() {
|
||||||
|
String[] themes = null;
|
||||||
|
// "docs/themes/snark/"
|
||||||
|
String fsc = new String(""+File.separatorChar);
|
||||||
|
String look = _context.getConfigDir() + fsc + "docs" + fsc +"themes" + fsc + "snark" + fsc;
|
||||||
|
FileFilter fileFilter = new FileFilter() { public boolean accept(File file) { return file.isDirectory(); } };
|
||||||
|
// Walk the themes dir, collecting the theme names, and append them to the map
|
||||||
|
File dir = new File(look);
|
||||||
|
File[] dirnames = dir.listFiles(fileFilter);
|
||||||
|
if (dirnames != null) {
|
||||||
|
themes = new String[dirnames.length];
|
||||||
|
for(int i = 0; i < dirnames.length; i++) {
|
||||||
|
themes[i] = dirnames[i].getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// return the map.
|
||||||
|
return themes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** call from DirMonitor since loadConfig() is called before router I2CP is up */
|
/** call from DirMonitor since loadConfig() is called before router I2CP is up */
|
||||||
private void getBWLimit() {
|
private void getBWLimit() {
|
||||||
@ -234,7 +271,7 @@ public class SnarkManager implements Snark.CompleteListener {
|
|||||||
|
|
||||||
public void updateConfig(String dataDir, boolean autoStart, String startDelay, String seedPct, String eepHost,
|
public void updateConfig(String dataDir, boolean autoStart, String startDelay, String seedPct, String eepHost,
|
||||||
String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts,
|
String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts,
|
||||||
String upLimit, String upBW, boolean useOpenTrackers, String openTrackers) {
|
String upLimit, String upBW, boolean useOpenTrackers, String openTrackers, String Theme) {
|
||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
//if (eepHost != null) {
|
//if (eepHost != null) {
|
||||||
// // unused, we use socket eepget
|
// // unused, we use socket eepget
|
||||||
@ -397,6 +434,11 @@ public class SnarkManager implements Snark.CompleteListener {
|
|||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Theme != null) {
|
||||||
|
_config.setProperty(PROP_THEME, Theme +"");
|
||||||
|
addMessage(_("Theme changed."));
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
if (changed) {
|
if (changed) {
|
||||||
saveConfig();
|
saveConfig();
|
||||||
} else {
|
} else {
|
||||||
|
@ -171,7 +171,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
|
|
||||||
PrintWriter out = resp.getWriter();
|
PrintWriter out = resp.getWriter();
|
||||||
out.write("<html>\n" +
|
out.write("<html>\n" +
|
||||||
"<head><link rel=\"shortcut icon\" href=\"/themes/snark/ubergine/favicon.ico\">\n" +
|
"<head><link rel=\"shortcut icon\" href=\"/themes/snark/" + _manager.getTheme() + "/favicon.ico\">\n" +
|
||||||
"<title>");
|
"<title>");
|
||||||
out.write(_("I2PSnark - Anonymous BitTorrent Client"));
|
out.write(_("I2PSnark - Anonymous BitTorrent Client"));
|
||||||
if ("2".equals(peerParam))
|
if ("2".equals(peerParam))
|
||||||
@ -181,21 +181,21 @@ public class I2PSnarkServlet extends Default {
|
|||||||
// we want it to go to the base URI so we don't refresh with some funky action= value
|
// we want it to go to the base URI so we don't refresh with some funky action= value
|
||||||
if (!isConfigure)
|
if (!isConfigure)
|
||||||
out.write("<meta http-equiv=\"refresh\" content=\"60;" + req.getRequestURI() + peerString + "\">\n");
|
out.write("<meta http-equiv=\"refresh\" content=\"60;" + req.getRequestURI() + peerString + "\">\n");
|
||||||
out.write(HEADER);
|
out.write(HEADER_A + _manager.getTheme() + HEADER_B);
|
||||||
out.write("</head><body>");
|
out.write("</head><body>");
|
||||||
out.write("<center>");
|
out.write("<center>");
|
||||||
if (isConfigure) {
|
if (isConfigure) {
|
||||||
out.write("<div class=\"snarknavbar\"><a href=\"/i2psnark/\" title=\"");
|
out.write("<div class=\"snarknavbar\"><a href=\"/i2psnark/\" title=\"");
|
||||||
out.write(_("Torrents"));
|
out.write(_("Torrents"));
|
||||||
out.write("\" class=\"snarkRefresh\">");
|
out.write("\" class=\"snarkRefresh\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/arrow_refresh.png\"> ");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/arrow_refresh.png\"> ");
|
||||||
out.write(_("I2PSnark"));
|
out.write(_("I2PSnark"));
|
||||||
out.write("</a>");
|
out.write("</a>");
|
||||||
} else {
|
} else {
|
||||||
out.write("<div class=\"snarknavbar\"><a href=\"" + req.getRequestURI() + peerString + "\" title=\"");
|
out.write("<div class=\"snarknavbar\"><a href=\"" + req.getRequestURI() + peerString + "\" title=\"");
|
||||||
out.write(_("Refresh page"));
|
out.write(_("Refresh page"));
|
||||||
out.write("\" class=\"snarkRefresh\">");
|
out.write("\" class=\"snarkRefresh\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/arrow_refresh.png\"> ");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/arrow_refresh.png\"> ");
|
||||||
out.write(_("I2PSnark"));
|
out.write(_("I2PSnark"));
|
||||||
out.write("</a> <a href=\"http://forum.i2p/viewforum.php?f=21\" class=\"snarkRefresh\" target=\"_blank\">");
|
out.write("</a> <a href=\"http://forum.i2p/viewforum.php?f=21\" class=\"snarkRefresh\" target=\"_blank\">");
|
||||||
out.write(_("Forum"));
|
out.write(_("Forum"));
|
||||||
@ -253,7 +253,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
out.write("<input type=\"hidden\" name=\"p\" value=\"" + peerParam + "\" >\n");
|
out.write("<input type=\"hidden\" name=\"p\" value=\"" + peerParam + "\" >\n");
|
||||||
}
|
}
|
||||||
out.write(TABLE_HEADER);
|
out.write(TABLE_HEADER);
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/status.png\"");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/status.png\"");
|
||||||
out.write(" title=\"");
|
out.write(" title=\"");
|
||||||
out.write(_("Status"));
|
out.write(_("Status"));
|
||||||
out.write("\"> ");
|
out.write("\"> ");
|
||||||
@ -263,14 +263,14 @@ public class I2PSnarkServlet extends Default {
|
|||||||
out.write(req.getRequestURI());
|
out.write(req.getRequestURI());
|
||||||
if (peerParam != null) {
|
if (peerParam != null) {
|
||||||
out.write("\">");
|
out.write("\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/showpeers.png\" title=\"");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/showpeers.png\" title=\"");
|
||||||
out.write(_("Hide Peers"));
|
out.write(_("Hide Peers"));
|
||||||
out.write("\" alt=\"");
|
out.write("\" alt=\"");
|
||||||
out.write(_("Hide Peers"));
|
out.write(_("Hide Peers"));
|
||||||
out.write("\">");
|
out.write("\">");
|
||||||
} else {
|
} else {
|
||||||
out.write("?p=1\">");
|
out.write("?p=1\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/hidepeers.png\" title=\"");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/hidepeers.png\" title=\"");
|
||||||
out.write(_("Show Peers"));
|
out.write(_("Show Peers"));
|
||||||
out.write("\" alt=\"");
|
out.write("\" alt=\"");
|
||||||
out.write(_("Show Peers"));
|
out.write(_("Show Peers"));
|
||||||
@ -279,12 +279,12 @@ public class I2PSnarkServlet extends Default {
|
|||||||
out.write("</a><br>\n");
|
out.write("</a><br>\n");
|
||||||
}
|
}
|
||||||
out.write("</th>\n<th align=\"left\">");
|
out.write("</th>\n<th align=\"left\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/torrent.png\" title=\"");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/torrent.png\" title=\"");
|
||||||
out.write(_("Torrent"));
|
out.write(_("Torrent"));
|
||||||
out.write("\">");
|
out.write("\">");
|
||||||
out.write(_("Torrent"));
|
out.write(_("Torrent"));
|
||||||
out.write("</th>\n<th align=\"center\">");
|
out.write("</th>\n<th align=\"center\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/eta.png\" title=\"");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/eta.png\" title=\"");
|
||||||
out.write(_("Estimated Download Time"));
|
out.write(_("Estimated Download Time"));
|
||||||
out.write("\">"); // space here would look better but nbsp is too big and thinsp breaks
|
out.write("\">"); // space here would look better but nbsp is too big and thinsp breaks
|
||||||
out.write(_("ETA"));
|
out.write(_("ETA"));
|
||||||
@ -313,13 +313,13 @@ public class I2PSnarkServlet extends Default {
|
|||||||
if (_manager.util().connected()) {
|
if (_manager.util().connected()) {
|
||||||
out.write("<input type=\"image\" name=\"action\" value=\"StopAll\" title=\"");
|
out.write("<input type=\"image\" name=\"action\" value=\"StopAll\" title=\"");
|
||||||
out.write(_("Stop all torrents and the I2P tunnel"));
|
out.write(_("Stop all torrents and the I2P tunnel"));
|
||||||
out.write("\" src=\"/themes/snark/ubergine/images/stop_all.png\" alt=\"");
|
out.write("\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stop_all.png\" alt=\"");
|
||||||
out.write(_("Stop All"));
|
out.write(_("Stop All"));
|
||||||
out.write("\">");
|
out.write("\">");
|
||||||
} else if (!snarks.isEmpty()) {
|
} else if (!snarks.isEmpty()) {
|
||||||
out.write("<input type=\"image\" name=\"action\" value=\"StartAll\" title=\"");
|
out.write("<input type=\"image\" name=\"action\" value=\"StartAll\" title=\"");
|
||||||
out.write(_("Start all torrents and the I2P tunnel"));
|
out.write(_("Start all torrents and the I2P tunnel"));
|
||||||
out.write("\" src=\"/themes/snark/ubergine/images/start_all.png\" alt=\"");
|
out.write("\" src=\"/themes/snark/" + _manager.getTheme() + "/images/start_all.png\" alt=\"");
|
||||||
out.write(_("Start All"));
|
out.write(_("Start All"));
|
||||||
out.write("\">");
|
out.write("\">");
|
||||||
} else {
|
} else {
|
||||||
@ -530,7 +530,8 @@ public class I2PSnarkServlet extends Default {
|
|||||||
String startupDel = req.getParameter("startupDelay");
|
String startupDel = req.getParameter("startupDelay");
|
||||||
boolean useOpenTrackers = req.getParameter("useOpenTrackers") != null;
|
boolean useOpenTrackers = req.getParameter("useOpenTrackers") != null;
|
||||||
String openTrackers = req.getParameter("openTrackers");
|
String openTrackers = req.getParameter("openTrackers");
|
||||||
_manager.updateConfig(dataDir, autoStart, startupDel, seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts, upLimit, upBW, useOpenTrackers, openTrackers);
|
String theme = req.getParameter("theme");
|
||||||
|
_manager.updateConfig(dataDir, autoStart, startupDel, seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts, upLimit, upBW, useOpenTrackers, openTrackers, theme);
|
||||||
} else if ("Create".equals(action)) {
|
} else if ("Create".equals(action)) {
|
||||||
String baseData = req.getParameter("baseFile");
|
String baseData = req.getParameter("baseFile");
|
||||||
if (baseData != null && baseData.trim().length() > 0) {
|
if (baseData != null && baseData.trim().length() > 0) {
|
||||||
@ -709,57 +710,57 @@ public class I2PSnarkServlet extends Default {
|
|||||||
String statusString = _("Unknown");
|
String statusString = _("Unknown");
|
||||||
if (err != null) {
|
if (err != null) {
|
||||||
if (isRunning && curPeers > 0 && !showPeers)
|
if (isRunning && curPeers > 0 && !showPeers)
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/trackererror.png\" title=\"" + _("Tracker Error") +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/trackererror.png\" title=\"" + _("Tracker Error") +
|
||||||
"\"><a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
|
"\"><a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
|
||||||
' ' + curPeers + " / " +
|
' ' + curPeers + " / " +
|
||||||
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
||||||
else if (isRunning)
|
else if (isRunning)
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/trackererror.png\" title=\"" + _("Tracker Error") +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/trackererror.png\" title=\"" + _("Tracker Error") +
|
||||||
"\">" + ' ' + curPeers + " / " +
|
"\">" + ' ' + curPeers + " / " +
|
||||||
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
||||||
else {
|
else {
|
||||||
if (err.length() > MAX_DISPLAYED_ERROR_LENGTH)
|
if (err.length() > MAX_DISPLAYED_ERROR_LENGTH)
|
||||||
err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "…";
|
err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "…";
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/trackererror.png\" title=\"" + _("Tracker Error") +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/trackererror.png\" title=\"" + _("Tracker Error") +
|
||||||
"\"> " + err + "</a>";
|
"\"> " + err + "</a>";
|
||||||
}
|
}
|
||||||
} else if (remaining <= 0) {
|
} else if (remaining <= 0) {
|
||||||
if (isRunning && curPeers > 0 && !showPeers)
|
if (isRunning && curPeers > 0 && !showPeers)
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/seeding.png\" title=\"" + _("Seeding") + "\">" +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/seeding.png\" title=\"" + _("Seeding") + "\">" +
|
||||||
"<a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
|
"<a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
|
||||||
' ' + curPeers + " / " +
|
' ' + curPeers + " / " +
|
||||||
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
||||||
else if (isRunning)
|
else if (isRunning)
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/seeding.png\" title=\"" + _("Seeding") + "\">" +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/seeding.png\" title=\"" + _("Seeding") + "\">" +
|
||||||
' ' + curPeers + " / " +
|
' ' + curPeers + " / " +
|
||||||
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
||||||
else
|
else
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/complete.png\" title=\"" + _("Complete") + "\"> " + _("Complete");
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/complete.png\" title=\"" + _("Complete") + "\"> " + _("Complete");
|
||||||
} else {
|
} else {
|
||||||
if (isRunning && curPeers > 0 && downBps > 0 && !showPeers)
|
if (isRunning && curPeers > 0 && downBps > 0 && !showPeers)
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/downloading.png\" title=\"" + _("Downloading") + "\">" +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/downloading.png\" title=\"" + _("Downloading") + "\">" +
|
||||||
"<a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
|
"<a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
|
||||||
' ' + curPeers + " / " +
|
' ' + curPeers + " / " +
|
||||||
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
||||||
else if (isRunning && curPeers > 0 && downBps > 0)
|
else if (isRunning && curPeers > 0 && downBps > 0)
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/downloading.png\" title=\"" + _("Downloading") + "\">" +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/downloading.png\" title=\"" + _("Downloading") + "\">" +
|
||||||
' ' + curPeers + " / " +
|
' ' + curPeers + " / " +
|
||||||
ngettext("1 peer", "{0} peers", knownPeers);
|
ngettext("1 peer", "{0} peers", knownPeers);
|
||||||
else if (isRunning && curPeers > 0 && !showPeers)
|
else if (isRunning && curPeers > 0 && !showPeers)
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/stalled.png\" title=\"" + _("Stalled") + "\">" +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stalled.png\" title=\"" + _("Stalled") + "\">" +
|
||||||
"<a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
|
"<a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
|
||||||
' ' + curPeers + " / " +
|
' ' + curPeers + " / " +
|
||||||
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
|
||||||
else if (isRunning && curPeers > 0)
|
else if (isRunning && curPeers > 0)
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/stalled.png\" title=\"" + _("Stalled") + "\">" +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stalled.png\" title=\"" + _("Stalled") + "\">" +
|
||||||
' ' + curPeers + " / " +
|
' ' + curPeers + " / " +
|
||||||
ngettext("1 peer", "{0} peers", knownPeers);
|
ngettext("1 peer", "{0} peers", knownPeers);
|
||||||
else if (isRunning)
|
else if (isRunning)
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/nopeers.png\" title=\"" + _("No Peers") + "\">" +
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/nopeers.png\" title=\"" + _("No Peers") + "\">" +
|
||||||
' ' + curPeers + " / " +
|
' ' + curPeers + " / " +
|
||||||
ngettext("1 peer", "{0} peers", knownPeers);
|
ngettext("1 peer", "{0} peers", knownPeers);
|
||||||
else
|
else
|
||||||
statusString = "<img border=\"0\" src=\"/themes/snark/ubergine/images/stopped.png\" title=\"" + _("Stopped") + "\"> " + _("Stopped");
|
statusString = "<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stopped.png\" title=\"" + _("Stopped") + "\"> " + _("Stopped");
|
||||||
}
|
}
|
||||||
|
|
||||||
String rowClass = (row % 2 == 0 ? "snarkTorrentEven" : "snarkTorrentOdd");
|
String rowClass = (row % 2 == 0 ? "snarkTorrentEven" : "snarkTorrentOdd");
|
||||||
@ -808,7 +809,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
out.write(" <a href=\"" + baseURL + "details.php?dllist=1&filelist=1&info_hash=");
|
out.write(" <a href=\"" + baseURL + "details.php?dllist=1&filelist=1&info_hash=");
|
||||||
out.write(TrackerClient.urlencode(snark.meta.getInfoHash()));
|
out.write(TrackerClient.urlencode(snark.meta.getInfoHash()));
|
||||||
out.write("\" title=\"" + name + ' ' + _("Tracker") + "\" target=\"_blank\">");
|
out.write("\" title=\"" + name + ' ' + _("Tracker") + "\" target=\"_blank\">");
|
||||||
out.write("<div class=\"infoz\"><img border=\"0\" src=\"/themes/snark/ubergine/images/details.png\"></div>");
|
out.write("<div class=\"infoz\"><img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/details.png\"></div>");
|
||||||
out.write("</a>");
|
out.write("</a>");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -845,7 +846,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
out.write(b64);
|
out.write(b64);
|
||||||
out.write("\" title=\"");
|
out.write("\" title=\"");
|
||||||
out.write(_("Stop the torrent"));
|
out.write(_("Stop the torrent"));
|
||||||
out.write("\" src=\"/themes/snark/ubergine/images/stop.png\" alt=\"");
|
out.write("\" src=\"/themes/snark/" + _manager.getTheme() + "/images/stop.png\" alt=\"");
|
||||||
out.write(_("Stop"));
|
out.write(_("Stop"));
|
||||||
out.write("\">");
|
out.write("\">");
|
||||||
} else {
|
} else {
|
||||||
@ -854,7 +855,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
out.write(b64);
|
out.write(b64);
|
||||||
out.write("\" title=\"");
|
out.write("\" title=\"");
|
||||||
out.write(_("Start the torrent"));
|
out.write(_("Start the torrent"));
|
||||||
out.write("\" src=\"/themes/snark/ubergine/images/start.png\" alt=\"");
|
out.write("\" src=\"/themes/snark/" + _manager.getTheme() + "/images/start.png\" alt=\"");
|
||||||
out.write(_("Start"));
|
out.write(_("Start"));
|
||||||
out.write("\">");
|
out.write("\">");
|
||||||
}
|
}
|
||||||
@ -869,7 +870,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
// Then the remaining single quite must be escaped
|
// Then the remaining single quite must be escaped
|
||||||
out.write(_("Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?", fullFilename));
|
out.write(_("Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?", fullFilename));
|
||||||
out.write("')) { return false; }\"");
|
out.write("')) { return false; }\"");
|
||||||
out.write(" src=\"/themes/snark/ubergine/images/remove.png\" alt=\"");
|
out.write(" src=\"/themes/snark/" + _manager.getTheme() + "/images/remove.png\" alt=\"");
|
||||||
out.write(_("Remove"));
|
out.write(_("Remove"));
|
||||||
out.write("\">");
|
out.write("\">");
|
||||||
|
|
||||||
@ -883,7 +884,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
// Then the remaining single quite must be escaped
|
// Then the remaining single quite must be escaped
|
||||||
out.write(_("Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?", fullFilename));
|
out.write(_("Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?", fullFilename));
|
||||||
out.write("')) { return false; }\"");
|
out.write("')) { return false; }\"");
|
||||||
out.write(" src=\"/themes/snark/ubergine/images/delete.png\" alt=\"");
|
out.write(" src=\"/themes/snark/" + _manager.getTheme() + "/images/delete.png\" alt=\"");
|
||||||
out.write(_("Delete"));
|
out.write(_("Delete"));
|
||||||
out.write("\">");
|
out.write("\">");
|
||||||
}
|
}
|
||||||
@ -1010,7 +1011,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
if (peerParam != null)
|
if (peerParam != null)
|
||||||
out.write("<input type=\"hidden\" name=\"p\" value=\"" + peerParam + "\" >\n");
|
out.write("<input type=\"hidden\" name=\"p\" value=\"" + peerParam + "\" >\n");
|
||||||
out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">");
|
out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/add.png\">");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/add.png\">");
|
||||||
out.write(_("Add Torrent"));
|
out.write(_("Add Torrent"));
|
||||||
out.write("</span><hr>\n<table border=\"0\"><tr><td>");
|
out.write("</span><hr>\n<table border=\"0\"><tr><td>");
|
||||||
out.write(_("From URL"));
|
out.write(_("From URL"));
|
||||||
@ -1049,7 +1050,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
if (peerParam != null)
|
if (peerParam != null)
|
||||||
out.write("<input type=\"hidden\" name=\"p\" value=\"" + peerParam + "\" >\n");
|
out.write("<input type=\"hidden\" name=\"p\" value=\"" + peerParam + "\" >\n");
|
||||||
out.write("<span class=\"snarkConfigTitle\">");
|
out.write("<span class=\"snarkConfigTitle\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/create.png\">");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/create.png\">");
|
||||||
out.write(_("Create Torrent"));
|
out.write(_("Create Torrent"));
|
||||||
out.write("</span><hr>\n<table border=\"0\"><tr><td>");
|
out.write("</span><hr>\n<table border=\"0\"><tr><td>");
|
||||||
//out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
//out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
||||||
@ -1098,10 +1099,24 @@ public class I2PSnarkServlet extends Default {
|
|||||||
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\n");
|
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\n");
|
||||||
out.write("<input type=\"hidden\" name=\"action\" value=\"Save\" >\n");
|
out.write("<input type=\"hidden\" name=\"action\" value=\"Save\" >\n");
|
||||||
out.write("<span class=\"snarkConfigTitle\">");
|
out.write("<span class=\"snarkConfigTitle\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/config.png\">");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/config.png\">");
|
||||||
out.write(_("Configuration"));
|
out.write(_("Configuration"));
|
||||||
out.write("</span><hr>\n");
|
out.write("</span><hr>\n");
|
||||||
out.write("<table border=\"0\"><tr><td>");
|
out.write("<table border=\"0\"><tr><td>");
|
||||||
|
|
||||||
|
out.write(_("Theme"));
|
||||||
|
out.write(": <td><select name='theme'>");
|
||||||
|
String theme = _manager.getTheme();
|
||||||
|
String[] themes = _manager.getThemes();
|
||||||
|
for(int i = 0; i < themes.length; i++) {
|
||||||
|
if(themes[i].equals(theme))
|
||||||
|
out.write("\n<OPTION value='" + themes[i] + "' SELECTED>" + themes[i]);
|
||||||
|
else
|
||||||
|
out.write("\n<OPTION value='" + themes[i] + "'>" + themes[i]);
|
||||||
|
}
|
||||||
|
out.write("\n</select>\n<tr><td>");
|
||||||
|
|
||||||
|
|
||||||
out.write(_("Data directory"));
|
out.write(_("Data directory"));
|
||||||
out.write(": <td><code>" + dataDir + "</code> (");
|
out.write(": <td><code>" + dataDir + "</code> (");
|
||||||
out.write(_("Edit i2psnark.config and restart to change"));
|
out.write(_("Edit i2psnark.config and restart to change"));
|
||||||
@ -1222,7 +1237,7 @@ public class I2PSnarkServlet extends Default {
|
|||||||
private void writeConfigLink(PrintWriter out) throws IOException {
|
private void writeConfigLink(PrintWriter out) throws IOException {
|
||||||
out.write("<div class=\"configsection\"><span class=\"snarkConfig\">\n");
|
out.write("<div class=\"configsection\"><span class=\"snarkConfig\">\n");
|
||||||
out.write("<span class=\"snarkConfigTitle\"><a href=\"configure\">");
|
out.write("<span class=\"snarkConfigTitle\"><a href=\"configure\">");
|
||||||
out.write("<img border=\"0\" src=\"/themes/snark/ubergine/images/config.png\">");
|
out.write("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/config.png\">");
|
||||||
out.write(_("Configuration"));
|
out.write(_("Configuration"));
|
||||||
out.write("</a></span></span></div>\n");
|
out.write("</a></span></span></div>\n");
|
||||||
}
|
}
|
||||||
@ -1298,7 +1313,8 @@ public class I2PSnarkServlet extends Default {
|
|||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String HEADER = "<link href=\"/themes/snark/ubergine/snark.css\" rel=\"stylesheet\" type=\"text/css\" >";
|
private static final String HEADER_A = "<link href=\"/themes/snark/";
|
||||||
|
private static final String HEADER_B = "/snark.css\" rel=\"stylesheet\" type=\"text/css\" >";
|
||||||
|
|
||||||
|
|
||||||
private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" cellpadding=\"0 10px\">\n" +
|
private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" cellpadding=\"0 10px\">\n" +
|
||||||
@ -1370,8 +1386,8 @@ public class I2PSnarkServlet extends Default {
|
|||||||
title = title.substring(0, title.length() - 1);
|
title = title.substring(0, title.length() - 1);
|
||||||
title = _("Torrent") + ": " + title;
|
title = _("Torrent") + ": " + title;
|
||||||
buf.append(title);
|
buf.append(title);
|
||||||
buf.append("</TITLE>").append(HEADER).append("<link rel=\"shortcut icon\" href=\"/themes/snark/ubergine/favicon.ico\"></HEAD><BODY>\n<center><div class=\"snarknavbar\"> <a href=\"/i2psnark/\" title=\"Torrents\"");
|
buf.append("</TITLE>").append(HEADER_A).append(_manager.getTheme()).append(HEADER_B).append("<link rel=\"shortcut icon\" href=\"/themes/snark/" + _manager.getTheme() + "/favicon.ico\"></HEAD><BODY>\n<center><div class=\"snarknavbar\"> <a href=\"/i2psnark/\" title=\"Torrents\"");
|
||||||
buf.append(" class=\"snarkRefresh\"><img border=\"0\" src=\"/themes/snark/ubergine/images/arrow_refresh.png\"> I2PSnark</a>").append("</div>");
|
buf.append(" class=\"snarkRefresh\"><img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/arrow_refresh.png\"> I2PSnark</a>").append("</div>");
|
||||||
|
|
||||||
if (parent)
|
if (parent)
|
||||||
buf.append("</div><div class=\"page\"><div class=\"mainsection\">");
|
buf.append("</div><div class=\"page\"><div class=\"mainsection\">");
|
||||||
@ -1380,22 +1396,22 @@ public class I2PSnarkServlet extends Default {
|
|||||||
buf.append("<form action=\"").append(base).append("\" method=\"POST\">\n");
|
buf.append("<form action=\"").append(base).append("\" method=\"POST\">\n");
|
||||||
buf.append("<TABLE BORDER=0 class=\"snarkTorrents\" cellpadding=\"5px 10px\">" +
|
buf.append("<TABLE BORDER=0 class=\"snarkTorrents\" cellpadding=\"5px 10px\">" +
|
||||||
"<thead><tr><th>")
|
"<thead><tr><th>")
|
||||||
.append("<img border=\"0\" src=\"/themes/snark/ubergine/images/file.png\" title=\"")
|
.append("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/file.png\" title=\"")
|
||||||
.append(_("File")).append("\" alt=\"").append(_("File")).append("\"> ")
|
.append(_("File")).append("\" alt=\"").append(_("File")).append("\"> ")
|
||||||
.append(title).append("</th><th align=\"right\">")
|
.append(title).append("</th><th align=\"right\">")
|
||||||
.append("<img border=\"0\" src=\"/themes/snark/ubergine/images/size.png\" title=\"")
|
.append("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/size.png\" title=\"")
|
||||||
.append(_("FileSize")).append("\" alt=\"").append(_("FileSize")).append("\">").append(_("Size"));
|
.append(_("FileSize")).append("\" alt=\"").append(_("FileSize")).append("\">").append(_("Size"));
|
||||||
buf.append("</th><th class=\"headerstatus\">")
|
buf.append("</th><th class=\"headerstatus\">")
|
||||||
.append("<img border=\"0\" src=\"/themes/snark/ubergine/images/status.png\" title=\"")
|
.append("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/status.png\" title=\"")
|
||||||
.append(_("Download Status")).append("\">").append(_("Status")).append("</th>");
|
.append(_("Download Status")).append("\">").append(_("Status")).append("</th>");
|
||||||
if (showPriority)
|
if (showPriority)
|
||||||
buf.append("<th class=\"headerpriority\">")
|
buf.append("<th class=\"headerpriority\">")
|
||||||
.append("<img border=\"0\" src=\"/themes/snark/ubergine/images/priority.png\" title=\"\">")
|
.append("<img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/priority.png\" title=\"\">")
|
||||||
.append(_("Priority")).append("</th>");
|
.append(_("Priority")).append("</th>");
|
||||||
buf.append("</tr></thead>\n");
|
buf.append("</tr></thead>\n");
|
||||||
buf.append("<tr><td colspan=\"4\" class=\"ParentDir\"><A HREF=\"");
|
buf.append("<tr><td colspan=\"4\" class=\"ParentDir\"><A HREF=\"");
|
||||||
buf.append(URI.addPaths(base,"../"));
|
buf.append(URI.addPaths(base,"../"));
|
||||||
buf.append("\"><img border=\"0\" src=\"/themes/snark/ubergine/images/up.png\"> ")
|
buf.append("\"><img border=\"0\" src=\"/themes/snark/" + _manager.getTheme() + "/images/up.png\"> ")
|
||||||
.append(_("Up to higher level directory")).append("</A></td></tr>\n");
|
.append(_("Up to higher level directory")).append("</A></td></tr>\n");
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
2010-11-26 sponge
|
||||||
|
* i2psnark: Add theme change and theme selection storage abilities.
|
||||||
|
|
||||||
2010-11-26 zzz
|
2010-11-26 zzz
|
||||||
* Console: Split initialNews.xml into a file for each language
|
* Console: Split initialNews.xml into a file for each language
|
||||||
don't copy to config dir at install.
|
don't copy to config dir at install.
|
||||||
|
@ -18,7 +18,7 @@ public class RouterVersion {
|
|||||||
/** deprecated */
|
/** deprecated */
|
||||||
public final static String ID = "Monotone";
|
public final static String ID = "Monotone";
|
||||||
public final static String VERSION = CoreVersion.VERSION;
|
public final static String VERSION = CoreVersion.VERSION;
|
||||||
public final static long BUILD = 9;
|
public final static long BUILD = 10;
|
||||||
|
|
||||||
/** for example "-test" */
|
/** for example "-test" */
|
||||||
public final static String EXTRA = "";
|
public final static String EXTRA = "";
|
||||||
|
Reference in New Issue
Block a user