From 8fdebcf0daaba560b90c00ae666c219338d8d8cd Mon Sep 17 00:00:00 2001 From: Lalo Martins Date: Tue, 7 Jul 2020 23:09:24 +0300 Subject: [PATCH] correctly process `immediate`; also clear cache when updating goals --- lib/db.dart | 3 +-- lib/model/goal.dart | 9 ++++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/db.dart b/lib/db.dart index e4733b6..94ed0c1 100644 --- a/lib/db.dart +++ b/lib/db.dart @@ -177,11 +177,10 @@ class WeeklyGoalsDatabase extends _$WeeklyGoalsDatabase { .watch(); Future refreshGoals() async { - final newGoals = await Goal.goalsAsOf(db: this); + final newGoals = await Goal.goalsAsOf(db: this, clearCache: true); await delete(cachedGoals).go(); for (final goal in newGoals) { into(cachedGoals).insert(goal); } - print('cached goals updated'); } } diff --git a/lib/model/goal.dart b/lib/model/goal.dart index 055bda0..e51a158 100644 --- a/lib/model/goal.dart +++ b/lib/model/goal.dart @@ -3,6 +3,7 @@ import 'package:flutter/foundation.dart'; import 'package:yaml/yaml.dart'; import '../config.dart'; +import '../date_util.dart'; import '../db.dart'; final _memCache = ExpireCache>(expireDuration: Duration(minutes: 15), sizeLimit: 52); @@ -64,15 +65,17 @@ class Goal extends CachedGoal { return map; } - static Future> goalsAsOf({DateTime when, @required WeeklyGoalsDatabase db}) async { - if (_memCache.containsKey(when)) return _memCache.get(when); + static Future> goalsAsOf({DateTime when, @required WeeklyGoalsDatabase db, clearCache: false}) async { + if (clearCache) _memCache.clear(); + else if (_memCache.containsKey(when)) return _memCache.get(when); final events = await db.getEvents(type: 'set goal', until: when); final map = Map>(); final goals = List(); + final effectDate = when ?? startOfWeek(weeksAgo: -1, midnight: true); for (final event in events) { final YamlMap data = loadYaml(event.additional); - if (when != null && data['immediate'] == false && event.timestamp.add(Duration(days: 7)).isAfter(when)) continue; + if (data['immediate'] == false && event.timestamp.add(Duration(days: 7)).isAfter(effectDate)) continue; final goal = map.putIfAbsent(data['category'], () => Map()).putIfAbsent(data['name'], () { final goal = Goal( category: data['category'],