📄 downloadimpl.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: DownloadImpl.java
package org.gudy.azureus2.pluginsimpl.local.download;
import com.aelitis.azureus.core.util.CopyOnWriteList;
import com.aelitis.azureus.core.util.CopyOnWriteMap;
import java.io.File;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.gudy.azureus2.core3.category.Category;
import org.gudy.azureus2.core3.category.CategoryManager;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.download.DownloadManagerActivationListener;
import org.gudy.azureus2.core3.download.DownloadManagerException;
import org.gudy.azureus2.core3.download.DownloadManagerListener;
import org.gudy.azureus2.core3.download.DownloadManagerPeerListener;
import org.gudy.azureus2.core3.download.DownloadManagerState;
import org.gudy.azureus2.core3.download.DownloadManagerStateAttributeListener;
import org.gudy.azureus2.core3.download.DownloadManagerStateEvent;
import org.gudy.azureus2.core3.download.DownloadManagerStateListener;
import org.gudy.azureus2.core3.download.DownloadManagerStats;
import org.gudy.azureus2.core3.download.DownloadManagerTrackerListener;
import org.gudy.azureus2.core3.download.impl.DownloadManagerMoveHandler;
import org.gudy.azureus2.core3.global.GlobalManager;
import org.gudy.azureus2.core3.global.GlobalManagerDownloadRemovalVetoException;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.logging.LogRelation;
import org.gudy.azureus2.core3.peer.PEPeer;
import org.gudy.azureus2.core3.peer.PEPeerManager;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerResponse;
import org.gudy.azureus2.core3.tracker.client.TRTrackerScraperResponse;
import org.gudy.azureus2.core3.util.AEMonitor;
import org.gudy.azureus2.core3.util.BEncoder;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.SystemTime;
import org.gudy.azureus2.plugins.disk.DiskManager;
import org.gudy.azureus2.plugins.disk.DiskManagerFileInfo;
import org.gudy.azureus2.plugins.download.Download;
import org.gudy.azureus2.plugins.download.DownloadActivationEvent;
import org.gudy.azureus2.plugins.download.DownloadActivationListener;
import org.gudy.azureus2.plugins.download.DownloadAnnounceResult;
import org.gudy.azureus2.plugins.download.DownloadAttributeListener;
import org.gudy.azureus2.plugins.download.DownloadCompletionListener;
import org.gudy.azureus2.plugins.download.DownloadException;
import org.gudy.azureus2.plugins.download.DownloadListener;
import org.gudy.azureus2.plugins.download.DownloadPeerListener;
import org.gudy.azureus2.plugins.download.DownloadPropertyEvent;
import org.gudy.azureus2.plugins.download.DownloadPropertyListener;
import org.gudy.azureus2.plugins.download.DownloadRemovalVetoException;
import org.gudy.azureus2.plugins.download.DownloadScrapeResult;
import org.gudy.azureus2.plugins.download.DownloadStats;
import org.gudy.azureus2.plugins.download.DownloadTrackerListener;
import org.gudy.azureus2.plugins.download.DownloadWillBeRemovedListener;
import org.gudy.azureus2.plugins.download.savelocation.SaveLocationChange;
import org.gudy.azureus2.plugins.peers.PeerManager;
import org.gudy.azureus2.plugins.torrent.Torrent;
import org.gudy.azureus2.plugins.torrent.TorrentAttribute;
import org.gudy.azureus2.pluginsimpl.local.deprecate.PluginDeprecation;
import org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerFileInfoImpl;
import org.gudy.azureus2.pluginsimpl.local.peers.PeerManagerImpl;
import org.gudy.azureus2.pluginsimpl.local.torrent.TorrentImpl;
import org.gudy.azureus2.pluginsimpl.local.torrent.TorrentManagerImpl;
// Referenced classes of package org.gudy.azureus2.pluginsimpl.local.download:
// DownloadAnnounceResultImpl, DownloadScrapeResultImpl, DownloadStatsImpl
public class DownloadImpl extends LogRelation
implements Download, DownloadManagerListener, DownloadManagerTrackerListener, DownloadManagerStateListener, DownloadManagerActivationListener, DownloadManagerStateAttributeListener
{
private static class PropertyListenerBridge
implements DownloadAttributeListener
{
private DownloadPropertyListener l;
public void attributeEventOccurred(Download d, final TorrentAttribute attr, final int event_type)
{
l.propertyChanged(d, new DownloadPropertyEvent() {
final int val$event_type;
final TorrentAttribute val$attr;
final PropertyListenerBridge this$0;
public int getType()
{
return event_type;
}
public Object getData()
{
return attr;
}
{
this$0 = PropertyListenerBridge.this;
event_type = i;
attr = torrentattribute;
super();
}
});
}
public PropertyListenerBridge(DownloadPropertyListener l)
{
this.l = l;
}
}
private DownloadManager download_manager;
private DownloadStatsImpl download_stats;
private int latest_state;
private boolean latest_forcedStart;
private DownloadAnnounceResultImpl last_announce_result;
private DownloadScrapeResultImpl last_scrape_result;
private TorrentImpl torrent;
private List listeners;
private AEMonitor listeners_mon;
private List property_listeners;
private List tracker_listeners;
private AEMonitor tracker_listeners_mon;
private List removal_listeners;
private AEMonitor removal_listeners_mon;
private Map peer_listeners;
private AEMonitor peer_listeners_mon;
private CopyOnWriteList completion_listeners;
private CopyOnWriteMap read_attribute_listeners_map_cow;
private CopyOnWriteMap write_attribute_listeners_map_cow;
private CopyOnWriteList activation_listeners;
private DownloadActivationEvent activation_state;
private HashMap property_to_attribute_map;
protected DownloadImpl(DownloadManager _dm)
{
latest_state = 7;
last_announce_result = new DownloadAnnounceResultImpl(this, null);
last_scrape_result = new DownloadScrapeResultImpl(this, null);
torrent = null;
listeners = new ArrayList();
listeners_mon = new AEMonitor("Download:L");
property_listeners = new ArrayList();
tracker_listeners = new ArrayList();
tracker_listeners_mon = new AEMonitor("Download:TL");
removal_listeners = new ArrayList();
removal_listeners_mon = new AEMonitor("Download:RL");
peer_listeners = new HashMap();
peer_listeners_mon = new AEMonitor("Download:PL");
completion_listeners = new CopyOnWriteList();
read_attribute_listeners_map_cow = new CopyOnWriteMap();
write_attribute_listeners_map_cow = new CopyOnWriteMap();
activation_listeners = new CopyOnWriteList();
property_to_attribute_map = null;
download_manager = _dm;
download_stats = new DownloadStatsImpl(download_manager);
activation_state = new DownloadActivationEvent() {
final DownloadImpl this$0;
public Download getDownload()
{
return DownloadImpl.this;
}
public int getActivationCount()
{
return download_manager.getActivationCount();
}
{
this$0 = DownloadImpl.this;
super();
}
};
download_manager.addListener(this);
latest_forcedStart = download_manager.isForceStart();
}
public DownloadManager getDownload()
{
return download_manager;
}
public int getState()
{
return convertState(download_manager.getState());
}
public int getSubState()
{
int state = getState();
if (state == 6)
{
int substate = download_manager.getSubState();
if (substate == 75)
return 9;
if (substate == 70)
return 7;
if (substate == 100)
return 8;
}
return state;
}
protected int convertState(int dm_state)
{
int our_state;
switch (dm_state)
{
case 0: // '\0'
our_state = 1;
break;
case 5: // '\005'
case 10: // '\n'
case 20: // '\024'
case 30: // '\036'
our_state = 2;
break;
case 40: // '('
our_state = 3;
break;
case 50: // '2'
case 55: // '7'
our_state = 4;
break;
case 60: // '<'
our_state = 5;
break;
case 65: // 'A'
our_state = 6;
break;
case 70: // 'F'
our_state = 7;
break;
case 75: // 'K'
our_state = 9;
break;
case 100: // 'd'
our_state = 8;
break;
default:
our_state = 8;
break;
}
return our_state;
}
public String getErrorStateDetails()
{
return download_manager.getErrorDetails();
}
public boolean getFlag(long flag)
{
return download_manager.getDownloadState().getFlag(flag);
}
public void setFlag(long flag, boolean set)
{
download_manager.getDownloadState().setFlag(flag, set);
}
public int getIndex()
{
GlobalManager globalManager = download_manager.getGlobalManager();
return globalManager.getIndexOf(download_manager);
}
public Torrent getTorrent()
{
if (this.torrent != null)
return this.torrent;
org.gudy.azureus2.core3.torrent.TOTorrent torrent = download_manager.getTorrent();
if (torrent == null)
{
return null;
} else
{
this.torrent = new TorrentImpl(torrent);
return this.torrent;
}
}
public void initialize()
throws DownloadException
{
int state = download_manager.getState();
if (state == 0)
download_manager.initialize();
else
throw new DownloadException((new StringBuilder()).append("Download::initialize: download not waiting (state=").append(state).append(")").toString());
}
public void start()
throws DownloadException
{
int state = download_manager.getState();
if (state == 40)
download_manager.startDownload();
else
throw new DownloadException((new StringBuilder()).append("Download::start: download not ready (state=").append(state).append(")").toString());
}
public void restart()
throws DownloadException
{
int state = download_manager.getState();
if (state == 70 || state == 75)
download_manager.setStateWaiting();
else
throw new DownloadException((new StringBuilder()).append("Download::restart: download already running (state=").append(state).append(")").toString());
}
public void stop()
throws DownloadException
{
if (download_manager.getState() != 70)
download_manager.stopIt(70, false, false);
else
throw new DownloadException("Download::stop: download already stopped");
}
public void stopAndQueue()
throws DownloadException
{
if (download_manager.getState() != 75)
download_manager.stopIt(75, false, false);
else
throw new DownloadException("Download::stopAndQueue: download already queued");
}
public void recheckData()
throws DownloadException
{
if (!download_manager.canForceRecheck())
{
throw new DownloadException("Download::recheckData: download must be stopped, queued or in error state");
} else
{
download_manager.forceRecheck();
return;
}
}
public boolean isStartStopLocked()
{
return download_manager.getState() == 70;
}
public boolean isForceStart()
{
return download_manager.isForceStart();
}
public void setForceStart(boolean forceStart)
{
download_manager.setForceStart(forceStart);
}
public boolean isPaused()
{
return download_manager.isPaused();
}
public void pause()
{
download_manager.pause();
}
public void resume()
{
download_manager.resume();
}
public int getPosition()
{
return download_manager.getPosition();
}
public long getCreationTime()
{
return download_manager.getCreationTime();
}
public void setPosition(int newPosition)
{
download_manager.setPosition(newPosition);
}
public void moveUp()
{
download_manager.getGlobalManager().moveUp(download_manager);
}
public void moveDown()
{
download_manager.getGlobalManager().moveDown(download_manager);
}
public void moveTo(int pos)
{
download_manager.getGlobalManager().moveTo(download_manager, pos);
}
public String getName()
{
return download_manager.getDisplayName();
}
public String getTorrentFileName()
{
return download_manager.getTorrentFileName();
}
public String getCategoryName()
{
Category category = download_manager.getDownloadState().getCategory();
if (category == null)
category = CategoryManager.getCategory(2);
if (category == null)
return null;
else
return category.getName();
}
public String getAttribute(TorrentAttribute attribute)
{
String name = convertAttribute(attribute);
if (name != null)
return download_manager.getDownloadState().getAttribute(name);
else
return null;
}
public String[] getListAttribute(TorrentAttribute attribute)
{
String name = convertAttribute(attribute);
if (name != null)
return download_manager.getDownloadState().getListAttribute(name);
else
return null;
}
public void setListAttribute(TorrentAttribute attribute, String value[])
{
String name = convertAttribute(attribute);
if (name != null)
download_manager.getDownloadState().setListAttribute(name, value);
}
public void setMapAttribute(TorrentAttribute attribute, Map value)
{
String name = convertAttribute(attribute);
if (name != null)
download_manager.getDownloadState().setMapAttribute(name, BEncoder.cloneMap(value));
}
public Map getMapAttribute(TorrentAttribute attribute)
{
String name = convertAttribute(attribute);
if (name != null)
return download_manager.getDownloadState().getMapAttribute(name);
else
return null;
}
public void setAttribute(TorrentAttribute attribute, String value)
{
String name = convertAttribute(attribute);
if (name != null)
download_manager.getDownloadState().setAttribute(name, value);
}
public boolean hasAttribute(TorrentAttribute attribute)
{
String name = convertAttribute(attribute);
if (name == null)
return false;
else
return download_manager.getDownloadState().hasAttribute(name);
}
public boolean getBooleanAttribute(TorrentAttribute attribute)
{
String name = convertAttribute(attribute);
if (name == null)
return false;
else
return download_manager.getDownloadState().getBooleanAttribute(name);
}
public void setBooleanAttribute(TorrentAttribute attribute, boolean value)
{
String name = convertAttribute(attribute);
if (name != null)
download_manager.getDownloadState().setBooleanAttribute(name, value);
}
public int getIntAttribute(TorrentAttribute attribute)
{
String name = convertAttribute(attribute);
if (name == null)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -