aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2014-03-14 17:37:09 +0000
committerCI bot <ps-jenkins@lists.canonical.com>2014-03-14 17:37:09 +0000
commit8c4067b5484a81e2bb9158266601e30262bfb119 (patch)
tree11903c9a14e26e3247e9ad4dc9444db686d32ffe /src
parent9f3136ba1c79020c10e58fa53e87a84bcce7dc29 (diff)
parent462e8e6d8e46475ea3222056f65ff40823e9e0bf (diff)
downloadayatana-indicator-datetime-8c4067b5484a81e2bb9158266601e30262bfb119.tar.gz
ayatana-indicator-datetime-8c4067b5484a81e2bb9158266601e30262bfb119.tar.bz2
ayatana-indicator-datetime-8c4067b5484a81e2bb9158266601e30262bfb119.zip
Don't use EDS if we're in the greeter. Fixes: 1256130
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/main.cpp18
-rw-r--r--src/planner-eds.cpp67
-rw-r--r--src/planner-range.cpp45
4 files changed, 52 insertions, 79 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5660e6a..9bc22f2 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -22,7 +22,6 @@ add_library (${SERVICE_LIB} STATIC
locations.cpp
locations-settings.cpp
menu.cpp
- planner-eds.cpp
planner-month.cpp
planner-range.cpp
planner-upcoming.cpp
diff --git a/src/main.cpp b/src/main.cpp
index 3e16555..c7b35e5 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -20,11 +20,12 @@
#include <datetime/actions-live.h>
#include <datetime/clock.h>
#include <datetime/clock-watcher.h>
+#include <datetime/engine-mock.h>
#include <datetime/engine-eds.h>
#include <datetime/exporter.h>
#include <datetime/locations-settings.h>
#include <datetime/menu.h>
-#include <datetime/planner-eds.h>
+#include <datetime/planner-range.h>
#include <datetime/settings-live.h>
#include <datetime/snap.h>
#include <datetime/state.h>
@@ -53,25 +54,32 @@ main(int /*argc*/, char** /*argv*/)
bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR);
textdomain(GETTEXT_PACKAGE);
+ // we don't show appointments in the greeter,
+ // so no need to connect to EDS there...
+ std::shared_ptr<Engine> engine;
+ if (!g_strcmp0("lightdm", g_get_user_name()))
+ engine.reset(new MockEngine);
+ else
+ engine.reset(new EdsEngine);
+
// build the state, actions, and menufactory
std::shared_ptr<State> state(new State);
std::shared_ptr<Settings> live_settings(new LiveSettings);
std::shared_ptr<Timezones> live_timezones(new LiveTimezones(live_settings, TIMEZONE_FILE));
std::shared_ptr<Clock> live_clock(new LiveClock(live_timezones));
std::shared_ptr<Timezone> file_timezone(new FileTimezone(TIMEZONE_FILE));
- std::shared_ptr<EdsEngine> eds_engine (new EdsEngine);
const auto now = live_clock->localtime();
state->settings = live_settings;
state->clock = live_clock;
state->locations.reset(new SettingsLocations(live_settings, live_timezones));
- auto calendar_month = new MonthPlanner(std::shared_ptr<RangePlanner>(new EdsPlanner(eds_engine, file_timezone)), now);
+ auto calendar_month = new MonthPlanner(std::shared_ptr<RangePlanner>(new SimpleRangePlanner(engine, file_timezone)), now);
state->calendar_month.reset(calendar_month);
- state->calendar_upcoming.reset(new UpcomingPlanner(std::shared_ptr<RangePlanner>(new EdsPlanner(eds_engine, file_timezone)), now));
+ state->calendar_upcoming.reset(new UpcomingPlanner(std::shared_ptr<RangePlanner>(new SimpleRangePlanner(engine, file_timezone)), now));
std::shared_ptr<Actions> actions(new LiveActions(state));
MenuFactory factory(actions, state);
// snap decisions
- std::shared_ptr<UpcomingPlanner> upcoming_planner(new UpcomingPlanner(std::shared_ptr<RangePlanner>(new EdsPlanner (eds_engine, file_timezone)), now));
+ std::shared_ptr<UpcomingPlanner> upcoming_planner(new UpcomingPlanner(std::shared_ptr<RangePlanner>(new SimpleRangePlanner(engine, file_timezone)), now));
ClockWatcherImpl clock_watcher(live_clock, upcoming_planner);
Snap snap;
clock_watcher.alarm_reached().connect([&snap](const Appointment& appt){
diff --git a/src/planner-eds.cpp b/src/planner-eds.cpp
deleted file mode 100644
index f3f28ee..0000000
--- a/src/planner-eds.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2013 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:
- * Charles Kerr <charles.kerr@canonical.com>
- */
-
-#include <datetime/planner-eds.h>
-#include <datetime/engine-eds.h>
-
-namespace unity {
-namespace indicator {
-namespace datetime {
-
-/***
-****
-***/
-
-EdsPlanner::EdsPlanner(const std::shared_ptr<EdsEngine>& engine,
- const std::shared_ptr<Timezone>& timezone):
- m_engine(engine),
- m_timezone(timezone)
-{
- m_engine->changed().connect([this](){
- g_debug("EdsPlanner %p rebuilding soon because EdsEngine %p emitted 'changed' signal%p", this, m_engine.get());
- rebuild_soon();
- });
-}
-
-EdsPlanner::~EdsPlanner() =default;
-
-void EdsPlanner::rebuild_now()
-{
- const auto& r = range().get();
-
- auto on_appointments_fetched = [this](const std::vector<Appointment>& a){
- g_debug("EdsPlanner %p got %zu appointments", this, a.size());
- m_appointments.set(a);
- };
-
- m_engine->get_appointments(r.first, r.second, *m_timezone.get(), on_appointments_fetched);
-}
-
-core::Property<std::vector<Appointment>>& EdsPlanner::appointments()
-{
- return m_appointments;
-}
-
-/***
-****
-***/
-
-} // namespace datetime
-} // namespace indicator
-} // namespace unity
diff --git a/src/planner-range.cpp b/src/planner-range.cpp
index 13a1492..93946e0 100644
--- a/src/planner-range.cpp
+++ b/src/planner-range.cpp
@@ -27,22 +27,46 @@ namespace datetime {
****
***/
-RangePlanner::RangePlanner():
+SimpleRangePlanner::SimpleRangePlanner(const std::shared_ptr<Engine>& engine,
+ const std::shared_ptr<Timezone>& timezone):
+ m_engine(engine),
+ m_timezone(timezone),
m_range(std::pair<DateTime,DateTime>(DateTime::NowLocal(), DateTime::NowLocal()))
{
+ engine->changed().connect([this](){
+ g_debug("RangePlanner %p rebuilding soon because Engine %p emitted 'changed' signal%p", this, m_engine.get());
+ rebuild_soon();
+ });
+
range().changed().connect([this](const std::pair<DateTime,DateTime>&){
g_debug("rebuilding because the date range changed");
rebuild_soon();
});
}
-RangePlanner::~RangePlanner()
+SimpleRangePlanner::~SimpleRangePlanner()
{
if (m_rebuild_tag)
g_source_remove(m_rebuild_tag);
}
-void RangePlanner::rebuild_soon()
+/***
+****
+***/
+
+void SimpleRangePlanner::rebuild_now()
+{
+ const auto& r = range().get();
+
+ auto on_appointments_fetched = [this](const std::vector<Appointment>& a){
+ g_debug("RangePlanner %p got %zu appointments", this, a.size());
+ appointments().set(a);
+ };
+
+ m_engine->get_appointments(r.first, r.second, *m_timezone.get(), on_appointments_fetched);
+}
+
+void SimpleRangePlanner::rebuild_soon()
{
static const int ARBITRARY_BATCH_MSEC = 200;
@@ -50,15 +74,24 @@ void RangePlanner::rebuild_soon()
m_rebuild_tag = g_timeout_add(ARBITRARY_BATCH_MSEC, rebuild_now_static, this);
}
-gboolean RangePlanner::rebuild_now_static(gpointer gself)
+gboolean SimpleRangePlanner::rebuild_now_static(gpointer gself)
{
- auto self = static_cast<RangePlanner*>(gself);
+ auto self = static_cast<SimpleRangePlanner*>(gself);
self->m_rebuild_tag = 0;
self->rebuild_now();
return G_SOURCE_REMOVE;
}
-core::Property<std::pair<DateTime,DateTime>>& RangePlanner::range()
+/***
+****
+***/
+
+core::Property<std::vector<Appointment>>& SimpleRangePlanner::appointments()
+{
+ return m_appointments;
+}
+
+core::Property<std::pair<DateTime,DateTime>>& SimpleRangePlanner::range()
{
return m_range;
}