From 45c13d49936009f095629ef6f6d82aae768b20f3 Mon Sep 17 00:00:00 2001
From: "kali kaneko (leap communications)" <kali@leap.se>
Date: Tue, 22 Jun 2021 17:10:26 +0200
Subject: [PATCH] [feat] only show donate dialog after first connect when due

- Cloases: #470
---
 CHANGELOG             |  3 ++-
 gui/qml/VpnState.qml  |  6 ++++++
 gui/qml/logic.js      | 20 ++++++++++++--------
 gui/qml/main.qml      |  8 ++++----
 pkg/backend/donate.go |  2 ++
 5 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index cbaf8224..2595c7d1 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,4 +4,5 @@
 - First iteration of the gateway selector.
 - Allow to select obfs4 gateways (bridges) to bypass censorship.
 - Ability to define explicitly allowed addresses for local networks.
-- Update translations. New locales: greek, farsi, hungarian, dutch, polish and uyghur.
+- Make the donate dialog less intrusive (#470)
+- Updated translations. New locales: greek, farsi, hungarian, dutch, polish and uyghur.
diff --git a/gui/qml/VpnState.qml b/gui/qml/VpnState.qml
index b18d6b5a..86239e43 100644
--- a/gui/qml/VpnState.qml
+++ b/gui/qml/VpnState.qml
@@ -48,6 +48,12 @@ StateGroup {
                 script: {
                     Logic.setNeedsReconnect(false);
                     brReconnect = false;
+
+                    if (needsDonate && !shownDonate) {
+                        donate.visible = true;
+                        shownDonate = true;
+                        backend.donateSeen();
+                    }
                 }
 
             }
diff --git a/gui/qml/logic.js b/gui/qml/logic.js
index 582b8249..10ebfcd6 100644
--- a/gui/qml/logic.js
+++ b/gui/qml/logic.js
@@ -1,5 +1,13 @@
-let status = 'off';
-let needsReconnect = false;
+var status = 'off';
+var needsReconnect = false;
+
+function setNeedsReconnect(val) {
+    needsReconnect = val;
+}
+
+function getNeedsReconnect() {
+    return needsReconnect;
+}
 
 function setStatus(st) {
     status = st;
@@ -9,12 +17,8 @@ function getStatus() {
     return status;
 }
 
-function setNeedsReconnect(val) {
-    needsReconnect = val;
-}
-
-function getNeedsReconnect() {
-    return needsReconnect;
+function setNeedsDonate(val) {
+    needsDonate = val;
 }
 
 function toHuman(st) {
diff --git a/gui/qml/main.qml b/gui/qml/main.qml
index e0a9a817..e12c61da 100644
--- a/gui/qml/main.qml
+++ b/gui/qml/main.qml
@@ -21,7 +21,8 @@ ApplicationWindow {
     property var loginDone
     property var allowEmptyPass
     property var needsRestart
-
+    property var needsDonate
+    property var shownDonate
 
     onSceneGraphError: function(error, msg) {
         console.debug("ERROR while initializing scene")
@@ -189,9 +190,7 @@ ApplicationWindow {
             gwSelector.model = Object.keys(ctx.locations)
 
             if (ctx.donateDialog == 'true') {
-                console.debug(jsonModel.getJson())
-                donate.visible = true
-                backend.donateSeen()
+                Logic.setNeedsDonate(true);
             }
             if (ctx.loginDialog == 'true') {
                 console.debug(jsonModel.getJson())
@@ -276,6 +275,7 @@ ApplicationWindow {
         loginDone = false
         allowEmptyPass = Logic.shouldAllowEmptyPass(providers)
         needsRestart = false;
+        shownDonate = false;
         if (!systrayAvailable) {
           app.visible = true
           app.raise()
diff --git a/pkg/backend/donate.go b/pkg/backend/donate.go
index c16c0f4e..98f9e6ba 100644
--- a/pkg/backend/donate.go
+++ b/pkg/backend/donate.go
@@ -15,6 +15,8 @@ func runDonationReminder() {
 			}
 		}
 	}()
+	// to test manually, uncomment this line.
+	// time.AfterFunc(1*time.Minute, func() { showDonate() })
 }
 
 func needsDonationReminder() bool {
-- 
GitLab