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 | |||
| @@ -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 | ||
| 39 | namespace Swift { | 39 | namespace Swift { |
| 40 | 40 | ||
| 41 | const QString QtWebKitChatView::ButtonWhiteboardSessionCancel = QString("whiteboard-cancel"); | 41 | const QString QtWebKitChatView::ButtonWhiteboardSessionCancel = QString("whiteboard-cancel"); |
| @@ -43,10 +43,11 @@ const QString QtWebKitChatView::ButtonWhiteboardSessionAcceptRequest = QString(" | |||
| 43 | const QString QtWebKitChatView::ButtonWhiteboardShowWindow = QString("whiteboard-showwindow"); | 43 | const QString QtWebKitChatView::ButtonWhiteboardShowWindow = QString("whiteboard-showwindow"); |
| 44 | const QString QtWebKitChatView::ButtonFileTransferCancel = QString("filetransfer-cancel"); | 44 | const QString QtWebKitChatView::ButtonFileTransferCancel = QString("filetransfer-cancel"); |
| 45 | const QString QtWebKitChatView::ButtonFileTransferSetDescription = QString("filetransfer-setdescription"); | 45 | const QString QtWebKitChatView::ButtonFileTransferSetDescription = QString("filetransfer-setdescription"); |
| 46 | const QString QtWebKitChatView::ButtonFileTransferSendRequest = QString("filetransfer-sendrequest"); | 46 | const QString QtWebKitChatView::ButtonFileTransferSendRequest = QString("filetransfer-sendrequest"); |
| 47 | const QString QtWebKitChatView::ButtonFileTransferAcceptRequest = QString("filetransfer-acceptrequest"); | 47 | const QString QtWebKitChatView::ButtonFileTransferAcceptRequest = QString("filetransfer-acceptrequest"); |
| 48 | const QString QtWebKitChatView::ButtonFileTransferOpenFile = QString("filetransfer-openfile"); | ||
| 48 | const QString QtWebKitChatView::ButtonMUCInvite = QString("mucinvite"); | 49 | const QString QtWebKitChatView::ButtonMUCInvite = QString("mucinvite"); |
| 49 | 50 | ||
| 50 | 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) { | 51 | 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) { |
| 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 | ||
| 497 | void QtWebKitChatView::askDesktopToOpenFile(const QString& filename) { | ||
| 498 | QFileInfo fileInfo(filename); | ||
| 499 | if (fileInfo.exists() && fileInfo.isFile()) { | ||
| 500 | QDesktopServices::openUrl(QUrl::fromLocalFile(filename)); | ||
| 501 | } | ||
| 502 | } | ||
| 503 | |||
| 495 | void QtWebKitChatView::handleScrollRequested(int, int dy, const QRect&) { | 504 | void 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 | ||
| 718 | void QtWebKitChatView::setWhiteboardSessionStatus(const std::string& id, const ChatWindow::WhiteboardSessionState state) { | 728 | void 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 | |||
| 725 | void QtWebKitChatView::handleHTMLButtonClicked(QString id, QString encodedArgument1, QString encodedArgument2, QString encodedArgument3, QString encodedArgument4, QString encodedArgument5) { | 732 | void 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 | } |
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 | |||
| @@ -4,16 +4,16 @@ | |||
| 4 | * See the COPYING file for more information. | 4 | * See the COPYING file for more information. |
| 5 | */ | 5 | */ |
| 6 | 6 | ||
| 7 | #pragma once | 7 | #pragma once |
| 8 | 8 | ||
| 9 | #include <QString> | 9 | #include <boost/shared_ptr.hpp> |
| 10 | #include <QWidget> | 10 | |
| 11 | #include <QList> | 11 | #include <QList> |
| 12 | #include <QString> | ||
| 12 | #include <QWebElement> | 13 | #include <QWebElement> |
| 13 | 14 | #include <QWidget> | |
| 14 | #include <boost/shared_ptr.hpp> | ||
| 15 | 15 | ||
| 16 | #include <Swiften/Base/Override.h> | 16 | #include <Swiften/Base/Override.h> |
| 17 | 17 | ||
| 18 | #include <Swift/Controllers/UIInterfaces/ChatWindow.h> | 18 | #include <Swift/Controllers/UIInterfaces/ChatWindow.h> |
| 19 | 19 | ||
| @@ -39,10 +39,11 @@ namespace Swift { | |||
| 39 | static const QString ButtonWhiteboardShowWindow; | 39 | static const QString ButtonWhiteboardShowWindow; |
| 40 | static const QString ButtonFileTransferCancel; | 40 | static const QString ButtonFileTransferCancel; |
| 41 | static const QString ButtonFileTransferSetDescription; | 41 | static const QString ButtonFileTransferSetDescription; |
| 42 | static const QString ButtonFileTransferSendRequest; | 42 | static const QString ButtonFileTransferSendRequest; |
| 43 | static const QString ButtonFileTransferAcceptRequest; | 43 | static const QString ButtonFileTransferAcceptRequest; |
| 44 | static const QString ButtonFileTransferOpenFile; | ||
| 44 | static const QString ButtonMUCInvite; | 45 | static const QString ButtonMUCInvite; |
| 45 | public: | 46 | public: |
| 46 | QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, bool disableAutoScroll = false); | 47 | QtWebKitChatView(QtChatWindow* window, UIEventStream* eventStream, QtChatTheme* theme, QWidget* parent, bool disableAutoScroll = false); |
| 47 | ~QtWebKitChatView(); | 48 | ~QtWebKitChatView(); |
| 48 | 49 | ||
| @@ -94,10 +95,11 @@ namespace Swift { | |||
| 94 | void addToJSEnvironment(const QString&, QObject*); | 95 | void addToJSEnvironment(const QString&, QObject*); |
| 95 | void setFileTransferProgress(QString id, const int percentageDone); | 96 | void setFileTransferProgress(QString id, const int percentageDone); |
| 96 | void setFileTransferStatus(QString id, const ChatWindow::FileTransferState state, const QString& msg); | 97 | void setFileTransferStatus(QString id, const ChatWindow::FileTransferState state, const QString& msg); |
| 97 | void setWhiteboardSessionStatus(QString id, const ChatWindow::WhiteboardSessionState state); | 98 | void setWhiteboardSessionStatus(QString id, const ChatWindow::WhiteboardSessionState state); |
| 98 | void setMUCInvitationJoined(QString id); | 99 | void setMUCInvitationJoined(QString id); |
| 100 | void askDesktopToOpenFile(const QString& filename); | ||
| 99 | 101 | ||
| 100 | signals: | 102 | signals: |
| 101 | void gotFocus(); | 103 | void gotFocus(); |
| 102 | void fontResized(int); | 104 | void fontResized(int); |
| 103 | void logCleared(); | 105 | void logCleared(); |
| @@ -184,7 +186,8 @@ namespace Swift { | |||
| 184 | bool showEmoticons_; | 186 | bool showEmoticons_; |
| 185 | bool insertingLastLine_; | 187 | bool insertingLastLine_; |
| 186 | int idCounter_; | 188 | int idCounter_; |
| 187 | QString previousSenderName_; | 189 | QString previousSenderName_; |
| 188 | std::map<QString, QString> descriptions_; | 190 | std::map<QString, QString> descriptions_; |
| 191 | std::map<QString, QString> filePaths_; | ||
| 189 | }; | 192 | }; |
| 190 | } | 193 | } |
Swift