1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
#include "rateapp.h"
#include "ui_rateapp.h"
#include <QDebug>
#include <QMetaEnum>
RateApp::RateApp(QWidget *parent, QString app_rating_url, int app_launch_count,
int app_install_days, int present_delay)
: QWidget(parent), ui(new Ui::RateApp) {
ui->setupUi(this);
this->app_rating_url =
app_rating_url; // Url to open when rating button clicked
this->app_launch_count =
app_launch_count; // How many time the app must be launched by user to
// show this dialog
this->app_install_days =
app_install_days; // How many days the app must be installed by user to
// show this dialog
this->present_delay =
present_delay; // Delay after which this dialog should be shown to use if
// all conditions matched
showTimer = new QTimer(this);
showTimer->setInterval(this->present_delay);
connect(showTimer, &QTimer::timeout, [=]() {
qDebug() << "Rate timer timeout";
emit showRateDialog();
if (this->isVisible())
showTimer->stop();
});
// increase the app_launched_count by one
int app_launched = settings.value("app_launched_count", 0).toInt();
settings.setValue("app_launched_count", app_launched + 1);
// check if app install time is set in settings
if (settings.value("app_install_time").isNull()) {
settings.setValue("app_install_time", QDateTime::currentSecsSinceEpoch());
} else if (settings.value("app_install_time").isValid()) {
qDebug() << "RATEAPP should show:" << shouldShow();
if (shouldShow()) {
showTimer->start();
} else {
// if shouldshow is false, delete this obj to free resources
this->deleteLater();
}
}
// if already reated delete this obj to free resources
if (settings.value("rated_already", false).toBool()) {
this->deleteLater();
}
}
void RateApp::delayShowEvent() {
showTimer->start();
qDebug() << "Timer running" << showTimer->isActive() << showTimer->interval()
<< showTimer->isSingleShot();
qDebug() << "App was minimized and was not visible, "
"hence delaying the showevent of RateApp dialog by "
<< this->showTimer->interval() / 1000 << "seconds";
}
/**
* @brief RateApp::shouldShow
* @return true, if the dialog should be shown to user
*/
bool RateApp::shouldShow() {
bool shouldShow = false;
int app_launched_count = settings.value("app_launched_count", 0).toInt();
qint64 currentDateTime = QDateTime::currentSecsSinceEpoch();
qint64 installed_date_time = settings.value("app_install_time").toLongLong();
bool ratedAlready = settings.value("rated_already", false).toBool();
if (ratedAlready) // return false if already reated;
return false;
shouldShow =
(((currentDateTime - installed_date_time > app_install_days * 86400) ||
app_launched_count >= this->app_launch_count) &&
ratedAlready == false);
return shouldShow;
}
RateApp::~RateApp() {
qDebug() << "RateApp Obj deleted";
showTimer->disconnect();
showTimer->deleteLater();
delete ui;
}
void RateApp::on_rateNowBtn_clicked() {
QDesktopServices::openUrl(QUrl(app_rating_url));
this->reset();
this->close();
}
void RateApp::on_alreadyDoneBtn_clicked() {
settings.setValue("rated_already", true);
this->close();
}
void RateApp::on_laterBtn_clicked() {
this->reset();
this->close();
}
void RateApp::reset() {
settings.setValue("rated_already", false);
settings.setValue("app_launched_count", 0);
settings.setValue("app_install_time", QDateTime::currentSecsSinceEpoch());
}
void RateApp::on_rateOnGithub_clicked() {
QDesktopServices::openUrl(QUrl("https://github.com/keshavbhatt/whatsie"));
this->reset();
this->close();
}
void RateApp::on_donate_clicked() {
QDesktopServices::openUrl(QUrl("https://paypal.me/keshavnrj/5.00"));
this->reset();
this->close();
}
void RateApp::on_donate_2_clicked() {
QDesktopServices::openUrl(QUrl("https://opencollective.com/whatsie"));
this->reset();
this->close();
}
|