Commit 2832d4c

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-12-21 15:52:42
migrate old export settings
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent ee8b717
lib/model/export_import/export_configuration.dart
@@ -14,7 +14,7 @@ class ActiveExportColumnConfiguration extends ChangeNotifier {
   /// The default configuration is guaranteed to be restoreable.
   ActiveExportColumnConfiguration({
     ExportImportPreset? activePreset,
-    List<String>? userSelectedColumnIds
+    List<String>? userSelectedColumnIds,
   }) :
       _activePreset = activePreset ?? ExportImportPreset.bloodPressureApp,
       _userSelectedColumns = userSelectedColumnIds ?? [];
lib/model/storage/export_csv_settings_store.dart
@@ -21,13 +21,27 @@ class CsvExportSettings extends ChangeNotifier implements CustomFieldsSettings {
     _exportFieldsConfiguration.addListener(() => notifyListeners());
   }
 
-  factory CsvExportSettings.fromMap(Map<String, dynamic> map) => CsvExportSettings(
-      fieldDelimiter: ConvertUtil.parseString(map['fieldDelimiter']),
-      textDelimiter: ConvertUtil.parseString(map['textDelimiter']),
-      exportHeadline: ConvertUtil.parseBool(map['exportHeadline']),
-      exportFieldsConfiguration: ActiveExportColumnConfiguration.fromJson(map['exportFieldsConfiguration']),
-      // TODO: migrate exportCustomFields and customFields before release
-  );
+  factory CsvExportSettings.fromMap(Map<String, dynamic> map) {
+    if (map.containsKey('exportFieldsConfiguration')) {
+      return CsvExportSettings(
+        fieldDelimiter: ConvertUtil.parseString(map['fieldDelimiter']),
+        textDelimiter: ConvertUtil.parseString(map['textDelimiter']),
+        exportHeadline: ConvertUtil.parseBool(map['exportHeadline']),
+        exportFieldsConfiguration: ActiveExportColumnConfiguration.fromJson(map['exportFieldsConfiguration']),
+      );
+    } else {
+      return CsvExportSettings(
+        fieldDelimiter: ConvertUtil.parseString(map['fieldDelimiter']),
+        textDelimiter: ConvertUtil.parseString(map['textDelimiter']),
+        exportHeadline: ConvertUtil.parseBool(map['exportHeadline']),
+        exportFieldsConfiguration: ActiveExportColumnConfiguration(
+          activePreset: ConvertUtil.parseBool(map['exportCustomFields']) ?? false ? ExportImportPreset.none : ExportImportPreset.bloodPressureApp,
+          // Can't migrate user columns ('customFields') as no prefix available
+        ),
+      );
+    }
+
+  }
 
   factory CsvExportSettings.fromJson(String json) {
     try {
lib/model/storage/export_pdf_settings_store.dart
@@ -35,8 +35,9 @@ class PdfExportSettings extends ChangeNotifier implements CustomFieldsSettings {
     cellHeight: ConvertUtil.parseDouble(map['cellHeight']),
     headerFontSize: ConvertUtil.parseDouble(map['headerFontSize']),
     cellFontSize: ConvertUtil.parseDouble(map['cellFontSize']),
-    exportFieldsConfiguration: ActiveExportColumnConfiguration.fromJson(map['exportFieldsConfiguration']),
-    // TODO: migrate exportCustomFields and customFields before release
+    exportFieldsConfiguration: map.containsKey('exportFieldsConfiguration')
+        ? ActiveExportColumnConfiguration.fromJson(map['exportFieldsConfiguration'])
+        : ActiveExportColumnConfiguration(activePreset: ConvertUtil.parseBool(map['exportCustomFields']) ?? false ? ExportImportPreset.none : ExportImportPreset.bloodPressureApp),
   );
 
   factory PdfExportSettings.fromJson(String json) {
test/model/json_serialization_test.dart
@@ -245,6 +245,13 @@ void main() {
       expect(v3.textDelimiter, CsvExportSettings().textDelimiter);
       expect(v3.exportFieldsConfiguration.toJson(), CsvExportSettings().exportFieldsConfiguration.toJson());
     });
+    test('should load settings from 1.5.7 and earlier', () {
+      final settings = CsvExportSettings.fromJson('{"fieldDelimiter":"A","textDelimiter":"B","exportHeadline":false,"exportCustomFields":true,"customFields":["timestampUnixMs","systolic","diastolic","pulse","notes","color"]}');
+      expect(settings.fieldDelimiter, 'A');
+      expect(settings.textDelimiter, 'B');
+      expect(settings.exportHeadline, false);
+      expect(settings.exportFieldsConfiguration.activePreset, ExportImportPreset.none);
+    });
   });
 
   group('PdfExportSettings', (){
@@ -294,6 +301,17 @@ void main() {
       expect(v3.headerFontSize, PdfExportSettings().headerFontSize);
       expect(v3.exportData, PdfExportSettings().exportData);
     });
+    test('should load settings from 1.5.7 and earlier', () {
+      final settings = PdfExportSettings.fromJson('{"exportTitle":false,"exportStatistics":true,"exportData":false,"headerHeight":42.0,"cellHeight":42.0,"headerFontSize":42.0,"cellFontSize":42.0,"exportCustomFields":true,"customFields":["formattedTimestamp","systolic","diastolic","pulse","notes"]}');
+      expect(settings.exportTitle, false);
+      expect(settings.exportStatistics, true);
+      expect(settings.exportData, false);
+      expect(settings.headerHeight, 42);
+      expect(settings.cellHeight, 42);
+      expect(settings.headerFontSize, 42);
+      expect(settings.cellFontSize, 42);
+      expect(settings.exportFieldsConfiguration.activePreset, ExportImportPreset.none);
+    });
   });
 
   group('ExportColumnsManager', (){