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
@@ -145,12 +145,13 @@ void FileTransferController::handleFileTransferStateChange(FileTransfer::State s
chatWindow->setFileTransferStatus(uiID, ChatWindow::FTFailed);
return;
case FileTransfer::State::WaitingForAccept:
chatWindow->setFileTransferStatus(uiID, ChatWindow::WaitingForAccept);
return;
case FileTransfer::State::WaitingForStart:
+ chatWindow->setFileTransferStatus(uiID, ChatWindow::Initialisation);
return;
}
assert(false);
}
void FileTransferController::handleProgressPercentageChange(int percentage) {
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
@@ -86,13 +86,21 @@ namespace Swift {
enum AckState {Pending, Received, Failed};
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 };
enum MUCType { StandardMUC, ImpromptuMUC };
enum TimestampBehaviour { KeepTimestamp, UpdateTimestamp };
enum RoomBookmarkState { RoomNotBookmarked, RoomBookmarked, RoomAutoJoined };
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
@@ -3,28 +3,28 @@
* All rights reserved.
* See the COPYING file for more information.
*/
#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>
#include <Swift/QtUI/QtUtilities.h>
namespace Swift {
@@ -357,12 +357,19 @@ QtPlainChatView::FileTransfer::FileTransfer(QtPlainChatView* parent, bool sender
return;
}
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);
parent->connect(cancel, SIGNAL(clicked()), SLOT(fileTransferReject()));
layout_->addWidget(cancel);
break;
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
@@ -435,24 +435,28 @@ void QtWebKitChatView::setFileTransferStatus(QString id, const ChatWindow::FileT
if (ftElement.isNull()) {
SWIFT_LOG(debug) << "Tried to access FT UI via invalid id! id = " << Q2PSTRING(id) << std::endl;
return;
}
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%"
"</div>"
"</div>"
"</div>" +