summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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);