summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2015-06-22 09:06:58 (GMT)
committerTobias Markmann <tm@ayena.de>2015-07-10 11:46:50 (GMT)
commited7a1fbf61d7879fd33896f36effd2f154753438 (patch)
tree4904bf7298a7b25ece1e56c6d29aace1a60e9020
parent84dcfb6263b46b62504706d69198675690f759be (diff)
downloadswift-ed7a1fbf61d7879fd33896f36effd2f154753438.zip
swift-ed7a1fbf61d7879fd33896f36effd2f154753438.tar.bz2
Show collecting of file transfer candidates in UI
Show the user the collection of possible file transfer candidates after pressing the 'Start' button for a file transfer. Previously the buttons remained in the UI giving no feedback to the user at all. If no UPnP/NAT-PMP device is present, it this stage can take a couple seconds to timeout and move on to the next stage. Furthermore this commit adds documentation for the different states in the ChatWindow::FileTransferState enum. Test-Information: Tested this in a network environment with no UPnP/NAT-PMP device between two Swift instances. Change-Id: I76ec6e641a2acd683938fe2d8f542d023a244145
-rw-r--r--Swift/Controllers/FileTransfer/FileTransferController.cpp1
-rw-r--r--Swift/Controllers/UIInterfaces/ChatWindow.h10
-rw-r--r--Swift/QtUI/QtPlainChatView.cpp23
-rw-r--r--Swift/QtUI/QtWebKitChatView.cpp14
4 files changed, 34 insertions, 14 deletions
diff --git a/Swift/Controllers/FileTransfer/FileTransferController.cpp b/Swift/Controllers/FileTransfer/FileTransferController.cpp
index 076d3c0..f7ce8e6 100644
--- a/Swift/Controllers/FileTransfer/FileTransferController.cpp
+++ b/Swift/Controllers/FileTransfer/FileTransferController.cpp
@@ -148,6 +148,7 @@ void FileTransferController::handleFileTransferStateChange(FileTransfer::State s
chatWindow->setFileTransferStatus(uiID, ChatWindow::WaitingForAccept);
return;
case FileTransfer::State::WaitingForStart:
+ chatWindow->setFileTransferStatus(uiID, ChatWindow::Initialisation);
return;
}
assert(false);
diff --git a/Swift/Controllers/UIInterfaces/ChatWindow.h b/Swift/Controllers/UIInterfaces/ChatWindow.h
index b1e2a11..0fa734c 100644
--- a/Swift/Controllers/UIInterfaces/ChatWindow.h
+++ b/Swift/Controllers/UIInterfaces/ChatWindow.h
@@ -89,7 +89,15 @@ namespace Swift {
enum ReceiptState {ReceiptRequested, ReceiptReceived, ReceiptFailed};
enum OccupantAction {Kick, Ban, MakeModerator, MakeParticipant, MakeVisitor, AddContact, ShowProfile};
enum RoomAction {ChangeSubject, Configure, Affiliations, Destroy, Invite};
- enum FileTransferState {WaitingForAccept, Negotiating, Transferring, Canceled, Finished, FTFailed};
+ enum FileTransferState {
+ Initialisation, ///< Collecting information required for sending the request out.
+ WaitingForAccept, ///< The file transfer request was send out.
+ Negotiating, ///< The other party accepted the file transfer request and a suitable transfer method is negotiated.
+ Transferring, ///< The negotiation was successful and the file is currently transferred.
+ Canceled, ///< Someone actively canceled the transfer.
+ Finished, ///< The file was transferred successfully.
+ FTFailed ///< The negotiation, the transfer itself or the verification failed.
+ };
enum WhiteboardSessionState {WhiteboardAccepted, WhiteboardTerminated, WhiteboardRejected};
enum BlockingState {BlockingUnsupported, IsBlocked, IsUnblocked};
enum Direction { UnknownDirection, DefaultDirection };
diff --git a/Swift/QtUI/QtPlainChatView.cpp b/Swift/QtUI/QtPlainChatView.cpp
index 031a41d..eabf35f 100644
--- a/Swift/QtUI/QtPlainChatView.cpp
+++ b/Swift/QtUI/QtPlainChatView.cpp
@@ -6,22 +6,22 @@
#include <Swift/QtUI/QtPlainChatView.h>
-#include <QTextEdit>
-#include <QScrollBar>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QLabel>
#include <QDialog>
-#include <QProgressBar>
#include <QFileDialog>
#include <QInputDialog>
+#include <QLabel>
#include <QMenu>
+#include <QProgressBar>
+#include <QPushButton>
+#include <QScrollBar>
+#include <QTextEdit>
+#include <QVBoxLayout>
-#include <Swiften/Base/foreach.h>
#include <Swiften/Base/FileSize.h>
+#include <Swiften/Base/foreach.h>
-#include <Swift/Controllers/UIEvents/UIEventStream.h>
#include <Swift/Controllers/UIEvents/JoinMUCUIEvent.h>
+#include <Swift/Controllers/UIEvents/UIEventStream.h>
#include <Swift/QtUI/ChatSnippet.h>
#include <Swift/QtUI/QtSwiftUtil.h>
@@ -360,6 +360,13 @@ QtPlainChatView::FileTransfer::FileTransfer(QtPlainChatView* parent, bool sender
std::string status = msg;
switch (state) {
+ case ChatWindow::Initialisation: {
+ status = "Preparing to send <i>"+ filename + "</i>...";
+ FileTransfer::Action* cancel = new FileTransfer::Action("Cancel", ftId);
+ parent->connect(cancel, SIGNAL(clicked()), SLOT(fileTransferReject()));
+ layout_->addWidget(cancel);
+ break;
+ }
case ChatWindow::WaitingForAccept: {
status = "Waiting for user to accept <i>" + filename + "</i>...";
FileTransfer::Action* cancel = new FileTransfer::Action("Cancel", ftId);
diff --git a/Swift/QtUI/QtWebKitChatView.cpp b/Swift/QtUI/QtWebKitChatView.cpp
index d6dc6f5..b7f96f6 100644
--- a/Swift/QtUI/QtWebKitChatView.cpp
+++ b/Swift/QtUI/QtWebKitChatView.cpp
@@ -438,18 +438,22 @@ void QtWebKitChatView::setFileTransferStatus(QString id, const ChatWindow::FileT
}
QString newInnerHTML = "";
- if (state == ChatWindow::WaitingForAccept) {
- newInnerHTML = tr("Waiting for other side to accept the transfer.") + "<br/>" +
+ if (state == ChatWindow::Initialisation) {
+ newInnerHTML = tr("Preparing to send.") + "<br/>" +
buildChatWindowButton(tr("Cancel"), ButtonFileTransferCancel, id);
}
- if (state == ChatWindow::Negotiating) {
+ else if (state == ChatWindow::WaitingForAccept) {
+ newInnerHTML = tr("Waiting for other side to accept the transfer.") + "<br/>" +
+ buildChatWindowButton(tr("Cancel"), ButtonFileTransferCancel, id);
+ }
+ else if (state == ChatWindow::Negotiating) {
// replace with text "Negotiaging" + Cancel button
- newInnerHTML = tr("Negotiating...") + "<br/>" +
+ newInnerHTML = tr("Negotiating...") + "<br/>" +
buildChatWindowButton(tr("Cancel"), ButtonFileTransferCancel, id);
}
else if (state == ChatWindow::Transferring) {
// progress bar + Cancel Button
- newInnerHTML = "<div style=\"position: relative; width: 90%; height: 20px; border: 2px solid grey; -webkit-border-radius: 10px;\">"
+ newInnerHTML = "<div style=\"position: relative; width: 90%; height: 20px; border: 2px solid grey; -webkit-border-radius: 10px;\">"
"<div class=\"progressbar\" style=\"width: 0%; height: 100%; background: #AAA; -webkit-border-radius: 6px;\">"
"<div class=\"progressbar-value\" style=\"position: absolute; top: 0px; left: 0px; width: 100%; text-align: center; padding-top: 2px;\">"
"0%"