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>
|