Commit 93c026d

derdilla <derdilla06@gmail.com>
2023-08-20 06:48:37
set earliest record time to 1 millisecond after epoch
1 parent d0fe0f7
lib/components/display_interval_picker.dart
@@ -65,7 +65,7 @@ class IntervalPicker extends StatelessWidget {
                   if (value == TimeStep.custom) {
                     final res = await showDateRangePicker(
                         context: context,
-                        firstDate: DateTime.fromMillisecondsSinceEpoch(0),
+                        firstDate: DateTime.fromMillisecondsSinceEpoch(1),
                         lastDate: DateTime.now());
                     if (res != null) {
                       settings.graphStepSize = value!;
lib/model/blood_pressure.dart
@@ -102,14 +102,26 @@ class BloodPressureModel extends ChangeNotifier {
 
 @immutable
 class BloodPressureRecord {
-  final DateTime creationTime;
+  late final DateTime _creationTime;
   final int? systolic;
   final int? diastolic;
   final int? pulse;
   final String notes;
 
-  const BloodPressureRecord(
-      this.creationTime, this.systolic, this.diastolic, this.pulse, this.notes);
+  BloodPressureRecord(DateTime creationTime, this.systolic, this.diastolic, this.pulse, this.notes) {
+    this.creationTime = creationTime;
+  }
+
+  DateTime get creationTime => _creationTime;
+  /// datetime needs to be after epoch
+  set creationTime(DateTime value) {
+    if (creationTime.millisecondsSinceEpoch > 0) {
+      _creationTime = creationTime;
+    } else {
+      assert(false, "Tried to create BloodPressureRecord at or before epoch");
+      _creationTime = DateTime.fromMillisecondsSinceEpoch(1);
+    }
+  }
 
   @override
   String toString() {
lib/model/ram_only_implementations.dart
@@ -499,7 +499,7 @@ class RamSettings extends ChangeNotifier implements Settings {
         displayDataEnd = oldEnd.copyWith(year: oldEnd.year + directionalStep);
         break;
       case TimeStep.lifetime:
-        displayDataStart = DateTime.fromMillisecondsSinceEpoch(0);
+        displayDataStart = DateTime.fromMillisecondsSinceEpoch(1);
         displayDataEnd = DateTime.now();
         break;
       case TimeStep.last30Days:
@@ -531,7 +531,7 @@ class RamSettings extends ChangeNotifier implements Settings {
         final start = DateTime(now.year);
         return [start, start.copyWith(year: now.year + 1)];
       case TimeStep.lifetime:
-        final start = DateTime.fromMillisecondsSinceEpoch(0);
+        final start = DateTime.fromMillisecondsSinceEpoch(1);
         return [start, now];
       case TimeStep.last7Days:
         final start = now.copyWith(day: now.day-7);
lib/model/settings_store.dart
@@ -144,7 +144,7 @@ class Settings extends ChangeNotifier {
         displayDataEnd = oldEnd.copyWith(year: oldEnd.year + directionalStep);
         break;
       case TimeStep.lifetime:
-        displayDataStart = DateTime.fromMillisecondsSinceEpoch(0);
+        displayDataStart = DateTime.fromMillisecondsSinceEpoch(1);
         displayDataEnd = DateTime.now();
         break;
       case TimeStep.last30Days:
@@ -175,7 +175,7 @@ class Settings extends ChangeNotifier {
         final start = DateTime(now.year);
         return [start, start.copyWith(year: now.year + 1)];
       case TimeStep.lifetime:
-        final start = DateTime.fromMillisecondsSinceEpoch(0);
+        final start = DateTime.fromMillisecondsSinceEpoch(1);
         return [start, now];
       case TimeStep.last7Days:
         final start = now.copyWith(day: now.day-7);
@@ -191,7 +191,7 @@ class Settings extends ChangeNotifier {
 
   DateTime get displayDataStart {
     final s = _displayDataStart ?? getMostRecentDisplayIntervall()[0];
-    if(s.millisecondsSinceEpoch < 0) {
+    if(s.millisecondsSinceEpoch < 1) {
       changeStepSize(TimeStep.last7Days);
     }
     return s;
@@ -204,7 +204,7 @@ class Settings extends ChangeNotifier {
 
   DateTime get displayDataEnd {
     final s = _displayDataEnd ?? getMostRecentDisplayIntervall()[1];
-    if(s.millisecondsSinceEpoch < 0) {
+    if(s.millisecondsSinceEpoch < 1) {
       changeStepSize(TimeStep.last7Days);
     }
     return s;
lib/screens/add_measurement.dart
@@ -76,7 +76,7 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
                               final errTimeAfterNow = AppLocalizations.of(context)!.errTimeAfterNow;
                               var selectedTime = await showDateTimePicker(
                                   context: context,
-                                  firstDate: DateTime.fromMillisecondsSinceEpoch(0),
+                                  firstDate: DateTime.fromMillisecondsSinceEpoch(1),
                                   lastDate: selectionEnd,
                                   initialDate: _time);
                               if (selectedTime != null) {
test/model/bood_pressure_test.dart
@@ -30,7 +30,7 @@ void main() {
     test('should start empty', () async {
       var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_start_empty');
 
-      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).length, 0);
+      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(1), DateTime.now())).length, 0);
     });
 
     test('should notify when adding entries', () async {
@@ -41,7 +41,7 @@ void main() {
         listenerCalls++;
       });
 
-      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(0), 0, 0, 0, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 0, 0, 0, ''));
       await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 0, 0, 0, ''));
       await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 0, 0, 0, ''));
 
@@ -54,7 +54,7 @@ void main() {
       var r = BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(31415926), -172, 10000, 0,
           "((V⍳V)=⍳⍴V)/V←,V    ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈๏ แผ่นดินฮั่นเABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ–—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвг, \n \t д∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა");
       m.addListener(() async {
-        var res = (await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).first;
+        var res = (await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(1), DateTime.now())).first;
         expect(res, isNotNull);
         expect(res.creationTime, r.creationTime);
         expect(res.systolic, r.systolic);
@@ -74,7 +74,7 @@ void main() {
       await m.add(r);
 
       var m2 = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_store_between_sessions');
-      var res = (await m2.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).first;
+      var res = (await m2.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(1), DateTime.now())).first;
 
       expect(res.creationTime, r.creationTime);
       expect(res.systolic, r.systolic);
@@ -87,13 +87,13 @@ void main() {
       var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_delete');
 
       await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(758934), 123, 87, 65, ';)'));
-      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).length, 1);
-      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).length, 1);
+      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(1), DateTime.now())).length, 1);
+      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(1), DateTime.now())).length, 1);
 
       await m.delete(DateTime.fromMillisecondsSinceEpoch(758934));
 
-      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).length, 0);
-      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).length, 0);
+      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(1), DateTime.now())).length, 0);
+      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(1), DateTime.now())).length, 0);
     });
   });
 
@@ -104,7 +104,7 @@ void main() {
 
     test('should start empty', () async {
       var m = RamBloodPressureModel();
-      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).length, 0);
+      expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(1), DateTime.now())).length, 0);
     });
 
     test('should notify when adding entries', () async {
@@ -115,7 +115,7 @@ void main() {
         listenerCalls++;
       });
 
-      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(0), 0, 0, 0, ''));
+      await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 0, 0, 0, ''));
       await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 0, 0, 0, ''));
       await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 0, 0, 0, ''));
 
@@ -128,7 +128,7 @@ void main() {
       var r = BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(31415926), -172, 10000, 0,
           "((V⍳V)=⍳⍴V)/V←,V    ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈๏ แผ่นดินฮั่นเABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ–—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвг, \n \t д∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა");
       m.addListener(() async {
-        var res = (await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).first;
+        var res = (await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(1), DateTime.now())).first;
         expect(res, isNotNull);
         expect(res.creationTime, r.creationTime);
         expect(res.systolic, r.systolic);