/*
* Created on 12 Feb 2007.
* Created by Allan Crooks.
* Copyright (C) 2007 Aelitis, All Rights Reserved.
*
* This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version. This program is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the GNU General Public License for more details. You should have received a
* copy of the GNU General Public License along with this program; if not, write
* to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA. AELITIS, SAS au capital de 46,603.30 euros 8 Allee
* Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*/
package org.gudy.azureus2.plugins.download;
import org.gudy.azureus2.plugins.torrent.TorrentAttribute;
/**
* This interface defines what methods an object should have defined to be able
* to inform listener objects about various events which occur on a download.
*
* In previous versions of Azureus, the {@link Download} class was the only
* interface which defined these methods - now
* {@link DownloadManager#getGlobalDownloadEventNotifier} supports these methods too.
*
* @since 3.0.0.9
* @author amc1
*/
public interface DownloadEventNotifier {
/**
* Adds a listener that will be informed of changes to a download's state.
*
* @param l The listener to add.
* @since 2.0.7.0
*/
public void addListener(DownloadListener l);
/**
* Removes a listener object added via the
* {@link #addDownloadListener(DownloadListener)} method.
*
* @param l The listener to remove.
* @since 2.0.7.0
*/
public void removeListener(DownloadListener l);
/**
* Adds a listener that will be informed when the latest announce/scrape
* results change.
* <p>
* Listener events will be immediately triggered after the listener has been
* added.
*
* @param l The listener to add.
* @since 2.0.7.0
*/
public void addTrackerListener(DownloadTrackerListener l);
/**
* Adds a listener that will be informed when the latest announce/scrape
* results change.
*
* @param l The listener to add.
* @param immediateTrigger Whether to immediately trigger listener's events.
* @since 2.4.0.3
*/
public void addTrackerListener(DownloadTrackerListener l, boolean immediateTrigger);
/**
* Removes a listener object added via the
* {@link #addTrackerListener(DownloadTrackerListener)} or
* {@link #addTrackerListener(DownloadTrackerListener, boolean)} method.
*
* @param l The listener to remove.
* @since 2.0.7.0
*/
public void removeTrackerListener(DownloadTrackerListener l);
/**
* Adds a listener that will be informed when a download is about to be
* removed. This gives the implementor the opportunity to veto the removal.
*
* @param l The listener to add.
* @since 2.0.7.0
*/
public void addDownloadWillBeRemovedListener(DownloadWillBeRemovedListener l);
/**
* Removes a listener object added via the
* {@link #addDownloadWillBeRemovedListener(DownloadWillBeRemovedListener)}
* method.
*
* @param l The listener to remove.
* @since 2.0.7.0
*/
public void removeDownloadWillBeRemovedListener(
DownloadWillBeRemovedListener l);
/**
* Adds a listener that will be invoked when a request is made to activate a
* torrent.
*
* @param l The listener to add.
* @since 2.4.0.3
*/
public void addActivationListener(DownloadActivationListener l);
/**
* Removes a listener object added via the
* {@link #addActivationListener(DownloadActivationListener)} method.
*
* @param l The listener to remove.
* @since 2.4.0.3
*/
public void removeActivationListener(DownloadActivationListener l);
/**
* Adds a listener that will be informed of when peer managers have been
* added / removed for a download.
*
* @param l The listener to add.
* @since 2.1.0.0
*/
public void addPeerListener(DownloadPeerListener l);
/**
* Removes a listener object added via the
* {@link #addPeerListener(DownloadPeerListener)} method.
*
* @param l The listener to remove.
* @since 2.1.0.0
*/
public void removePeerListener(DownloadPeerListener l);
/**
* Adds a listener that will be informed of when properties on a download
* have been read / modified.
*
* @param l The listener to add.
* @since 2.2.0.2
* @deprecated Use {@link #addAttributeListener(DownloadAttributeListener, TorrentAttribute, int)}
* instead - support for this method will be removed in future.
*/
public void addPropertyListener(DownloadPropertyListener l);
/**
* Removes a listener object added via the
* {@link #addPropertyListener(DownloadPropertyListener)} method.
*
* @param l The listener to remove.
* @since 2.2.0.2
*/
public void removePropertyListener(DownloadPropertyListener l);
/**
* Adds a listener that will be informed of when attributes on a download
* have been read / modified.
*
* @param l The listener to add.
* @param attr The torrent attribute to be notified about.
* @param event_type The type of event to be notified of, as defined on {@link DownloadAttributeListener}.
* @since 3.3.0.5
*/
public void addAttributeListener(DownloadAttributeListener l, TorrentAttribute attr, int event_type);
/**
* Removes a listener object added via the
* {@link #addAttributeListener(DownloadAttributeListener, TorrentAttribute, int) method.
*
* @param l The listener to remove.
* @param attr The torrent attribute which it registered with.
* @param event_type The type of event which it registered with.
* @since 3.3.0.5
*/
public void removeAttributeListener(DownloadAttributeListener l, TorrentAttribute attr, int event_type);
}