diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc
index 8d1c8ae1..82f22d1f 100644
--- a/src/timeline/TimelineView.cc
+++ b/src/timeline/TimelineView.cc
@@ -515,7 +515,7 @@ TimelineView::addUserMessage(mtx::events::MessageType ty, const QString &body)
lastSender_ = local_user_;
int txn_id = client_->incrementTransactionId();
- PendingMessage message(ty, txn_id, body, "", "", view_item);
+ PendingMessage message(ty, txn_id, body, "", "", -1, "", view_item);
handleNewUserMessage(message);
}
@@ -537,13 +537,14 @@ TimelineView::sendNextPendingMessage()
switch (m.ty) {
case mtx::events::MessageType::Audio:
case mtx::events::MessageType::Image:
+ case mtx::events::MessageType::Video:
case mtx::events::MessageType::File:
// FIXME: Improve the API
client_->sendRoomMessage(
- m.ty, m.txn_id, room_id_, m.filename, QFileInfo(m.filename), m.body);
+ m.ty, m.txn_id, room_id_, m.filename, m.mime, m.media_size, m.body);
break;
default:
- client_->sendRoomMessage(m.ty, m.txn_id, room_id_, m.body, QFileInfo());
+ client_->sendRoomMessage(m.ty, m.txn_id, room_id_, m.body, m.mime, m.media_size);
break;
}
}
diff --git a/src/timeline/TimelineViewManager.cc b/src/timeline/TimelineViewManager.cc
index 7bee8869..0e2bde2e 100644
--- a/src/timeline/TimelineViewManager.cc
+++ b/src/timeline/TimelineViewManager.cc
@@ -29,6 +29,7 @@
#include "timeline/widgets/AudioItem.h"
#include "timeline/widgets/FileItem.h"
#include "timeline/widgets/ImageItem.h"
+#include "timeline/widgets/VideoItem.h"
TimelineViewManager::TimelineViewManager(QSharedPointer<MatrixClient> client, QWidget *parent)
: QStackedWidget(parent)
@@ -89,9 +90,10 @@ TimelineViewManager::queueEmoteMessage(const QString &msg)
void
TimelineViewManager::queueImageMessage(const QString &roomid,
- const QSharedPointer<QIODevice> data,
const QString &filename,
- const QString &url)
+ const QString &url,
+ const QString &mime,
+ const int64_t size)
{
if (!timelineViewExists(roomid)) {
qDebug() << "Cannot send m.image message to a non-managed view";
@@ -100,13 +102,15 @@ TimelineViewManager::queueImageMessage(const QString &roomid,
auto view = views_[roomid];
- view->addUserMessage<ImageItem, mtx::events::MessageType::Image>(url, filename, data);
+ view->addUserMessage<ImageItem, mtx::events::MessageType::Image>(url, filename, mime, size);
}
void
TimelineViewManager::queueFileMessage(const QString &roomid,
const QString &filename,
- const QString &url)
+ const QString &url,
+ const QString &mime,
+ const int64_t size)
{
if (!timelineViewExists(roomid)) {
qDebug() << "Cannot send m.file message to a non-managed view";
@@ -115,13 +119,15 @@ TimelineViewManager::queueFileMessage(const QString &roomid,
auto view = views_[roomid];
- view->addUserMessage<FileItem, mtx::events::MessageType::File>(url, filename);
+ view->addUserMessage<FileItem, mtx::events::MessageType::File>(url, filename, mime, size);
}
void
TimelineViewManager::queueAudioMessage(const QString &roomid,
const QString &filename,
- const QString &url)
+ const QString &url,
+ const QString &mime,
+ const int64_t size)
{
if (!timelineViewExists(roomid)) {
qDebug() << "Cannot send m.audio message to a non-managed view";
@@ -130,7 +136,24 @@ TimelineViewManager::queueAudioMessage(const QString &roomid,
auto view = views_[roomid];
- view->addUserMessage<AudioItem, mtx::events::MessageType::Audio>(url, filename);
+ view->addUserMessage<AudioItem, mtx::events::MessageType::Audio>(url, filename, mime, size);
+}
+
+void
+TimelineViewManager::queueVideoMessage(const QString &roomid,
+ const QString &filename,
+ const QString &url,
+ const QString &mime,
+ const int64_t size)
+{
+ if (!timelineViewExists(roomid)) {
+ qDebug() << "Cannot send m.video message to a non-managed view";
+ return;
+ }
+
+ auto view = views_[roomid];
+
+ view->addUserMessage<VideoItem, mtx::events::MessageType::Video>(url, filename, mime, size);
}
void
diff --git a/src/timeline/widgets/AudioItem.cc b/src/timeline/widgets/AudioItem.cc
index e84cbb3a..9075bc55 100644
--- a/src/timeline/widgets/AudioItem.cc
+++ b/src/timeline/widgets/AudioItem.cc
@@ -20,10 +20,11 @@
#include <QDesktopServices>
#include <QFile>
#include <QFileDialog>
-#include <QFileInfo>
#include <QPainter>
#include <QPixmap>
+#include "Utils.h"
+
#include "timeline/widgets/AudioItem.h"
constexpr int MaxWidth = 400;
@@ -82,42 +83,26 @@ AudioItem::AudioItem(QSharedPointer<MatrixClient> client,
, event_{event}
, client_{client}
{
- readableFileSize_ = calculateFileSize(event.content.info.size);
+ readableFileSize_ = utils::humanReadableFileSize(event.content.info.size);
init();
}
AudioItem::AudioItem(QSharedPointer<MatrixClient> client,
const QString &url,
- const QSharedPointer<QIODevice> data,
const QString &filename,
+ const int64_t size,
QWidget *parent)
: QWidget(parent)
, url_{url}
- , text_{QFileInfo{filename}.fileName()}
+ , text_{filename}
, client_{client}
{
- Q_UNUSED(data);
- readableFileSize_ = calculateFileSize(QFileInfo{filename}.size());
+ readableFileSize_ = utils::humanReadableFileSize(size);
init();
}
-QString
-AudioItem::calculateFileSize(int nbytes) const
-{
- if (nbytes == 0)
- return QString("");
-
- if (nbytes < 1024)
- return QString("%1 B").arg(nbytes);
-
- if (nbytes < 1024 * 1024)
- return QString("%1 KB").arg(nbytes / 1024);
-
- return QString("%1 MB").arg(nbytes / 1024 / 1024);
-}
-
QSize
AudioItem::sizeHint() const
{
diff --git a/src/timeline/widgets/FileItem.cc b/src/timeline/widgets/FileItem.cc
index a6159309..eda6e835 100644
--- a/src/timeline/widgets/FileItem.cc
+++ b/src/timeline/widgets/FileItem.cc
@@ -20,10 +20,11 @@
#include <QDesktopServices>
#include <QFile>
#include <QFileDialog>
-#include <QFileInfo>
#include <QPainter>
#include <QPixmap>
+#include "Utils.h"
+
#include "timeline/widgets/FileItem.h"
constexpr int MaxWidth = 400;
@@ -69,42 +70,26 @@ FileItem::FileItem(QSharedPointer<MatrixClient> client,
, event_{event}
, client_{client}
{
- readableFileSize_ = calculateFileSize(event.content.info.size);
+ readableFileSize_ = utils::humanReadableFileSize(event.content.info.size);
init();
}
FileItem::FileItem(QSharedPointer<MatrixClient> client,
const QString &url,
- const QSharedPointer<QIODevice> data,
const QString &filename,
+ const int64_t size,
QWidget *parent)
: QWidget(parent)
, url_{url}
- , text_{QFileInfo{filename}.fileName()}
+ , text_{filename}
, client_{client}
{
- Q_UNUSED(data);
- readableFileSize_ = calculateFileSize(QFileInfo{filename}.size());
+ readableFileSize_ = utils::humanReadableFileSize(size);
init();
}
-QString
-FileItem::calculateFileSize(int nbytes) const
-{
- if (nbytes == 0)
- return QString("");
-
- if (nbytes < 1024)
- return QString("%1 B").arg(nbytes);
-
- if (nbytes < 1024 * 1024)
- return QString("%1 KB").arg(nbytes / 1024);
-
- return QString("%1 MB").arg(nbytes / 1024 / 1024);
-}
-
void
FileItem::openUrl()
{
diff --git a/src/timeline/widgets/ImageItem.cc b/src/timeline/widgets/ImageItem.cc
index f713989e..f91799c3 100644
--- a/src/timeline/widgets/ImageItem.cc
+++ b/src/timeline/widgets/ImageItem.cc
@@ -61,14 +61,16 @@ ImageItem::ImageItem(QSharedPointer<MatrixClient> client,
ImageItem::ImageItem(QSharedPointer<MatrixClient> client,
const QString &url,
- const QSharedPointer<QIODevice> data,
const QString &filename,
+ const int64_t size,
QWidget *parent)
: QWidget(parent)
, url_{url}
, text_{filename}
, client_{client}
{
+ Q_UNUSED(size);
+
setMouseTracking(true);
setCursor(Qt::PointingHandCursor);
setAttribute(Qt::WA_Hover, true);
@@ -84,19 +86,12 @@ ImageItem::ImageItem(QSharedPointer<MatrixClient> client,
url_ = QString("%1/_matrix/media/r0/download/%2")
.arg(client_.data()->getHomeServer().toString(), media_params);
- if (data.isNull()) {
- qWarning() << "No image data to display";
- return;
- }
+ client_.data()->downloadImage(QString::fromStdString(event_.event_id), url_);
- if (data->reset()) {
- QPixmap p;
- p.loadFromData(data->readAll());
- setImage(p);
- } else {
- qWarning() << "Failed to seek to beginning of device:" << data->errorString();
- return;
- }
+ connect(client_.data(),
+ SIGNAL(imageDownloaded(const QString &, const QPixmap &)),
+ this,
+ SLOT(imageDownloaded(const QString &, const QPixmap &)));
}
void
diff --git a/src/timeline/widgets/VideoItem.cc b/src/timeline/widgets/VideoItem.cc
index b46dff7b..34c0a643 100644
--- a/src/timeline/widgets/VideoItem.cc
+++ b/src/timeline/widgets/VideoItem.cc
@@ -20,6 +20,7 @@
#include <QVBoxLayout>
#include "Config.h"
+#include "Utils.h"
#include "timeline/widgets/VideoItem.h"
void
@@ -45,7 +46,7 @@ VideoItem::VideoItem(QSharedPointer<MatrixClient> client,
, event_{event}
, client_{client}
{
- readableFileSize_ = calculateFileSize(event.content.info.size);
+ readableFileSize_ = utils::humanReadableFileSize(event.content.info.size);
init();
@@ -66,31 +67,15 @@ VideoItem::VideoItem(QSharedPointer<MatrixClient> client,
VideoItem::VideoItem(QSharedPointer<MatrixClient> client,
const QString &url,
- const QSharedPointer<QIODevice> data,
const QString &filename,
+ const int64_t size,
QWidget *parent)
: QWidget(parent)
, url_{url}
- , text_{QFileInfo(filename).fileName()}
+ , text_{filename}
, client_{client}
{
- Q_UNUSED(data);
- readableFileSize_ = calculateFileSize(QFileInfo(filename).size());
+ readableFileSize_ = utils::humanReadableFileSize(size);
init();
}
-
-QString
-VideoItem::calculateFileSize(int nbytes) const
-{
- if (nbytes == 0)
- return QString("");
-
- if (nbytes < 1024)
- return QString("%1 B").arg(nbytes);
-
- if (nbytes < 1024 * 1024)
- return QString("%1 KB").arg(nbytes / 1024);
-
- return QString("%1 MB").arg(nbytes / 1024 / 1024);
-}
|