diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6f8f05b95..59a1b4b3a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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/android.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/freebsd.yml diff --git a/CMakeLists.txt b/CMakeLists.txt index d7fac9f1b..1b14ba946 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,8 +41,8 @@ ecm_setup_version(${PROJECT_VERSION} VERSION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/neochat-version.h ) -find_package(Qt5 ${QT_MIN_VERSION} NO_MODULE COMPONENTS Core Quick Gui QuickControls2 Multimedia Svg) -set_package_properties(Qt5 PROPERTIES +find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} NO_MODULE COMPONENTS Core Quick Gui QuickControls2 Multimedia Svg) +set_package_properties(Qt${QT_MAJOR_VERSION} PROPERTIES TYPE REQUIRED PURPOSE "Basic application components" ) @@ -56,8 +56,8 @@ set_package_properties(KF5Kirigami2 PROPERTIES PURPOSE "Kirigami application UI framework" ) -find_package(Qt5Keychain) -set_package_properties(Qt5Keychain PROPERTIES +find_package(Qt${QT_MAJOR_VERSION}Keychain) +set_package_properties(Qt${QT_MAJOR_VERSION}Keychain PROPERTIES TYPE REQUIRED PURPOSE "Secure storage of account secrets" ) @@ -69,7 +69,7 @@ if(ANDROID) PURPOSE "Encrypted communications" ) 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) set_package_properties(KF5QQC2DesktopStyle PROPERTIES TYPE RUNTIME @@ -109,8 +109,8 @@ set_package_properties(KQuickImageEditor PROPERTIES PURPOSE "Add image editing capability to image attachments" ) -find_package(QCoro5 COMPONENTS Core QUIET) -if(NOT QCoro5_FOUND) +find_package(QCoro${QT_MAJOR_VERSION} COMPONENTS Core QUIET) +if(NOT QCoro${QT_MAJOR_VERSION}_FOUND) find_package(QCoro REQUIRED) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 13c85e673..a7222b9e8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -70,9 +70,9 @@ else() endif() 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}) -if(TARGET QCoro5::Coro) - target_link_libraries(neochat PRIVATE QCoro5::Coro) +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 QCoro${QT_MAJOR_VERSION}::Coro) + target_link_libraries(neochat PRIVATE QCoro${QT_MAJOR_VERSION}::Coro) else() target_link_libraries(neochat PRIVATE QCoro::QCoro) endif() @@ -84,7 +84,7 @@ endif() if(ANDROID) 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 "arrow-down" "help-about" @@ -126,7 +126,7 @@ if(ANDROID) "preferences-desktop-theme-global" ) 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}) endif() diff --git a/src/chatdocumenthandler.h b/src/chatdocumenthandler.h index 2ac926a6c..9090acedd 100644 --- a/src/chatdocumenthandler.h +++ b/src/chatdocumenthandler.h @@ -5,11 +5,11 @@ #include #include +#include #include #include class QTextDocument; -class QQuickTextDocument; class NeoChatRoom; class Controller; diff --git a/src/main.cpp b/src/main.cpp index 3ad28a5af..a207ff392 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -231,7 +231,9 @@ int main(int argc, char *argv[]) }); #endif +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) qRegisterMetaTypeStreamOperators(); +#endif QQmlApplicationEngine engine; engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index e86f7293f..b4608da67 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -6,12 +6,16 @@ #include #include -#include #include #include #include #include +#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0) +#include +#include +#endif + #include #include @@ -35,6 +39,7 @@ #include "stickerevent.h" #include "user.h" #include "utils.h" +#include #include @@ -76,12 +81,38 @@ NeoChatRoom::NeoChatRoom(Connection *connection, QString roomId, JoinState joinS } void NeoChatRoom::uploadFile(const QUrl &url, const QString &body) +{ + doUploadFile(url, body); +} + +QCoro::Task NeoChatRoom::doUploadFile(QUrl url, QString body) { 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); +#endif setHasFileUploading(true); #ifdef QUOTIENT_07 connect(this, &Room::fileTransferCompleted, [this, txnId](const QString &id, FileSourceInfo) { diff --git a/src/neochatroom.h b/src/neochatroom.h index d5bbe357e..8cb82945c 100644 --- a/src/neochatroom.h +++ b/src/neochatroom.h @@ -151,6 +151,7 @@ private: static QString markdownToHTML(const QString &markdown); QCoro::Task doDeleteMessagesByUser(const QString &user); + QCoro::Task doUploadFile(QUrl url, QString body = QString()); private Q_SLOTS: void countChanged();