diff options
author | Tobias Markmann <tm@ayena.de> | 2015-06-20 22:23:59 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2015-07-10 11:36:00 (GMT) |
commit | 84dcfb6263b46b62504706d69198675690f759be (patch) | |
tree | 246b524c40dad61cef2d3dcfb759a9ab5505dc3f /Swift/QtUI/QtWebKitChatView.cpp | |
parent | 23481aa1306b7d77b18be3b1c8764cccdc80e32d (diff) | |
download | swift-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.cpp | 47 |
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 @@ -1,53 +1,54 @@ /* * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ -#include "QtWebKitChatView.h" +#include <Swift/QtUI/QtWebKitChatView.h> -#include <QtDebug> +#include <QApplication> +#include <QDesktopServices> #include <QEventLoop> #include <QFile> -#include <QDesktopServices> -#include <QVBoxLayout> -#include <QWebFrame> +#include <QFileDialog> +#include <QInputDialog> #include <QKeyEvent> +#include <QMessageBox> #include <QStackedWidget> #include <QTimer> -#include <QMessageBox> -#include <QApplication> -#include <QInputDialog> -#include <QFileDialog> +#include <QVBoxLayout> +#include <QWebFrame> +#include <QtDebug> -#include <Swiften/Base/Log.h> #include <Swiften/Base/FileSize.h> +#include <Swiften/Base/Log.h> #include <Swiften/StringCodecs/Base64.h> -#include <Swift/Controllers/UIEvents/UIEventStream.h> #include <Swift/Controllers/UIEvents/JoinMUCUIEvent.h> +#include <Swift/Controllers/UIEvents/UIEventStream.h> -#include <Swift/QtUI/QtWebView.h> +#include <Swift/QtUI/MessageSnippet.h> #include <Swift/QtUI/QtChatWindow.h> #include <Swift/QtUI/QtChatWindowJSBridge.h> #include <Swift/QtUI/QtScaledAvatarCache.h> #include <Swift/QtUI/QtSwiftUtil.h> #include <Swift/QtUI/QtUtilities.h> -#include <Swift/QtUI/MessageSnippet.h> +#include <Swift/QtUI/QtWebView.h> #include <Swift/QtUI/SystemMessageSnippet.h> namespace Swift { const QString QtWebKitChatView::ButtonWhiteboardSessionCancel = QString("whiteboard-cancel"); const QString QtWebKitChatView::ButtonWhiteboardSessionAcceptRequest = QString("whiteboard-acceptrequest"); const QString QtWebKitChatView::ButtonWhiteboardShowWindow = QString("whiteboard-showwindow"); const QString QtWebKitChatView::ButtonFileTransferCancel = QString("filetransfer-cancel"); const QString QtWebKitChatView::ButtonFileTransferSetDescription = QString("filetransfer-setdescription"); const QString QtWebKitChatView::ButtonFileTransferSendRequest = QString("filetransfer-sendrequest"); const QString QtWebKitChatView::ButtonFileTransferAcceptRequest = QString("filetransfer-acceptrequest"); +const QString QtWebKitChatView::ButtonFileTransferOpenFile = QString("filetransfer-openfile"); const QString QtWebKitChatView::ButtonMUCInvite = QString("mucinvite"); QtWebKitChatView::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) { theme_ = theme; QVBoxLayout* mainLayout = new QVBoxLayout(this); @@ -459,13 +460,14 @@ void QtWebKitChatView::setFileTransferStatus(QString id, const ChatWindow::FileT } else if (state == ChatWindow::Canceled) { newInnerHTML = tr("Transfer has been canceled!"); } else if (state == ChatWindow::Finished) { // text "Successful transfer" - newInnerHTML = tr("Transfer completed successfully."); + newInnerHTML = tr("Transfer completed successfully." ) + " " + buildChatWindowButton(tr("Open file"), ButtonFileTransferOpenFile, id, filePaths_[id]); + filePaths_.erase(id); } else if (state == ChatWindow::FTFailed) { newInnerHTML = tr("Transfer failed."); } ftElement.setInnerXml(newInnerHTML); @@ -489,12 +491,19 @@ void QtWebKitChatView::setMUCInvitationJoined(QString id) { QWebElement buttonElement = findElementWithID(divElement, "input", "mucinvite"); if (!buttonElement.isNull()) { buttonElement.setAttribute("value", tr("Return to room")); } } +void QtWebKitChatView::askDesktopToOpenFile(const QString& filename) { + QFileInfo fileInfo(filename); + if (fileInfo.exists() && fileInfo.isFile()) { + QDesktopServices::openUrl(QUrl::fromLocalFile(filename)); + } +} + void QtWebKitChatView::handleScrollRequested(int, int dy, const QRect&) { rememberScrolledToBottom(); int pos = webPage_->mainFrame()->scrollBarValue(Qt::Vertical) - dy; emit scrollRequested(pos); @@ -649,12 +658,13 @@ std::string QtWebKitChatView::addFileTransfer(const std::string& senderName, boo QString actionText; QString htmlString; QString formattedFileSize = P2QSTRING(formatSize(sizeInBytes)); if (senderIsSelf) { // outgoing + filePaths_[ft_id] = P2QSTRING(filename); actionText = tr("Send file"); htmlString = actionText + ": " + P2QSTRING(filename) + " ( " + formattedFileSize + ") <br/>" + "<div id='" + ft_id + "'>" + buildChatWindowButton(tr("Cancel"), ButtonFileTransferCancel, ft_id) + buildChatWindowButton(tr("Set Description"), ButtonFileTransferSetDescription, ft_id) + buildChatWindowButton(tr("Send"), ButtonFileTransferSendRequest, ft_id) + @@ -716,15 +726,12 @@ std::string QtWebKitChatView::addWhiteboardRequest(const QString& contact, bool } void QtWebKitChatView::setWhiteboardSessionStatus(const std::string& id, const ChatWindow::WhiteboardSessionState state) { setWhiteboardSessionStatus(P2QSTRING(id), state); } - - - void QtWebKitChatView::handleHTMLButtonClicked(QString id, QString encodedArgument1, QString encodedArgument2, QString encodedArgument3, QString encodedArgument4, QString encodedArgument5) { QString arg1 = decodeButtonArgument(encodedArgument1); QString arg2 = decodeButtonArgument(encodedArgument2); QString arg3 = decodeButtonArgument(encodedArgument3); QString arg4 = decodeButtonArgument(encodedArgument4); QString arg5 = decodeButtonArgument(encodedArgument5); @@ -750,15 +757,21 @@ void QtWebKitChatView::handleHTMLButtonClicked(QString id, QString encodedArgume else if (id.startsWith(ButtonFileTransferAcceptRequest)) { QString ft_id = arg1; QString filename = arg2; QString path = QFileDialog::getSaveFileName(this, tr("Save File"), filename); if (!path.isEmpty()) { + filePaths_[ft_id] = path; window_->onFileTransferAccept(Q2PSTRING(ft_id), Q2PSTRING(path)); } } + else if (id.startsWith(ButtonFileTransferOpenFile)) { + QString ft_id = arg1; + QString filename = arg2; + askDesktopToOpenFile(filename); + } else if (id.startsWith(ButtonWhiteboardSessionAcceptRequest)) { QString id = arg1; setWhiteboardSessionStatus(id, ChatWindow::WhiteboardAccepted); window_->onWhiteboardSessionAccept(); } else if (id.startsWith(ButtonWhiteboardSessionCancel)) { |