Rewrite FileDialog in C++ && add setting to force async load timelime.

Also fixes repeat section label and empty space when message is redacted.

Fixes #27
This commit is contained in:
Black Hat
2018-08-14 14:05:41 +08:00
parent 1e5fda47ab
commit 09fdd52524
11 changed files with 63 additions and 55 deletions

View File

@@ -10,8 +10,8 @@
#include <QClipboard>
#include <QFile>
#include <QFileDialog>
#include <QImage>
#include <QMimeDatabase>
Controller::Controller(QObject* parent) : QObject(parent) {
connect(m_connection, &Connection::connected, this, &Controller::connected);
@@ -74,6 +74,20 @@ void Controller::reconnect() {
m_connection->connectWithToken(userID, token, "");
}
void Controller::uploadFile(Room* room) {
if (!room) return;
auto localFile = QFileDialog::getOpenFileUrl(Q_NULLPTR, tr("Save File as"));
if (!localFile.isEmpty()) {
room->uploadFile(localFile.toString(), localFile, getMIME(localFile));
QMetaObject::Connection* const connection = new QMetaObject::Connection;
*connection = connect(room, &Room::fileTransferCompleted,
[=](QString id, QUrl localFile, QUrl mxcUrl) {
disconnect(*connection);
postFile(room, localFile, mxcUrl);
});
}
}
void Controller::postFile(Room* room, const QUrl& localFile,
const QUrl& mxcUrl) {
const QString mime = getMIME(localFile);
@@ -90,9 +104,7 @@ void Controller::postFile(Room* room, const QUrl& localFile,
}
QString Controller::getMIME(const QUrl& fileUrl) const {
QMimeDatabase* db = new QMimeDatabase();
const QString mime = db->mimeTypeForFile(fileUrl.toLocalFile()).name();
delete db;
const QString mime = m_db.mimeTypeForFile(fileUrl.toLocalFile()).name();
return mime;
}
@@ -125,3 +137,11 @@ void Controller::createDirectChat(const QString& userID) {
void Controller::copyToClipboard(const QString& text) {
m_clipboard->setText(text);
}
void Controller::saveFileAs(Room* room, QString eventId) {
if (!room) return;
auto fileName = QFileDialog::getSaveFileName(
Q_NULLPTR, tr("Save File as"), room->fileNameToDownload(eventId));
if (!fileName.isEmpty())
room->downloadFile(eventId, QUrl::fromLocalFile(fileName));
}

View File

@@ -7,6 +7,7 @@
#include <QObject>
#include <QApplication>
#include <QMimeDatabase>
using namespace QMatrixClient;
@@ -84,11 +85,15 @@ class Controller : public QObject {
private:
QClipboard* m_clipboard = QApplication::clipboard();
QMimeDatabase m_db;
void connected();
void resync();
void reconnect();
QString getMIME(const QUrl& fileUrl) const;
void postFile(Room* room, const QUrl& localFile, const QUrl& mxcUrl);
signals:
void connectionChanged();
void isLoginChanged();
@@ -99,13 +104,13 @@ class Controller : public QObject {
void errorOccured();
public slots:
void postFile(Room* room, const QUrl& localFile, const QUrl& mxcUrl);
QString getMIME(const QUrl& fileUrl) const;
void uploadFile(Room* room);
void forgetRoom(const QString& roomID);
void joinRoom(const QString& alias);
void createRoom(const QString& name, const QString& topic);
void createDirectChat(const QString& userID);
void copyToClipboard(const QString& text);
void saveFileAs(Room* room, QString eventId);
};
#endif // CONTROLLER_H