Changeset 0f321f1


Ignore:
Timestamp:
May 22, 2012 6:19:52 PM (8 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
e27df77
Parents:
10872f7
Message:
  • Refactor tracker map
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java

    r10872f7 r0f321f1  
    99import java.io.OutputStream;
    1010import java.util.ArrayList;
     11import java.util.Collection;
    1112import java.util.Collections;
    1213import java.util.Comparator;
     
    1920import java.util.Set;
    2021import java.util.StringTokenizer;
    21 import java.util.TreeMap;
    2222import java.util.Queue;
    2323import java.util.concurrent.ConcurrentHashMap;
     
    5959    private Thread _monitor;
    6060    private volatile boolean _running;
    61     private final Map<String, String> _trackerMap;
     61    private final Map<String, Tracker> _trackerMap;
    6262   
    6363    public static final String PROP_I2CP_HOST = "i2psnark.i2cpHost";
     
    131131        if (!_configFile.isAbsolute())
    132132            _configFile = new File(_context.getConfigDir(), CONFIG_FILE);
    133         _trackerMap = Collections.synchronizedMap(new TreeMap(new IgnoreCaseComparator()));
     133        _trackerMap = new ConcurrentHashMap(4);
    134134        loadConfig(null);
    135135    }
     
    14051405
    14061406    /**
    1407      *  Sorted map of name to announceURL=baseURL
     1407     *  Unsorted map of name to Tracker object
    14081408     *  Modifiable, not a copy
    1409      */
    1410     public Map<String, String> getTrackers() {
     1409     *  @since 0.9.1
     1410     */
     1411    public Map<String, Tracker> getTrackerMap() {
    14111412        return _trackerMap;
     1413    }
     1414
     1415    /**
     1416     *  Unsorted, do not modify
     1417     */
     1418    public Collection<Tracker> getTrackers() {
     1419        return _trackerMap.values();
     1420    }
     1421
     1422    /**
     1423     *  Sorted copy
     1424     *  @since 0.9.1
     1425     */
     1426    public List<Tracker> getSortedTrackers() {
     1427        List<Tracker> rv = new ArrayList(_trackerMap.values());
     1428        Collections.sort(rv, new IgnoreCaseComparator());
     1429        return rv;
    14121430    }
    14131431
     
    14171435        if ( (trackers == null) || (trackers.trim().length() <= 0) )
    14181436            trackers = _context.getProperty(PROP_TRACKERS);
    1419         _trackerMap.clear();
    14201437        if ( (trackers == null) || (trackers.trim().length() <= 0) ) {
    1421             for (int i = 0; i < DEFAULT_TRACKERS.length; i += 2)
    1422                 _trackerMap.put(DEFAULT_TRACKERS[i], DEFAULT_TRACKERS[i+1]);
     1438            setDefaultTrackerMap(true);
    14231439        } else {
    14241440            String[] toks = trackers.split(",");
     
    14261442                String name = toks[i].trim().replace("&#44;", ",");
    14271443                String url = toks[i+1].trim().replace("&#44;", ",");
    1428                 if ( (name.length() > 0) && (url.length() > 0) )
    1429                     _trackerMap.put(name, url);
     1444                if ( (name.length() > 0) && (url.length() > 0) ) {
     1445                    String urls[] = DEFAULT_TRACKERS[i+1].split("=", 2);
     1446                    String url2 = urls.length > 1 ? urls[1] : null;
     1447                    _trackerMap.put(name, new Tracker(name, urls[0], url2));
     1448                }
    14301449            }
    14311450        }
     
    14341453    /** @since 0.9 */
    14351454    public void setDefaultTrackerMap() {
     1455        setDefaultTrackerMap(true);
     1456    }
     1457
     1458    /** @since 0.9.1 */
     1459    private void setDefaultTrackerMap(boolean save) {
    14361460        _trackerMap.clear();
    14371461        for (int i = 0; i < DEFAULT_TRACKERS.length; i += 2) {
    1438             _trackerMap.put(DEFAULT_TRACKERS[i], DEFAULT_TRACKERS[i+1]);
    1439         }
    1440         if (_config.remove(PROP_TRACKERS) != null) {
     1462            String name = DEFAULT_TRACKERS[i];
     1463            String urls[] = DEFAULT_TRACKERS[i+1].split("=", 2);
     1464            String url2 = urls.length > 1 ? urls[1] : null;
     1465            _trackerMap.put(name, new Tracker(name, urls[0], url2));
     1466        }
     1467        if (save && _config.remove(PROP_TRACKERS) != null) {
    14411468            saveConfig();
    14421469        }
     
    14471474        StringBuilder buf = new StringBuilder(2048);
    14481475        boolean comma = false;
    1449         for (Map.Entry<String, String> e : _trackerMap.entrySet()) {
     1476        for (Map.Entry<String, Tracker> e : _trackerMap.entrySet()) {
    14501477            if (comma)
    14511478                buf.append(',');
    14521479            else
    14531480                comma = true;
    1454             buf.append(e.getKey().replace(",", "&#44;")).append(',').append(e.getValue().replace(",", "&#44;"));
     1481            Tracker t = e.getValue();
     1482            buf.append(e.getKey().replace(",", "&#44;")).append(',').append(t.announceURL.replace(",", "&#44;"));
     1483            if (t.baseURL != null)
     1484                buf.append('=').append(t.baseURL);
    14551485        }
    14561486        _config.setProperty(PROP_TRACKERS, buf.toString());
     
    14821512     *  @since 0.9
    14831513     */
    1484     private static class IgnoreCaseComparator implements Comparator<String> {
    1485         public int compare(String l, String r) {
    1486             return l.toLowerCase().compareTo(r.toLowerCase());
     1514    private static class IgnoreCaseComparator implements Comparator<Tracker> {
     1515        public int compare(Tracker l, Tracker r) {
     1516            return l.name.toLowerCase().compareTo(r.name.toLowerCase());
    14871517        }
    14881518    }
  • apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java

    r10872f7 r0f321f1  
    3838import org.klomp.snark.SnarkManager;
    3939import org.klomp.snark.Storage;
     40import org.klomp.snark.Tracker;
    4041import org.klomp.snark.TrackerClient;
    4142
     
    240241            out.write("<body onload=\"initAjax()\">");
    241242        out.write("<center>");
     243        List<Tracker> sortedTrackers = null;
    242244        if (isConfigure) {
    243245            out.write("<div class=\"snarknavbar\"><a href=\"/i2psnark/\" title=\"");
     
    257259            out.write("</a>\n");
    258260
    259             Map trackers = _manager.getTrackers();
    260             for (Iterator iter = trackers.entrySet().iterator(); iter.hasNext(); ) {
    261                 Map.Entry entry = (Map.Entry)iter.next();
    262                 String name = (String)entry.getKey();
    263                 String baseURL = (String)entry.getValue();
    264                 int e = baseURL.indexOf('=');
    265                 if (e < 0)
     261            sortedTrackers = _manager.getSortedTrackers();
     262            for (Tracker t : sortedTrackers) {
     263                if (t.baseURL == null || !t.baseURL.startsWith("http"))
    266264                    continue;
    267                 baseURL = baseURL.substring(e + 1);
    268                 out.write(" <a href=\"" + baseURL + "\" class=\"snarkRefresh\" target=\"_blank\">" + name + "</a>");
     265                out.write(" <a href=\"" + t.baseURL + "\" class=\"snarkRefresh\" target=\"_blank\">" + t.name + "</a>");
    269266            }
    270267        }
     
    287284            out.write("</div><div id=\"lowersection\">\n");
    288285            writeAddForm(out, req);
    289             writeSeedForm(out, req);
     286            writeSeedForm(out, req, sortedTrackers);
    290287            writeConfigLink(out);
    291288            // end of lowersection div
     
    774771        if (action.equals(_("Delete selected"))) {
    775772            boolean changed = false;
    776             Map<String, String> trackers = _manager.getTrackers();
     773            Map<String, Tracker> trackers = _manager.getTrackerMap();
    777774            Enumeration e = req.getParameterNames();
    778775            while (e.hasMoreElements()) {
     
    801798                aurl = aurl.trim().replace("=", "&#61;");
    802799                if (name.length() > 0 && hurl.startsWith("http://") && aurl.startsWith("http://")) {
    803                     Map<String, String> trackers = _manager.getTrackers();
    804                     trackers.put(name, aurl + '=' + hurl);
     800                    Map<String, Tracker> trackers = _manager.getTrackerMap();
     801                    trackers.put(name, new Tracker(name, aurl, hurl));
    805802                    _manager.saveTrackerMap();
    806803                } else {
     
    12721269              announce.startsWith("http://lnQ6yoBT") || announce.startsWith("http://tracker2.postman.i2p/") ||
    12731270              announce.startsWith("http://ahsplxkbhemefwvvml7qovzl5a2b5xo5i7lyai7ntdunvcyfdtna.b32.i2p/"))) {
    1274             Map<String, String> trackers = _manager.getTrackers();
    1275             for (Map.Entry<String, String> entry : trackers.entrySet()) {
    1276                 String baseURL = entry.getValue();
    1277                 if (!(baseURL.startsWith(announce) || // vvv hack for non-b64 announce in list vvv
    1278                       (announce.startsWith("http://lnQ6yoBT") && baseURL.startsWith("http://tracker2.postman.i2p/")) ||
    1279                       (announce.startsWith("http://ahsplxkbhemefwvvml7qovzl5a2b5xo5i7lyai7ntdunvcyfdtna.b32.i2p/") && baseURL.startsWith("http://tracker2.postman.i2p/"))))
     1271            for (Tracker t : _manager.getTrackers()) {
     1272                String aURL = t.announceURL;
     1273                if (!(aURL.startsWith(announce) || // vvv hack for non-b64 announce in list vvv
     1274                      (announce.startsWith("http://lnQ6yoBT") && aURL.startsWith("http://tracker2.postman.i2p/")) ||
     1275                      (announce.startsWith("http://ahsplxkbhemefwvvml7qovzl5a2b5xo5i7lyai7ntdunvcyfdtna.b32.i2p/") && aURL.startsWith("http://tracker2.postman.i2p/"))))
    12801276                    continue;
    1281                 int e = baseURL.indexOf('=');
    1282                 if (e < 0)
    1283                     continue;
    1284                 baseURL = baseURL.substring(e + 1);
    1285                 String name = entry.getKey();
     1277                String baseURL = t.baseURL;
     1278                String name = t.name;
    12861279                StringBuilder buf = new StringBuilder(128);
    12871280                buf.append("<a href=\"").append(baseURL).append("details.php?dllist=1&amp;filelist=1&amp;info_hash=")
     
    13371330    }
    13381331   
    1339     private void writeSeedForm(PrintWriter out, HttpServletRequest req) throws IOException {
     1332    private void writeSeedForm(PrintWriter out, HttpServletRequest req, List<Tracker> sortedTrackers) throws IOException {
    13401333        String baseFile = req.getParameter("baseFile");
    13411334        if (baseFile == null || baseFile.trim().length() <= 0)
     
    13731366        out.write(_("Open trackers only"));
    13741367        out.write("</option>\n");
    1375         Map<String, String> trackers = _manager.getTrackers();
    1376         for (Map.Entry<String, String> entry : trackers.entrySet()) {
    1377             String name = entry.getKey();
    1378             String announceURL = entry.getValue();
    1379             int e = announceURL.indexOf('=');
    1380             if (e > 0)
    1381                 announceURL = announceURL.substring(0, e).replace("&#61;", "=");
     1368        for (Tracker t : sortedTrackers) {
     1369            String name = t.name;
     1370            String announceURL = t.announceURL.replace("&#61;", "=");
    13821371            if (announceURL.equals(_lastAnnounceURL))
    13831372                announceURL += "\" selected=\"selected";
     
    16061595           .append(_("Announce URL"))
    16071596           .append("</th></tr>\n");
    1608         Map<String, String> trackers = _manager.getTrackers();
    1609         for (Map.Entry<String, String> entry : trackers.entrySet()) {
    1610             String name = entry.getKey();
    1611             String announceURL = entry.getValue();
    1612             int e = announceURL.indexOf('=');
    1613             if (e <= 0)
    1614                 continue;
    1615             String homeURL = announceURL.substring(e + 1);
    1616             announceURL = announceURL.substring(0, e).replace("&#61;", "=");
     1597        for (Tracker t : _manager.getSortedTrackers()) {
     1598            String name = t.name;
     1599            String homeURL = t.baseURL;
     1600            String announceURL = t.announceURL.replace("&#61;", "=");
    16171601            buf.append("<tr><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
    16181602               .append(name).append("\">" +
  • history.txt

    r10872f7 r0f321f1  
     12012-05-22 zzz
     2 * i2psnark:
     3   - Refactor tracker map
     4   - Prevent torrent shutdown when changing file priority to skip
     5 * RoutingKeyModifier: Update after large clock shift
     6
    172012-05-20 zzz
    28 * Console: Add full file path to thread dump message
  • router/java/src/net/i2p/router/RouterVersion.java

    r10872f7 r0f321f1  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 3;
     21    public final static long BUILD = 4;
    2222
    2323    /** for example "-test" */
Note: See TracChangeset for help on using the changeset viewer.