Port C++ to Qt6

QML is still broken
This commit is contained in:
Tobias Fella
2022-07-08 14:32:15 +02:00
parent 19fe439e95
commit 24748d42d8
7 changed files with 51 additions and 15 deletions

View File

@@ -5,5 +5,7 @@ include:
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/reuse-lint.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/reuse-lint.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/android.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/android.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml
# TODO enable once we can have qt6 libQuotient on the CI
# - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/windows.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/windows.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml

View File

@@ -41,8 +41,8 @@ ecm_setup_version(${PROJECT_VERSION}
VERSION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/neochat-version.h VERSION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/neochat-version.h
) )
find_package(Qt5 ${QT_MIN_VERSION} NO_MODULE COMPONENTS Core Quick Gui QuickControls2 Multimedia Svg) find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} NO_MODULE COMPONENTS Core Quick Gui QuickControls2 Multimedia Svg)
set_package_properties(Qt5 PROPERTIES set_package_properties(Qt${QT_MAJOR_VERSION} PROPERTIES
TYPE REQUIRED TYPE REQUIRED
PURPOSE "Basic application components" PURPOSE "Basic application components"
) )
@@ -56,8 +56,8 @@ set_package_properties(KF5Kirigami2 PROPERTIES
PURPOSE "Kirigami application UI framework" PURPOSE "Kirigami application UI framework"
) )
find_package(Qt5Keychain) find_package(Qt${QT_MAJOR_VERSION}Keychain)
set_package_properties(Qt5Keychain PROPERTIES set_package_properties(Qt${QT_MAJOR_VERSION}Keychain PROPERTIES
TYPE REQUIRED TYPE REQUIRED
PURPOSE "Secure storage of account secrets" PURPOSE "Secure storage of account secrets"
) )
@@ -69,7 +69,7 @@ if(ANDROID)
PURPOSE "Encrypted communications" PURPOSE "Encrypted communications"
) )
else() else()
find_package(Qt5 ${QT_MIN_VERSION} COMPONENTS Widgets) find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} COMPONENTS Widgets)
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS QQC2DesktopStyle ConfigWidgets KIO WindowSystem) find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS QQC2DesktopStyle ConfigWidgets KIO WindowSystem)
set_package_properties(KF5QQC2DesktopStyle PROPERTIES set_package_properties(KF5QQC2DesktopStyle PROPERTIES
TYPE RUNTIME TYPE RUNTIME
@@ -109,8 +109,8 @@ set_package_properties(KQuickImageEditor PROPERTIES
PURPOSE "Add image editing capability to image attachments" PURPOSE "Add image editing capability to image attachments"
) )
find_package(QCoro5 COMPONENTS Core QUIET) find_package(QCoro${QT_MAJOR_VERSION} COMPONENTS Core QUIET)
if(NOT QCoro5_FOUND) if(NOT QCoro${QT_MAJOR_VERSION}_FOUND)
find_package(QCoro REQUIRED) find_package(QCoro REQUIRED)
endif() endif()

View File

@@ -70,9 +70,9 @@ else()
endif() endif()
target_include_directories(neochat PRIVATE ${CMAKE_BINARY_DIR}) target_include_directories(neochat PRIVATE ${CMAKE_BINARY_DIR})
target_link_libraries(neochat PRIVATE Qt::Quick Qt::Qml Qt::Gui Qt::Network Qt::QuickControls2 KF5::I18n KF5::Kirigami2 KF5::Notifications KF5::ConfigCore KF5::ConfigGui KF5::CoreAddons Quotient cmark::cmark ${QTKEYCHAIN_LIBRARIES}) target_link_libraries(neochat PRIVATE Qt::Core Qt::Quick Qt::Qml Qt::Gui Qt::Multimedia Qt::Network Qt::QuickControls2 KF5::I18n KF5::Kirigami2 KF5::Notifications KF5::ConfigCore KF5::ConfigGui KF5::CoreAddons Quotient cmark::cmark ${QTKEYCHAIN_LIBRARIES})
if(TARGET QCoro5::Coro) if(TARGET QCoro${QT_MAJOR_VERSION}::Coro)
target_link_libraries(neochat PRIVATE QCoro5::Coro) target_link_libraries(neochat PRIVATE QCoro${QT_MAJOR_VERSION}::Coro)
else() else()
target_link_libraries(neochat PRIVATE QCoro::QCoro) target_link_libraries(neochat PRIVATE QCoro::QCoro)
endif() endif()
@@ -84,7 +84,7 @@ endif()
if(ANDROID) if(ANDROID)
target_sources(neochat PRIVATE notifyrc.qrc) target_sources(neochat PRIVATE notifyrc.qrc)
target_link_libraries(neochat PRIVATE Qt5::Svg OpenSSL::SSL) target_link_libraries(neochat PRIVATE Qt::Svg OpenSSL::SSL)
kirigami_package_breeze_icons(ICONS kirigami_package_breeze_icons(ICONS
"arrow-down" "arrow-down"
"help-about" "help-about"
@@ -126,7 +126,7 @@ if(ANDROID)
"preferences-desktop-theme-global" "preferences-desktop-theme-global"
) )
else() else()
target_link_libraries(neochat PRIVATE Qt5::Widgets KF5::KIOWidgets) target_link_libraries(neochat PRIVATE Qt::Widgets KF5::KIOWidgets)
install(FILES neochat.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) install(FILES neochat.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR})
endif() endif()

