summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2015-06-20 22:23:59 (GMT)
committerTobias Markmann <tm@ayena.de>2015-07-10 11:36:00 (GMT)
commit84dcfb6263b46b62504706d69198675690f759be (patch)
tree246b524c40dad61cef2d3dcfb759a9ab5505dc3f
parent23481aa1306b7d77b18be3b1c8764cccdc80e32d (diff)
downloadswift-84dcfb6263b46b62504706d69198675690f759be.zip
swift-84dcfb6263b46b62504706d69198675690f759be.tar.bz2
Add 'Open file' button for successfully transferred files
The button is shown after the 'Transfer completed successful.' message and asks the desktop environment to open the file with the default program. Test-Information: Send a file to another Swift on OS X 10.9.5 and verified that it opens the file on button click. Change-Id: I602e534ef07a119247cbf979e13551be7771880c
-rw-r--r--Swift/QtUI/QtWebKitChatView.cpp47
-rw-r--r--Swift/QtUI/QtWebKitChatView.h11
2 files changed, 37 insertions, 21 deletions
diff --git a/Swift/QtUI/QtWebKitChatView.cpp b/Swift/QtUI/QtWebKitChatView.cpp
index 60e5440..d6dc6f5 100644
--- a/Swift/QtUI/QtWebKitChatView.cpp
+++ b/Swift/QtUI/QtWebKitChatView.cpp
@@ -4,36 +4,36 @@
4 * See the COPYING file for more information. 4 * See the COPYING file for more information.
5 */ 5 */
6 6
7#include "QtWebKitChatView.h" 7#include <Swift/QtUI/QtWebKitChatView.h>
8 8
9#include <QtDebug> 9#include <QApplication>
10#include <QDesktopServices>
10#include <QEventLoop> 11#include <QEventLoop>
11#include <QFile> 12#include <QFile>
12#include <QDesktopServices> 13#include <QFileDialog>
13#include <QVBoxLayout> 14#include <QInputDialog>
14#include <QWebFrame>
15#include <QKeyEvent> 15#include <QKeyEvent>
16#include <QMessageBox>
16#include <QStackedWidget> 17#include <QStackedWidget>
17#include <QTimer> 18#include <QTimer>
18#include <QMessageBox> 19#include <QVBoxLayout>
19#include <QApplication> 20#include <QWebFrame>
20#include <QInputDialog> 21#include <QtDebug>
21#include <QFileDialog>
22 22
23#include <Swiften/Base/Log.h>
24#include <Swiften/Base/FileSize.h> 23#include <Swiften/Base/FileSize.h>
24#include <Swiften/Base/Log.h>
25#include <Swiften/StringCodecs/Base64.h> 25#include <Swiften/StringCodecs/Base64.h>
26 26
27#include <Swift/Controllers/UIEvents/UIEventStream.h>
28#include <Swift/Controllers/UIEvents/JoinMUCUIEvent.h> 27#include <Swift/Controllers/UIEvents/JoinMUCUIEvent.h>
28#include <Swift/Controllers/UIEvents/UIEventStream.h>
29 29
30#include <Swift/QtUI/QtWebView.h> 30#include <Swift/QtUI/MessageSnippet.h>
31#include <Swift/QtUI/QtChatWindow.h> 31#include <Swift/QtUI/QtChatWindow.h>
32#include <Swift/QtUI/QtChatWindowJSBridge.h> 32#include <Swift/QtUI/QtChatWindowJSBridge.h>
33#include <Swift/QtUI/QtScaledAvatarCache.h> 33#include <Swift/QtUI/QtScaledAvatarCache.h>
34#include <Swift/QtUI/QtSwiftUtil.h> 34#include <Swift/QtUI/QtSwiftUtil.h>
35#include <Swift/QtUI/QtUtilities.h> 35#include <Swift/QtUI/QtUtilities.h>
36#include <Swift/QtUI/MessageSnippet.h> 36#include <Swift/QtUI/QtWebView.h>
37#include <Swift/QtUI/SystemMessageSnippet.h> 37#include <Swift/QtUI/SystemMessageSnippet.h>
38 38
39namespace Swift { 39namespace Swift {
@@ -45,6 +45,7 @@ const QString QtWebKitChatView::ButtonFileTransferCancel = QString("filetransfer
45const QString QtWebKitChatView::ButtonFileTransferSetDescription = QString("filetransfer-setdescription"); 45const QString QtWebKitChatView::ButtonFileTransferSetDescription = QString("filetransfer-setdescription");
46const QString QtWebKitChatView::ButtonFileTransferSendRequest = QString("filetransfer-sendrequest"); 46const QString QtWebKitChatView::ButtonFileTransferSendRequest = QString("filetransfer-sendrequest");
47const QString QtWebKitChatView::ButtonFileTransferAcceptRequest = QString("filetransfer-acceptrequest"); 47const QString QtWebKitChatView::ButtonFileTransferAcceptRequest = QString("filetransfer-acceptrequest");
48const QString QtWebKitChatView::ButtonFileTransferOpenFile = QString("filetransfer-openfile");
48const QString QtWebKitChatView::ButtonMUCInvite = QString("mucinvite"); 49const QString QtWebKitChatView::ButtonMUCInvite = QString("mucinvite");
49 50
50QtWebKitChatView::QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, bool disableAutoScroll) : QtChatView(parent), window_(window), eventStream_(eventStream), fontSizeSteps_(0), disableAutoScroll_(disableAutoScroll), previousMessageKind_(PreviosuMessageWasNone), previousMessageWasSelf_(false), showEmoticons_(false), insertingLastLine_(false), idCounter_(0) { 51QtWebKitChatView::QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, bool disableAutoScroll) : QtChatView(parent), window_(window), eventStream_(eventStream), fontSizeSteps_(0), disableAutoScroll_(disableAutoScroll), previousMessageKind_(PreviosuMessageWasNone), previousMessageWasSelf_(false), showEmoticons_(false), insertingLastLine_(false), idCounter_(0) {
@@ -462,7 +463,8 @@ void QtWebKitChatView::setFileTransferStatus(QString id, const ChatWindow::FileT
462 } 463 }
463 else if (state == ChatWindow::Finished) { 464 else if (state == ChatWindow::Finished) {
464 // text "Successful transfer" 465 // text "Successful transfer"
465 newInnerHTML = tr("Transfer completed successfully."); 466 newInnerHTML = tr("Transfer completed successfully." ) + " " + buildChatWindowButton(tr("Open file"), ButtonFileTransferOpenFile, id, filePaths_[id]);
467 filePaths_.erase(id);
466 } 468 }
467 else if (state == ChatWindow::FTFailed) { 469 else if (state == ChatWindow::FTFailed) {
468 newInnerHTML = tr("Transfer failed."); 470 newInnerHTML = tr("Transfer failed.");
@@ -492,6 +494,13 @@ void QtWebKitChatView::setMUCInvitationJoined(QString id) {
492 } 494 }
493} 495}
494 496
497void QtWebKitChatView::askDesktopToOpenFile(const QString& filename) {
498 QFileInfo fileInfo(filename);
499 if (fileInfo.exists() && fileInfo.isFile()) {
500 QDesktopServices::openUrl(QUrl::fromLocalFile(filename));
501 }
502}
503
495void QtWebKitChatView::handleScrollRequested(int, int dy, const QRect&) { 504void QtWebKitChatView::handleScrollRequested(int, int dy, const QRect&) {
496 rememberScrolledToBottom(); 505 rememberScrolledToBottom();
497 506
@@ -652,6 +661,7 @@ std::string QtWebKitChatView::addFileTransfer(const std::string& senderName, boo
652 QString formattedFileSize = P2QSTRING(formatSize(sizeInBytes)); 661 QString formattedFileSize = P2QSTRING(formatSize(sizeInBytes));
653 if (senderIsSelf) { 662 if (senderIsSelf) {
654 // outgoing 663 // outgoing
664 filePaths_[ft_id] = P2QSTRING(filename);
655 actionText = tr("Send file"); 665 actionText = tr("Send file");
656 htmlString = actionText + ": " + P2QSTRING(filename) + " ( " + formattedFileSize + ") <br/>" + 666 htmlString = actionText + ": " + P2QSTRING(filename) + " ( " + formattedFileSize + ") <br/>" +
657 "<div id='" + ft_id + "'>" + 667 "<div id='" + ft_id + "'>" +
@@ -719,9 +729,6 @@ void QtWebKitChatView::setWhiteboardSessionStatus(const std::string& id, const C
719 setWhiteboardSessionStatus(P2QSTRING(id), state); 729 setWhiteboardSessionStatus(P2QSTRING(id), state);
720} 730}
721 731
722
723
724
725void QtWebKitChatView::handleHTMLButtonClicked(QString id, QString encodedArgument1, QString encodedArgument2, QString encodedArgument3, QString encodedArgument4, QString encodedArgument5) { 732void QtWebKitChatView::handleHTMLButtonClicked(QString id, QString encodedArgument1, QString encodedArgument2, QString encodedArgument3, QString encodedArgument4, QString encodedArgument5) {
726 QString arg1 = decodeButtonArgument(encodedArgument1); 733 QString arg1 = decodeButtonArgument(encodedArgument1);
727 QString arg2 = decodeButtonArgument(encodedArgument2); 734 QString arg2 = decodeButtonArgument(encodedArgument2);
@@ -753,9 +760,15 @@ void QtWebKitChatView::handleHTMLButtonClicked(QString id, QString encodedArgume
753 760
754 QString path = QFileDialog::getSaveFileName(this, tr("Save File"), filename); 761 QString path = QFileDialog::getSaveFileName(this, tr("Save File"), filename);
755 if (!path.isEmpty()) { 762 if (!path.isEmpty()) {
763 filePaths_[ft_id] = path;
756 window_->onFileTransferAccept(Q2PSTRING(ft_id), Q2PSTRING(path)); 764 window_->onFileTransferAccept(Q2PSTRING(ft_id), Q2PSTRING(path));
757 } 765 }
758 } 766 }
767 else if (id.startsWith(ButtonFileTransferOpenFile)) {
768 QString ft_id = arg1;
769 QString filename = arg2;
770 askDesktopToOpenFile(filename);
771 }
759 else if (id.startsWith(ButtonWhiteboardSessionAcceptRequest)) { 772 else if (id.startsWith(ButtonWhiteboardSessionAcceptRequest)) {
760 QString id = arg1; 773 QString id = arg1;
761 setWhiteboardSessionStatus(id, ChatWindow::WhiteboardAccepted); 774 setWhiteboardSessionStatus(id, ChatWindow::WhiteboardAccepted);
diff --git a/Swift/QtUI/QtWebKitChatView.h b/Swift/QtUI/QtWebKitChatView.h
index ea9a57c..af2da01 100644
--- a/Swift/QtUI/QtWebKitChatView.h
+++ b/Swift/QtUI/QtWebKitChatView.h
@@ -6,12 +6,12 @@
6 6
7#pragma once 7#pragma once
8 8
9#include <QString> 9#include <boost/shared_ptr.hpp>
10#include <QWidget> 10
11#include <QList> 11#include <QList>
12#include <QString>
12#include <QWebElement> 13#include <QWebElement>
13 14#include <QWidget>
14#include <boost/shared_ptr.hpp>
15 15
16#include <Swiften/Base/Override.h> 16#include <Swiften/Base/Override.h>
17 17
@@ -41,6 +41,7 @@ namespace Swift {
41 static const QString ButtonFileTransferSetDescription; 41 static const QString ButtonFileTransferSetDescription;
42 static const QString ButtonFileTransferSendRequest; 42 static const QString ButtonFileTransferSendRequest;
43 static const QString ButtonFileTransferAcceptRequest; 43 static const QString ButtonFileTransferAcceptRequest;
44 static const QString ButtonFileTransferOpenFile;
44 static const QString ButtonMUCInvite; 45 static const QString ButtonMUCInvite;
45 public: 46 public:
46 QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, bool disableAutoScroll = false); 47 QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, bool disableAutoScroll = false);
@@ -96,6 +97,7 @@ namespace Swift {
96 void setFileTransferStatus(QString id, const ChatWindow::FileTransferState state, const QString& msg); 97 void setFileTransferStatus(QString id, const ChatWindow::FileTransferState state, const QString& msg);
97 void setWhiteboardSessionStatus(QString id, const ChatWindow::WhiteboardSessionState state); 98 void setWhiteboardSessionStatus(QString id, const ChatWindow::WhiteboardSessionState state);
98 void setMUCInvitationJoined(QString id); 99 void setMUCInvitationJoined(QString id);
100 void askDesktopToOpenFile(const QString& filename);
99 101
100 signals: 102 signals:
101 void gotFocus(); 103 void gotFocus();
@@ -186,5 +188,6 @@ namespace Swift {
186 int idCounter_; 188 int idCounter_;
187 QString previousSenderName_; 189 QString previousSenderName_;
188 std::map<QString, QString> descriptions_; 190 std::map<QString, QString> descriptions_;
191 std::map<QString, QString> filePaths_;
189 }; 192 };
190} 193}