aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/datetime/engine-eds.h2
-rw-r--r--include/datetime/myself.h61
-rw-r--r--src/engine-eds.cpp15
-rw-r--r--src/myself.cpp73
4 files changed, 143 insertions, 8 deletions
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> &myself);
+ explicit EdsEngine(const std::unique_ptr<Myself> &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 <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Renato Araujo Oliveira Filho <renato.filho@canonical.com>
+ */
+
+#ifndef INDICATOR_DATETIME_MYSELF_H
+#define INDICATOR_DATETIME_MYSELF_H
+
+#include <libaccounts-glib.h>
+
+#include <core/property.h>
+
+#include <string>
+#include <vector>
+#include <memory.h>
+
+namespace ayatana {
+namespace indicator {
+namespace datetime {
+
+class Myself
+{
+public:
+ Myself();
+
+ core::Property<std::vector<std::string>>& emails()
+ {
+ return m_emails;
+ }
+
+ bool isMyEmail(const std::string &email);
+
+private:
+ std::shared_ptr<AgManager> m_accounts_manager;
+ core::Property<std::vector<std::string> > 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> &myself)
- : m_myself(myself)
+ Impl(const std::unique_ptr<Myself> &myself)
{
auto cancellable_deleter = [](GCancellable * c) {
g_cancellable_cancel(c);
@@ -60,9 +59,11 @@ public:
m_cancellable = std::shared_ptr<GCancellable>(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<std::string> &) {
+
+ m_myself = std::unique_ptr<Myself>(new Myself());
+ /*m_myself->emails().changed().connect([this](const std::set<std::string> &) {
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<Myself> m_myself;
+ std::unique_ptr<Myself> m_myself;
};
/***
@@ -1261,11 +1262,11 @@ private:
***/
EdsEngine::EdsEngine():
- p(new Impl(std::shared_ptr<Myself>(new Myself)))
+ p(new Impl(std::unique_ptr<Myself>(new Myself)))
{
}
-EdsEngine::EdsEngine(const std::shared_ptr<Myself> &myself):
+EdsEngine::EdsEngine(const std::unique_ptr<Myself> &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 <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Renato Araujo Oliveira Filho <renato.filho@canonical.com>
+ */
+
+#include "datetime/myself.h"
+
+#include <libaccounts-glib.h>
+#include <libaccounts-glib/ag-account.h>
+
+#include <algorithm>
+
+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<std::string> 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
+