From c4bfc04603c361e6a3833f5846d311a73073cd18 Mon Sep 17 00:00:00 2001
From: "kali kaneko (leap communications)" <kali@leap.se>
Date: Wed, 10 Mar 2021 22:36:26 +0100
Subject: [PATCH] [bug] inform backend when donate dialog is shown

a rather annoying bug, since it keeps popping up for every status
change. to be included in a hotfix for 0.21.2 release.

- Release: 0.21.2
- Closes: #459
---
 gui/backend.go        |  5 +++++
 gui/handlers.cpp      |  5 +++++
 gui/handlers.h        |  1 +
 gui/qml/main.qml      |  3 +--
 pkg/backend/api.go    |  4 ++++
 pkg/backend/donate.go | 12 ++++++++++--
 6 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/gui/backend.go b/gui/backend.go
index 9453d88f..96f50de4 100644
--- a/gui/backend.go
+++ b/gui/backend.go
@@ -40,6 +40,11 @@ func DonateAccepted() {
 	backend.DonateAccepted()
 }
 
+//export DonateSeen
+func DonateSeen() {
+	backend.DonateSeen()
+}
+
 //export SubscribeToEvent
 func SubscribeToEvent(event string, f unsafe.Pointer) {
 	backend.SubscribeToEvent(event, f)
diff --git a/gui/handlers.cpp b/gui/handlers.cpp
index 6cafab54..8f0e0d05 100644
--- a/gui/handlers.cpp
+++ b/gui/handlers.cpp
@@ -37,6 +37,11 @@ void Backend::donateAccepted()
     DonateAccepted();
 }
 
+void Backend::donateSeen()
+{
+    DonateSeen();
+}
+
 void Backend::login(QString username, QString password)
 {
     Login(toGoStr(username), toGoStr(password));
diff --git a/gui/handlers.h b/gui/handlers.h
index c342a977..8283645d 100644
--- a/gui/handlers.h
+++ b/gui/handlers.h
@@ -35,6 +35,7 @@ public slots:
     void switchOn();
     void switchOff();
     void donateAccepted();
+    void donateSeen();
     void login(QString username, QString password);
     void resetError(QString errlabel);
     void resetNotification(QString label);
diff --git a/gui/qml/main.qml b/gui/qml/main.qml
index 4ac1972e..aed08ea3 100644
--- a/gui/qml/main.qml
+++ b/gui/qml/main.qml
@@ -21,11 +21,10 @@ ApplicationWindow {
         onDataChanged: {
             ctx = JSON.parse(jsonModel.getJson())
 
-            // FIXME -- we need to inform the backend that we've already seen
-            // this. Otherwise this keeps popping randonmly on state changes.
             if (ctx.donateDialog == 'true') {
                 console.debug(jsonModel.getJson())
                 donate.visible = true
+                backend.donateSeen()
             }
             if (ctx.loginDialog == 'true') {
                 console.debug(jsonModel.getJson())
diff --git a/pkg/backend/api.go b/pkg/backend/api.go
index 4390fef7..a799b0eb 100644
--- a/pkg/backend/api.go
+++ b/pkg/backend/api.go
@@ -68,6 +68,10 @@ func DonateAccepted() {
 	donateAccepted()
 }
 
+func DonateSeen() {
+	donateSeen()
+}
+
 func SubscribeToEvent(event string, f unsafe.Pointer) {
 	subscribe(event, f)
 }
diff --git a/pkg/backend/donate.go b/pkg/backend/donate.go
index f87934a9..c16c0f4e 100644
--- a/pkg/backend/donate.go
+++ b/pkg/backend/donate.go
@@ -4,12 +4,12 @@ import (
 	"time"
 )
 
-// runDonationReminder checks every hour if we need to show the reminder,
+// runDonationReminder checks every six hours if we need to show the reminder,
 // and trigger the launching of the dialog if needed.
 func runDonationReminder() {
 	go func() {
 		for {
-			time.Sleep(time.Hour)
+			time.Sleep(time.Hour * 6)
 			if needsDonationReminder() {
 				showDonate()
 			}
@@ -21,6 +21,14 @@ func needsDonationReminder() bool {
 	return ctx.cfg.NeedsDonationReminder()
 }
 
+/* to be called from the gui, the visibility toggle will be updated on the next
+   status change */
+func donateSeen() {
+	statusMutex.Lock()
+	defer statusMutex.Unlock()
+	ctx.DonateDialog = false
+}
+
 func donateAccepted() {
 	statusMutex.Lock()
 	defer statusMutex.Unlock()
-- 
GitLab