package com.limegroup.gnutella;
import java.io.File;
import java.util.Set;
import com.limegroup.gnutella.browser.MagnetOptions;
import com.limegroup.gnutella.chat.Chatter;
import com.limegroup.gnutella.search.HostData;
import com.limegroup.gnutella.version.UpdateInformation;
/**
* Callback to notify the GUI of asynchronous backend events.
* The methods in this fall into the following categories:
*
* <ul>
* <li>Query replies (for displaying results) and query strings
* (for the monitor)
* <li>Update in shared file statistics
* <li>Change of connection state
* <li>New or dead uploads or downloads
* <li>New chat requests and chat messages
* <li>Error messages
* </ul>
*/
public interface ActivityCallback extends DownloadCallback, FileEventListener
{
/**
* The address of the program has changed or we've
* just accepted our first incoming connection.
*/
public void addressStateChanged();
/**
* Add a new unitialized connection.
*/
public void connectionInitializing(Connection c);
/**
* Mark a connection as initialized
*/
public void connectionInitialized(Connection c);
/**
* Mark a connection as closed
*/
public void connectionClosed(Connection c);
/**
* Notify the UI that we are disconnected from the network
*
*/
public void disconnected();
/**
* Notifies the UI that a new query result has come in to the backend.
*
* @param rfd the descriptor for the remote file
* @param data the data for the host returning the result
* @param locs the <tt>Set</tt> of alternate locations for the file
*/
public void handleQueryResult(RemoteFileDesc rfd, HostData data, Set locs);
/**
* Add a query string to the monitor screen
*/
public void handleQueryString( String query );
/** Add an uploader to the upload window */
public void addUpload(Uploader u);
/** Remove an uploader from the upload window. */
public void removeUpload(Uploader u);
/** Add a new incoming chat connection */
public void acceptChat(Chatter ctr);
/** A new message is available from the given chatter */
public void receiveMessage(Chatter chr);
/** The given chatter is no longer available */
public void chatUnavailable(Chatter chatter);
/** display an error message in the chat gui */
public void chatErrorMessage(Chatter chatter, String str);
/** display an error message since the browse host failed.
* @param guid The GUID of the browse host.
*/
public void browseHostFailed(GUID guid);
/**
* Notification that the file manager is beginning loading.
*/
public void fileManagerLoading();
/**
* Notifies a user that the filemanager has completely loaded.
*/
public void fileManagerLoaded();
/**
* Notifies the GUI that the user is attempting to share a sensitive
* directory. Returns true if the sensitive directory should be shared.
*/
public boolean warnAboutSharingSensitiveDirectory(final File dir);
/**
* Notifies the GUI when a FileDesc was either added, removed,
* changed or renamed. This event is triggered by FileManager
* or MetaFileManager.
*/
public void handleFileEvent(FileManagerEvent evt);
/**
* Notifies the GUI that the given shared file has new information.
*
* @param file The File that needs updating
*/
public void handleSharedFileUpdate(File file);
/**
* Notification that an update became available.
*/
public void updateAvailable(UpdateInformation info);
/**
* Sets the enabled/disabled state of file annotation.
*/
public void setAnnotateEnabled(boolean enabled);
/**
* Notifies the GUI that all active uploads have been completed.
*/
public void uploadsComplete();
/**
* Tell the GUI to deiconify.
*/
public void restoreApplication();
/**
* @return true If the guid that maps to a query result screen is still
* available/viewable to the user.
*/
public boolean isQueryAlive(GUID guid);
/**
* Indicates a component is loading.
*/
public void componentLoading(String component);
/**
* The core passes parsed magnets to the GUI and asks it if it wants
* to handle them itself.
* <p>
* If this is the case the callback should return <code>true</code>, otherwise
* the core starts the downloads itself.
* @param magnets
* @return true if the callback handles the magnet links
*/
public boolean handleMagnets(final MagnetOptions[] magnets);
/**
* Indicates that the firewalled state of this has changed.
*/
public void acceptedIncomingChanged(boolean status);
}