From 2073334339fc03870786e2213c4210879f18da3a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Burak=20Han=C3=A7erli?= <burak.hancerli@qt.io>
Date: Wed, 7 Feb 2024 09:44:28 +0000
Subject: [PATCH] QDS-11912 Project list and run project button are
 enabled/disabled properly

---
 src/backend.cpp     | 14 ++++++--------
 src/backend.h       |  7 +++----
 ui/HomePage.qml     | 25 +++++++++++++++++--------
 ui/SettingsPage.qml |  3 ++-
 4 files changed, 28 insertions(+), 21 deletions(-)

diff --git a/src/backend.cpp b/src/backend.cpp
index c8dee26..bc6d794 100644
--- a/src/backend.cpp
+++ b/src/backend.cpp
@@ -150,7 +150,7 @@ void Backend::setAutoScaleProject(const bool &enabled)
 void Backend::setUserHash(const QString &userHash)
 {
     QSettings().setValue("user/hash", userHash);
-    updateUserProjectList();
+    emit userRegistered();
 }
 
 bool Backend::updateInBackground()
@@ -494,8 +494,6 @@ void Backend::runOnlineProject(const QString &url)
 
 void Backend::updateUserProjectList()
 {
-    emit userRegistered();
-
     const QString userHash = Backend::userHash();
 
     if (userHash.isEmpty()) {
@@ -511,17 +509,16 @@ void Backend::updateUserProjectList()
         return;
     }
 
-    if (projectList == m_projectListArray) {
+    if (projectList == m_projectList) {
         qDebug("No new projects available");
         return;
     }
-    m_projectListArray = projectList;
-    m_projectList.clear();
+
+    m_projectList = projectList;
     qDebug("List of available projects fetched:");
     for (const auto &project : projectList) {
         const QString projectName{project.toObject().value("appName").toString()};
         qDebug() << "--" << projectName;
-        m_projectList << projectName;
     }
 
     emit projectListChanged();
@@ -534,7 +531,7 @@ void Backend::parseDesignViewerUrl(const QUrl &url)
     // If it is a user hash, we register the user and fetch the project list
     // If it is a project url, we submit the url to the text field
     // sample url: https://<url>/<project_name>.qmlrc
-    // sample user hash: qtdesignviewer://17e8907b3b84029384hs8djshdu38476
+    // sample user hash: qtdesignviewer://19f8907b6t84029384hs8djshdu38476
     if (urlData.isEmpty())
         return;
     else if (urlData.startsWith("https//")) {
@@ -545,6 +542,7 @@ void Backend::parseDesignViewerUrl(const QUrl &url)
     } else if (urlData.startsWith("qtdesignviewer://")) {
         qDebug() << "Registering user from QR code";
         setUserHash(url.toString().remove("qtdesignviewer://"));
+        updateUserProjectList();
     } else {
         qWarning() << "Unknown QR code data: " << urlData;
     }
diff --git a/src/backend.h b/src/backend.h
index 3363acd..980bd63 100644
--- a/src/backend.h
+++ b/src/backend.h
@@ -58,7 +58,7 @@ signals:
 class Backend : public QObject
 {
     Q_OBJECT
-    Q_PROPERTY(QStringList projectList READ projectList NOTIFY projectListChanged FINAL)
+    Q_PROPERTY(QJsonArray projectList READ projectList NOTIFY projectListChanged)
 
 public:
     explicit Backend(QObject *parent = nullptr);
@@ -69,13 +69,12 @@ public:
         emit logsChanged(m_logs);
     }
 
-    QStringList projectList() const { return m_projectList; }
+    QJsonArray projectList() const { return m_projectList; }
 
 private:
     // UI data
     QString m_logs;
-    QStringList m_projectList;
-    QJsonArray m_projectListArray;
+    QJsonArray m_projectList;
 
     // Other members
     ServiceConnector m_serviceConnector;
diff --git a/ui/HomePage.qml b/ui/HomePage.qml
index 44f0f14..520a60e 100644
--- a/ui/HomePage.qml
+++ b/ui/HomePage.qml
@@ -62,33 +62,42 @@ Item {
         ColumnLayout {
             id: column2
             Layout.fillWidth: true
+
             ComboBox {
                 id: projectList
                 Layout.fillWidth: true
-                enabled: backend.userHash() !== ''
+                enabled: true
                 onCurrentIndexChanged: {
                     displayText = textAt(currentIndex)
                 }
+                textRole: "appName"
                 model: backend.projectList
                 displayText: "Scan QR code to access your projects";
                 currentIndex: -1
                 Layout.preferredHeight: 50
-                Connections {
-                    target: backend
-                    function onUserRegistered(){
-                        projectList.enabled = true;
-                    }
-                }
             }
 
             Button {
                 id: downloadUserProject
                 text: qsTr("Run Project")
                 onClicked: backend.runUserProject(projectList.currentText)
-                enabled: backend.userHash() !== ''
+                enabled: false
                 Layout.fillWidth: true
                 Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
             }
+
+            Connections {
+                    target: backend
+                    function onUserRegistered(){
+                        projectList.displayText = "No projects available for the user";
+                        projectList.enabled = false;
+                        downloadUserProject.enabled = false;
+                    }
+                    function onProjectListChanged(){
+                        projectList.enabled = true;
+                        downloadUserProject.enabled = true;
+                    }
+                }
         }
 
         Item {
diff --git a/ui/SettingsPage.qml b/ui/SettingsPage.qml
index dc58259..894afb5 100644
--- a/ui/SettingsPage.qml
+++ b/ui/SettingsPage.qml
@@ -45,8 +45,9 @@ Item {
 
            Text{
                 leftPadding: 45
-                text: qsTr("Scales the project to fit it to the current display and orientation")
+                text: qsTr("Scales the project to fit it to the current\ndisplay and orientation")
                 font.pointSize: 12
+                wrapMode: Text.WordWrap
            }
         }
 
-- 
GitLab