/** * The other user stopped a file transfer from the application user, * or the other way around. * Updates the status in the file sender. * * @param userCode The unique code of the other user. * @param fileName The name of the file. * @param fileHash The hash code of the file. */ @Override public void fileSendAborted(final int userCode, final String fileName, final int fileHash) { final User user = controller.getUser(userCode); final FileSender fileSender = tList.getFileSender(user, fileName, fileHash); if (fileSender != null) { fileSender.cancel(); msgController.showSystemMessage(user.getNick() + " aborted reception of " + fileName); tList.removeFileSender(fileSender); } final FileReceiver fileReceiver = tList.getFileReceiver(user, fileName); if (fileReceiver != null) { fileReceiver.cancel(); msgController.showSystemMessage(user.getNick() + " aborted sending of " + fileName); } }
/** * Cancels all file transfers for that user. * * @param user The user to cancel for. */ public void cancelFileTransfers(final User user) { final List<FileSender> fsList = tList.getFileSenders(user); final List<FileReceiver> frList = tList.getFileReceivers(user); for (final FileSender fs : fsList) { fs.cancel(); tList.removeFileSender(fs); } for (final FileReceiver fr : frList) { fr.cancel(); tList.removeFileReceiver(fr); } }
public void cancelFileTransfer(final int userCode, final int fileTransferId) { final User user = getUser(userCode); final FileTransfer fileTransfer = transferList.getFileTransfer(user, fileTransferId); if (fileTransfer != null) { commandParser.cancelFileTransfer(fileTransfer); } }
/** * Gets a file transfer object for the given user and file. * * @param user The user to find a file transfer for. * @param fileName The filename to look for. * @return Either a file receiver, a file sender, or <code>null</code> * if none of them was found. */ @Nullable public FileTransfer getFileTransfer(final User user, final String fileName) { final FileReceiver fileReceiver = getFileReceiver(user, fileName); if (fileReceiver != null) { return fileReceiver; } else { return getFileSender(user, fileName); } }
private FileReceiver setupFileReceiver(final User user) { final FileReceiver fileReceiver = mock(FileReceiver.class); when(transferList.getFileReceiver(user, 1)).thenReturn(fileReceiver); when(transferList.getFileTransfer(user, 1)).thenReturn(fileReceiver); when(fileReceiver.getFileName()).thenReturn("doc.pdf"); return fileReceiver; }
final List<FileSender> fsList = tList.getFileSenders(); final List<FileReceiver> frList = tList.getFileReceivers();
/** * Gets a file receiver object for the given user with the given file transfer id. * * @param userCode The unique code of the user who requests to send a file. * @param fileTransferId The id of the request to send a file. * @return The file transfer object, if found, or <code>null</code> if not found. */ public FileReceiver getFileReceiver(final int userCode, final int fileTransferId) { final User user = getUser(userCode); return transferList.getFileReceiver(user, fileTransferId); }
/** * The other user has accepted a file transfer. Will try to connect to the * user to send the file. * * @param userCode The unique code of the user who accepted a file transfer. * @param fileName The name of the file. * @param fileHash The hash code of the file. * @param port The port to use for connecting to the other user. */ @Override public void fileSendAccepted(final int userCode, final String fileName, final int fileHash, final int port) { final User user = controller.getUser(userCode); final FileSender fileSend = tList.getFileSender(user, fileName, fileHash); if (fileSend != null) { msgController.showSystemMessage(user.getNick() + " accepted sending of " + fileName); // Give the server some time to set up the connection first sleeper.sleep(200); if (fileSend.transfer(port)) { msgController.showSystemMessage(fileName + " successfully sent to " + user.getNick()); } else { msgController.showSystemMessage("Failed to send " + fileName + " to " + user.getNick()); } tList.removeFileSender(fileSend); } }
@Test public void cancelShouldCancelAndNotifyRecipientIfFileSendIsWaiting() { final User someOne = setupSomeOne(); final FileSender fileSender = setupFileSender(someOne); when(fileSender.isWaiting()).thenReturn(true); final FileToSend file = setupFile(fileSender); when(fileSender.getUser()).thenReturn(someOne); parser.parse("/cancel SomeOne 1"); verify(transferList).getFileTransfer(someOne, 1); verify(transferList).removeFileSender(fileSender); verify(messageController).showSystemMessage("You cancelled sending of doc.pdf to SomeOne"); verify(controller).sendFileAbort(someOne, file.hashCode(), "doc.pdf"); verify(fileSender).cancel(); }
final File defaultFile = new File( System.getProperty("user.home") + System.getProperty("file.separator") + fileName); final FileReceiver fileRes = tList.addFileReceiver(tmpUser, defaultFile, byteSize); tList.removeFileReceiver(fileRes);
@Test public void sendFileShouldSendUsingControllerAndAddToTransferListAndShowFileTransfer() throws CommandException { final User user = new User("User", 123456); final FileToSend file = new FileToSend(new File("")); final FileSender fileSender = mock(FileSender.class); when(transferList.addFileSender(any(User.class), any(FileToSend.class))).thenReturn(fileSender); parser.sendFile(user, file); verify(controller).sendFile(user, file); verify(transferList).addFileSender(user, file); verify(userInterface).showTransfer(fileSender); }
@Test public void transfersShouldShowSystemMessageWithActiveSender() { final FileSender fileSender = createFileSender(5, "image.png", 500L, 12, 80L, "Amy"); when(transferList.getFileSenders()).thenReturn(Arrays.asList(fileSender)); parser.parse("/transfers"); verify(messageController).showSystemMessage("File transfers:\n" + "- Sending:\n" + " #5 image.png [500.00KB] (12%, 80.00KB/s) to Amy"); }
@Test public void transfersShouldShowSystemMessageWithActiveReceiver() { final FileReceiver fileReceiver = createFileReceiver(5, "image.png", 500L, 12, 80L, "Amy"); when(transferList.getFileReceivers()).thenReturn(Arrays.asList(fileReceiver)); parser.parse("/transfers"); verify(messageController).showSystemMessage("File transfers:\n" + "- Receiving:\n" + " #5 image.png [500.00KB] (12%, 80.00KB/s) from Amy"); }
/** * Cancels a file transfer, even if the file transfer has not been * answered by the other user yet. * * @param fileTransfer The file transfer to cancel. */ public void cancelFileTransfer(final FileTransfer fileTransfer) { fileTransfer.cancel(); if (fileTransfer instanceof FileSender) { final FileSender fs = (FileSender) fileTransfer; // This means that the other user has not answered yet if (fs.isWaiting()) { final FileToSend file = fs.getFile(); final User user = fs.getUser(); msgController.showSystemMessage(coreMessages.getMessage("core.command.cancel.systemMessage.cancelled", file.getName(), user.getNick())); tList.removeFileSender(fs); controller.sendFileAbort(user, file.hashCode(), file.getName()); } } }
private FileSender findFileSender(final User user, final File file) { final User localUser = controller.getUser(user.getCode()); // Because user might be from another context final FileSender fileSender = transferList.getFileSender(localUser, file.getName()); Validate.notNull(fileSender, String.format("Unable to find the file with the name '%s' for the user '%s'", file.getName(), user)); return fileSender; }
userListController = new UserListController(settings); chatState = new ChatState(); tList = new TransferList(); wList = new WaitingList(); idleThread = new IdleThread(this, ui, settings);
final List<FileSender> fsList = tList.getFileSenders(); final List<FileReceiver> frList = tList.getFileReceivers();
/** * Gets a file transfer object for the given user and file. * * @param user The user to find a file transfer for. * @param fileName The filename to look for. * @return Either a file receiver, a file sender, or <code>null</code> * if none of them was found. */ @Nullable public FileTransfer getFileTransfer(final User user, final String fileName) { final FileReceiver fileReceiver = getFileReceiver(user, fileName); if (fileReceiver != null) { return fileReceiver; } else { return getFileSender(user, fileName); } }
private FileReceiver findFileReceiver(final User user, final String fileName) { final User localUser = controller.getUser(user.getCode()); // Because user might be from another context final FileReceiver fileReceiver = transferList.getFileReceiver(localUser, fileName); Validate.notNull(fileReceiver, String.format("Unable to find the file with the name '%s' from the user '%s'", fileName, user)); return fileReceiver; }
/** * The other user has accepted a file transfer. Will try to connect to the * user to send the file. * * @param userCode The unique code of the user who accepted a file transfer. * @param fileName The name of the file. * @param fileHash The hash code of the file. * @param port The port to use for connecting to the other user. */ @Override public void fileSendAccepted(final int userCode, final String fileName, final int fileHash, final int port) { final User user = controller.getUser(userCode); final FileSender fileSend = tList.getFileSender(user, fileName, fileHash); if (fileSend != null) { msgController.showSystemMessage(user.getNick() + " accepted sending of " + fileName); // Give the server some time to set up the connection first sleeper.sleep(200); if (fileSend.transfer(port)) { msgController.showSystemMessage(fileName + " successfully sent to " + user.getNick()); } else { msgController.showSystemMessage("Failed to send " + fileName + " to " + user.getNick()); } tList.removeFileSender(fileSend); } }