i2psnark: Add theme change and theme selection storage abilities.

This commit is contained in:
sponge
2010-11-26 22:31:59 +00:00
parent b54598e9ba
commit bbfb8583c7
4 changed files with 110 additions and 49 deletions

View File

@ -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 {

View File

@ -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 + "&thinsp;/&thinsp;" + ' ' + curPeers + "&thinsp;/&thinsp;" +
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 + "&thinsp;/&thinsp;" + "\">" + ' ' + curPeers + "&thinsp;/&thinsp;" +
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) + "&hellip;"; err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "&hellip;";
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 + "&thinsp;/&thinsp;" + ' ' + curPeers + "&thinsp;/&thinsp;" +
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 + "&thinsp;/&thinsp;" + ' ' + curPeers + "&thinsp;/&thinsp;" +
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 + "&thinsp;/&thinsp;" + ' ' + curPeers + "&thinsp;/&thinsp;" +
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 + "&thinsp;/&thinsp;" + ' ' + curPeers + "&thinsp;/&thinsp;" +
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 + "&thinsp;/&thinsp;" + ' ' + curPeers + "&thinsp;/&thinsp;" +
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 + "&thinsp;/&thinsp;" + ' ' + curPeers + "&thinsp;/&thinsp;" +
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 + "&thinsp;/&thinsp;" + ' ' + curPeers + "&thinsp;/&thinsp;" +
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("&nbsp;<a href=\"" + baseURL + "details.php?dllist=1&filelist=1&info_hash="); out.write("&nbsp;<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("\">&nbsp;") .append(_("File")).append("\" alt=\"").append(_("File")).append("\">&nbsp;")
.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");

View File

@ -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.

View File

@ -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 = "";