From ab879c0d39097a289ac11d60dc87f5fed2f515ee Mon Sep 17 00:00:00 2001 From: reionwong Date: Wed, 9 Mar 2022 09:03:13 +0800 Subject: [PATCH] controlcenter: new DoNotDisturb --- CMakeLists.txt | 1 + qml/ControlCenter.qml | 14 ++++++++++ src/main.cpp | 2 ++ src/notifications.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++ src/notifications.h | 49 +++++++++++++++++++++++++++++++++++ 5 files changed, 126 insertions(+) create mode 100644 src/notifications.cpp create mode 100644 src/notifications.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c86334a..0ed96f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ set(SRCS src/processprovider.cpp src/activity.cpp src/capplications.cpp + src/notifications.cpp src/systemtray/statusnotifieritemsource.cpp src/systemtray/systemtraytypes.cpp diff --git a/qml/ControlCenter.qml b/qml/ControlCenter.qml index 81b542e..ecb251e 100644 --- a/qml/ControlCenter.qml +++ b/qml/ControlCenter.qml @@ -74,6 +74,10 @@ ControlCenterDialog { id: appearance } + Notifications { + id: notifications + } + SinkModel { id: paSinkModel @@ -272,6 +276,16 @@ ControlCenterDialog { onClicked: appearance.switchDarkMode(!FishUI.Theme.darkMode) } + CardItem { + Layout.fillHeight: true + Layout.preferredWidth: cardItems.cellWidth + icon: FishUI.Theme.darkMode || checked ? "qrc:/images/dark/dark-mode.svg" + : "qrc:/images/light/dark-mode.svg" + checked: notifications.doNotDisturb + label: qsTr("Do Not Disturb") + onClicked: notifications.doNotDisturb = !notifications.doNotDisturb + } + CardItem { Layout.fillHeight: true Layout.preferredWidth: cardItems.cellWidth diff --git a/src/main.cpp b/src/main.cpp index f2f3e9d..a61d5e6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,6 +27,7 @@ #include "appmenu/appmenumodel.h" #include "appmenu/appmenuapplet.h" #include "poweractions.h" +#include "notifications.h" #include "appearance.h" #include "brightness.h" @@ -46,6 +47,7 @@ int main(int argc, char *argv[]) qmlRegisterType(uri, 1, 0, "AppMenuModel"); qmlRegisterType(uri, 1, 0, "AppMenuApplet"); qmlRegisterType(uri, 1, 0, "PowerActions"); + qmlRegisterType(uri, 1, 0, "Notifications"); QString qmFilePath = QString("%1/%2.qm").arg("/usr/share/cutefish-statusbar/translations/").arg(QLocale::system().name()); if (QFile::exists(qmFilePath)) { diff --git a/src/notifications.cpp b/src/notifications.cpp new file mode 100644 index 0000000..fab7903 --- /dev/null +++ b/src/notifications.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2021 - 2022 CutefishOS Team. + * + * Author: Reion Wong + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "notifications.h" + +Notifications::Notifications(QObject *parent) + : QObject(parent) + , m_iface("com.cutefish.Notification", + "/Notification", + "com.cutefish.Notification", QDBusConnection::sessionBus()) +{ + m_doNotDisturb = m_iface.property("doNotDisturb").toBool(); + + QDBusConnection::sessionBus().connect("com.cutefish.Notification", + "/Notification", + "com.cutefish.Notification", + "doNotDisturbChanged", this, SLOT(onDBusDoNotDisturbChanged())); +} + +bool Notifications::doNotDisturb() const +{ + return m_doNotDisturb; +} + +void Notifications::setDoNotDisturb(bool enabled) +{ + m_doNotDisturb = enabled; + + QDBusInterface iface("com.cutefish.Notification", + "/Notification", + "com.cutefish.Notification", QDBusConnection::sessionBus()); + + if (iface.isValid()) { + iface.asyncCall("setDoNotDisturb", enabled); + } + + emit doNotDisturbChanged(); +} + +void Notifications::onDBusDoNotDisturbChanged() +{ + m_doNotDisturb = m_iface.property("doNotDisturb").toBool(); + emit doNotDisturbChanged(); +} diff --git a/src/notifications.h b/src/notifications.h new file mode 100644 index 0000000..0b67f74 --- /dev/null +++ b/src/notifications.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2021 - 2022 CutefishOS Team. + * + * Author: Reion Wong + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef NOTIFICATIONS_H +#define NOTIFICATIONS_H + +#include +#include +#include + +class Notifications : public QObject +{ + Q_OBJECT + Q_PROPERTY(bool doNotDisturb READ doNotDisturb WRITE setDoNotDisturb NOTIFY doNotDisturbChanged) + +public: + explicit Notifications(QObject *parent = nullptr); + + bool doNotDisturb() const; + void setDoNotDisturb(bool enabled); + +private slots: + void onDBusDoNotDisturbChanged(); + +signals: + void doNotDisturbChanged(); + +private: + QDBusInterface m_iface; + bool m_doNotDisturb; +}; + +#endif // NOTIFICATIONS_H