From 1a9b3917c16fa37bd8e3246d5a330b623fd04efb Mon Sep 17 00:00:00 2001 From: Laurent Montel Date: Tue, 15 Sep 2020 13:10:23 +0200 Subject: [PATCH] Add tagmonitormanager.cpp --- src/CMakeLists.txt | 1 + src/tag/tagactionmanager.cpp | 12 +++++------- src/tag/tagactionmanager.h | 1 - src/tag/tagmonitormanager.cpp | 34 ++++++++++++++++++++++++++++++++++ src/tag/tagmonitormanager.h | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 src/tag/tagmonitormanager.cpp create mode 100644 src/tag/tagmonitormanager.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5f66b5f22..33f6dfad0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -155,6 +155,7 @@ set(kmailprivate_widgets_LIB_SRCS set(kmailprivate_tag_LIB_SRCS tag/tagactionmanager.cpp tag/tagselectdialog.cpp + tag/tagmonitormanager.cpp ) diff --git a/src/tag/tagactionmanager.cpp b/src/tag/tagactionmanager.cpp index 582afe5f3..45cbe2d50 100644 --- a/src/tag/tagactionmanager.cpp +++ b/src/tag/tagactionmanager.cpp @@ -5,6 +5,7 @@ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL */ #include "tagactionmanager.h" +#include "tagmonitormanager.h" #include "messageactions.h" @@ -37,16 +38,13 @@ TagActionManager::TagActionManager(QObject *parent, KActionCollection *actionCol , mActionCollection(actionCollection) , mMessageActions(messageActions) , mGUIClient(guiClient) - , mMonitor(new Akonadi::Monitor(this)) { mMessageActions->messageStatusMenu()->menu()->addSeparator(); - mMonitor->setObjectName(QStringLiteral("TagActionManagerMonitor")); - mMonitor->setTypeMonitored(Akonadi::Monitor::Tags); - mMonitor->tagFetchScope().fetchAttribute(); - connect(mMonitor, &Akonadi::Monitor::tagAdded, this, &TagActionManager::onTagAdded); - connect(mMonitor, &Akonadi::Monitor::tagRemoved, this, &TagActionManager::onTagRemoved); - connect(mMonitor, &Akonadi::Monitor::tagChanged, this, &TagActionManager::onTagChanged); + TagMonitorManager *tagMonitorManager = TagMonitorManager::self(); + connect(tagMonitorManager, &TagMonitorManager::tagAdded, this, &TagActionManager::onTagAdded); + connect(tagMonitorManager, &TagMonitorManager::tagRemoved, this, &TagActionManager::onTagRemoved); + connect(tagMonitorManager, &TagMonitorManager::tagChanged, this, &TagActionManager::onTagChanged); } TagActionManager::~TagActionManager() diff --git a/src/tag/tagactionmanager.h b/src/tag/tagactionmanager.h index 53bc5181f..a3f56471c 100644 --- a/src/tag/tagactionmanager.h +++ b/src/tag/tagactionmanager.h @@ -137,7 +137,6 @@ private: // Uri of a newly created tag qint64 mNewTagId = -1; bool mTagFetchInProgress = false; - Akonadi::Monitor *const mMonitor; }; } diff --git a/src/tag/tagmonitormanager.cpp b/src/tag/tagmonitormanager.cpp new file mode 100644 index 000000000..c9ac0b1fe --- /dev/null +++ b/src/tag/tagmonitormanager.cpp @@ -0,0 +1,34 @@ +/* + SPDX-FileCopyrightText: 2020 Laurent Montel + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL +*/ + +#include "tagmonitormanager.h" +#include +#include +#include +#include + +TagMonitorManager::TagMonitorManager(QObject *parent) + : QObject(parent) + , mMonitor(new Akonadi::Monitor(this)) +{ + mMonitor->setObjectName(QStringLiteral("TagActionManagerMonitor")); + mMonitor->setTypeMonitored(Akonadi::Monitor::Tags); + mMonitor->tagFetchScope().fetchAttribute(); + connect(mMonitor, &Akonadi::Monitor::tagAdded, this, &TagMonitorManager::tagAdded); + connect(mMonitor, &Akonadi::Monitor::tagRemoved, this, &TagMonitorManager::tagRemoved); + connect(mMonitor, &Akonadi::Monitor::tagChanged, this, &TagMonitorManager::tagChanged); +} + +TagMonitorManager::~TagMonitorManager() +{ + +} + +TagMonitorManager *TagMonitorManager::self() +{ + static TagMonitorManager s_self; + return &s_self; +} diff --git a/src/tag/tagmonitormanager.h b/src/tag/tagmonitormanager.h new file mode 100644 index 000000000..0ba0f2d01 --- /dev/null +++ b/src/tag/tagmonitormanager.h @@ -0,0 +1,33 @@ +/* + SPDX-FileCopyrightText: 2020 Laurent Montel + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL +*/ + +#ifndef TAGMONITORMANAGER_H +#define TAGMONITORMANAGER_H + +#include +#include +namespace Akonadi { +class Monitor; +} +class TagMonitorManager : public QObject +{ + Q_OBJECT +public: + explicit TagMonitorManager(QObject *parent = nullptr); + ~TagMonitorManager(); + + static TagMonitorManager *self(); + +Q_SIGNALS: + void tagAdded(const Akonadi::Tag &tag); + void tagChanged(const Akonadi::Tag &tag); + void tagRemoved(const Akonadi::Tag &tag); + +private: + Akonadi::Monitor *const mMonitor; +}; + +#endif // TAGMONITORMANAGER_H