Port from context properties to singletons
authorNicolas Fella <nicolas.fella@gmx.de>
Mon, 15 Jun 2020 15:01:39 +0000 (17:01 +0200)
committerKevin Ottens <ervin@ipsquad.net>
Tue, 16 Jun 2020 12:34:59 +0000 (14:34 +0200)
Context properties are deprecated and will be removed in Qt 6.
QML singletons are the better option here, especially given that
UserModel and UserAppsModel already are singletons.

Signed-off-by: Nicolas Fella <nicolas.fella@gmx.de>
src/gui/systray.cpp
src/gui/tray/UserLine.qml
src/gui/tray/Window.qml

index c67fa4bef1e9bd6185c25c58d567d2b32d26274b..6b15ddaba60529f79f7c178871b87fcfc8659a84 100644 (file)
@@ -54,9 +54,24 @@ Systray::Systray()
 {
     _trayEngine->addImportPath("qrc:/qml/theme");
     _trayEngine->addImageProvider("avatars", new ImageProvider);
-    _trayEngine->rootContext()->setContextProperty("userModelBackend", UserModel::instance());
-    _trayEngine->rootContext()->setContextProperty("appsMenuModelBackend", UserAppsModel::instance());
-    _trayEngine->rootContext()->setContextProperty("systrayBackend", this);
+
+    qmlRegisterSingletonType<UserModel>("com.nextcloud.desktopclient", 1, 0, "UserModel",
+        [](QQmlEngine *, QJSEngine *) -> QObject * {
+            return UserModel::instance();
+        }
+    );
+
+    qmlRegisterSingletonType<UserAppsModel>("com.nextcloud.desktopclient", 1, 0, "UserAppsModel",
+        [](QQmlEngine *, QJSEngine *) -> QObject * {
+            return UserAppsModel::instance();
+        }
+    );
+
+    qmlRegisterSingletonType<Systray>("com.nextcloud.desktopclient", 1, 0, "Systray",
+        [](QQmlEngine *, QJSEngine *) -> QObject * {
+            return Systray::instance();
+        }
+    );
 
     connect(UserModel::instance(), &UserModel::newUserSelected,
         this, &Systray::slotNewUserSelected);
index c6203da74814c5a963ac9a1df47df5a75162b036..6b0494035eadb7cd14508fd74e51b1b97913ec07 100644 (file)
@@ -5,6 +5,7 @@ import QtQuick.Layouts 1.2
 \r
 // Custom qml modules are in /theme (and included by resources.qrc)\r
 import Style 1.0\r
+import com.nextcloud.desktopclient 1.0\r
 \r
 MenuItem {\r
     id: userLine\r
@@ -31,7 +32,7 @@ MenuItem {
                     }\r
                     onClicked: {\r
                         if (!isCurrentUser) {\r
-                            userModelBackend.switchCurrentUser(id)\r
+                            UserModel.switchCurrentUser(id)\r
                         } else {\r
                             accountMenu.close()\r
                         }\r
@@ -140,7 +141,7 @@ MenuItem {
                         text: isConnected ? qsTr("Log out") : qsTr("Log in")\r
                         font.pixelSize: Style.topLinePixelSize\r
                         onClicked: {\r
-                            isConnected ? userModelBackend.logout(index) : userModelBackend.login(index)\r
+                            isConnected ? UserModel.logout(index) : UserModel.login(index)\r
                             accountMenu.close()\r
                         }\r
                     }\r
@@ -149,7 +150,7 @@ MenuItem {
                         text: qsTr("Remove Account")\r
                         font.pixelSize: Style.topLinePixelSize\r
                         onClicked: {\r
-                            userModelBackend.removeAccount(index)\r
+                            UserModel.removeAccount(index)\r
                             accountMenu.close()\r
                         }\r
                     }\r
index 0d352c293a2fb83f36db84687a13ef83965d0e7b..7d1f54caee7332d8acbebe350661bdc6d8417b6f 100644 (file)
@@ -9,6 +9,8 @@ import QtGraphicalEffects 1.0
 // Custom qml modules are in /theme (and included by resources.qrc)\r
 import Style 1.0\r
 \r
+import com.nextcloud.desktopclient 1.0\r
+\r
 Window {\r
     id:         trayWindow\r
 \r
@@ -21,19 +23,19 @@ Window {
     onActiveChanged: {\r
         if(!active) {\r
             trayWindow.hide();\r
-            systrayBackend.setClosed();\r
+            Systray.setClosed();\r
         }\r
     }\r
 \r
     onVisibleChanged: {\r
         currentAccountAvatar.source = ""\r
         currentAccountAvatar.source = "image://avatars/currentUser"\r
-        currentAccountUser.text = userModelBackend.currentUserName();\r
-        currentAccountServer.text = userModelBackend.currentUserServer();\r
-        openLocalFolderButton.visible = userModelBackend.currentUserHasLocalFolder();\r
-        trayWindowTalkButton.visible = userModelBackend.currentServerHasTalk() ? true : false;\r
+        currentAccountUser.text = UserModel.currentUserName();\r
+        currentAccountServer.text = UserModel.currentUserServer();\r
+        openLocalFolderButton.visible = UserModel.currentUserHasLocalFolder();\r
+        trayWindowTalkButton.visible = UserModel.currentServerHasTalk();\r
         currentAccountStateIndicator.source = ""\r
-        currentAccountStateIndicator.source = userModelBackend.isUserConnected(userModelBackend.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
+        currentAccountStateIndicator.source = UserModel.isUserConnected(UserModel.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
 \r
         // HACK: reload account Instantiator immediately by restting it - could be done better I guess\r
         // see also id:accountMenu below\r
@@ -42,30 +44,30 @@ Window {
     }\r
 \r
     Connections {\r
-        target: userModelBackend\r
+        target: UserModel\r
         onRefreshCurrentUserGui: {\r
             currentAccountAvatar.source = ""\r
             currentAccountAvatar.source = "image://avatars/currentUser"\r
-            currentAccountUser.text = userModelBackend.currentUserName();\r
-            currentAccountServer.text = userModelBackend.currentUserServer();\r
+            currentAccountUser.text = UserModel.currentUserName();\r
+            currentAccountServer.text = UserModel.currentUserServer();\r
             currentAccountStateIndicator.source = ""\r
-            currentAccountStateIndicator.source = userModelBackend.isUserConnected(userModelBackend.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
+            currentAccountStateIndicator.source = UserModel.isUserConnected(UserModel.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
         }\r
         onNewUserSelected: {\r
             accountMenu.close();\r
-            openLocalFolderButton.visible = userModelBackend.currentUserHasLocalFolder();\r
-            trayWindowTalkButton.visible = userModelBackend.currentServerHasTalk() ? true : false;\r
+            openLocalFolderButton.visible = UserModel.currentUserHasLocalFolder();\r
+            trayWindowTalkButton.visible = UserModel.currentServerHasTalk();\r
         }\r
     }\r
 \r
     Connections {\r
-        target: systrayBackend\r
+        target: Systray\r
         onShowWindow: {\r
             accountMenu.close();\r
 \r
-            trayWindow.screen = Qt.application.screens[systrayBackend.currentScreenIndex()];\r
+            trayWindow.screen = Qt.application.screens[Systray.currentScreenIndex()];\r
 \r
-            var position = systrayBackend.computeWindowPosition(trayWindow.width, trayWindow.height)\r
+            var position = Systray.computeWindowPosition(trayWindow.width, trayWindow.height)\r
             trayWindow.x = position.x\r
             trayWindow.y = position.y\r
 \r
@@ -73,12 +75,12 @@ Window {
             trayWindow.raise();\r
             trayWindow.requestActivate();\r
 \r
-            systrayBackend.setOpened();\r
-            userModelBackend.fetchCurrentActivityModel();\r
+            Systray.setOpened();\r
+            UserModel.fetchCurrentActivityModel();\r
         }\r
         onHideWindow: {\r
             trayWindow.hide();\r
-            systrayBackend.setClosed();\r
+            Systray.setClosed();\r
         }\r
     }\r
 \r
@@ -140,9 +142,8 @@ Window {
 \r
                         // We call open() instead of popup() because we want to position it\r
                         // exactly below the dropdown button, not the mouse\r
-                        onClicked:\r
-                        {\r
-                            syncPauseButton.text = systrayBackend.syncIsPaused() ? qsTr("Resume sync for all") : qsTr("Pause sync for all")\r
+                        onClicked: {\r
+                            syncPauseButton.text = Systray.syncIsPaused() ? qsTr("Resume sync for all") : qsTr("Pause sync for all")\r
                             accountMenu.open()\r
                         }\r
 \r
@@ -171,7 +172,7 @@ Window {
 \r
                             Instantiator {\r
                                 id: userLineInstantiator\r
-                                model: userModelBackend\r
+                                model: UserModel\r
                                 delegate: UserLine {}\r
                                 onObjectAdded: accountMenu.insertItem(index, object)\r
                                 onObjectRemoved: accountMenu.removeItem(object)\r
@@ -204,7 +205,7 @@ Window {
                                         Layout.fillHeight: true\r
                                     }\r
                                 }\r
-                                onClicked: userModelBackend.addAccount()\r
+                                onClicked: UserModel.addAccount()\r
                             }\r
 \r
                             MenuSeparator { id: accountMenuSeparator }\r
@@ -212,25 +213,25 @@ Window {
                             MenuItem {\r
                                 id: syncPauseButton\r
                                 font.pixelSize: Style.topLinePixelSize\r
-                                onClicked: systrayBackend.pauseResumeSync()\r
+                                onClicked: Systray.pauseResumeSync()\r
                             }\r
 \r
                             MenuItem {\r
                                 text: qsTr("Open settings")\r
                                 font.pixelSize: Style.topLinePixelSize\r
-                                onClicked: systrayBackend.openSettings()\r
+                                onClicked: Systray.openSettings()\r
                             }\r
 \r
                             MenuItem {\r
                                 text: qsTr("Help")\r
                                 font.pixelSize: Style.topLinePixelSize\r
-                                onClicked: systrayBackend.openHelp()\r
+                                onClicked: Systray.openHelp()\r
                             }\r
 \r
                             MenuItem {\r
                                 text: qsTr("Quit Nextcloud")\r
                                 font.pixelSize: Style.topLinePixelSize\r
-                                onClicked: systrayBackend.shutdown()\r
+                                onClicked: Systray.shutdown()\r
                             }\r
                         }\r
                     }\r
@@ -310,7 +311,7 @@ Window {
 \r
                             Image {\r
                                 id: currentAccountStateIndicator\r
-                                source: userModelBackend.isUserConnected(userModelBackend.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
+                                source: UserModel.isUserConnected(UserModel.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
                                 cache: false\r
                                 x: currentAccountStateIndicatorBackground.x + 1\r
                                 y: currentAccountStateIndicatorBackground.y + 1\r
@@ -327,7 +328,7 @@ Window {
                             Label {\r
                                 id: currentAccountUser\r
                                 width: Style.currentAccountLabelWidth\r
-                                text: userModelBackend.currentUserName()\r
+                                text: UserModel.currentUserName()\r
                                 elide: Text.ElideRight\r
                                 color: "white"\r
                                 font.pixelSize: Style.topLinePixelSize\r
@@ -336,7 +337,7 @@ Window {
                             Label {\r
                                 id: currentAccountServer\r
                                 width: Style.currentAccountLabelWidth\r
-                                text: userModelBackend.currentUserServer()\r
+                                text: UserModel.currentUserServer()\r
                                 elide: Text.ElideRight\r
                                 color: "white"\r
                                 font.pixelSize: Style.subLinePixelSize\r
@@ -363,17 +364,17 @@ Window {
                 HeaderButton {\r
                     id: openLocalFolderButton\r
 \r
-                    visible: userModelBackend.currentUserHasLocalFolder()\r
+                    visible: UserModel.currentUserHasLocalFolder()\r
                     icon.source: "qrc:///client/theme/white/folder.svg"\r
-                    onClicked: userModelBackend.openCurrentAccountLocalFolder()\r
+                    onClicked: UserModel.openCurrentAccountLocalFolder()\r
                 }\r
 \r
                 HeaderButton {\r
                     id: trayWindowTalkButton\r
 \r
-                    visible: userModelBackend.currentServerHasTalk()\r
+                    visible: UserModel.currentServerHasTalk()\r
                     icon.source: "qrc:///client/theme/white/talk-app.svg"\r
-                    onClicked: userModelBackend.openCurrentAccountTalk()\r
+                    onClicked: UserModel.openCurrentAccountTalk()\r
                 }\r
 \r
                 HeaderButton {\r
@@ -382,7 +383,7 @@ Window {
                     onClicked: {\r
                         /*\r
                         // The count() property was introduced in QtQuick.Controls 2.3 (Qt 5.10)\r
-                        // so we handle this with userModelBackend.openCurrentAccountServer()\r
+                        // so we handle this with UserModel.openCurrentAccountServer()\r
                         //\r
                         // See UserModel::openCurrentAccountServer() to disable this workaround\r
                         // in the future for Qt >= 5.10\r
@@ -390,12 +391,12 @@ Window {
                         if(appsMenu.count() > 0) {\r
                             appsMenu.popup();\r
                         } else {\r
-                            userModelBackend.openCurrentAccountServer();\r
+                            UserModel.openCurrentAccountServer();\r
                         }\r
                         */\r
 \r
                         appsMenu.open();\r
-                        userModelBackend.openCurrentAccountServer();\r
+                        UserModel.openCurrentAccountServer();\r
                     }\r
 \r
                     Menu {\r
@@ -411,7 +412,7 @@ Window {
 \r
                         Instantiator {\r
                             id: appsMenuInstantiator\r
-                            model: appsMenuModelBackend\r
+                            model: UserAppsModel\r
                             onObjectAdded: appsMenu.insertItem(index, object)\r
                             onObjectRemoved: appsMenu.removeItem(object)\r
                             delegate: MenuItem {\r
@@ -419,7 +420,7 @@ Window {
                                 font.pixelSize: Style.topLinePixelSize\r
                                 icon.source: appIconUrl\r
                                 width: contentItem.implicitWidth + leftPadding + rightPadding\r
-                                onTriggered: appsMenuModelBackend.openAppUrl(appUrl)\r
+                                onTriggered: UserAppsModel.openAppUrl(appUrl)\r
                             }\r
                         }\r
                     }\r
@@ -534,7 +535,7 @@ Window {
                     ToolTip.visible: hovered\r
                     ToolTip.delay: 1000\r
                     ToolTip.text: qsTr("Open share dialog")\r
-                    onClicked: systrayBackend.openShareDialog(displayPath,absolutePath)\r
+                    onClicked: Systray.openShareDialog(displayPath,absolutePath)\r
                 }\r
             }\r
 \r