From ba0581ac2fd8df5a5023fdc126351dafbbba07ed Mon Sep 17 00:00:00 2001 From: Renato Araujo Oliveira Filho Date: Wed, 30 Mar 2016 13:26:14 -0300 Subject: Ignore alarms for events marked as not attending. --- include/datetime/engine-eds.h | 2 +- include/datetime/myself.h | 61 ++++++++++++++++++++++++++++++++++++ src/engine-eds.cpp | 15 ++++----- src/myself.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 8 deletions(-) create mode 100644 include/datetime/myself.h create mode 100644 src/myself.cpp diff --git a/include/datetime/engine-eds.h b/include/datetime/engine-eds.h index 12425b3..0b854e5 100644 --- a/include/datetime/engine-eds.h +++ b/include/datetime/engine-eds.h @@ -48,7 +48,7 @@ class EdsEngine: public Engine { public: EdsEngine(); - explicit EdsEngine(const std::shared_ptr &myself); + explicit EdsEngine(const std::unique_ptr &myself); ~EdsEngine(); void get_appointments(const DateTime& begin, diff --git a/include/datetime/myself.h b/include/datetime/myself.h new file mode 100644 index 0000000..c381780 --- /dev/null +++ b/include/datetime/myself.h @@ -0,0 +1,61 @@ +/* + * Copyright 2016 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3, as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, 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 . + * + * Authors: + * Renato Araujo Oliveira Filho + */ + +#ifndef INDICATOR_DATETIME_MYSELF_H +#define INDICATOR_DATETIME_MYSELF_H + +#include + +#include + +#include +#include +#include + +namespace ayatana { +namespace indicator { +namespace datetime { + +class Myself +{ +public: + Myself(); + + core::Property>& emails() + { + return m_emails; + } + + bool isMyEmail(const std::string &email); + +private: + std::shared_ptr m_accounts_manager; + core::Property > m_emails; + + static void on_accounts_changed(AgManager*, guint, Myself*); + void reloadEmails(); + +}; + + +} // namespace datetime +} // namespace indicator +} // namespace ayatana + +#endif // INDICATOR_DATETIME_MYSELF_H diff --git a/src/engine-eds.cpp b/src/engine-eds.cpp index fc6a45b..becd40f 100644 --- a/src/engine-eds.cpp +++ b/src/engine-eds.cpp @@ -50,8 +50,7 @@ class EdsEngine::Impl { public: - Impl(const std::shared_ptr &myself) - : m_myself(myself) + Impl(const std::unique_ptr &myself) { auto cancellable_deleter = [](GCancellable * c) { g_cancellable_cancel(c); @@ -60,9 +59,11 @@ public: m_cancellable = std::shared_ptr(g_cancellable_new(), cancellable_deleter); e_source_registry_new(m_cancellable.get(), on_source_registry_ready, this); - m_myself->emails().changed().connect([this](const std::set &) { + + m_myself = std::unique_ptr(new Myself()); + /*m_myself->emails().changed().connect([this](const std::set &) { set_dirty_soon(); - }); + });*/ } ~Impl() @@ -1253,7 +1254,7 @@ private: ESourceRegistry* m_source_registry {}; guint m_rebuild_tag {}; time_t m_rebuild_deadline {}; - std::shared_ptr m_myself; + std::unique_ptr m_myself; }; /*** @@ -1261,11 +1262,11 @@ private: ***/ EdsEngine::EdsEngine(): - p(new Impl(std::shared_ptr(new Myself))) + p(new Impl(std::unique_ptr(new Myself))) { } -EdsEngine::EdsEngine(const std::shared_ptr &myself): +EdsEngine::EdsEngine(const std::unique_ptr &myself): p(new Impl(myself)) { } diff --git a/src/myself.cpp b/src/myself.cpp new file mode 100644 index 0000000..04c2126 --- /dev/null +++ b/src/myself.cpp @@ -0,0 +1,73 @@ +/* + * Copyright 2016 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3, as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, 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 . + * + * Authors: + * Renato Araujo Oliveira Filho + */ + +#include "datetime/myself.h" + +#include +#include + +#include + +namespace ayatana { +namespace indicator { +namespace datetime { + +Myself::Myself() + : m_accounts_manager(ag_manager_new(), g_object_unref) +{ + reloadEmails(); + g_object_connect(m_accounts_manager.get(), + "signal::account-created", on_accounts_changed, this, + "signal::account-deleted", on_accounts_changed, this, + "signal::account-updated", on_accounts_changed, this, + nullptr); +} + +bool Myself::isMyEmail(const std::string &email) +{ + auto emails = m_emails.get(); + return (std::find(emails.begin(), emails.end(), email) != emails.end()); +} + +void Myself::on_accounts_changed(AgManager *, guint, Myself *self) +{ + self->reloadEmails(); +} + +void Myself::reloadEmails() +{ + std::vector emails; + + auto manager = m_accounts_manager.get(); + auto ids = ag_manager_list(manager); + for (auto l=ids; l!=nullptr; l=l->next) + { + auto acc = ag_manager_get_account(manager, GPOINTER_TO_UINT(l->data)); + auto account_name = ag_account_get_display_name(acc); + emails.push_back(account_name); + } + ag_manager_list_free(ids); + + m_emails.set(emails); +} + +} // namespace datetime +} // namespace indicator +} // namespace ayatana + -- cgit v1.2.3