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
@@ -2,40 +2,40 @@
2 * Copyright (c) 2010-2015 Isode Limited. 2 * Copyright (c) 2010-2015 Isode Limited.
3 * All rights reserved. 3 * All rights reserved.
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 {
40 40
41const QString QtWebKitChatView::ButtonWhiteboardSessionCancel = QString("whiteboard-cancel"); 41const QString QtWebKitChatView::ButtonWhiteboardSessionCancel = QString("whiteboard-cancel");
@@ -43,10 +43,11 @@ const QString QtWebKitChatView::ButtonWhiteboardSessionAcceptRequest = QString("
43const QString QtWebKitChatView::ButtonWhiteboardShowWindow = QString("whiteboard-showwindow"); 43const QString QtWebKitChatView::ButtonWhiteboardShowWindow = QString("whiteboard-showwindow");
44const QString QtWebKitChatView::ButtonFileTransferCancel = QString("filetransfer-cancel"); 44const QString QtWebKitChatView::ButtonFileTransferCancel = QString("filetransfer-cancel");
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) {
51 theme_ = theme; 52 theme_ = theme;
52 53
@@ -460,11 +461,12 @@ void QtWebKitChatView::setFileTransferStatus(QString id, const ChatWindow::FileT
460 else if (state == ChatWindow::Canceled) { 461 else if (state == ChatWindow::Canceled) {
461 newInnerHTML = tr("Transfer has been canceled!"); 462 newInnerHTML = tr("Transfer has been canceled!");
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.");
469 } 471 }
470 472
@@ -490,10 +492,17 @@ void QtWebKitChatView::setMUCInvitationJoined(QString id) {
490 if (!buttonElement.isNull()) { 492 if (!buttonElement.isNull()) {
491 buttonElement.setAttribute("value", tr("Return to room")); 493 buttonElement.setAttribute("value", tr("Return to room"));
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
498 int pos = webPage_->mainFrame()->scrollBarValue(Qt::Vertical) - dy; 507 int pos = webPage_->mainFrame()->scrollBarValue(Qt::Vertical) - dy;
499 emit scrollRequested(pos); 508 emit scrollRequested(pos);
@@ -650,10 +659,11 @@ std::string QtWebKitChatView::addFileTransfer(const std::string& senderName, boo
650 QString actionText; 659 QString actionText;
651 QString htmlString; 660 QString htmlString;
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 + "'>" +
658 buildChatWindowButton(tr("Cancel"), ButtonFileTransferCancel, ft_id) + 668 buildChatWindowButton(tr("Cancel"), ButtonFileTransferCancel, ft_id) +
659 buildChatWindowButton(tr("Set Description"), ButtonFileTransferSetDescription, ft_id) + 669 buildChatWindowButton(tr("Set Description"), ButtonFileTransferSetDescription, ft_id) +
@@ -717,13 +727,10 @@ std::string QtWebKitChatView::addWhiteboardRequest(const QString& contact, bool
717 727
718void QtWebKitChatView::setWhiteboardSessionStatus(const std::string& id, const ChatWindow::WhiteboardSessionState state) { 728void QtWebKitChatView::setWhiteboardSessionStatus(const std::string& id, const ChatWindow::WhiteboardSessionState state) {
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);
728 QString arg3 = decodeButtonArgument(encodedArgument3); 735 QString arg3 = decodeButtonArgument(encodedArgument3);
729 QString arg4 = decodeButtonArgument(encodedArgument4); 736 QString arg4 = decodeButtonArgument(encodedArgument4);
@@ -751,13 +758,19 @@ void QtWebKitChatView::handleHTMLButtonClicked(QString id, QString encodedArgume
751 QString ft_id = arg1; 758 QString ft_id = arg1;
752 QString filename = arg2; 759 QString filename = arg2;
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);
762 window_->onWhiteboardSessionAccept(); 775 window_->onWhiteboardSessionAccept();
763 } 776 }