📄 downloadimpl.java
字号:
}
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;}
return download_manager.getDownloadState().hasAttribute(name);
}
public boolean getBooleanAttribute(TorrentAttribute attribute) {
String name = convertAttribute(attribute);
if (name == null) {return false;} // Default value
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) {return 0;} // Default value
return download_manager.getDownloadState().getIntAttribute(name);
}
public void setIntAttribute(TorrentAttribute attribute, int value) {
String name = convertAttribute(attribute);
if (name != null) {
download_manager.getDownloadState().setIntAttribute(name, value);
}
}
public long getLongAttribute(TorrentAttribute attribute) {
String name = convertAttribute(attribute);
if (name == null) {return 0L;} // Default value
return download_manager.getDownloadState().getLongAttribute(name);
}
public void setLongAttribute(TorrentAttribute attribute, long value) {
String name = convertAttribute(attribute);
if (name != null) {
download_manager.getDownloadState().setLongAttribute(name, value);
}
}
protected String
convertAttribute(
TorrentAttribute attribute )
{
if ( attribute.getName() == TorrentAttribute.TA_CATEGORY ){
return( DownloadManagerState.AT_CATEGORY );
}else if ( attribute.getName() == TorrentAttribute.TA_NETWORKS ){
return( DownloadManagerState.AT_NETWORKS );
}else if ( attribute.getName() == TorrentAttribute.TA_TRACKER_CLIENT_EXTENSIONS ){
return( DownloadManagerState.AT_TRACKER_CLIENT_EXTENSIONS );
}else if ( attribute.getName() == TorrentAttribute.TA_PEER_SOURCES ){
return( DownloadManagerState.AT_PEER_SOURCES );
}else if ( attribute.getName() == TorrentAttribute.TA_DISPLAY_NAME ){
return( DownloadManagerState.AT_DISPLAY_NAME );
}else if ( attribute.getName() == TorrentAttribute.TA_USER_COMMENT ){
return( DownloadManagerState.AT_USER_COMMENT );
}else if ( attribute.getName() == TorrentAttribute.TA_RELATIVE_SAVE_PATH ){
return( DownloadManagerState.AT_RELATIVE_SAVE_PATH );
}else if ( attribute.getName() == TorrentAttribute.TA_CONTENT_MAP ){
return( DownloadManagerState.AT_CONTENT_MAP );
}else if ( attribute.getName() == TorrentAttribute.TA_SHARE_PROPERTIES ){
// this is a share-level attribute only, not propagated to individual downloads
return( null );
}else if ( attribute.getName().startsWith( "Plugin." )){
return( attribute.getName());
}else{
Debug.out( "Can't convert attribute '" + attribute.getName() + "'" );
return( null );
}
}
protected TorrentAttribute
convertAttribute(
String name )
{
if ( name.equals( DownloadManagerState.AT_CATEGORY )){
return( TorrentManagerImpl.getSingleton().getAttribute( TorrentAttribute.TA_CATEGORY ));
}else if ( name.equals( DownloadManagerState.AT_NETWORKS )){
return( TorrentManagerImpl.getSingleton().getAttribute( TorrentAttribute.TA_NETWORKS ));
}else if ( name.equals( DownloadManagerState.AT_PEER_SOURCES )){
return( TorrentManagerImpl.getSingleton().getAttribute( TorrentAttribute.TA_PEER_SOURCES ));
}else if ( name.equals( DownloadManagerState.AT_TRACKER_CLIENT_EXTENSIONS )){
return( TorrentManagerImpl.getSingleton().getAttribute( TorrentAttribute.TA_TRACKER_CLIENT_EXTENSIONS ));
}else if ( name.equals ( DownloadManagerState.AT_DISPLAY_NAME)){
return ( TorrentManagerImpl.getSingleton().getAttribute( TorrentAttribute.TA_DISPLAY_NAME ));
}else if ( name.equals ( DownloadManagerState.AT_USER_COMMENT)){
return ( TorrentManagerImpl.getSingleton().getAttribute( TorrentAttribute.TA_USER_COMMENT ));
}else if ( name.equals ( DownloadManagerState.AT_RELATIVE_SAVE_PATH)){
return ( TorrentManagerImpl.getSingleton().getAttribute( TorrentAttribute.TA_RELATIVE_SAVE_PATH ));
}else if ( name.equals ( DownloadManagerState.AT_CONTENT_MAP)){
return ( TorrentManagerImpl.getSingleton().getAttribute( TorrentAttribute.TA_CONTENT_MAP ));
}else if ( name.startsWith( "Plugin." )){
return( TorrentManagerImpl.getSingleton().getAttribute( name ));
}else{
return( null );
}
}
public void setCategory(String sName) {
Category category = CategoryManager.getCategory(sName);
if (category == null)
category = CategoryManager.createCategory(sName);
download_manager.getDownloadState().setCategory(category);
}
public boolean isPersistent() {
return download_manager.isPersistent();
}
public void
remove()
throws DownloadException, DownloadRemovalVetoException
{
remove( false, false );
}
public void
remove(
boolean delete_torrent,
boolean delete_data )
throws DownloadException, DownloadRemovalVetoException
{
int dl_state = download_manager.getState();
if ( dl_state == DownloadManager.STATE_STOPPED ||
dl_state == DownloadManager.STATE_ERROR ||
dl_state == DownloadManager.STATE_QUEUED ){
GlobalManager globalManager = download_manager.getGlobalManager();
try{
globalManager.canDownloadManagerBeRemoved(download_manager );
if ( delete_torrent || delete_data ){
download_manager.stopIt( dl_state, delete_torrent, delete_data );
}
globalManager.removeDownloadManager(download_manager);
}catch( GlobalManagerDownloadRemovalVetoException e ){
throw( new DownloadRemovalVetoException( e.getMessage()));
}
}else{
throw( new DownloadRemovalVetoException( MessageText.getString("plugin.download.remove.veto.notstopped")));
}
}
public boolean
canBeRemoved()
throws DownloadRemovalVetoException
{
int dl_state = download_manager.getState();
if ( dl_state == DownloadManager.STATE_STOPPED ||
dl_state == DownloadManager.STATE_ERROR ||
dl_state == DownloadManager.STATE_QUEUED ){
GlobalManager globalManager = download_manager.getGlobalManager();
try{
globalManager.canDownloadManagerBeRemoved(download_manager);
}catch( GlobalManagerDownloadRemovalVetoException e ){
throw( new DownloadRemovalVetoException( e.getMessage(),e.isSilent()));
}
}else{
throw( new DownloadRemovalVetoException( MessageText.getString("plugin.download.remove.veto.notstopped")));
}
return( true );
}
public DownloadStats
getStats()
{
return( download_stats );
}
public boolean
isComplete()
{
int state = getState();
// need seeding check, some sort of timing issue with
// statechanged event firing on completion and isDownloadComplete(false)
// not being complete yet
return state == ST_SEEDING || download_manager.isDownloadComplete(false);
}
public boolean isComplete(boolean bIncludeDND) {
return download_manager.isDownloadComplete(bIncludeDND);
}
public boolean
isChecking()
{
return( download_stats.getCheckingDoneInThousandNotation() != -1 );
}
protected void
isRemovable()
throws DownloadRemovalVetoException
{
// no sync required, see update code
for (int i=0;i<removal_listeners.size();i++){
try{
((DownloadWillBeRemovedListener)removal_listeners.get(i)).downloadWillBeRemoved(this);
}catch( DownloadRemovalVetoException e ){
throw( e );
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}
protected void
destroy()
{
download_manager.removeListener( this );
}
// DownloadManagerListener methods
public void
stateChanged(
DownloadManager manager,
int state )
{
int prev_state = latest_state;
latest_state = convertState(state);
// System.out.println("Plug:prev = " + prev_state + ", curr = " + latest_state );
boolean curr_forcedStart = isForceStart();
if ( prev_state != latest_state || latest_forcedStart != curr_forcedStart ){
latest_forcedStart = curr_forcedStart;
for (int i=0;i<listeners.size();i++){
try{
((DownloadListener)listeners.get(i)).stateChanged( this, prev_state, latest_state );
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}
}
public void
downloadComplete(DownloadManager manager)
{
}
public void
completionChanged(
DownloadManager manager,
boolean bCompleted)
{
}
public void
filePriorityChanged( DownloadManager download, org.gudy.azureus2.core3.disk.DiskManagerFileInfo file )
{
}
public void
positionChanged(
DownloadManager download,
int oldPosition,
int newPosition)
{
for (int i = 0; i < listeners.size(); i++) {
try {
((DownloadListener)listeners.get(i)).positionChanged(this, oldPosition, newPosition);
} catch (Throwable e) {
Debug.printStackTrace( e );
}
}
}
public void
addListener(
DownloadListener l )
{
try{
listeners_mon.enter();
List new_listeners = new ArrayList( listeners );
new_listeners.add(l);
listeners = new_listeners;
}finally{
listeners_mon.exit();
}
}
public void
removeListener(
DownloadListener l )
{
try{
listeners_mon.enter();
List new_listeners = new ArrayList(listeners);
new_listeners.remove(l);
listeners = new_listeners;
}finally{
listeners_mon.exit();
}
}
public DownloadAnnounceResult
getLastAnnounceResult()
{
TRTrackerAnnouncer tc = download_manager.getTrackerClient();
if ( tc != null ){
last_announce_result.setContent( tc.getLastResponse());
}
return( last_announce_result );
}
public DownloadScrapeResult
getLastScrapeResult()
{
TRTrackerScraperResponse response = download_manager.getTrackerScrapeResponse();
last_scrape_result.setContent( response );
return( last_scrape_result );
}
public void
scrapeResult(
TRTrackerScraperResponse response )
{
last_scrape_result.setContent( response );
for (int i=0;i<tracker_listeners.size();i++){
try{
((DownloadTrackerListener)tracker_listeners.get(i)).scrapeResult( last_scrape_result );
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}
public void
announceResult(
TRTrackerAnnouncerResponse response )
{
last_announce_result.setContent( response );
List tracker_listeners_ref = tracker_listeners;
for (int i=0;i<tracker_listeners_ref.size();i++){
try{
((DownloadTrackerListener)tracker_listeners_ref.get(i)).announceResult( last_announce_result );
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}
public void
setAnnounceResult(
DownloadAnnounceResult result )
{
download_manager.setAnnounceResult( result );
}
public void
setScrapeResult(
DownloadScrapeResult result )
{
download_manager.setScrapeResult( result );
}
public void
stateChanged(
DownloadManagerState state,
DownloadManagerStateEvent event )
{
final int type = event.getType();
if ( type == DownloadManagerStateEvent.ET_ATTRIBUTE_WRITTEN ||
type == DownloadManagerStateEvent.ET_ATTRIBUTE_WILL_BE_READ ){
String name = (String)event.getData();
List property_listeners_ref = property_listeners;
final TorrentAttribute attr = convertAttribute( name );
if ( attr != null ){
for (int i=0;i<property_listeners_ref.size();i++){
try{
((DownloadPropertyListener)property_listeners_ref.get(i)).propertyChanged(
this,
new DownloadPropertyEvent()
{
public int
getType()
{
return( type==DownloadManagerStateEvent.ET_ATTRIBUTE_WRITTEN
?DownloadPropertyEvent.PT_TORRENT_ATTRIBUTE_WRITTEN
:DownloadPropertyEvent.PT_TORRENT_ATTRIBUTE_WILL_BE_READ );
}
public Object
getData()
{
return( attr );
}
});
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
}
}
}
public void
addPropertyListener(
DownloadPropertyListener l )
{
try{
tracker_listeners_mon.enter();
List new_property_listeners = new ArrayList( property_listeners );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -