diff --git a/src/app/constant/JamiQmlUtils.qml b/src/app/constant/JamiQmlUtils.qml index 968f98ca9fe114f604e3c17f79a23e3e30a3c48e..d0e3a49d3a3edc02eb49cf1c0e4768f382ac29a5 100644 --- a/src/app/constant/JamiQmlUtils.qml +++ b/src/app/constant/JamiQmlUtils.qml @@ -71,12 +71,26 @@ Item { return Math.min(Math.max(val, min), max); } - function isDonationBannerVisible() { + property bool isDonationBannerVisible: getIsDonationBannerVisible() + Connections { + target: UtilsAdapter + function onDonationCampaignSettingChanged() { + // Changing any of the donation campaign settings will trigger a recompute of the banner visibility. + updateIsDonationBannerVisible(); + } + } + + function updateIsDonationBannerVisible() { + isDonationBannerVisible = getIsDonationBannerVisible(); + } + + function getIsDonationBannerVisible() { // The banner is visible if the current date is after the date set in the settings and before the end date // And if the donation toggle is checked - var isDonationVisible = UtilsAdapter.getAppValue(Settings.Key.IsDonationVisible); - var endDonationDate = new Date(Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023EndDate))); - var donationVisibleDate = new Date(Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023VisibleDate))); - return new Date() < endDonationDate && new Date() > donationVisibleDate && isDonationVisible; + const isVisible = UtilsAdapter.getAppValue(Settings.Key.IsDonationVisible); + const endDate = Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023EndDate)); + const startDate = Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023VisibleDate)); + const now = new Date(); + return isVisible && now < endDate && now >= startDate; } } diff --git a/src/app/mainview/components/DonationBanner.qml b/src/app/mainview/components/DonationBanner.qml index 061a377517c9b82bd7e623959d5efcd94fc12496..b45d3b066a65ad95a2b8f67d15c7f136826a7c68 100644 --- a/src/app/mainview/components/DonationBanner.qml +++ b/src/app/mainview/components/DonationBanner.qml @@ -25,9 +25,7 @@ import "../../commoncomponents" import "../../settingsview/components" Rectangle { - id: donation - - property bool donationVisible: JamiQmlUtils.isDonationBannerVisible() + id: root width: parent.width - 30 height: donationTextRect.height + 45 > donationIcon.height + 20 ? donationTextRect.height + 45 : donationIcon.height + 20 @@ -35,6 +33,17 @@ Rectangle { color: JamiTheme.donationBackgroundColor + function bumpDonationReminderVisibility() { + // Calculate the time 7 days from now + var futureDate = new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000); + + // Format the date to 'yyyy-MM-dd hh:mm' format + var formattedDate = Qt.formatDateTime(futureDate, "yyyy-MM-dd hh:mm"); + + // Set the application value + UtilsAdapter.setAppValue(Settings.Key.Donation2023VisibleDate, formattedDate); + } + GridLayout { id: donationLayout @@ -102,16 +111,13 @@ Rectangle { color: JamiTheme.transparentColor + // When the user clicks on "Not now", we set the donation date to 7 days from now Text { id: notNowText MouseArea { cursorShape: Qt.PointingHandCursor anchors.fill: parent - onClicked: { - // When the user clicks on "Not now", we set the donation date to 7 days from now (1 for the test) - UtilsAdapter.setAppValue(Settings.Key.Donation2023VisibleDate, new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000).toISOString().slice(0, 16).replace("T", " ")); - donation.donationVisible = Qt.binding(() => JamiQmlUtils.isDonationBannerVisible()); - } + onClicked: bumpDonationReminderVisibility() } text: JamiStrings.notNow color: JamiTheme.donationButtonTextColor diff --git a/src/app/mainview/components/SidePanel.qml b/src/app/mainview/components/SidePanel.qml index 1312089fe7b920d9e851f8430870231c42c756b7..f40897a9d0f69d6d4af385e46405e60c660be188 100644 --- a/src/app/mainview/components/SidePanel.qml +++ b/src/app/mainview/components/SidePanel.qml @@ -185,9 +185,7 @@ SidePanelBase { Item { anchors.fill: parent - onVisibleChanged: { - donation.donationVisible = Qt.binding(() => JamiQmlUtils.isDonationBannerVisible()); - } + onVisibleChanged: JamiQmlUtils.updateIsDonationBannerVisible() RowLayout { id: titleBar @@ -331,21 +329,21 @@ SidePanelBase { } DonationBanner { - id: donation + id: donationBanner anchors.horizontalCenter: parent.horizontalCenter anchors.leftMargin: 15 anchors.rightMargin: 15 anchors.top: sidePanelTabBar.bottom anchors.topMargin: 10 - visible: donation.donationVisible + visible: JamiQmlUtils.isDonationBannerVisible } ColumnLayout { id: smartListLayout width: parent.width - anchors.top: donation.visible ? donation.bottom : searchStatusRect.bottom - anchors.topMargin: !donation.visible && (sidePanelTabBar.visible || searchStatusRect.visible) ? 0 : 12 + anchors.top: donationBanner.visible ? donationBanner.bottom : searchStatusRect.bottom + anchors.topMargin: !donationBanner.visible && (sidePanelTabBar.visible || searchStatusRect.visible) ? 0 : 12 anchors.bottom: parent.bottom spacing: 4 @@ -398,7 +396,7 @@ SidePanelBase { visible: inNewSwarm width: parent.width - anchors.top: donation.donationVisible ? donation.bottom : sidePanelTabBar.bottom + anchors.top: donationBanner.visible ? donationBanner.bottom : sidePanelTabBar.bottom anchors.topMargin: (sidePanelTabBar.visible || searchStatusRect.visible) ? 0 : 12 anchors.bottom: parent.bottom diff --git a/src/app/utilsadapter.cpp b/src/app/utilsadapter.cpp index dbf8ee6b6ba7df71dc1566dba2e98e302cfa2e49..f8918186b996cc35a41c195a5f5b58b0b86ca463 100644 --- a/src/app/utilsadapter.cpp +++ b/src/app/utilsadapter.cpp @@ -92,6 +92,11 @@ UtilsAdapter::setAppValue(const Settings::Key key, const QVariant& value) Q_EMIT chatviewPositionChanged(); else if (key == Settings::Key::AppTheme) Q_EMIT appThemeChanged(); + // Any donation campaign-related keys can trigger a donation campaign check + else if (key == Settings::Key::IsDonationVisible + || key == Settings::Key::Donation2023VisibleDate + || key == Settings::Key::Donation2023EndDate) + Q_EMIT donationCampaignSettingChanged(); } QVariant diff --git a/src/app/utilsadapter.h b/src/app/utilsadapter.h index 35a326e1c128d130ba5d0fdb248af9f2e2b4d314..b5644f8bd19e6adc963a2ebafe99c75bd80a6f33 100644 --- a/src/app/utilsadapter.h +++ b/src/app/utilsadapter.h @@ -67,6 +67,7 @@ class UtilsAdapter final : public QmlAdapterBase Q_OBJECT QML_PROPERTY(QStringList, logList) QML_RO_PROPERTY(bool, isRTL) + public: explicit UtilsAdapter(AppSettingsManager* settingsManager, SystemTray* systemTray, @@ -170,6 +171,7 @@ Q_SIGNALS: void appThemeChanged(); void showExperimentalCallSwarm(); void changeLanguage(); + void donationCampaignSettingChanged(); private: QClipboard* clipboard_;