diff options
Diffstat (limited to 'Swift/QtUI')
-rw-r--r-- | Swift/QtUI/QtWebKitChatView.cpp | 47 | ||||
-rw-r--r-- | Swift/QtUI/QtWebKitChatView.h | 11 |
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 @@ -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)) { 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 @@ -3,18 +3,18 @@ * All rights reserved. * See the COPYING file for more information. */ #pragma once -#include <QString> -#include <QWidget> +#include <boost/shared_ptr.hpp> + #include <QList> +#include <QString> #include <QWebElement> - -#include <boost/shared_ptr.hpp> +#include <QWidget> #include <Swiften/Base/Override.h> #include <Swift/Controllers/UIInterfaces/ChatWindow.h> #include <Swift/QtUI/ChatSnippet.h> @@ -38,12 +38,13 @@ namespace Swift { static const QString ButtonWhiteboardSessionAcceptRequest; static const QString ButtonWhiteboardShowWindow; static const QString ButtonFileTransferCancel; static const QString ButtonFileTransferSetDescription; static const QString ButtonFileTransferSendRequest; static const QString ButtonFileTransferAcceptRequest; + static const QString ButtonFileTransferOpenFile; static const QString ButtonMUCInvite; public: QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, bool disableAutoScroll = false); ~QtWebKitChatView(); /** Add message to window. @@ -93,12 +94,13 @@ namespace Swift { QString getLastSentMessage(); void addToJSEnvironment(const QString&, QObject*); void setFileTransferProgress(QString id, const int percentageDone); void setFileTransferStatus(QString id, const ChatWindow::FileTransferState state, const QString& msg); void setWhiteboardSessionStatus(QString id, const ChatWindow::WhiteboardSessionState state); void setMUCInvitationJoined(QString id); + void askDesktopToOpenFile(const QString& filename); signals: void gotFocus(); void fontResized(int); void logCleared(); void scrollRequested(int pos); @@ -183,8 +185,9 @@ namespace Swift { bool previousMessageWasSelf_; bool showEmoticons_; bool insertingLastLine_; int idCounter_; QString previousSenderName_; std::map<QString, QString> descriptions_; + std::map<QString, QString> filePaths_; }; } |