Search in sources :

Example 1 with Status

use of org.jivesoftware.smackx.filetransfer.FileTransfer.Status in project Smack by igniterealtime.

the class FileTransferIntegrationTest method genericfileTransferTest.

private void genericfileTransferTest() throws Exception {
    final ResultSyncPoint<String, Exception> resultSyncPoint = new ResultSyncPoint<>();
    final FileTransferListener receiveListener = new FileTransferListener() {

        @Override
        public void fileTransferRequest(FileTransferRequest request) {
            byte[] dataReceived;
            IncomingFileTransfer ift = request.accept();
            try {
                InputStream is = ift.receiveFile();
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                int nRead;
                byte[] buf = new byte[1024];
                while ((nRead = is.read(buf, 0, buf.length)) != -1) {
                    os.write(buf, 0, nRead);
                }
                os.flush();
                dataReceived = os.toByteArray();
                if (Arrays.equals(dataToSend, dataReceived)) {
                    resultSyncPoint.signal("Received data matches send data. \\o/");
                } else {
                    resultSyncPoint.signal(new Exception("Received data does not match"));
                }
            } catch (SmackException | IOException | XMPPErrorException | InterruptedException e) {
                resultSyncPoint.signal(e);
            }
        }
    };
    ftManagerTwo.addFileTransferListener(receiveListener);
    OutgoingFileTransfer oft = ftManagerOne.createOutgoingFileTransfer(conTwo.getUser());
    oft.sendStream(new ByteArrayInputStream(dataToSend), "hello.txt", dataToSend.length, "A greeting");
    int duration = 0;
    while (!oft.isDone()) {
        Status status = oft.getStatus();
        switch(status) {
            case error:
                FileTransfer.Error error = oft.getError();
                Exception exception = oft.getException();
                throw new Exception("FileTransfer error: " + error, exception);
            default:
                LOGGER.info("FileTransfer status: " + oft.getStatus() + ". Progress: " + oft.getProgress());
                break;
        }
        Thread.sleep(1000);
        if (++duration > MAX_FT_DURATION) {
            throw new Exception("Max duration reached");
        }
    }
    resultSyncPoint.waitForResult(MAX_FT_DURATION * 1000);
    ftManagerTwo.removeFileTransferListener(receiveListener);
}
Also used : Status(org.jivesoftware.smackx.filetransfer.FileTransfer.Status) XMPPErrorException(org.jivesoftware.smack.XMPPException.XMPPErrorException) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) SmackException(org.jivesoftware.smack.SmackException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) SmackException(org.jivesoftware.smack.SmackException) IOException(java.io.IOException) XMPPErrorException(org.jivesoftware.smack.XMPPException.XMPPErrorException) ResultSyncPoint(org.igniterealtime.smack.inttest.util.ResultSyncPoint) ByteArrayInputStream(java.io.ByteArrayInputStream) ResultSyncPoint(org.igniterealtime.smack.inttest.util.ResultSyncPoint)

Example 2 with Status

use of org.jivesoftware.smackx.filetransfer.FileTransfer.Status in project Spark by igniterealtime.

the class SendFileTransfer method updateBar.

private void updateBar(final OutgoingFileTransfer transfer, String nickname, String kBperSecond) {
    FileTransfer.Status status = transfer.getStatus();
    if (status == Status.negotiating_stream) {
        titleLabel.setText(Res.getString("message.negotiation.file.transfer", nickname));
    } else if (status == Status.error) {
        if (transfer.getException() != null) {
            Log.error("Error occured during file transfer.", transfer.getException());
        }
        progressBar.setVisible(false);
        progressLabel.setVisible(false);
        titleLabel.setText(Res.getString("message.unable.to.send.file", nickname));
        cancelButton.setVisible(false);
        retryButton.setVisible(true);
        showAlert(true);
    } else if (status == Status.in_progress) {
        titleLabel.setText(Res.getString("message.sending.file.to", nickname));
        showAlert(false);
        if (!progressBar.isVisible()) {
            progressBar.setVisible(true);
            progressLabel.setVisible(true);
        }
        try {
            SwingUtilities.invokeAndWait(() -> {
                // 100 % = Filesize
                // x %   = Currentsize
                long p = (transfer.getBytesSent() * 100 / transfer.getFileSize());
                progressBar.setValue(Math.round(p));
            });
        } catch (Exception e) {
            Log.error(e);
        }
        ByteFormat format = new ByteFormat();
        String bytesSent = format.format(transfer.getBytesSent());
        String est = TransferUtils.calculateEstimate(transfer.getBytesSent(), transfer.getFileSize(), _starttime, System.currentTimeMillis());
        progressLabel.setText(Res.getString("message.transfer.progressbar.text.sent", bytesSent, kBperSecond, est));
    } else if (status == Status.complete) {
        progressBar.setVisible(false);
        String fin = TransferUtils.convertSecondstoHHMMSS(Math.round(System.currentTimeMillis() - _starttime) / 1000);
        progressLabel.setText(Res.getString("label.time", fin));
        titleLabel.setText(Res.getString("message.you.have.sent", nickname));
        cancelButton.setVisible(false);
        showAlert(true);
    } else if (status == Status.cancelled) {
        progressBar.setVisible(false);
        progressLabel.setVisible(false);
        titleLabel.setText(Res.getString("message.file.transfer.canceled"));
        cancelButton.setVisible(false);
        retryButton.setVisible(true);
        showAlert(true);
    } else if (status == Status.refused) {
        progressBar.setVisible(false);
        progressLabel.setVisible(false);
        titleLabel.setText(Res.getString("message.file.transfer.rejected", nickname));
        cancelButton.setVisible(false);
        retryButton.setVisible(true);
        showAlert(true);
    }
}
Also used : ByteFormat(org.jivesoftware.spark.util.ByteFormat) OutgoingFileTransfer(org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer) FileTransfer(org.jivesoftware.smackx.filetransfer.FileTransfer) SmackException(org.jivesoftware.smack.SmackException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) Status(org.jivesoftware.smackx.filetransfer.FileTransfer.Status)

Example 3 with Status

use of org.jivesoftware.smackx.filetransfer.FileTransfer.Status in project Spark by igniterealtime.

the class SendFileTransfer method sendFile.

public void sendFile(final OutgoingFileTransfer transfer, FileTransferManager transferManager, final String jid, final String nickname) {
    this.transferManager = transferManager;
    // SPARK-1869
    FileTransferNegotiator.getInstanceFor(SparkManager.getConnection());
    FileTransferNegotiator.IBB_ONLY = SettingsManager.getLocalPreferences().isFileTransferIbbOnly();
    cancelButton.setVisible(true);
    retryButton.setVisible(false);
    this.fullJID = jid;
    this.nickname = nickname;
    this.transfer = transfer;
    String fileName = transfer.getFileName();
    long fileSize = transfer.getFileSize();
    ByteFormat format = new ByteFormat();
    String text = format.format(fileSize);
    fileToSend = new File(transfer.getFilePath());
    imageLabel.setFile(fileToSend);
    fileLabel.setText(fileName + " (" + text + ")");
    ContactList contactList = SparkManager.getWorkspace().getContactList();
    ContactItem contactItem = contactList.getContactItemByJID(jid);
    titleLabel.setText(Res.getString("message.transfer.waiting.on.user", contactItem.getDisplayName()));
    if (isImage(fileName)) {
        try {
            URL imageURL = new File(transfer.getFilePath()).toURI().toURL();
            ImageIcon image = new ImageIcon(imageURL);
            image = GraphicUtils.scaleImageIcon(image, 64, 64);
            imageLabel.setIcon(image);
        } catch (MalformedURLException e) {
            Log.error("Could not locate image.", e);
            imageLabel.setIcon(SparkRes.getImageIcon(SparkRes.DOCUMENT_INFO_32x32));
        }
    } else {
        File file = new File(transfer.getFilePath());
        Icon icon = GraphicUtils.getIcon(file);
        imageLabel.setIcon(icon);
    }
    cancelButton.addMouseListener(new MouseAdapter() {

        public void mouseClicked(MouseEvent mouseEvent) {
            transfer.cancel();
        }
    });
    cancelButton.addMouseListener(new MouseAdapter() {

        public void mouseEntered(MouseEvent e) {
            cancelButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
        }

        public void mouseExited(MouseEvent e) {
            cancelButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        }
    });
    progressBar.setMaximum(100);
    progressBar.setVisible(false);
    progressBar.setStringPainted(true);
    add(progressBar, new GridBagConstraints(1, 2, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 150, 0));
    add(progressLabel, new GridBagConstraints(1, 3, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 150, 0));
    SwingWorker worker = new SwingWorker() {

        public Object construct() {
            while (true) {
                try {
                    if (transfer.getBytesSent() > 0 && _starttime == 0) {
                        _starttime = System.currentTimeMillis();
                    }
                    long starttime = System.currentTimeMillis();
                    long startbyte = transfer.getBytesSent();
                    Thread.sleep(500);
                    FileTransfer.Status status = transfer.getStatus();
                    if (status == Status.error || status == Status.complete || status == Status.cancelled || status == Status.refused) {
                        break;
                    }
                    long endtime = System.currentTimeMillis();
                    long endbyte = transfer.getBytesSent();
                    long timediff = endtime - starttime;
                    long bytediff = endbyte - startbyte;
                    updateBar(transfer, nickname, TransferUtils.calculateSpeed(bytediff, timediff));
                } catch (InterruptedException e) {
                    Log.error("Unable to sleep thread.", e);
                }
            }
            return "";
        }

        public void finished() {
            updateBar(transfer, nickname, "??MB/s");
        }
    };
    worker.start();
    makeClickable(imageLabel);
    makeClickable(titleLabel);
}
Also used : ImageIcon(javax.swing.ImageIcon) MalformedURLException(java.net.MalformedURLException) GridBagConstraints(java.awt.GridBagConstraints) MouseEvent(java.awt.event.MouseEvent) Insets(java.awt.Insets) ContactItem(org.jivesoftware.spark.ui.ContactItem) MouseAdapter(java.awt.event.MouseAdapter) OutgoingFileTransfer(org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer) FileTransfer(org.jivesoftware.smackx.filetransfer.FileTransfer) ContactList(org.jivesoftware.spark.ui.ContactList) Cursor(java.awt.Cursor) URL(java.net.URL) Status(org.jivesoftware.smackx.filetransfer.FileTransfer.Status) ByteFormat(org.jivesoftware.spark.util.ByteFormat) SwingWorker(org.jivesoftware.spark.util.SwingWorker) ImageIcon(javax.swing.ImageIcon) Icon(javax.swing.Icon) File(java.io.File)

Aggregations

Status (org.jivesoftware.smackx.filetransfer.FileTransfer.Status)3 IOException (java.io.IOException)2 MalformedURLException (java.net.MalformedURLException)2 SmackException (org.jivesoftware.smack.SmackException)2 FileTransfer (org.jivesoftware.smackx.filetransfer.FileTransfer)2 OutgoingFileTransfer (org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer)2 ByteFormat (org.jivesoftware.spark.util.ByteFormat)2 Cursor (java.awt.Cursor)1 GridBagConstraints (java.awt.GridBagConstraints)1 Insets (java.awt.Insets)1 MouseAdapter (java.awt.event.MouseAdapter)1 MouseEvent (java.awt.event.MouseEvent)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 File (java.io.File)1 InputStream (java.io.InputStream)1 URL (java.net.URL)1 Icon (javax.swing.Icon)1 ImageIcon (javax.swing.ImageIcon)1 ResultSyncPoint (org.igniterealtime.smack.inttest.util.ResultSyncPoint)1