diff options
-rw-r--r-- | include/datetime/planner-eds.h | 2 | ||||
-rw-r--r-- | src/main.cpp | 8 | ||||
-rw-r--r-- | src/planner-eds.cpp | 22 |
3 files changed, 26 insertions, 6 deletions
diff --git a/include/datetime/planner-eds.h b/include/datetime/planner-eds.h index a99f611..4110ba5 100644 --- a/include/datetime/planner-eds.h +++ b/include/datetime/planner-eds.h @@ -20,6 +20,7 @@ #ifndef INDICATOR_DATETIME_PLANNER_EDS_H #define INDICATOR_DATETIME_PLANNER_EDS_H +#include <datetime/appointment.h> #include <datetime/clock.h> #include <datetime/planner.h> @@ -37,6 +38,7 @@ class PlannerEds: public Planner public: PlannerEds(const std::shared_ptr<Clock>& clock); virtual ~PlannerEds(); + void block_appointment(const Appointment& appointment); private: class Impl; diff --git a/src/main.cpp b/src/main.cpp index daf2a22..5f5ee3c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -59,15 +59,17 @@ main(int /*argc*/, char** /*argv*/) state->settings = live_settings; state->clock = live_clock; state->locations.reset(new SettingsLocations(live_settings, live_timezones)); - state->planner.reset(new PlannerEds(live_clock)); - state->planner->time = live_clock->localtime(); + std::shared_ptr<PlannerEds> eds_planner(new PlannerEds(live_clock)); + eds_planner->time = live_clock->localtime(); + state->planner = eds_planner; std::shared_ptr<Actions> actions(new LiveActions(state)); MenuFactory factory(actions, state); // snap decisions ClockWatcherImpl clock_watcher(state); Snap snap; - clock_watcher.alarm_reached().connect([&snap](const Appointment& appt){ + clock_watcher.alarm_reached().connect([&snap,&eds_planner](const Appointment& appt){ + eds_planner->block_appointment(appt); // when we show a snap decision, take it out of the menu auto snap_show = [](const Appointment& a){url_dispatch_send(a.url.c_str(), nullptr, nullptr);}; auto snap_dismiss = [](const Appointment&){}; snap(appt, snap_show, snap_dismiss); diff --git a/src/planner-eds.cpp b/src/planner-eds.cpp index 7d9416c..e9452f0 100644 --- a/src/planner-eds.cpp +++ b/src/planner-eds.cpp @@ -77,6 +77,12 @@ public: g_clear_object(&m_source_registry); } + void block_appointment(const Appointment& appointment) + { + m_blocked.insert(appointment.uid); + rebuild_soon(UPCOMING); + } + private: static void on_source_registry_ready(GObject* /*source*/, GAsyncResult* res, gpointer gself) @@ -348,9 +354,13 @@ private: const auto begin = g_date_time_add_minutes(ref.get(),-10); const auto end = g_date_time_add_months(begin,1); - get_appointments(begin, end, [this](const std::vector<Appointment>& appointments) { - g_debug("got %d upcoming appointments", (int)appointments.size()); - m_owner.upcoming.set(appointments); + get_appointments(begin, end, [this](const std::vector<Appointment>& all) { + std::vector<Appointment> unblocked; + for(const auto& a : all) + if (m_blocked.count(a.uid) == 0) + unblocked.push_back(a); + g_debug("got %d upcoming appointments, %d of which are unblocked", (int)all.size(), (int)unblocked.size()); + m_owner.upcoming.set(unblocked); }); g_date_time_unref(end); @@ -520,6 +530,7 @@ private: std::set<ESource*> m_sources; std::map<ESource*,ECalClient*> m_clients; std::map<ESource*,ECalClientView*> m_views; + std::set<std::string> m_blocked; GCancellable* m_cancellable = nullptr; ESourceRegistry* m_source_registry = nullptr; guint m_rebuild_tag = 0; @@ -531,6 +542,11 @@ PlannerEds::PlannerEds(const std::shared_ptr<Clock>& clock): p(new Impl(*this, c PlannerEds::~PlannerEds() =default; +void PlannerEds::block_appointment(const Appointment& appointment) +{ + p->block_appointment(appointment); +} + } // namespace datetime } // namespace indicator } // namespace unity |