/* * File : TrackersUtil.java * Created : 7 nov. 2003 12:09:56 * By : Olivier * * Azureus - a Java Bittorrent client * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details ( see the LICENSE file ). * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.gudy.azureus2.core3.util; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; /** * @author Olivier * */ public class TrackersUtil { private List<String> trackers; private Map<String,List<List<String>>> multiTrackers; private Map<String,Map> webseeds; private static TrackersUtil instance; private static AEMonitor class_mon = new AEMonitor( "TrackersUtil:class" ); private TrackersUtil() { trackers = new ArrayList<String>(); multiTrackers = new HashMap<String,List<List<String>>>(); webseeds = new HashMap<String,Map>(); loadList(); } public static TrackersUtil getInstance() { try{ class_mon.enter(); if(instance == null) instance = new TrackersUtil(); return instance; }finally{ class_mon.exit(); } } public List<String> getTrackersList() { if(trackers != null) return new ArrayList<String>(trackers); else return null; } public void addTracker(String trackerAnnounceUrl) { if(trackers.contains(trackerAnnounceUrl)) return; trackers.add(0,trackerAnnounceUrl); saveList(); } public void addMultiTracker(String configName, List<List<String>> groups) { multiTrackers.put(configName,groups); saveList(); } public void removeMultiTracker(String configName) { multiTrackers.remove(configName); saveList(); } public Map<String,List<List<String>>> getMultiTrackers() { return new HashMap<String,List<List<String>>>(multiTrackers); } public void addWebSeed(String configName, Map ws) { webseeds.put(configName,ws); saveList(); } public void removeWebSeed(String configName) { webseeds.remove(configName); saveList(); } public Map<String,Map> getWebSeeds() { return new HashMap<String,Map>(webseeds); } public void clearAllTrackers(boolean save) { trackers = new ArrayList<String>(); multiTrackers = new HashMap<String,List<List<String>>>(); webseeds = new HashMap<String,Map>(); if (save) {saveList();} } private void loadList() { File fTrackers = FileUtil.getUserFile("trackers.config"); if(fTrackers.exists() && fTrackers.isFile()) { FileInputStream fin = null; BufferedInputStream bin = null; try { fin = new FileInputStream(fTrackers); bin = new BufferedInputStream(fin, 8192); Map map = BDecoder.decode(bin); List list = (List) map.get("trackers"); if(list != null) { Iterator iter = list.iterator(); while(iter.hasNext()) { String tracker = new String((byte[])iter.next()); trackers.add(tracker); } } Map mapMT = (Map) map.get("multi-trackers"); if(mapMT != null) { Iterator iter = mapMT.keySet().iterator(); while(iter.hasNext()) { String configName = (String) iter.next(); List groups = (List) mapMT.get(configName); List resGroups = new ArrayList(groups.size()); Iterator iterGroups = groups.iterator(); while(iterGroups.hasNext()) { List theseTrackers = (List) iterGroups.next(); List resTrackers = new ArrayList(theseTrackers.size()); Iterator iterTrackers = theseTrackers.iterator(); while(iterTrackers.hasNext()) { String tracker = new String((byte[]) iterTrackers.next()); resTrackers.add(tracker); } resGroups.add(resTrackers); } this.multiTrackers.put(configName,resGroups); } } webseeds = (Map)map.get( "webseeds" ); if ( webseeds == null ){ webseeds = new HashMap(); }else{ BDecoder.decodeStrings( webseeds ); } } catch(Exception e) { Debug.printStackTrace( e ); }finally{ if ( bin != null ){ try{ bin.close(); }catch( Throwable e ){ } } if ( fin != null ){ try{ fin.close(); }catch( Throwable e ){ } } } } } private void saveList() { Map map = new HashMap(); map.put("trackers",trackers); map.put("multi-trackers",multiTrackers); map.put("webseeds",webseeds ); FileOutputStream fos = null; try { // Open the file File fTrackers = FileUtil.getUserFile("trackers.config"); fos = new FileOutputStream(fTrackers); fos.write(BEncoder.encode(map)); fos.close(); } catch (Exception e) { Debug.printStackTrace( e ); } finally{ if ( fos != null ){ try{ fos.close(); }catch( Throwable e ){ } } } } }