summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 @@
* 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 {
@@ -45,6 +45,7 @@ const QString QtWebKitChatView::ButtonFileTransferCancel = QString("filetransfer
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) {
@@ -462,7 +463,8 @@ void QtWebKitChatView::setFileTransferStatus(QString id, const ChatWindow::FileT
}
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.");
@@ -492,6 +494,13 @@ void QtWebKitChatView::setMUCInvitationJoined(QString id) {
}
}
+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();
@@ -652,6 +661,7 @@ std::string QtWebKitChatView::addFileTransfer(const std::string& senderName, boo
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 + "'>" +
@@ -719,9 +729,6 @@ void QtWebKitChatView::setWhiteboardSessionStatus(const std::string& id, const C
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);
@@ -753,9 +760,15 @@ void QtWebKitChatView::handleHTMLButtonClicked(QString id, QString encodedArgume
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);
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 @@
#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>
@@ -41,6 +41,7 @@ namespace Swift {
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);
@@ -96,6 +97,7 @@ namespace Swift {
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();
@@ -186,5 +188,6 @@ namespace Swift {
int idCounter_;
QString previousSenderName_;
std::map<QString, QString> descriptions_;
+ std::map<QString, QString> filePaths_;
};
}