diff options
Diffstat (limited to 'Swift/QtUI/QtWebKitChatView.cpp')
| -rw-r--r-- | Swift/QtUI/QtWebKitChatView.cpp | 47 |
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 | ||
| 39 | namespace Swift { | 39 | namespace Swift { |
| @@ -45,6 +45,7 @@ const QString QtWebKitChatView::ButtonFileTransferCancel = QString("filetransfer | |||
| 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) { |
| @@ -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 | ||
| 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 | ||
| @@ -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 | |||
| 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); |
| @@ -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); |
Swift