diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java index 1ad148fb9..c86fff2b8 100755 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListPane.java @@ -42,7 +42,7 @@ public class ContactListPane extends SCScrollPane implements MessageListener, TypingNotificationsListener, - FileTransferRequestListener, + FileTransferListener, ContactListListener, PluginComponentListener { @@ -571,10 +571,10 @@ else if (typingState == OperationSetTypingNotifications.STATE_UNKNOWN) * When a request has been received we show it to the user through the * chat session renderer. * - * @see FileTransferRequestListener#incomingRequestReceived( + * @see FileTransferListener#incomingRequestReceived( * FileTransferRequestEvent) */ - public void incomingRequestReceived(FileTransferRequestEvent event) + public void fileTransferRequestReceived(FileTransferRequestEvent event) { IncomingFileTransferRequest request = event.getRequest(); @@ -613,9 +613,15 @@ public void run() NotificationManager.INCOMING_FILE, title, request.getFileName()); - } + /** + * Nothing to do here, because we already know when a file transfer is + * created. + */ + public void fileTransferCreated(FileTransfer fileTransfer) + {} + /** * Send a proactive notification according to the proactive timer. * The notification is fired only if another notification hasn't been diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/IncomingFileTransferRequestJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/IncomingFileTransferRequestJabberImpl.java index ccdf89117..f12f7dccd 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/IncomingFileTransferRequestJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/IncomingFileTransferRequestJabberImpl.java @@ -36,6 +36,8 @@ public class IncomingFileTransferRequestJabberImpl */ private final FileTransferRequest fileTransferRequest; + private final OperationSetFileTransferJabberImpl fileTransferOpSet; + private Contact sender; /** @@ -43,12 +45,15 @@ public class IncomingFileTransferRequestJabberImpl * given fileTransferRequest, coming from the Jabber protocol. * * @param jabberProvider the protocol provider + * @param fileTransferOpSet file transfer operation set * @param fileTransferRequest the request coming from the Jabber protocol */ public IncomingFileTransferRequestJabberImpl( ProtocolProviderServiceJabberImpl jabberProvider, + OperationSetFileTransferJabberImpl fileTransferOpSet, FileTransferRequest fileTransferRequest) { + this.fileTransferOpSet = fileTransferOpSet; this.fileTransferRequest = fileTransferRequest; String fromUserID @@ -118,12 +123,13 @@ public FileTransfer acceptFile(File file) incomingTransfer = new IncomingFileTransferJabberImpl(jabberTransfer); + fileTransferOpSet.fireFileTransferCreated(incomingTransfer); + jabberTransfer.recieveFile(file); new OperationSetFileTransferJabberImpl .FileTransferProgressThread( jabberTransfer, incomingTransfer, getFileSize()).start(); - } catch (XMPPException e) { diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetFileTransferJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetFileTransferJabberImpl.java index 0bd29a6e5..f53ca001f 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetFileTransferJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetFileTransferJabberImpl.java @@ -13,6 +13,7 @@ import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.FileTransfer; import net.java.sip.communicator.service.protocol.event.*; +import net.java.sip.communicator.service.protocol.event.FileTransferListener; import net.java.sip.communicator.util.*; import org.jivesoftware.smack.*; @@ -53,10 +54,10 @@ public class OperationSetFileTransferJabberImpl private JabberFileTransferListener jabberFileTransferListener; /** - * A list of listeners registered for message events. + * A list of listeners registered for file transfer events. */ - private Vector fileTransferListeners - = new Vector(); + private Vector fileTransferListeners + = new Vector(); /** * Constructor @@ -103,8 +104,14 @@ public FileTransfer sendFile( Contact toContact, outgoingTransfer = new OutgoingFileTransferJabberImpl(transfer); + // Notify all interested listeners that a file transfer has been + // created. + fireFileTransferCreated(outgoingTransfer); + + // Send the file through the Jabber file transfer. transfer.sendFile(file, "Sending file."); + // Start the status and progress thread. new FileTransferProgressThread( transfer, outgoingTransfer).start(); } @@ -146,7 +153,7 @@ public FileTransfer sendFile( Contact toContact, * @param listener the FileTransferRequestListener to add */ public void addFileTransferRequestListener( - FileTransferRequestListener listener) + FileTransferListener listener) { synchronized(fileTransferListeners) { @@ -165,7 +172,7 @@ public void addFileTransferRequestListener( * @param listener the FileTransferRequestListener to remove */ public void removeFileTransferRequestListener( - FileTransferRequestListener listener) + FileTransferListener listener) { synchronized(fileTransferListeners) { @@ -242,7 +249,7 @@ else if (evt.getNewState() == RegistrationState.UNREGISTERED) * Listener for Jabber incoming file transfer requests. */ private class JabberFileTransferListener - implements FileTransferListener + implements org.jivesoftware.smackx.filetransfer.FileTransferListener { /** * Function called when a jabber file transfer request arrive. @@ -254,7 +261,9 @@ public void fileTransferRequest(FileTransferRequest request) // Create a global incoming file transfer request. IncomingFileTransferRequest incomingFileTransferRequest = new IncomingFileTransferRequestJabberImpl( - jabberProvider, request); + jabberProvider, + OperationSetFileTransferJabberImpl.this, + request); // Create an event associated to this global request. FileTransferRequestEvent fileTransferRequestEvent @@ -274,18 +283,41 @@ public void fileTransferRequest(FileTransferRequest request) */ private void fireFileTransferRequest(FileTransferRequestEvent event) { - Iterator listeners = null; + Iterator listeners = null; + synchronized (fileTransferListeners) + { + listeners = new ArrayList + (fileTransferListeners).iterator(); + } + + while (listeners.hasNext()) + { + FileTransferListener listener = listeners.next(); + + listener.fileTransferRequestReceived(event); + } + } + + /** + * Delivers the file transfer to all registered listeners. + * + * @param fileTransfer the FileTransfer that we'd like delivered to + * all registered file transfer listeners. + */ + void fireFileTransferCreated(FileTransfer fileTransfer) + { + Iterator listeners = null; synchronized (fileTransferListeners) { - listeners = new ArrayList + listeners = new ArrayList (fileTransferListeners).iterator(); } while (listeners.hasNext()) { - FileTransferRequestListener listener = listeners.next(); + FileTransferListener listener = listeners.next(); - listener.incomingRequestReceived(event); + listener.fileTransferCreated(fileTransfer); } } diff --git a/src/net/java/sip/communicator/impl/protocol/ssh/OperationSetFileTransferSSHImpl.java b/src/net/java/sip/communicator/impl/protocol/ssh/OperationSetFileTransferSSHImpl.java index f2bbcc1ad..a91926f14 100644 --- a/src/net/java/sip/communicator/impl/protocol/ssh/OperationSetFileTransferSSHImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/ssh/OperationSetFileTransferSSHImpl.java @@ -32,8 +32,8 @@ public class OperationSetFileTransferSSHImpl /** * Currently registered message listeners. */ - private Vector fileTransferListeners - = new Vector(); + private Vector fileTransferListeners + = new Vector(); /** * The protocol provider that created us. @@ -55,7 +55,7 @@ public OperationSetFileTransferSSHImpl( * @param listener the FileListener to register. */ public void addFileTransferRequestListener( - FileTransferRequestListener listener) + FileTransferListener listener) { synchronized (fileTransferListeners) { @@ -65,7 +65,7 @@ public void addFileTransferRequestListener( } public void removeFileTransferRequestListener( - FileTransferRequestListener listener) + FileTransferListener listener) { synchronized (fileTransferListeners) { diff --git a/src/net/java/sip/communicator/service/protocol/OperationSetFileTransfer.java b/src/net/java/sip/communicator/service/protocol/OperationSetFileTransfer.java index 6b006a76f..451c3c37f 100644 --- a/src/net/java/sip/communicator/service/protocol/OperationSetFileTransfer.java +++ b/src/net/java/sip/communicator/service/protocol/OperationSetFileTransfer.java @@ -72,7 +72,7 @@ public FileTransfer sendFile( Contact toContact, * @param listener the FileTransferRequestListener to add */ public void addFileTransferRequestListener( - FileTransferRequestListener listener); + FileTransferListener listener); /** * Removes the given FileTransferRequestListener that listens for @@ -82,5 +82,5 @@ public void addFileTransferRequestListener( * @param listener the FileTransferRequestListener to remove */ public void removeFileTransferRequestListener( - FileTransferRequestListener listener); + FileTransferListener listener); } diff --git a/src/net/java/sip/communicator/service/protocol/event/FileTransferRequestListener.java b/src/net/java/sip/communicator/service/protocol/event/FileTransferListener.java similarity index 60% rename from src/net/java/sip/communicator/service/protocol/event/FileTransferRequestListener.java rename to src/net/java/sip/communicator/service/protocol/event/FileTransferListener.java index 718aaca16..2da42fa58 100644 --- a/src/net/java/sip/communicator/service/protocol/event/FileTransferRequestListener.java +++ b/src/net/java/sip/communicator/service/protocol/event/FileTransferListener.java @@ -8,6 +8,8 @@ import java.util.*; +import net.java.sip.communicator.service.protocol.*; + /** * A listener that would gather events notifying of incoming file transfer * requests. @@ -15,7 +17,7 @@ * @author Emil Ivov * @author Yana Stamcheva */ -public interface FileTransferRequestListener +public interface FileTransferListener extends EventListener { /** @@ -24,5 +26,12 @@ public interface FileTransferRequestListener * @param event the FileTransferRequestEvent containing the newly * received request and other details. */ - public void incomingRequestReceived(FileTransferRequestEvent event); + public void fileTransferRequestReceived(FileTransferRequestEvent event); + + /** + * Called when an incoming or outgoing FileTransfer has been + * created. + * @param fileTransfer the file transfer object that has been created + */ + public void fileTransferCreated(FileTransfer fileTransfer); }