diff options
author | 2021-05-05 02:47:48 +0530 | |
---|---|---|
committer | 2021-05-05 02:47:48 +0530 | |
commit | 45f7260d85197a6d6fc82f9058bdb00941e471ab (patch) | |
tree | f4e90a89a3207b7528cf95cd6ac6307174f9c6ce /src/rateapp.cpp | |
parent | a11a1df736dc275f6df57a2a4ff007090f89ace2 (diff) | |
download | whatsie-45f7260d85197a6d6fc82f9058bdb00941e471ab.tar.gz whatsie-45f7260d85197a6d6fc82f9058bdb00941e471ab.zip |
added rate app dialog
Diffstat (limited to 'src/rateapp.cpp')
-rw-r--r-- | src/rateapp.cpp | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/rateapp.cpp b/src/rateapp.cpp new file mode 100644 index 0000000..03926e2 --- /dev/null +++ b/src/rateapp.cpp @@ -0,0 +1,120 @@ +#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(); + + 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)); + settings.setValue("app_launched_count",0); + settings.setValue("app_install_time",QDateTime::currentSecsSinceEpoch()); + this->close(); +} + +void RateApp::on_alreadyDoneBtn_clicked() +{ + settings.setValue("rated_already",true); + this->close(); +} + +void RateApp::on_laterBtn_clicked() +{ + settings.setValue("rated_already",false); + settings.setValue("app_launched_count",0); + settings.setValue("app_install_time",QDateTime::currentSecsSinceEpoch()); + this->close(); +} + +void RateApp::closeEvent(QCloseEvent *event) +{ + settings.setValue("rated_already",false); + settings.setValue("app_launched_count",0); + settings.setValue("app_install_time",QDateTime::currentSecsSinceEpoch()); + QWidget::closeEvent(event); +} |