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 /Swift/QtUI/QtWebKitChatView.cpp
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
Diffstat (limited to 'Swift/QtUI/QtWebKitChatView.cpp')
-rw-r--r--Swift/QtUI/QtWebKitChatView.cpp47
1 files changed, 30 insertions, 17 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);