Some file info workarounds.

Use default font in emoji picker.
This commit is contained in:
Black Hat 2018-11-23 23:28:04 +08:00
parent c7afe6b5ad
commit c88d41f359
3 changed files with 46 additions and 16 deletions

View File

@ -42,12 +42,11 @@ ColumnLayout {
width: 64 width: 64
height: 48 height: 48
contentItem: Text { contentItem: Label {
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
font.pixelSize: 24 font.pixelSize: 24
font.family: "Emoji"
text: label text: label
} }
@ -92,12 +91,11 @@ ColumnLayout {
width: 48 width: 48
height: 48 height: 48
contentItem: Text { contentItem: Label {
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
font.pixelSize: 32 font.pixelSize: 32
font.family: "Emoji"
text: modelData.unicode text: modelData.unicode
} }

View File

@ -9,6 +9,8 @@
#include "events/typingevent.h" #include "events/typingevent.h"
#include <QFileDialog> #include <QFileDialog>
#include <QFileInfo>
#include <QImageReader>
#include <QMetaObject> #include <QMetaObject>
#include <QMimeDatabase> #include <QMimeDatabase>
@ -24,6 +26,20 @@ SpectralRoom::SpectralRoom(Connection* connection, QString roomId,
connect(this, &Room::addedMessages, this, [=] { setBusy(false); }); connect(this, &Room::addedMessages, this, [=] { setBusy(false); });
} }
inline QString getMIME(const QUrl& fileUrl) {
return QMimeDatabase().mimeTypeForFile(fileUrl.toLocalFile()).name();
}
inline QSize getImageSize(const QUrl& imageUrl) {
QImageReader reader(imageUrl.toLocalFile());
return reader.size();
}
inline int getFileSize(const QUrl& url) {
QFileInfo info(url.toLocalFile());
return int(info.size());
}
void SpectralRoom::chooseAndUploadFile() { void SpectralRoom::chooseAndUploadFile() {
auto localFile = QFileDialog::getOpenFileUrl(Q_NULLPTR, tr("Save File as")); auto localFile = QFileDialog::getOpenFileUrl(Q_NULLPTR, tr("Save File as"));
if (!localFile.isEmpty()) { if (!localFile.isEmpty()) {
@ -53,20 +69,37 @@ void SpectralRoom::postFile(const QUrl& localFile, const QUrl& mxcUrl) {
const QString mime = getMIME(localFile); const QString mime = getMIME(localFile);
const QString fileName = localFile.fileName(); const QString fileName = localFile.fileName();
QString msgType = "m.file"; QString msgType = "m.file";
if (mime.startsWith("image")) msgType = "m.image"; int fileSize = getFileSize(localFile);
if (mime.startsWith("video")) msgType = "m.video"; QJsonObject json;
if (mime.startsWith("audio")) msgType = "m.audio"; if (mime.startsWith("image")) {
QJsonObject json{QJsonObject{{"msgtype", msgType}, msgType = "m.image";
QSize imageSize = getImageSize(localFile);
json = {{"msgtype", msgType},
{"body", fileName}, {"body", fileName},
{"filename", fileName}, {"filename", fileName},
{"url", mxcUrl.url()}}}; {"url", mxcUrl.url()},
{"info", QJsonObject{{"h", imageSize.height()},
{"w", imageSize.width()},
{"size", fileSize},
{"mimetype", mime},
{"thumbnail_url", mxcUrl.url()},
{"thumbnail_info",
QJsonObject{{"h", imageSize.height()},
{"w", imageSize.width()},
{"size", fileSize},
{"mimetype", mime}}}}}};
} else {
if (mime.startsWith("video")) msgType = "m.video";
if (mime.startsWith("audio")) msgType = "m.audio";
json = {{"msgtype", msgType},
{"body", fileName},
{"filename", fileName},
{"url", mxcUrl.url()},
{"info", QJsonObject{{"size", fileSize}, {"mimetype", mime}}}};
}
postJson("m.room.message", json); postJson("m.room.message", json);
} }
QString SpectralRoom::getMIME(const QUrl& fileUrl) const {
return QMimeDatabase().mimeTypeForFile(fileUrl.toLocalFile()).name();
}
void SpectralRoom::saveFileAs(QString eventId) { void SpectralRoom::saveFileAs(QString eventId) {
auto fileName = QFileDialog::getSaveFileName(Q_NULLPTR, tr("Save File as"), auto fileName = QFileDialog::getSaveFileName(Q_NULLPTR, tr("Save File as"),
fileNameToDownload(eventId)); fileNameToDownload(eventId));

View File

@ -108,7 +108,6 @@ class SpectralRoom : public Room {
bool m_busy = false; bool m_busy = false;
QString getMIME(const QUrl& fileUrl) const;
void postFile(const QUrl& localFile, const QUrl& mxcUrl); void postFile(const QUrl& localFile, const QUrl& mxcUrl);
void checkForHighlights(const QMatrixClient::TimelineItem& ti); void checkForHighlights(const QMatrixClient::TimelineItem& ti);