View File

@@ -5,11 +5,11 @@
#include <QFont> #include <QFont>
#include <QObject> #include <QObject>
#include <QQuickTextDocument>
#include <QTextCursor> #include <QTextCursor>
#include <QUrl> #include <QUrl>
class QTextDocument; class QTextDocument;
class QQuickTextDocument;
class NeoChatRoom; class NeoChatRoom;
class Controller; class Controller;

View File

@@ -231,7 +231,9 @@ int main(int argc, char *argv[])
}); });
#endif #endif
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
qRegisterMetaTypeStreamOperators<Emoji>(); qRegisterMetaTypeStreamOperators<Emoji>();
#endif
QQmlApplicationEngine engine; QQmlApplicationEngine engine;
engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); engine.rootContext()->setContextObject(new KLocalizedContext(&engine));

View File

@@ -6,12 +6,16 @@
#include <cmark.h> #include <cmark.h>
#include <QFileInfo> #include <QFileInfo>
#include <QImageReader>
#include <QMetaObject> #include <QMetaObject>
#include <QMimeDatabase> #include <QMimeDatabase>
#include <QTextDocument> #include <QTextDocument>
#include <functional> #include <functional>
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
#include <QMediaMetaData>
#include <QMediaPlayer>
#endif
#include <qcoro/qcorosignal.h> #include <qcoro/qcorosignal.h>
#include <qcoro/task.h> #include <qcoro/task.h>
@@ -35,6 +39,7 @@
#include "stickerevent.h" #include "stickerevent.h"
#include "user.h" #include "user.h"
#include "utils.h" #include "utils.h"
#include <events/eventcontent.h>
#include <KLocalizedString> #include <KLocalizedString>
@@ -76,12 +81,38 @@ NeoChatRoom::NeoChatRoom(Connection *connection, QString roomId, JoinState joinS
} }
void NeoChatRoom::uploadFile(const QUrl &url, const QString &body) void NeoChatRoom::uploadFile(const QUrl &url, const QString &body)
{
doUploadFile(url, body);
}
QCoro::Task<void> NeoChatRoom::doUploadFile(QUrl url, QString body)
{ {
if (url.isEmpty()) { if (url.isEmpty()) {
return; co_return;
} }
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
auto mime = QMimeDatabase().mimeTypeForUrl(url);
QFileInfo fileInfo(url.toLocalFile());
EventContent::TypedBase *content;
if (mime.name().startsWith("image/")) {
QImage image;
content = new EventContent::ImageContent(url, fileInfo.size(), mime, image.size(), fileInfo.fileName());
} else if (mime.name().startsWith("audio/")) {
content = new EventContent::AudioContent(url, fileInfo.size(), mime, fileInfo.fileName());
} else if (mime.name().startsWith("video/")) {
QMediaPlayer player;
player.setSource(url);
co_await qCoro(&player, &QMediaPlayer::mediaStatusChanged);
auto resolution = player.metaData().value(QMediaMetaData::Resolution).toSize();
content = new EventContent::VideoContent(url, fileInfo.size(), mime, resolution, fileInfo.fileName());
} else {
content = new EventContent::FileContent(url, fileInfo.size(), mime, fileInfo.fileName());
}
QString txnId = postFile(body.isEmpty() ? url.fileName() : body, content);
#else
QString txnId = postFile(body.isEmpty() ? url.fileName() : body, url, false); QString txnId = postFile(body.isEmpty() ? url.fileName() : body, url, false);
#endif
setHasFileUploading(true); setHasFileUploading(true);
#ifdef QUOTIENT_07 #ifdef QUOTIENT_07
connect(this, &Room::fileTransferCompleted, [this, txnId](const QString &id, FileSourceInfo) { connect(this, &Room::fileTransferCompleted, [this, txnId](const QString &id, FileSourceInfo) {

View File

@@ -151,6 +151,7 @@ private:
static QString markdownToHTML(const QString &markdown); static QString markdownToHTML(const QString &markdown);
QCoro::Task<void> doDeleteMessagesByUser(const QString &user); QCoro::Task<void> doDeleteMessagesByUser(const QString &user);
QCoro::Task<void> doUploadFile(QUrl url, QString body = QString());
private Q_SLOTS: private Q_SLOTS:
void countChanged(); void countChanged();