summary refs log tree commit diff
path: root/src/timeline
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-06-14 02:28:35 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-06-14 02:28:35 +0300
commit8e9d210a2a2136d1d517645b2b2412b15da09360 (patch)
treeb58bd7b236e9759bbc4b310ebffb0687f89db47d /src/timeline
parentAdd support for sending encrypted messages (diff)
downloadnheko-8e9d210a2a2136d1d517645b2b2412b15da09360.tar.xz
Rename the log namespace to avoid symbol clash with the math function
- Patch the olm repo with a CMakeLists.txt file
Diffstat (limited to 'src/timeline')
-rw-r--r--src/timeline/TimelineItem.cc17
-rw-r--r--src/timeline/TimelineView.cc88
-rw-r--r--src/timeline/TimelineViewManager.cc16
-rw-r--r--src/timeline/widgets/AudioItem.cc9
-rw-r--r--src/timeline/widgets/FileItem.cc11
-rw-r--r--src/timeline/widgets/ImageItem.cc32
-rw-r--r--src/timeline/widgets/VideoItem.cc1
7 files changed, 101 insertions, 73 deletions
diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc

index 83a0aaed..3505d347 100644 --- a/src/timeline/TimelineItem.cc +++ b/src/timeline/TimelineItem.cc
@@ -23,6 +23,7 @@ #include "Avatar.h" #include "ChatPage.h" #include "Config.h" +#include "Logging.hpp" #include "timeline/TimelineItem.h" #include "timeline/widgets/AudioItem.h" @@ -653,3 +654,19 @@ TimelineItem::addAvatar() AvatarProvider::resolve( room_id_, userid, this, [this](const QImage &img) { setUserAvatar(img); }); } + +void +TimelineItem::sendReadReceipt() const +{ + if (!event_id_.isEmpty()) + http::v2::client()->read_event(room_id_.toStdString(), + event_id_.toStdString(), + [this](mtx::http::RequestErr err) { + if (err) { + nhlog::net()->warn( + "failed to read_event ({}, {})", + room_id_.toStdString(), + event_id_.toStdString()); + } + }); +} diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc
index 9276a7bc..8f3ad1a7 100644 --- a/src/timeline/TimelineView.cc +++ b/src/timeline/TimelineView.cc
@@ -301,8 +301,8 @@ TimelineView::parseMessageEvent(const mtx::events::collections::TimelineEvents & try { cache::client()->setEncryptedRoom(room_id_.toStdString()); } catch (const lmdb::error &e) { - log::db()->critical("failed to save room {} as encrypted", - room_id_.toStdString()); + nhlog::db()->critical("failed to save room {} as encrypted", + room_id_.toStdString()); } } @@ -324,10 +324,10 @@ TimelineView::parseEncryptedEvent(const mtx::events::EncryptedEvent<mtx::events: dummy.content.body = "-- Encrypted Event (No keys found for decryption) --"; if (!cache::client()->inboundMegolmSessionExists(index)) { - log::crypto()->info("Could not find inbound megolm session ({}, {}, {})", - index.room_id, - index.session_id, - e.sender); + nhlog::crypto()->info("Could not find inbound megolm session ({}, {}, {})", + index.room_id, + index.session_id, + e.sender); // TODO: request megolm session_id & session_key from the sender. return dummy; } @@ -344,7 +344,7 @@ TimelineView::parseEncryptedEvent(const mtx::events::EncryptedEvent<mtx::events: body["origin_server_ts"] = e.origin_server_ts; body["unsigned"] = e.unsigned_data; - log::crypto()->info("decrypted data: \n {}", body.dump(2)); + nhlog::crypto()->info("decrypted data: \n {}", body.dump(2)); json event_array = json::array(); event_array.push_back(body); @@ -523,10 +523,10 @@ TimelineView::getMessages() http::v2::client()->messages( opts, [this, opts](const mtx::responses::Messages &res, mtx::http::RequestErr err) { if (err) { - log::net()->error("failed to call /messages ({}): {} - {}", - opts.room_id, - mtx::errors::to_string(err->matrix_error.errcode), - err->matrix_error.error); + nhlog::net()->error("failed to call /messages ({}): {} - {}", + opts.room_id, + mtx::errors::to_string(err->matrix_error.errcode), + err->matrix_error.error); return; } @@ -607,7 +607,7 @@ TimelineView::addTimelineItem(TimelineItem *item, TimelineDirection direction) void TimelineView::updatePendingMessage(const std::string &txn_id, const QString &event_id) { - log::main()->info("[{}] message was received by the server", txn_id); + nhlog::ui()->info("[{}] message was received by the server", txn_id); if (!pending_msgs_.isEmpty() && pending_msgs_.head().txn_id == txn_id) { // We haven't received it yet auto msg = pending_msgs_.dequeue(); @@ -642,7 +642,7 @@ TimelineView::addUserMessage(mtx::events::MessageType ty, const QString &body) try { message.is_encrypted = cache::client()->isRoomEncrypted(room_id_.toStdString()); } catch (const lmdb::error &e) { - log::db()->critical("failed to check encryption status of room {}", e.what()); + nhlog::db()->critical("failed to check encryption status of room {}", e.what()); view_item->deleteLater(); // TODO: Send a notification to the user. @@ -676,11 +676,11 @@ TimelineView::sendNextPendingMessage() PendingMessage &m = pending_msgs_.head(); - log::main()->info("[{}] sending next queued message", m.txn_id); + nhlog::ui()->info("[{}] sending next queued message", m.txn_id); if (m.is_encrypted) { prepareEncryptedMessage(std::move(m)); - log::main()->info("[{}] sending encrypted event", m.txn_id); + nhlog::ui()->info("[{}] sending encrypted event", m.txn_id); return; } @@ -763,7 +763,7 @@ TimelineView::sendNextPendingMessage() break; } default: - log::main()->warn("cannot send unknown message type: {}", m.body.toStdString()); + nhlog::ui()->warn("cannot send unknown message type: {}", m.body.toStdString()); break; } } @@ -777,7 +777,7 @@ TimelineView::notifyForLastEvent() if (lastTimelineItem) emit updateLastTimelineMessage(room_id_, lastTimelineItem->descriptionMessage()); else - log::main()->warn("cast to TimelineView failed: {}", room_id_.toStdString()); + nhlog::ui()->warn("cast to TimelineView failed: {}", room_id_.toStdString()); } void @@ -817,7 +817,7 @@ TimelineView::removePendingMessage(const std::string &txn_id) if (pending_sent_msgs_.isEmpty()) sendNextPendingMessage(); - log::main()->info("[{}] removed message with sync", txn_id); + nhlog::ui()->info("[{}] removed message with sync", txn_id); } } for (auto it = pending_msgs_.begin(); it != pending_msgs_.end(); ++it) { @@ -825,7 +825,7 @@ TimelineView::removePendingMessage(const std::string &txn_id) int index = std::distance(pending_msgs_.begin(), it); pending_msgs_.removeAt(index); - log::main()->info("[{}] removed message before sync", txn_id); + nhlog::ui()->info("[{}] removed message before sync", txn_id); return; } } @@ -861,7 +861,7 @@ TimelineView::readLastEvent() const eventId.toStdString(), [this, eventId](mtx::http::RequestErr err) { if (err) { - log::net()->warn( + nhlog::net()->warn( "failed to read event ({}, {})", room_id_.toStdString(), eventId.toStdString()); @@ -936,7 +936,7 @@ void TimelineView::removeEvent(const QString &event_id) { if (!eventIds_.contains(event_id)) { - log::main()->warn("cannot remove widget with unknown event_id: {}", + nhlog::ui()->warn("cannot remove widget with unknown event_id: {}", event_id.toStdString()); return; } @@ -1062,10 +1062,10 @@ TimelineView::sendRoomMessageHandler(const std::string &txn_id, { if (err) { const int status_code = static_cast<int>(err->status_code); - log::net()->warn("[{}] failed to send message: {} {}", - txn_id, - err->matrix_error.error, - status_code); + nhlog::net()->warn("[{}] failed to send message: {} {}", + txn_id, + err->matrix_error.error, + status_code); emit messageFailed(txn_id); return; } @@ -1200,7 +1200,7 @@ TimelineView::prepareEncryptedMessage(const PendingMessage &msg) return; } - log::main()->info("creating new outbound megolm session"); + nhlog::ui()->info("creating new outbound megolm session"); // Create a new outbound megolm session. auto outbound_session = olm::client()->init_outbound_group_session(); @@ -1223,7 +1223,7 @@ TimelineView::prepareEncryptedMessage(const PendingMessage &msg) room_id, session_data, std::move(outbound_session)); const auto members = cache::client()->roomMembers(room_id); - log::main()->info("retrieved {} members for {}", members.size(), room_id); + nhlog::ui()->info("retrieved {} members for {}", members.size(), room_id); auto keeper = std::make_shared<StateKeeper>( [megolm_payload, room_id, doc, txn_id = msg.txn_id, this]() { @@ -1243,8 +1243,8 @@ TimelineView::prepareEncryptedMessage(const PendingMessage &msg) std::placeholders::_2)); } catch (const lmdb::error &e) { - log::db()->critical("failed to save megolm outbound session: {}", - e.what()); + nhlog::db()->critical( + "failed to save megolm outbound session: {}", e.what()); } }); @@ -1257,16 +1257,16 @@ TimelineView::prepareEncryptedMessage(const PendingMessage &msg) [keeper = std::move(keeper), megolm_payload](const mtx::responses::QueryKeys &res, mtx::http::RequestErr err) { if (err) { - log::net()->warn("failed to query device keys: {} {}", - err->matrix_error.error, - static_cast<int>(err->status_code)); + nhlog::net()->warn("failed to query device keys: {} {}", + err->matrix_error.error, + static_cast<int>(err->status_code)); // TODO: Mark the event as failed. Communicate with the UI. return; } for (const auto &entry : res.device_keys) { for (const auto &dev : entry.second) { - log::net()->info("received device {}", dev.first); + nhlog::net()->info("received device {}", dev.first); const auto device_keys = dev.second.keys; const auto curveKey = "curve25519:" + dev.first; @@ -1274,7 +1274,7 @@ TimelineView::prepareEncryptedMessage(const PendingMessage &msg) if ((device_keys.find(curveKey) == device_keys.end()) || (device_keys.find(edKey) == device_keys.end())) { - log::net()->info( + nhlog::net()->info( "ignoring malformed keys for device {}", dev.first); continue; @@ -1286,7 +1286,7 @@ TimelineView::prepareEncryptedMessage(const PendingMessage &msg) // Validate signatures for (const auto &algo : dev.second.keys) { - log::net()->info( + nhlog::net()->info( "dev keys {} {}", algo.first, algo.second); } @@ -1308,22 +1308,22 @@ TimelineView::prepareEncryptedMessage(const PendingMessage &msg) const mtx::responses::ClaimKeys &res, mtx::http::RequestErr err) { if (err) { - log::net()->warn( + nhlog::net()->warn( "claim keys error: {}", err->matrix_error.error); return; } - log::net()->info("claimed keys for {} - {}", - user_id, - device_id); + nhlog::net()->info("claimed keys for {} - {}", + user_id, + device_id); auto retrieved_devices = res.one_time_keys.at(user_id); for (const auto &rd : retrieved_devices) { - log::net()->info("{} : \n {}", - rd.first, - rd.second.dump(2)); + nhlog::net()->info("{} : \n {}", + rd.first, + rd.second.dump(2)); // TODO: Verify signatures auto otk = rd.second.begin()->at("key"); @@ -1351,7 +1351,7 @@ TimelineView::prepareEncryptedMessage(const PendingMessage &msg) body, [keeper](mtx::http::RequestErr err) { if (err) { - log::net()->warn( + nhlog::net()->warn( "failed to send " "send_to_device " "message: {}", @@ -1366,7 +1366,7 @@ TimelineView::prepareEncryptedMessage(const PendingMessage &msg) }); } catch (const lmdb::error &e) { - log::db()->critical( + nhlog::db()->critical( "failed to open outbound megolm session ({}): {}", room_id, e.what()); return; } diff --git a/src/timeline/TimelineViewManager.cc b/src/timeline/TimelineViewManager.cc
index b6e7d50d..7ea1ee4a 100644 --- a/src/timeline/TimelineViewManager.cc +++ b/src/timeline/TimelineViewManager.cc
@@ -18,10 +18,10 @@ #include <random> #include <QApplication> -#include <QDebug> #include <QFileInfo> #include <QSettings> +#include "Logging.hpp" #include "timeline/TimelineView.h" #include "timeline/TimelineViewManager.h" #include "timeline/widgets/AudioItem.h" @@ -76,7 +76,7 @@ TimelineViewManager::queueImageMessage(const QString &roomid, uint64_t size) { if (!timelineViewExists(roomid)) { - qDebug() << "Cannot send m.image message to a non-managed view"; + nhlog::ui()->warn("Cannot send m.image message to a non-managed view"); return; } @@ -93,7 +93,7 @@ TimelineViewManager::queueFileMessage(const QString &roomid, uint64_t size) { if (!timelineViewExists(roomid)) { - qDebug() << "Cannot send m.file message to a non-managed view"; + nhlog::ui()->warn("cannot send m.file message to a non-managed view"); return; } @@ -110,7 +110,7 @@ TimelineViewManager::queueAudioMessage(const QString &roomid, uint64_t size) { if (!timelineViewExists(roomid)) { - qDebug() << "Cannot send m.audio message to a non-managed view"; + nhlog::ui()->warn("cannot send m.audio message to a non-managed view"); return; } @@ -127,7 +127,7 @@ TimelineViewManager::queueVideoMessage(const QString &roomid, uint64_t size) { if (!timelineViewExists(roomid)) { - qDebug() << "Cannot send m.video message to a non-managed view"; + nhlog::ui()->warn("cannot send m.video message to a non-managed view"); return; } @@ -198,7 +198,8 @@ TimelineViewManager::sync(const mtx::responses::Rooms &rooms) auto roomid = QString::fromStdString(room.first); if (!timelineViewExists(roomid)) { - qDebug() << "Ignoring event from unknown room" << roomid; + nhlog::ui()->warn("ignoring event from unknown room: {}", + roomid.toStdString()); continue; } @@ -212,7 +213,8 @@ void TimelineViewManager::setHistoryView(const QString &room_id) { if (!timelineViewExists(room_id)) { - qDebug() << "Room ID from RoomList is not present in ViewManager" << room_id; + nhlog::ui()->warn("room from RoomList is not present in ViewManager: {}", + room_id.toStdString()); return; } diff --git a/src/timeline/widgets/AudioItem.cc b/src/timeline/widgets/AudioItem.cc
index 1ad47747..7cbbed28 100644 --- a/src/timeline/widgets/AudioItem.cc +++ b/src/timeline/widgets/AudioItem.cc
@@ -16,13 +16,13 @@ */ #include <QBrush> -#include <QDebug> #include <QDesktopServices> #include <QFile> #include <QFileDialog> #include <QPainter> #include <QPixmap> +#include "Logging.hpp" #include "MatrixClient.h" #include "Utils.h" @@ -127,7 +127,8 @@ AudioItem::mousePressEvent(QMouseEvent *event) const std::string &, mtx::http::RequestErr err) { if (err) { - qWarning() << "failed to retrieve m.audio content:" << url_; + nhlog::net()->info("failed to retrieve m.audio content: {}", + url_.toString().toStdString()); return; } @@ -147,8 +148,8 @@ AudioItem::fileDownloaded(const QByteArray &data) file.write(data); file.close(); - } catch (const std::exception &ex) { - qDebug() << "Error while saving file to:" << ex.what(); + } catch (const std::exception &e) { + nhlog::ui()->warn("error while saving file: {}", e.what()); } } diff --git a/src/timeline/widgets/FileItem.cc b/src/timeline/widgets/FileItem.cc
index 43689243..4ce4d256 100644 --- a/src/timeline/widgets/FileItem.cc +++ b/src/timeline/widgets/FileItem.cc
@@ -16,13 +16,13 @@ */ #include <QBrush> -#include <QDebug> #include <QDesktopServices> #include <QFile> #include <QFileDialog> #include <QPainter> #include <QPixmap> +#include "Logging.hpp" #include "MatrixClient.h" #include "Utils.h" @@ -89,7 +89,7 @@ FileItem::openUrl() .arg(QString::fromStdString(mxc_parts.media_id)); if (!QDesktopServices::openUrl(urlToOpen)) - qWarning() << "Could not open url" << urlToOpen; + nhlog::ui()->warn("Could not open url: {}", urlToOpen.toStdString()); } QSize @@ -121,7 +121,8 @@ FileItem::mousePressEvent(QMouseEvent *event) const std::string &, mtx::http::RequestErr err) { if (err) { - qWarning() << "failed to retrieve m.file content:" << url_; + nhlog::ui()->warn("failed to retrieve m.file content: {}", + url_.toString().toStdString()); return; } @@ -143,8 +144,8 @@ FileItem::fileDownloaded(const QByteArray &data) file.write(data); file.close(); - } catch (const std::exception &ex) { - qDebug() << "Error while saving file to:" << ex.what(); + } catch (const std::exception &e) { + nhlog::ui()->warn("Error while saving file to: {}", e.what()); } } diff --git a/src/timeline/widgets/ImageItem.cc b/src/timeline/widgets/ImageItem.cc
index 6aa010a4..bf1c05d6 100644 --- a/src/timeline/widgets/ImageItem.cc +++ b/src/timeline/widgets/ImageItem.cc
@@ -16,7 +16,6 @@ */ #include <QBrush> -#include <QDebug> #include <QDesktopServices> #include <QFileDialog> #include <QFileInfo> @@ -25,6 +24,7 @@ #include <QUuid> #include "Config.h" +#include "Logging.hpp" #include "MatrixClient.h" #include "Utils.h" #include "dialogs/ImageOverlay.h" @@ -39,8 +39,11 @@ ImageItem::downloadMedia(const QUrl &url) const std::string &, mtx::http::RequestErr err) { if (err) { - qWarning() - << "failed to retrieve image:" << url; + nhlog::net()->warn( + "failed to retrieve image {}: {} {}", + url.toString().toStdString(), + err->matrix_error.error, + static_cast<int>(err->status_code)); return; } @@ -61,8 +64,8 @@ ImageItem::saveImage(const QString &filename, const QByteArray &data) file.write(data); file.close(); - } catch (const std::exception &ex) { - qDebug() << "Error while saving file to:" << ex.what(); + } catch (const std::exception &e) { + nhlog::ui()->warn("Error while saving file to: {}", e.what()); } } @@ -111,7 +114,7 @@ ImageItem::openUrl() .arg(QString::fromStdString(mxc_parts.media_id)); if (!QDesktopServices::openUrl(urlToOpen)) - qWarning() << "Could not open url" << urlToOpen; + nhlog::ui()->warn("could not open url: {}", urlToOpen.toStdString()); } QSize @@ -239,14 +242,19 @@ ImageItem::saveAs() if (filename.isEmpty()) return; + const auto url = url_.toString().toStdString(); + http::v2::client()->download( - url_.toString().toStdString(), - [this, filename](const std::string &data, - const std::string &, - const std::string &, - mtx::http::RequestErr err) { + url, + [this, filename, url](const std::string &data, + const std::string &, + const std::string &, + mtx::http::RequestErr err) { if (err) { - qWarning() << "failed to retrieve image:" << url_; + nhlog::net()->warn("failed to retrieve image {}: {} {}", + url, + err->matrix_error.error, + static_cast<int>(err->status_code)); return; } diff --git a/src/timeline/widgets/VideoItem.cc b/src/timeline/widgets/VideoItem.cc
index c1f68847..34d963a9 100644 --- a/src/timeline/widgets/VideoItem.cc +++ b/src/timeline/widgets/VideoItem.cc
@@ -15,7 +15,6 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include <QDebug> #include <QLabel> #include <QVBoxLayout>