📄 downloadmanagerimpl.java
字号:
public static Download
getDownloadStatic(
DiskManager dm )
throws DownloadException
{
if ( singleton != null ){
return( singleton.getDownload( dm ));
}
throw( new DownloadException( "DownloadManager not initialised"));
}
public Download
getDownload(
DiskManager dm )
throws DownloadException
{
List dls = global_manager.getDownloadManagers();
for (int i=0;i<dls.size();i++){
DownloadManager man = (DownloadManager)dls.get(i);
if ( man.getDiskManager() == dm ){
return( getDownload( man.getTorrent()));
}
}
return( null );
}
protected Download
getDownload(
TOTorrent torrent )
throws DownloadException
{
for (int i=0;i<downloads.size();i++){
Download dl = (Download)downloads.get(i);
TorrentImpl t = (TorrentImpl)dl.getTorrent();
// can be null if broken torrent
if ( t == null ){
continue;
}
if ( t.getTorrent().hasSameHashAs( torrent )){
return( dl );
}
}
throw( new DownloadException("DownloadManager::getDownload: download not found"));
}
public static Download
getDownloadStatic(
TOTorrent torrent )
throws DownloadException
{
if ( singleton != null ){
return( singleton.getDownload( torrent ));
}
throw( new DownloadException( "DownloadManager not initialised"));
}
public Download
getDownload(
Torrent _torrent )
{
TorrentImpl torrent = (TorrentImpl)_torrent;
try{
return( getDownload( torrent.getTorrent()));
}catch( DownloadException e ){
}
return( null );
}
public Download
getDownload(
byte[] hash )
{
List dls = global_manager.getDownloadManagers();
for (int i=0;i<dls.size();i++){
DownloadManager man = (DownloadManager)dls.get(i);
// torrent can be null if download manager torrent file read fails
TOTorrent torrent = man.getTorrent();
if ( torrent != null ){
try{
if ( Arrays.equals( torrent.getHash(), hash )){
return( getDownload( torrent ));
}
}catch( DownloadException e ){
// not found
}catch( TOTorrentException e ){
Debug.printStackTrace( e );
}
}
}
return( null );
}
public Download[]
getDownloads()
{
List res_l = new ArrayList();
// we have to use the global manager's ordering as it
// hold this
List dms = global_manager.getDownloadManagers();
try{
listeners_mon.enter();
for (int i=0;i<dms.size();i++){
Object dl = download_map.get( dms.get(i));
if ( dl != null ){
res_l.add( dl );
}
}
if ( res_l.size() < downloads.size()){
// now add in any external downloads
for (int i=0;i<downloads.size();i++){
Download download = (Download)downloads.get(i);
if ( !res_l.contains( download )){
res_l.add( download );
}
}
}
}finally{
listeners_mon.exit();
}
Download[] res = new Download[res_l.size()];
res_l.toArray( res );
return( res );
}
public Download[]
getDownloads(boolean bSorted)
{
if (bSorted){
return getDownloads();
}
try{
listeners_mon.enter();
Download[] res = new Download[downloads.size()];
downloads.toArray( res );
return( res );
}finally{
listeners_mon.exit();
}
}
public void
pauseDownloads()
{
global_manager.pauseDownloads();
}
public boolean
canPauseDownloads()
{
return global_manager.canPauseDownloads();
}
public void
resumeDownloads()
{
global_manager.resumeDownloads();
}
public boolean
canResumeDownloads()
{
return global_manager.canResumeDownloads();
}
public void
startAllDownloads()
{
global_manager.startAllDownloads();
}
public void
stopAllDownloads()
{
global_manager.stopAllDownloads();
}
public DownloadManagerStats
getStats()
{
return( stats );
}
public boolean
isSeedingOnly()
{
return( global_manager.isSeedingOnly());
}
public void
addListener(
DownloadManagerListener l )
{
List downloads_copy;
try{
listeners_mon.enter();
List new_listeners = new ArrayList( listeners );
new_listeners.add( l );
listeners = new_listeners;
downloads_copy = new ArrayList( downloads );
}finally{
listeners_mon.exit();
}
for (int i=0;i<downloads_copy.size();i++){
try{
l.downloadAdded((Download)downloads_copy.get(i));
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}
public void
removeListener(
DownloadManagerListener l )
{
try{
listeners_mon.enter();
List new_listeners = new ArrayList( listeners );
new_listeners.remove(l);
listeners = new_listeners;
}finally{
listeners_mon.exit();
}
}
public void
initialised(
DownloadManager manager )
{
DownloadImpl dl;
try{
listeners_mon.enter();
dl = new DownloadImpl( manager );
pending_dls.put( manager, dl );
}finally{
listeners_mon.exit();
}
Iterator it = dwba_listeners.iterator();
while( it.hasNext()){
try{
((DownloadWillBeAddedListener)it.next()).initialised(dl);
}catch( Throwable e ){
Debug.printStackTrace(e);
}
}
}
public void
addDownloadWillBeAddedListener(
DownloadWillBeAddedListener listener )
{
try{
listeners_mon.enter();
dwba_listeners.add( listener );
if ( dwba_listeners.size() == 1 ){
global_manager.addDownloadManagerInitialisationAdapter( this );
}
}finally{
listeners_mon.exit();
}
}
public void
removeDownloadWillBeAddedListener(
DownloadWillBeAddedListener listener )
{
try{
listeners_mon.enter();
dwba_listeners.remove( listener );
if ( dwba_listeners.size() == 0 ){
global_manager.removeDownloadManagerInitialisationAdapter( this );
}
}finally{
listeners_mon.exit();
}
}
public void
addExternalDownload(
Download download )
{
List listeners_ref = null;
try{
listeners_mon.enter();
if ( downloads.contains( download )){
return;
}
downloads.add( download );
listeners_ref = listeners;
}finally{
listeners_mon.exit();
}
for (int i=0;i<listeners_ref.size();i++){
try{
((DownloadManagerListener)listeners_ref.get(i)).downloadAdded( download );
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}
public void
removeExternalDownload(
Download download )
{
List listeners_ref = null;
try{
listeners_mon.enter();
if ( !downloads.contains( download )){
return;
}
downloads.remove( download );
listeners_ref = listeners;
}finally{
listeners_mon.exit();
}
for (int i=0;i<listeners_ref.size();i++){
try{
((DownloadManagerListener)listeners_ref.get(i)).downloadRemoved( download );
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}
public boolean
isExteralDownload(
Download download )
{
return( !( download instanceof DownloadImpl ));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -