diff --git a/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/ReceiveMessage.java b/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/ReceiveMessage.java
index f79b35bf..30f5f2c9 100644
--- a/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/ReceiveMessage.java
+++ b/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/ReceiveMessage.java
@@ -19,26 +19,6 @@
*/
package org.jivesoftware.sparkimpl.plugin.filetransfer.transfer.ui;
-import org.jivesoftware.Spark;
-import org.jivesoftware.resource.Res;
-import org.jivesoftware.resource.SparkRes;
-import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smack.util.StringUtils;
-import org.jivesoftware.smackx.filetransfer.FileTransfer;
-import org.jivesoftware.smackx.filetransfer.FileTransferRequest;
-import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;
-import org.jivesoftware.spark.SparkManager;
-import org.jivesoftware.spark.component.FileDragLabel;
-import org.jivesoftware.spark.ui.ContactItem;
-import org.jivesoftware.spark.ui.ContactList;
-import org.jivesoftware.spark.util.ByteFormat;
-import org.jivesoftware.spark.util.GraphicUtils;
-import org.jivesoftware.spark.util.ResourceUtils;
-import org.jivesoftware.spark.util.SwingWorker;
-import org.jivesoftware.spark.util.URLFileSystem;
-import org.jivesoftware.spark.util.log.Log;
-import org.jivesoftware.sparkimpl.plugin.filetransfer.transfer.Downloads;
-
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Desktop;
@@ -58,6 +38,8 @@ import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.util.Timer;
+import java.util.TimerTask;
import javax.swing.AbstractAction;
import javax.swing.Action;
@@ -71,12 +53,30 @@ import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JProgressBar;
-import javax.swing.SwingUtilities;
+
+import org.jivesoftware.Spark;
+import org.jivesoftware.resource.Res;
+import org.jivesoftware.resource.SparkRes;
+import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smack.util.StringUtils;
+import org.jivesoftware.smackx.filetransfer.FileTransfer;
+import org.jivesoftware.smackx.filetransfer.FileTransferRequest;
+import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;
+import org.jivesoftware.spark.SparkManager;
+import org.jivesoftware.spark.component.FileDragLabel;
+import org.jivesoftware.spark.ui.ContactItem;
+import org.jivesoftware.spark.ui.ContactList;
+import org.jivesoftware.spark.util.ByteFormat;
+import org.jivesoftware.spark.util.GraphicUtils;
+import org.jivesoftware.spark.util.ResourceUtils;
+import org.jivesoftware.spark.util.URLFileSystem;
+import org.jivesoftware.spark.util.log.Log;
+import org.jivesoftware.sparkimpl.plugin.filetransfer.transfer.Downloads;
public class ReceiveMessage extends JPanel {
- private static final long serialVersionUID = -2974192409566650923L;
- private FileDragLabel imageLabel = new FileDragLabel();
+ private static final long serialVersionUID = -2974192409566650923L;
+ private FileDragLabel imageLabel = new FileDragLabel();
private JLabel titleLabel = new JLabel();
private JLabel fileLabel = new JLabel();
@@ -85,7 +85,10 @@ public class ReceiveMessage extends JPanel {
private JProgressBar progressBar = new JProgressBar();
private IncomingFileTransfer transfer;
private TransferButton cancelButton = new TransferButton();
+ private JLabel progressLabel = new JLabel();
private long bytesRead;
+ private long _starttime;
+ private long _endtime;
public ReceiveMessage() {
setLayout(new GridBagLayout());
@@ -102,9 +105,6 @@ public class ReceiveMessage extends JPanel {
add(declineButton, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));
-// ResourceUtils.resButton(acceptLabel, Res.getString("accept"));
-// ResourceUtils.resButton(declineLabel, Res.getString("reject"));
-
// Decorate Cancel Button
decorateCancelButton();
@@ -211,168 +211,195 @@ public class ReceiveMessage extends JPanel {
}
private void acceptRequest(final FileTransferRequest request) {
- String requestor = request.getRequestor();
- String bareJID = StringUtils.parseBareAddress(requestor);
+ String requestor = request.getRequestor();
+ String bareJID = StringUtils.parseBareAddress(requestor);
- ContactList contactList = SparkManager.getWorkspace().getContactList();
- final ContactItem contactItem = contactList.getContactItemByJID(bareJID);
+ ContactList contactList = SparkManager.getWorkspace().getContactList();
+ final ContactItem contactItem = contactList
+ .getContactItemByJID(bareJID);
- setBackground(new Color(239, 245, 250));
- acceptButton.setVisible(false);
- declineButton.setVisible(false);
- titleLabel.setText(Res.getString("message.negotiate.file.transfer"));
- titleLabel.setForeground(new Color(65, 139, 179));
-
-
- 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(cancelButton, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 5, 5), 0, 0));
- cancelButton.setVisible(true);
- transfer = request.accept();
- try {
-
- final File downloadedFile = new File(Downloads.getDownloadDirectory(), request.getFileName());
-
- progressBar.setMaximum((int)(request.getFileSize()/SendMessage.getDivisorForByte(request.getFileSize())));
- progressBar.setStringPainted(true);
-
- SwingWorker worker = new SwingWorker() {
- public Object construct() {
- try {
- transfer.recieveFile(downloadedFile);
- }
- catch (XMPPException e) {
- Log.error(e);
- }
-
- while (true) {
-
- try {
- Thread.sleep(10);
- }
- catch (InterruptedException e) {
- Log.error(e);
- }
-
- bytesRead = transfer.getAmountWritten();
- if (bytesRead == -1) {
- bytesRead = 0;
- }
- ByteFormat format = new ByteFormat();
- String text = format.format(bytesRead);
- progressBar.setString(text + " received");
-
- try {
- SwingUtilities.invokeAndWait(new Runnable() {
- public void run() {
- progressBar.setValue((int)(bytesRead/SendMessage.getDivisorForByte(transfer.getFileSize())));
- }
- });
- }
- catch (Exception e) {
- Log.error(e);
- }
-
- FileTransfer.Status status = transfer.getStatus();
- if (status == FileTransfer.Status.error ||
- status == FileTransfer.Status.complete || status == FileTransfer.Status.cancelled ||
- status == FileTransfer.Status.refused) {
- break;
- }
- else if (status == FileTransfer.Status.negotiating_stream) {
- titleLabel.setText(Res.getString("message.negotiate.stream"));
- }
- else if (status == FileTransfer.Status.in_progress) {
- titleLabel.setText(Res.getString("message.receiving.file", contactItem.getDisplayName()));
- }
- }
-
- return "ok";
- }
-
- public void finished() {
- if (transfer.getAmountWritten() >= request.getFileSize()) {
- transferDone(request, transfer);
-
- imageLabel.setFile(downloadedFile);
- imageLabel.setToolTipText(Res.getString("message.click.to.open"));
- titleLabel.setToolTipText(Res.getString("message.click.to.open"));
-
- imageLabel.addMouseListener(new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- if (e.getClickCount() == 2) {
- launchFile(downloadedFile);
- }
- }
- });
-
- imageLabel.addMouseListener(new MouseAdapter() {
- public void mouseEntered(MouseEvent e) {
- imageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
-
- }
-
- public void mouseExited(MouseEvent e) {
- imageLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
- }
- });
-
- titleLabel.addMouseListener(new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- if (e.getClickCount() == 2) {
- launchFile(downloadedFile);
- }
- }
- });
-
- titleLabel.addMouseListener(new MouseAdapter() {
- public void mouseEntered(MouseEvent e) {
- titleLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
-
- }
-
- public void mouseExited(MouseEvent e) {
- titleLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
-
- }
- });
-
-
- invalidate();
- validate();
- repaint();
- return;
- }
-
- String transferMessage = "";
- if (transfer.getStatus() == FileTransfer.Status.error) {
- if (transfer.getException() != null) {
- Log.error("There was an error during file transfer.", transfer.getException());
- }
- transferMessage = Res.getString("message.error.during.file.transfer");
- }
- else if (transfer.getStatus() == FileTransfer.Status.refused) {
- transferMessage = Res.getString("message.transfer.refused");
- }
- else if (transfer.getStatus() == FileTransfer.Status.cancelled ||
- transfer.getAmountWritten() < request.getFileSize()) {
- transferMessage = Res.getString("message.transfer.cancelled");
- }
-
- setFinishedText(transferMessage);
- showAlert(true);
- }
- };
-
- worker.start();
+ setBackground(new Color(239, 245, 250));
+ acceptButton.setVisible(false);
+ declineButton.setVisible(false);
+ titleLabel.setText(Res.getString("message.negotiate.file.transfer"));
+ titleLabel.setForeground(new Color(65, 139, 179));
+ 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));
+ add(cancelButton, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 5, 5), 0, 0));
+ cancelButton.setVisible(true);
+ transfer = request.accept();
+ final File downloadedFile = new File(Downloads.getDownloadDirectory(), request.getFileName());
+
+ try {
+ _starttime = System.currentTimeMillis();
+ transfer.recieveFile(downloadedFile);
}
- catch (Exception e) {
+ catch (XMPPException e) {
Log.error(e);
}
+
+ progressBar.setMaximum(100); // setting it to percent
+ progressBar.setStringPainted(true);
+
+ TimerTask updateProgessBar = new TimerTask() {
+ @Override
+ public void run() {
+ if (transfer.getAmountWritten() >= request.getFileSize()
+ || transfer.getStatus() == FileTransfer.Status.error
+ || transfer.getStatus() == FileTransfer.Status.refused
+ || transfer.getStatus() == FileTransfer.Status.cancelled)
+ {
+ this.cancel();
+ _endtime = System.currentTimeMillis();
+ updateonFinished(request, downloadedFile);
+ }else
+ {
+ // 100 % = Filesize
+ // x % = Currentsize
+ long p = (transfer.getAmountWritten() * 100 / transfer.getFileSize() );
+ progressBar.setValue(Math.round(p));
+ }
+
+ }
+ };
+
+
+ TimerTask updatePrograssBarText = new TimerTask() {
+ long timenow;
+ long timeearlier;
+ long bytesnow;
+ long bytesearlier;
+ @Override
+ public void run() {
+ if (transfer.getAmountWritten() >= request.getFileSize()
+ || transfer.getStatus() == FileTransfer.Status.error
+ || transfer.getStatus() == FileTransfer.Status.refused
+ || transfer.getStatus() == FileTransfer.Status.cancelled)
+ {
+ this.cancel();
+ }
+ else{
+
+ timenow = System.currentTimeMillis();
+ bytesnow = transfer.getAmountWritten();
+ bytesRead = transfer.getAmountWritten();
+ if (bytesRead == -1) {
+ bytesRead = 0;
+ }
+ ByteFormat format = new ByteFormat();
+ String text = format.format(bytesRead);
+
+
+
+
+ FileTransfer.Status status = transfer.getStatus();
+ if (status == FileTransfer.Status.in_progress)
+ {
+ titleLabel.setText(Res.getString("message.receiving.file", contactItem.getDisplayName()));
+ String speed =TransferUtils.calculateSpeed(bytesnow-bytesearlier, timenow-timeearlier);
+ String est = TransferUtils.calculateEstimate(bytesnow, transfer.getFileSize(), _starttime, System.currentTimeMillis());
+ progressLabel.setText(Res.getString("message.transfer.progressbar.text.received", text, speed, est));
+ }
+ else if (status == FileTransfer.Status.negotiating_stream) {
+ titleLabel.setText(Res.getString("message.negotiate.stream"));
+ }
+ bytesearlier = bytesnow;
+ timeearlier = timenow;
+ }
+ }
+ };
+
+
+ Timer timer = new Timer();
+ timer.scheduleAtFixedRate(updateProgessBar, 10, 10);
+
+ Timer timer2 = new Timer();
+ timer2.scheduleAtFixedRate(updatePrograssBarText, 10, 500);
+
}
+ private void updateonFinished(final FileTransferRequest request,
+ final File downloadedFile) {
+ if (transfer.getAmountWritten() >= request.getFileSize()) {
+ transferDone(request, transfer);
+
+ imageLabel.setFile(downloadedFile);
+ imageLabel.setToolTipText(Res.getString("message.click.to.open"));
+ titleLabel.setToolTipText(Res.getString("message.click.to.open"));
+ String fin = TransferUtils.convertSecondstoHHMMSS(Math.round(_endtime-_starttime)/1000);
+ progressLabel.setText(Res.getString("label.time", fin));
+
+ imageLabel.addMouseListener(new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ if (e.getClickCount() == 2) {
+ launchFile(downloadedFile);
+ }
+ }
+ });
+
+ imageLabel.addMouseListener(new MouseAdapter() {
+ public void mouseEntered(MouseEvent e) {
+ imageLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
+
+ }
+
+ public void mouseExited(MouseEvent e) {
+ imageLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+ }
+ });
+
+
+ titleLabel.addMouseListener(new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ if (e.getClickCount() == 2) {
+ launchFile(downloadedFile);
+ }
+ }
+ });
+
+ titleLabel.addMouseListener(new MouseAdapter() {
+ public void mouseEntered(MouseEvent e) {
+ titleLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
+ }
+
+ public void mouseExited(MouseEvent e) {
+ titleLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+ }
+ });
+
+ invalidate();
+ validate();
+ repaint();
+ }
+
+ String transferMessage = "";
+ if (transfer.getStatus() == FileTransfer.Status.error) {
+ if (transfer.getException() != null) {
+ Log.error("There was an error during file transfer.", transfer.getException());
+ }
+ transferMessage = Res.getString("message.error.during.file.transfer");
+ }
+ else if (transfer.getStatus() == FileTransfer.Status.refused) {
+ transferMessage = Res.getString("message.transfer.refused");
+ }
+ else if (transfer.getStatus() == FileTransfer.Status.cancelled ||
+ transfer.getAmountWritten() < request.getFileSize()) {
+ transferMessage = Res.getString("message.transfer.cancelled");
+ }
+ else if(transfer.getAmountWritten() >= request.getFileSize())
+ {
+ transferMessage = Res.getString("message.transfer.complete", transfer.getFileName());
+ }
+
+ setFinishedText(transferMessage);
+ showAlert(true);
+ }
+
+
+
private void setFinishedText(String text) {
acceptButton.setVisible(false);
declineButton.setVisible(false);
@@ -568,6 +595,7 @@ public class ReceiveMessage extends JPanel {
cancelTransfer();
acceptButton.setVisible(false);
declineButton.setVisible(false);
+ cancelButton.setVisible(false);
}
});
diff --git a/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/SendMessage.java b/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/SendMessage.java
index 0e40a4ec..3b7d5f67 100644
--- a/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/SendMessage.java
+++ b/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/SendMessage.java
@@ -48,9 +48,9 @@ import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.filetransfer.FileTransfer;
+import org.jivesoftware.smackx.filetransfer.FileTransfer.Status;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
-import org.jivesoftware.smackx.filetransfer.FileTransfer.Status;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.component.FileDragLabel;
import org.jivesoftware.spark.ui.ContactItem;
@@ -78,6 +78,8 @@ public class SendMessage extends JPanel {
private FileTransferManager transferManager;
private String fullJID;
private String nickname;
+ private JLabel progressLabel = new JLabel();
+ private long _starttime;
public SendMessage() {
setLayout(new GridBagLayout());
@@ -95,8 +97,8 @@ public class SendMessage extends JPanel {
cancelButton.setIcon(SparkRes.getImageIcon(SparkRes.CANCEL_IMAGE));
retryButton.setIcon(SparkRes.getImageIcon(SparkRes.REFRESH_IMAGE));
- add(cancelButton, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));
- add(retryButton, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));
+ add(cancelButton, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));
+ add(retryButton, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));
retryButton.setVisible(false);
retryButton.addActionListener(new ActionListener() {
@@ -185,24 +187,39 @@ public class SendMessage extends JPanel {
});
- progressBar.setMaximum((int) (fileSize / getDivisorForByte(fileSize)));
+ 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 {
- Thread.sleep(10);
+ 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;
}
- updateBar(transfer, nickname);
+ 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);
@@ -213,7 +230,7 @@ public class SendMessage extends JPanel {
}
public void finished() {
- updateBar(transfer, nickname);
+ updateBar(transfer, nickname, "??MB/s");
}
};
@@ -250,7 +267,7 @@ public class SendMessage extends JPanel {
}
}
- private void updateBar(final OutgoingFileTransfer transfer, String nickname) {
+ 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));
@@ -260,6 +277,7 @@ public class SendMessage extends JPanel {
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);
@@ -270,12 +288,16 @@ public class SendMessage extends JPanel {
showAlert(false);
if (!progressBar.isVisible()) {
progressBar.setVisible(true);
+ progressLabel.setVisible(true);
}
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
- progressBar.setValue((int)(transfer.getBytesSent()/getDivisorForByte(transfer.getFileSize())));
+ // 100 % = Filesize
+ // x % = Currentsize
+ long p = (transfer.getBytesSent() * 100 / transfer.getFileSize() );
+ progressBar.setValue(Math.round(p));
}
});
}
@@ -285,16 +307,22 @@ public class SendMessage extends JPanel {
ByteFormat format = new ByteFormat();
String bytesSent = format.format(transfer.getBytesSent());
- progressBar.setString(bytesSent + " sent");
+ 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);
@@ -302,6 +330,7 @@ public class SendMessage extends JPanel {
}
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);
@@ -312,22 +341,22 @@ public class SendMessage extends JPanel {
private class TransferButton extends JButton {
- private static final long serialVersionUID = 8807434179541503654L;
+ private static final long serialVersionUID = 8807434179541503654L;
- public TransferButton() {
- decorate();
- }
+ public TransferButton() {
+ decorate();
+ }
- /**
- * Decorates the button with the approriate UI configurations.
- */
- private void decorate() {
- setBorderPainted(false);
- setOpaque(true);
+ /**
+ * Decorates the button with the approriate UI configurations.
+ */
+ private void decorate() {
+ setBorderPainted(false);
+ setOpaque(true);
- setContentAreaFilled(false);
- setMargin(new Insets(1, 1, 1, 1));
- }
+ setContentAreaFilled(false);
+ setMargin(new Insets(1, 1, 1, 1));
+ }
}
@@ -361,18 +390,6 @@ public class SendMessage extends JPanel {
transfer.cancel();
}
}
-
-
- public static int getDivisorForByte(long filezise) {
- if (filezise >= 1073741824) // giga
- {
- return 1024;
- } else if (filezise >= 1099511627776L) // tera
- {
- return 1048576;
- } else {
- return 1;
- }
- }
+
}
diff --git a/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/TransferUtils.java b/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/TransferUtils.java
new file mode 100644
index 00000000..67907b38
--- /dev/null
+++ b/src/java/org/jivesoftware/sparkimpl/plugin/filetransfer/transfer/ui/TransferUtils.java
@@ -0,0 +1,104 @@
+package org.jivesoftware.sparkimpl.plugin.filetransfer.transfer.ui;
+
+/**
+ * Provides static access to often used Time and Byte functions
+ *
+ * @author wolf.posdorfer
+ *
+ */
+public class TransferUtils {
+
+ /**
+ * Calculates the speed when given a timedifference and bytedifference
+ *
+ * @param bytediff
+ * in bytes
+ * @param timediff
+ * in milliseconds
+ * @return xx,x kB/s or xx,x MB/s
+ */
+ public static String calculateSpeed(long bytediff, long timediff) {
+ double kB = calculateSpeedLong(bytediff, timediff);
+
+ if (bytediff == 0 && timediff == 0) {
+ return "";
+ }
+ if (kB < 1024) {
+ String KB = Double.toString(kB);
+ // Convert 3.1415926535897932384626433832795 to 3.1
+ KB = KB.contains(".") ? KB.substring(0, KB.indexOf(".") + 2) : KB;
+
+ return KB + "kB/s";
+ } else {
+ String MB = Double.toString((kB / 1024.0));
+ // Convert 3.1415926535897932384626433832795 to 3.1
+ MB = MB.contains(".") ? MB.substring(0, MB.indexOf(".") + 2) : MB;
+
+ return MB + "MB/s";
+ }
+
+ }
+
+ /**
+ * Calculates the speed and returns a long in kB/s
+ *
+ * @param bytediff
+ * @param timediff
+ * @return kB/s
+ */
+ public static double calculateSpeedLong(long bytediff, long timediff) {
+ timediff = timediff == 0 ? 1 : timediff;
+ double kB = ((bytediff / timediff) * 1000.0) / 1024.0;
+ return kB;
+ }
+
+ /**
+ * Calculate the estimated time of arrival
+ *
+ * @param currentsize
+ * in byte
+ * @param totalsize
+ * in byte
+ * @param timestart
+ * in milliseconds
+ * @param timenow
+ * in milliseconds
+ * @return time in (HH:MM:SS)
+ */
+ public static String calculateEstimate(long currentsize, long totalsize,
+ long timestart, long timenow) {
+ long timediff = timenow - timestart;
+ long sizeleft = totalsize - currentsize;
+
+ // currentsize = timediff
+ // sizeleft = x
+
+ long x = sizeleft * timediff / currentsize;
+
+ // Make it seconds
+ x = x / 1000;
+
+ return convertSecondstoHHMMSS(Math.round(x));
+ }
+
+ /**
+ * Converts given Seconds to HH:MM:SS
+ *
+ * @param second
+ * in seconds
+ * @return (HH:MM:SS)
+ */
+ public static String convertSecondstoHHMMSS(int second) {
+
+ int hours = Math.round(second / 3600);
+ int minutes = Math.round((second / 60) % 60);
+ int seconds = Math.round(second % 60);
+ String hh = hours < 10 ? "0" + hours : "" + hours;
+ String mm = minutes < 10 ? "0" + minutes : "" + minutes;
+ String ss = seconds < 10 ? "0" + seconds : "" + seconds;
+
+ return "(" + hh + ":" + mm + ":" + ss + ")";
+
+ }
+
+}
diff --git a/src/resources/i18n/spark_i18n.properties b/src/resources/i18n/spark_i18n.properties
index de519f72..68f0d2dc 100644
--- a/src/resources/i18n/spark_i18n.properties
+++ b/src/resources/i18n/spark_i18n.properties
@@ -777,6 +777,9 @@ message.supply.valid.timeout = Supply a valid time out value
message.timeout.error = The timeout must be 5 seconds or greater
message.total.downloaded = Total downloaded
message.transfer.cancelled = The file transfer was canceled
+message.transfer.complete = The file transfer was complete ({0}))
+message.transfer.progressbar.text.received = {0} received @ {1} {2}
+message.transfer.progressbar.text.sent = {0} sent @ {1} {2}
message.transfer.rate = Transfer rate
message.transfer.refused = The file transfer was refused
message.transfer.waiting.on.user = Waiting for {0} to accept file transfer
diff --git a/src/resources/i18n/spark_i18n_de.properties b/src/resources/i18n/spark_i18n_de.properties
index feb7fb7d..c0fb1e48 100644
--- a/src/resources/i18n/spark_i18n_de.properties
+++ b/src/resources/i18n/spark_i18n_de.properties
@@ -463,11 +463,14 @@ message.file.transfer.canceled = Sie haben den Dateitransfer abgebrochen.
message.negotiate.file.transfer = Dateitransfer wird vorbereitet. Bitte warten...
message.negotiate.stream = Verbindungsdaten werden vorbereitet. Bitte warten...
message.receiving.file = Sie haben eine Datei von {0} erhalten
+message.received.file = Sie haben eine Datei von {0} erhalten.
message.click.to.open = Öffnen
message.error.during.file.transfer = Während des Dateitransfers ist ein Fehler aufgetreten.
message.transfer.refused = Der Dateitransfer wurde verweigert.
message.transfer.cancelled = Der Dateitransfer wurde abgebrochen.
-message.received.file = Sie haben eine Datei von {0} erhalten.
+message.transfer.complete = Der Dateitransfer war erfolgreich ({0}))
+message.transfer.progressbar.text.received = {0} empfangen @ {1} {2}
+message.transfer.progressbar.text.sent = {0} gesendet @ {1} {2}
message.file.exists.question = Die Datei existiert bereits. Überschreiben?
message.transfer.waiting.on.user = {0} muss den Dateitransfer akzeptieren. Bitte warten...
message.negotiation.file.transfer = Dateitransfer mit {0} wird initialisiert. Bitte warten...