From 882bffaeb064e44030832ba6880d4e814fd54a0a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Burak=20Han=C3=A7erli?= <burak.hancerli@qt.io>
Date: Fri, 7 Feb 2025 11:52:12 +0000
Subject: [PATCH] QDS-14696 Beta-8 dev

---
 cicd/stages/build.yml                 |  2 ++
 src/CMakeLists.txt                    | 24 ++++++++++++++++++++----
 src/backend/dsconnector/dsmanager.cpp |  3 +++
 src/backend/main.cpp                  |  5 +++++
 src/backend/projectmanager.cpp        | 11 +++++++----
 src/backend/projectmanager.h          |  2 +-
 6 files changed, 38 insertions(+), 9 deletions(-)

diff --git a/cicd/stages/build.yml b/cicd/stages/build.yml
index 73af01b..659a333 100644
--- a/cicd/stages/build.yml
+++ b/cicd/stages/build.yml
@@ -40,6 +40,7 @@
     -DANDROID_OPENSSL_PATH=${QDS_CI_JOB_OPENSSL_PATH} \
     -DGOOGLE_PLAY_APP_VERSION=${GOOGLE_PLAY_APP_VERSION} \
     -DBUILD_EXAMPLES=OFF
+  - cat ${QDS_CI_JOB_BUILD_PATH}/src/dynamic_imports.qml
   - cmake --build ${QDS_CI_JOB_BUILD_PATH} --target aab
 
 .copy-and-sign-apks: &copy-and-sign-apks
@@ -118,4 +119,5 @@ build-desktop:
       -DCMAKE_BUILD_TYPE=Release \
       -DCMAKE_PREFIX_PATH=${QDS_CI_JOB_QT_PATH} \
       -DBUILD_EXAMPLES=OFF
+    - cat ${QDS_CI_JOB_BUILD_PATH}/src/dynamic_imports.qml
     - cmake --build ${QDS_CI_JOB_BUILD_PATH}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 327a9b6..2188ab7 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -46,12 +46,26 @@ foreach(imported_target IN LISTS imported_targets)
         _qt_qml_module_installed_plugin_target)
 
     if(qml_plugin_target)
-        message(STATUS
-            "Imported target: ${imported_target} -> ${qml_plugin_target}")
+
+    message(STATUS
+    "Imported target: ${imported_target} -> ${qml_plugin_target}")
 
         # Get location of the plugin file.
-        get_target_property(imported_location "${qml_plugin_target}" IMPORTED_LOCATION)
-        if(NOT EXISTS "${imported_location}")
+        get_target_property(imported_location_default "${qml_plugin_target}" IMPORTED_LOCATION)
+        get_target_property(imported_location_release "${qml_plugin_target}" IMPORTED_LOCATION_RELEASE)
+        get_target_property(imported_location_min_size "${qml_plugin_target}" IMPORTED_LOCATION_MINSIZEREL)
+        get_target_property(imported_location_min_size_rel "${qml_plugin_target}" IMPORTED_LOCATION_RELWITHDEBINFO)
+
+        if(imported_location_default)
+            set(imported_location "${imported_location_default}")
+        elseif(imported_location_release)
+            set(imported_location "${imported_location_release}")
+        elseif(imported_location_min_size)
+            set(imported_location "${imported_location_min_size}")
+        elseif(imported_location_min_size_rel)
+            set(imported_location "${imported_location_min_size_rel}")
+        else()
+            message(WARNING "No imported location found for ${qml_plugin_target}.")
             continue()
         endif()
 
@@ -62,12 +76,14 @@ foreach(imported_target IN LISTS imported_targets)
         # to the plugin file. That's at least usually the case for Qt qml plugins.
         set(qmldir_path "${imported_location_dir}/qmldir")
         if(NOT EXISTS "${qmldir_path}")
+            message(WARNING "No qmldir file found for ${qml_plugin_target}.")
             continue()
         endif()
 
         # Read qmldir file contents.
         file(READ "${qmldir_path}" qmldir_content)
         if(qmldir_content STREQUAL "")
+            message(WARNING "Empty qmldir for ${qml_plugin_target}.")
             continue()
         endif()
 
