📄 globalmanagerimpl.java
字号:
triggerAddListener(downloadsAdded);
downloadsAdded.clear();
}
}
}
}
catch (UnsupportedEncodingException e1) { }
catch (Throwable e)
{
Logger.log(new LogEvent(LOGID, "Error while loading downloads. One download may not have been added to the list.", e));
}
} while (true);
COConfigurationManager.setParameter("Set Completion Flag For Completed Downloads On Start", false);
pause_data = (ArrayList)map.get("pause_data");
if (pause_data == null)
break MISSING_BLOCK_LABEL_982;
paused_list_mon.enter();
for (int i = 0; i < pause_data.size(); i++)
{
Object pd = pause_data.get(i);
byte key[];
boolean force;
if (pd instanceof byte[])
{
key = (byte[])(byte[])pause_data.get(i);
force = false;
} else
{
Map m = (Map)pd;
key = (byte[])(byte[])m.get("hash");
force = ((Long)m.get("force")).intValue() == 1;
}
paused_list.add(((Object) (new Object[] {
new HashWrapper(key), new Boolean(force)
})));
}
paused_list_mon.exit();
break MISSING_BLOCK_LABEL_982;
Exception exception;
exception;
paused_list_mon.exit();
throw exception;
fixUpDownloadManagerPositions();
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Loaded ").append(managers_cow.size()).append(" torrents").toString()));
loadingComplete = true;
triggerAddListener(downloadsAdded);
loadingSem.releaseForever();
break MISSING_BLOCK_LABEL_1102;
Throwable e;
e;
Debug.printStackTrace(e);
loadingComplete = true;
triggerAddListener(downloadsAdded);
loadingSem.releaseForever();
break MISSING_BLOCK_LABEL_1102;
Exception exception1;
exception1;
loadingComplete = true;
triggerAddListener(downloadsAdded);
loadingSem.releaseForever();
throw exception1;
DownloadManagerStateFactory.discardGlobalStateCache();
break MISSING_BLOCK_LABEL_1116;
Exception exception2;
exception2;
DownloadManagerStateFactory.discardGlobalStateCache();
throw exception2;
}
private void triggerAddListener(List downloadsToAdd)
{
managers_mon.enter();
List listenersCopy = listeners.getListenersCopy();
for (int j = 0; j < listenersCopy.size(); j++)
{
GlobalManagerListener gmListener = (GlobalManagerListener)listenersCopy.get(j);
for (int i = 0; i < downloadsToAdd.size(); i++)
{
DownloadManager dm = (DownloadManager)downloadsToAdd.get(i);
gmListener.downloadManagerAdded(dm);
}
}
managers_mon.exit();
break MISSING_BLOCK_LABEL_109;
Exception exception;
exception;
managers_mon.exit();
throw exception;
}
protected void saveDownloads(boolean immediate)
{
if (!immediate)
{
needsSaving = true;
return;
}
if (!loadingComplete)
{
needsSaving = true;
return;
}
needsSaving = false;
if (cripple_downloads_config)
return;
Map map;
managers_mon.enter();
Collections.sort(managers_cow, new Comparator() {
final GlobalManagerImpl this$0;
public final int compare(Object a, Object b)
{
return ((DownloadManager)a).getPosition() - ((DownloadManager)b).getPosition();
}
{
this$0 = GlobalManagerImpl.this;
super();
}
});
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Saving Download List (").append(managers_cow.size()).append(" items)").toString()));
map = new HashMap();
List list = new ArrayList(managers_cow.size());
for (int i = 0; i < managers_cow.size(); i++)
{
DownloadManager dm = (DownloadManager)managers_cow.get(i);
DownloadManagerStats dm_stats = dm.getStats();
Map dmMap = new HashMap();
TOTorrent torrent = dm.getTorrent();
if (torrent != null)
try
{
dmMap.put("torrent_hash", torrent.getHash());
}
catch (TOTorrentException e)
{
Debug.printStackTrace(e);
}
File save_loc = dm.getAbsoluteSaveLocation();
dmMap.put("persistent", new Long(dm.isPersistent() ? 1L : 0L));
dmMap.put("torrent", dm.getTorrentFileName());
dmMap.put("save_dir", save_loc.getParent());
dmMap.put("save_file", save_loc.getName());
dmMap.put("maxdl", new Long(dm_stats.getDownloadRateLimitBytesPerSecond()));
dmMap.put("maxul", new Long(dm_stats.getUploadRateLimitBytesPerSecond()));
int state = dm.getState();
if (state == 100)
state = 70;
else
if (dm.getAssumedComplete() && !dm.isForceStart() && state != 70)
state = 75;
else
if (state != 70 && state != 75 && state != 0)
state = 0;
dmMap.put("state", new Long(state));
dmMap.put("position", new Long(dm.getPosition()));
dmMap.put("downloaded", new Long(dm_stats.getTotalDataBytesReceived()));
dmMap.put("uploaded", new Long(dm_stats.getTotalDataBytesSent()));
dmMap.put("completed", new Long(dm_stats.getDownloadCompleted(true)));
dmMap.put("discarded", new Long(dm_stats.getDiscarded()));
dmMap.put("hashfailbytes", new Long(dm_stats.getHashFailBytes()));
dmMap.put("forceStart", new Long(!dm.isForceStart() || dm.getState() == 30 ? 0L : 1L));
dmMap.put("secondsDownloading", new Long(dm_stats.getSecondsDownloading()));
dmMap.put("secondsOnlySeeding", new Long(dm_stats.getSecondsOnlySeeding()));
dmMap.put("uploads", new Long(dm.getMaxUploads()));
dmMap.put("creationTime", new Long(dm.getCreationTime()));
dm.saveDownload();
List file_priorities = (List)dm.getData("file_priorities");
if (file_priorities != null)
dmMap.put("file_priorities", file_priorities);
dmMap.put("allocated", new Long(!dm.isDataAlreadyAllocated() ? 0L : 1L));
list.add(dmMap);
}
map.put("downloads", list);
paused_list_mon.enter();
if (!paused_list.isEmpty())
{
ArrayList pause_data = new ArrayList();
for (int i = 0; i < paused_list.size(); i++)
{
Object data[] = (Object[])(Object[])paused_list.get(i);
HashWrapper hash = (HashWrapper)data[0];
Boolean force = (Boolean)data[1];
Map m = new HashMap();
m.put("hash", hash.getHash());
m.put("force", new Long(force.booleanValue() ? 1L : 0L));
pause_data.add(m);
}
map.put("pause_data", pause_data);
}
paused_list_mon.exit();
break MISSING_BLOCK_LABEL_1035;
Exception exception;
exception;
paused_list_mon.exit();
throw exception;
FileUtil.writeResilientConfigFile("downloads.config", map);
managers_mon.exit();
break MISSING_BLOCK_LABEL_1064;
Exception exception1;
exception1;
managers_mon.exit();
throw exception1;
}
public TRTrackerScraper getTrackerScraper()
{
return trackerScraper;
}
public GlobalManagerStats getStats()
{
return stats;
}
public boolean contains(DownloadManager manager)
{
if (managers_cow != null && manager != null)
return managers_cow.contains(manager);
else
return false;
}
public int getIndexOf(DownloadManager manager)
{
if (managers_cow != null && manager != null)
return managers_cow.indexOf(manager);
else
return -1;
}
public boolean isMoveableUp(DownloadManager manager)
{
if (manager.isDownloadComplete(false) && COConfigurationManager.getIntParameter("StartStopManager_iRankType") != 0 && COConfigurationManager.getBooleanParameter("StartStopManager_bAutoReposition"))
return false;
else
return manager.getPosition() > 1;
}
public int downloadManagerCount(boolean bCompleted)
{
int numInGroup = 0;
Iterator it = managers_cow.iterator();
do
{
if (!it.hasNext())
break;
DownloadManager dm = (DownloadManager)it.next();
if (dm.isDownloadComplete(false) == bCompleted)
numInGroup++;
} while (true);
return numInGroup;
}
public boolean isMoveableDown(DownloadManager manager)
{
boolean isCompleted = manager.isDownloadComplete(false);
if (isCompleted && COConfigurationManager.getIntParameter("StartStopManager_iRankType") != 0 && COConfigurationManager.getBooleanParameter("StartStopManager_bAutoReposition"))
return false;
else
return manager.getPosition() < downloadManagerCount(isCompleted);
}
public void moveUp(DownloadManager manager)
{
moveTo(manager, manager.getPosition() - 1);
}
public void moveDown(DownloadManager manager)
{
moveTo(manager, manager.getPosition() + 1);
}
public void moveTop(DownloadManager manager[])
{
managers_mon.enter();
int newPosition = 1;
for (int i = 0; i < manager.length; i++)
moveTo(manager[i], newPosition++);
managers_mon.exit();
break MISSING_BLOCK_LABEL_56;
Exception exception;
exception;
managers_mon.exit();
throw exception;
}
public void moveEnd(DownloadManager manager[])
{
managers_mon.enter();
int endPosComplete = 0;
int endPosIncomplete = 0;
for (int j = 0; j < managers_cow.size(); j++)
{
DownloadManager dm = (DownloadManager)managers_cow.get(j);
if (dm.isDownloadComplete(false))
endPosComplete++;
else
endPosIncomplete++;
}
for (int i = manager.length - 1; i >= 0; i--)
{
if (manager[i].isDownloadComplete(false) && endPosComplete > 0)
{
moveTo(manager[i], endPosComplete--);
continue;
}
if (endPosIncomplete > 0)
moveTo(manager[i], endPosIncomplete--);
}
managers_mon.exit();
break MISSING_BLOCK_LABEL_157;
Exception exception;
exception;
managers_mon.exit();
throw exception;
}
public void moveTo(DownloadManager manager, int newPosition)
{
boolean curCompleted;
curCompleted = manager.isDownloadComplete(false);
if (newPosition < 1 || newPosition > downloadManagerCount(curCompleted))
return;
managers_mon.enter();
int curPosition = manager.getPosition();
if (newPosition > curPosition)
{
int numToMove = newPosition - curPosition;
for (int i = 0; i < managers_cow.size(); i++)
{
DownloadManager dm = (DownloadManager)managers_cow.get(i);
boolean dmCompleted = dm.isDownloadComplete(false);
if (dmCompleted != curCompleted)
continue;
int dmPosition = dm.getPosition();
if (dmPosition <= curPosition || dmPosition > newPosition)
continue;
dm.setPosition(dmPosition - 1);
if (--numToMove <= 0)
break;
}
manager.setPosition(newPosition);
} else
if (newPosition < curPosition && curPosition > 1)
{
int numToMove = curPosition - newPosition;
for (int i = 0; i < managers_cow.size(); i++)
{
DownloadManager dm = (DownloadManager)managers_cow.get(i);
boolean dmCompleted = dm.isDownloadComplete(false);
int dmPosition = dm.getPosition();
if (dmCompleted != curCompleted || dmPosition < newPosition || dmPosition >= curPosition)
continue;
dm.setPosition(dmPosition + 1);
if (--numToMove <= 0)
break;
}
manager.setPosition(newPosition);
}
managers_mon.exit();
break MISSING_BLOCK_LABEL_305;
Exception exception;
exception;
managers_mon.exit();
throw exception;
}
public void fixUpDownloadManagerPositions()
{
managers_mon.enter();
int posComplete = 1;
int posIncomplete = 1;
Collections.sort(managers_cow, new Comparator() {
final GlobalManagerImpl this$0;
public final int compare(Object a, Object b)
{
int i = ((DownloadManager)a).getPosition() - ((DownloadManager)b).getPosition();
if (i != 0)
return i;
if (((DownloadManager)a).isPersistent())
return 1;
return !((DownloadManager)b).isPersistent() ? 0 : -1;
}
{
this$0 = GlobalManagerImpl.this;
super();
}
});
for (int i = 0; i < managers_cow.size(); i++)
{
DownloadManager dm = (DownloadManager)managers_cow.get(i);
if (dm.isDownloadComplete(false))
dm.setPosition(posComplete++);
else
dm.setPosition(posIncomplete++);
}
managers_mon.exit();
break MISSING_BLOCK_LABEL_120;
Exception exception;
exception;
managers_mon.exit();
throw exception;
}
protected void informDestroyed()
{
if (destroyed)
{
return;
} else
{
destroyed = true;
listeners.dispatch(4, null, true);
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -