Class DownloadManagerImpl
java.lang.Object
com.biglybt.pifimpl.local.download.DownloadManagerImpl
- All Implemented Interfaces:
DownloadManagerInitialisationAdapter
,DownloadManager
public class DownloadManagerImpl
extends Object
implements DownloadManager, DownloadManagerInitialisationAdapter
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final File
protected static AEMonitor
private FrequencyLimitedDispatcher
private boolean
private Map
<DownloadManager, DownloadImpl> private CopyOnWriteList
<DownloadStubListener> private ByteArrayHashMap
<DownloadStubImpl> private List
<DownloadStubImpl> private final DownloadEventNotifierImpl
private final GlobalManager
private Set
<DownloadStub> private List
<DownloadManagerListener> private AEMonitor
private Map
<DownloadManager, DownloadImpl> protected static DownloadManagerImpl
private final DownloadManagerStats
private static final String
private final TagManager
Fields inherited from interface com.biglybt.core.download.DownloadManagerInitialisationAdapter
ACT_ASSIGNS_TAGS, ACT_NONE, ACT_PROCESSES_TAGS
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddDownload
(Torrent torrent) Add a torrent from a "Torrent" object.addDownload
(Torrent torrent, File torrent_file, File data_location) Add a torrent from a "Torrent" object and point it at the data location.addDownload
(Torrent torrent, File torrent_file, File data_location, int initial_state) void
addDownload
(File fileName) Add a torrent from a file.void
addDownload
(URL url) add a torrent from a URL.void
addDownload
(URL url, boolean auto_download) Add a torrent from a URL with explicit auto-download optionvoid
addDownload
(URL url, URL referrer) add a torrent from a URL.void
addDownload
(URL url, URL referrer, boolean auto_download, Map request_properties) void
addDownload
(URL url, Map request_properties) add a torrent from a URL and use the supplied request propertiesprotected void
addDownloadStopped
(Torrent torrent, File torrent_location, File data_location) Explicit way of adding a download in a stopped statevoid
addDownloadStubListener
(DownloadStubListener l, boolean inform_of_current) void
void
Add a listener that will be informed when a download is added to and removed from the client.void
addListener
(DownloadManagerListener l, boolean notify_of_current_downloads) Add a listener that will be informed when a download is added to and removed from the client.addNonPersistentDownload
(Torrent torrent, File torrent_file, File data_location) Add a non-persistent download.addNonPersistentDownloadStopped
(Torrent torrent, File torrent_file, File data_location) boolean
boolean
boolean
canStubbify
(DownloadImpl download) void
clearNonPersistentDownloadState
(byte[] hash) Although non-persistent downloads themselves aren't rememebered across restarts, some internal stats are (for continuity, like total up/down, file allocation state) - this method allows this to be removedprotected Download
destubbify
(DownloadStubImpl stub) int
Unfortuately order can be important when firing off initialisation adapters, in particular if one listener assigns tags to a download it needs to do this before any other listeners that might process a download's tagsReturns the defaultSaveLocationManager
object that controls where downloads should be placed.getDownload
(byte[] hash) Gets a download given its hashprotected DownloadImpl
protected Download
getDownload
(TOTorrent torrent) getDownload
(Torrent _torrent) Gets the download for a particular torrent, returns null if not foundDownload[]
Gets all the downloads.Download[]
getDownloads
(boolean bSorted) Gets all the downloads.static Download
static DownloadImpl
Retrieve the plugin Downlaod object related to the DownloadManagerstatic DownloadImpl[]
static Download
getDownloadStatic
(TOTorrent torrent) int
Return aDownloadEventNotifier
object which can be used as an easy way to register listeners against all downloads handled by the client.protected int
Returns the currentSaveLocationManager
object which decides where downloads should be placed.static DownloadManagerImpl
getSingleton
(Core core) getStats()
Get the download manager statisticsstatic TOTorrent
getStubTorrent
(byte[] hash) protected TOTorrent
getTorrent
(DownloadStubImpl stub) private void
informAdded
(DownloadStub stub, boolean preparing) private void
informRemoved
(DownloadStub stub, boolean preparing) void
initialised
(DownloadManager manager, boolean for_seeding) boolean
indicates whether or not all active downloads are in a seeding (or effective) seeding statelookupDownloadStub
(byte[] hash) void
pause all running downloadsprivate void
protected void
remove
(DownloadStubImpl stub) void
void
void
Removes a previously added listener.void
removeListener
(DownloadManagerListener l, boolean notify_of_current_downloads) Removes a previously added listener.void
resume previously paused downloadsvoid
Registers an object to be in control of determining the default save location for downloads.void
starts all non-running downloadsvoid
stops all running downloadsprotected DownloadStub
stubbify
(DownloadImpl download) protected void
updated
(DownloadStubImpl stub) private void
-
Field Details
-
singleton
-
class_mon
-
global_manager
-
stats
-
global_dl_notifier
-
tag_manager
-
listeners
-
dwba_listeners
-
listeners_mon
-
pending_dls
-
download_map
-
STUB_CONFIG_FILE
- See Also:
-
ARCHIVE_DIR
-
download_stubs
-
download_stub_map
-
download_stub_listeners
-
dirty_stub_dispatcher
-
dirty_stubs
private boolean dirty_stubs -
informing_of_add
-
-
Constructor Details
-
DownloadManagerImpl
-
-
Method Details
-
getSingleton
-
addDownload
Description copied from interface:DownloadManager
Add a torrent from a file. This may prompt the user for a download location etc. if required. This is an async operation, so no Download is returned. If you want to force a download to be added without prompting the user, you should create a Torrent object first, and then use an alternative addDownload method.- Specified by:
addDownload
in interfaceDownloadManager
- Parameters:
fileName
-- See Also:
-
addDownload
Description copied from interface:DownloadManager
add a torrent from a URL. This will prompt the user for download location etc. if required This is an async operation so no Download returned- Specified by:
addDownload
in interfaceDownloadManager
- Parameters:
url
-
-
addDownload
Description copied from interface:DownloadManager
Add a torrent from a URL with explicit auto-download option- Specified by:
addDownload
in interfaceDownloadManager
- Parameters:
url
-auto_download
-- Throws:
DownloadException
-
addDownload
Description copied from interface:DownloadManager
add a torrent from a URL. This will prompt the user for download location etc. if required This is an async operation so no Download returned- Specified by:
addDownload
in interfaceDownloadManager
- Parameters:
url
-referrer
-
-
addDownload
Description copied from interface:DownloadManager
add a torrent from a URL and use the supplied request properties- Specified by:
addDownload
in interfaceDownloadManager
- Parameters:
url
-request_properties
-
-
addDownload
-
addDownloadManager
-
addDownload
Description copied from interface:DownloadManager
Add a torrent from a "Torrent" object. The default torrent file and data locations will be used if defined - a DownloadException will be thrown if they're not. You can explicitly set these values by using theaddDownload(Torrent, File, File)
method.- Specified by:
addDownload
in interfaceDownloadManager
- Parameters:
torrent
-- Returns:
- Throws:
DownloadException
- See Also:
-
addDownload
public Download addDownload(Torrent torrent, File torrent_file, File data_location) throws DownloadException Description copied from interface:DownloadManager
Add a torrent from a "Torrent" object and point it at the data location. The torrent_location should be the location of where the torrent file is on disk. This will be the torrent file that the client will use internally. If null is passed, then a file to store the torrent data in will be automatically created by the client.- Specified by:
addDownload
in interfaceDownloadManager
- Parameters:
torrent
- The torrent object to create a download with.torrent_file
- The location of the file on disk - ifnull
, a file to store the torrent data into will be created automatically.data_location
- null -> user default data save location if defined- Returns:
- support for null params for torrent_location/data_location since 2.1.0.4
- Throws:
DownloadException
-
addDownload
public Download addDownload(Torrent torrent, File torrent_file, File data_location, int initial_state) throws DownloadException - Throws:
DownloadException
-
addDownloadStopped
public Download addDownloadStopped(Torrent torrent, File torrent_location, File data_location) throws DownloadException Description copied from interface:DownloadManager
Explicit way of adding a download in a stopped state- Specified by:
addDownloadStopped
in interfaceDownloadManager
- Parameters:
torrent
-torrent_location
-data_location
-- Returns:
- Throws:
DownloadException
-
addNonPersistentDownload
public Download addNonPersistentDownload(Torrent torrent, File torrent_file, File data_location) throws DownloadException Description copied from interface:DownloadManager
Add a non-persistent download. Such downloads are not persisted by the client and as such will not be remembered across an client close and restart.- Specified by:
addNonPersistentDownload
in interfaceDownloadManager
- Parameters:
torrent
-torrent_file
-data_location
-- Returns:
- Throws:
DownloadException
-
addNonPersistentDownloadStopped
public Download addNonPersistentDownloadStopped(Torrent torrent, File torrent_file, File data_location) throws DownloadException - Specified by:
addNonPersistentDownloadStopped
in interfaceDownloadManager
- Throws:
DownloadException
-
clearNonPersistentDownloadState
public void clearNonPersistentDownloadState(byte[] hash) Description copied from interface:DownloadManager
Although non-persistent downloads themselves aren't rememebered across restarts, some internal stats are (for continuity, like total up/down, file allocation state) - this method allows this to be removed- Specified by:
clearNonPersistentDownloadState
in interfaceDownloadManager
- Parameters:
hash
-
-
getInitialState
protected int getInitialState() -
getDownload
- Throws:
DownloadException
-
getDownloadStatic
-
getDownloadStatic
Retrieve the plugin Downlaod object related to the DownloadManager- Parameters:
dm
- DownloadManager to find- Returns:
- plugin object
- Throws:
DownloadException
-
getDownloadStatic
- Throws:
DownloadException
-
getDownload
- Throws:
DownloadException
-
getDownload
- Throws:
DownloadException
-
getDownloadStatic
- Throws:
DownloadException
-
getDownload
Description copied from interface:DownloadManager
Gets the download for a particular torrent, returns null if not found- Specified by:
getDownload
in interfaceDownloadManager
- Parameters:
_torrent
-- Returns:
-
getDownload
Description copied from interface:DownloadManager
Gets a download given its hash- Specified by:
getDownload
in interfaceDownloadManager
- Parameters:
hash
-- Returns:
-
getDownloads
Description copied from interface:DownloadManager
Gets all the downloads. Returned in Download "index" order- Specified by:
getDownloads
in interfaceDownloadManager
- Returns:
-
getDownloads
Description copied from interface:DownloadManager
Gets all the downloads.- Specified by:
getDownloads
in interfaceDownloadManager
- Parameters:
bSorted
- true - Returned in Download "index" order.
false - Order not guaranteed. Faster retrieval.- Returns:
- array of Download object
-
pauseDownloads
public void pauseDownloads()Description copied from interface:DownloadManager
pause all running downloads- Specified by:
pauseDownloads
in interfaceDownloadManager
-
canPauseDownloads
public boolean canPauseDownloads()- Specified by:
canPauseDownloads
in interfaceDownloadManager
-
resumeDownloads
public void resumeDownloads()Description copied from interface:DownloadManager
resume previously paused downloads- Specified by:
resumeDownloads
in interfaceDownloadManager
-
canResumeDownloads
public boolean canResumeDownloads()- Specified by:
canResumeDownloads
in interfaceDownloadManager
-
startAllDownloads
public void startAllDownloads()Description copied from interface:DownloadManager
starts all non-running downloads- Specified by:
startAllDownloads
in interfaceDownloadManager
-
stopAllDownloads
public void stopAllDownloads()Description copied from interface:DownloadManager
stops all running downloads- Specified by:
stopAllDownloads
in interfaceDownloadManager
-
getStats
Description copied from interface:DownloadManager
Get the download manager statistics- Specified by:
getStats
in interfaceDownloadManager
- Returns:
-
isSeedingOnly
public boolean isSeedingOnly()Description copied from interface:DownloadManager
indicates whether or not all active downloads are in a seeding (or effective) seeding state- Specified by:
isSeedingOnly
in interfaceDownloadManager
- Returns:
-
addListener
Description copied from interface:DownloadManager
Add a listener that will be informed when a download is added to and removed from the client. Invoking this method is equivalent toaddListener(l, true)
.- Specified by:
addListener
in interfaceDownloadManager
- Parameters:
l
- The listener to add.- See Also:
-
addListener
Description copied from interface:DownloadManager
Add a listener that will be informed when a download is added to and removed from the client.- Specified by:
addListener
in interfaceDownloadManager
- Parameters:
l
- The listener to add.notify_of_current_downloads
- true - if you want the listener to have itsdownloadAdded
method invoked immediately with all downloads currently managed by the client. false - if you only want to be notified about new downloads added after this method is called.
-
removeListener
Description copied from interface:DownloadManager
Removes a previously added listener. Invoking this method is equivalent toremoveListener(l, false)
.- Specified by:
removeListener
in interfaceDownloadManager
- Parameters:
l
- The listener to remove.- See Also:
-
removeListener
Description copied from interface:DownloadManager
Removes a previously added listener.- Specified by:
removeListener
in interfaceDownloadManager
- Parameters:
l
- The listener to remove.notify_of_current_downloads
- true - if you want the listener to have itsdownloadRemoved
method invoked immediately with all downloads currently managed by the client, false otherwise.
-
initialised
- Specified by:
initialised
in interfaceDownloadManagerInitialisationAdapter
-
getActions
public int getActions()Description copied from interface:DownloadManagerInitialisationAdapter
Unfortuately order can be important when firing off initialisation adapters, in particular if one listener assigns tags to a download it needs to do this before any other listeners that might process a download's tags- Specified by:
getActions
in interfaceDownloadManagerInitialisationAdapter
- Returns:
-
addDownloadWillBeAddedListener
- Specified by:
addDownloadWillBeAddedListener
in interfaceDownloadManager
-
removeDownloadWillBeAddedListener
- Specified by:
removeDownloadWillBeAddedListener
in interfaceDownloadManager
-
getGlobalDownloadEventNotifier
Description copied from interface:DownloadManager
Return aDownloadEventNotifier
object which can be used as an easy way to register listeners against all downloads handled by the client.- Specified by:
getGlobalDownloadEventNotifier
in interfaceDownloadManager
-
setSaveLocationManager
Description copied from interface:DownloadManager
Registers an object to be in control of determining the default save location for downloads. You can set it to null to remove any object which was previously set.By default, the client will use its default save location manager which handles on-completion and on-removal events.
- Specified by:
setSaveLocationManager
in interfaceDownloadManager
- Parameters:
manager
- The new manager object to use.
-
getSaveLocationManager
Description copied from interface:DownloadManager
Returns the currentSaveLocationManager
object which decides where downloads should be placed.- Specified by:
getSaveLocationManager
in interfaceDownloadManager
- Returns:
- The manager object currently in use.
-
getDefaultSaveLocationManager
Description copied from interface:DownloadManager
Returns the defaultSaveLocationManager
object that controls where downloads should be placed.- Specified by:
getDefaultSaveLocationManager
in interfaceDownloadManager
- Returns:
- The default save location manager object.
-
readStubConfig
private void readStubConfig() -
writeStubConfig
private void writeStubConfig() -
canStubbify
-
stubbify
protected DownloadStub stubbify(DownloadImpl download) throws DownloadException, DownloadRemovalVetoException -
destubbify
- Throws:
DownloadException
-
remove
-
getStubTorrent
-
getTorrent
-
updated
-
getDownloadStubs
- Specified by:
getDownloadStubs
in interfaceDownloadManager
-
getDownloadStubCount
public int getDownloadStubCount()- Specified by:
getDownloadStubCount
in interfaceDownloadManager
-
lookupDownloadStub
- Specified by:
lookupDownloadStub
in interfaceDownloadManager
-
informAdded
-
informRemoved
-
addDownloadStubListener
- Specified by:
addDownloadStubListener
in interfaceDownloadManager
-
removeDownloadStubListener
- Specified by:
removeDownloadStubListener
in interfaceDownloadManager
-