aboutsummaryrefslogtreecommitdiff
path: root/src/planner-range.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/planner-range.cpp')
-rw-r--r--src/planner-range.cpp45
1 files changed, 39 insertions, 6 deletions
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;
}