diff --git a/src/backend/dsconnector/dsmanager.cpp b/src/backend/dsconnector/dsmanager.cpp
index 29d301f..1c1e602 100644
--- a/src/backend/dsconnector/dsmanager.cpp
+++ b/src/backend/dsconnector/dsmanager.cpp
@@ -39,7 +39,10 @@ void DesignStudioManager::init()
 
         QUdpSocket udpSocket;
         const int port = 53452;
+
+#ifdef Q_OS_ANDROID
         udpSocket.writeDatagram(datagram, QHostAddress::LocalHost, port);
+#endif
         udpSocket.writeDatagram(datagram, QHostAddress::Broadcast, port);
         udpSocket.writeDatagram(datagram, QHostAddress::AnyIPv4, port);
         udpSocket.writeDatagram(datagram, QHostAddress::AnyIPv6, port);
diff --git a/src/backend/main.cpp b/src/backend/main.cpp
index 79bca5d..237cac5 100644
--- a/src/backend/main.cpp
+++ b/src/backend/main.cpp
@@ -48,7 +48,12 @@ int main(int argc, char *argv[])
     view.engine()->rootContext()->setContextProperty("backend", &backend);
     view.setSource(QUrl(QStringLiteral("qrc:/qt/qml/AndroidUI/Main.qml")));
     view.setResizeMode(QQuickView::SizeRootObjectToView);
+
+#ifdef Q_OS_ANDROID
     view.showMaximized();
+#else
+    view.show();
+#endif
 
     return app.exec();
 }
diff --git a/src/backend/projectmanager.cpp b/src/backend/projectmanager.cpp
index e28f7aa..016e710 100644
--- a/src/backend/projectmanager.cpp
+++ b/src/backend/projectmanager.cpp
@@ -135,9 +135,12 @@ QString ProjectManager::unpackProject(const QByteArray &project)
     return resourcePath;
 }
 
-QString ProjectManager::findFile(const QString &dir, const QString &filter)
+QString ProjectManager::findFile(const QString &dir, const QString &filter, const bool recursive)
 {
-    QDirIterator it(dir, {filter}, QDir::Files);
+    QDirIterator it(dir,
+                    {filter},
+                    QDir::Files,
+                    recursive ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags);
     return it.next();
 }
 
@@ -203,7 +206,7 @@ bool ProjectManager::runProjectInternal(const QByteArray &project)
     const QString projectPath = unpackProject(project);
     qDebug() << "Project location: " << projectPath;
 
-    const QString qmlProjectFile = findFile(projectPath, "*.qmlproject");
+    const QString qmlProjectFile = findFile(projectPath, "*.qmlproject", false);
     if (qmlProjectFile.isEmpty()) {
         qCritical() << "No \"*.qmlproject\" found in \"" << projectPath << "\".";
         return false;
@@ -217,7 +220,7 @@ bool ProjectManager::runProjectInternal(const QByteArray &project)
     if (mainQmlFilePath.isEmpty())
         return false;
 
-    const QString qtquickcontrols2File = findFile(projectPath, "qtquickcontrols2.conf");
+    const QString qtquickcontrols2File = findFile(projectPath, "qtquickcontrols2.conf", false);
     if (!qtquickcontrols2File.isEmpty()) {
         qputenv("QT_QUICK_CONTROLS_CONF", qtquickcontrols2File.toLatin1());
     }
diff --git a/src/backend/projectmanager.h b/src/backend/projectmanager.h
index 515ecdf..ae12e3c 100644
--- a/src/backend/projectmanager.h
+++ b/src/backend/projectmanager.h
@@ -62,7 +62,7 @@ private:
 
     // project management
     bool runProjectInternal(const QByteArray &project);
-    QString findFile(const QString &dir, const QString &filter);
+    QString findFile(const QString &dir, const QString &filter, const bool recursive = true);
     QString readQmlProjectFile(const QString &qmlProjectFilePath);
     QString getMainQmlFile(const QString &projectPath, const QString &qmlProjectFileContent);
     QStringList getImportPaths(const QString &projectPath, const QString &qmlProjectFileContent);
-- 
GitLab