From af7f5536ac677c3a7c0e070310f8078bb0824da0 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Fri, 13 Sep 2019 19:42:40 +0900 Subject: [PATCH] clear catalog metadata to get correct date/times when moving to a different time zone --- lib/main.dart | 20 ++++++++++++++------ lib/model/metadata_db.dart | 12 ++++++++++++ lib/model/settings.dart | 5 +++++ pubspec.lock | 7 +++++++ pubspec.yaml | 1 + 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 1d3fedd7a..afac4c636 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -10,6 +10,7 @@ import 'package:aves/widgets/common/fake_app_bar.dart'; import 'package:aves/widgets/common/icons.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_native_timezone/flutter_native_timezone.dart'; import 'package:permission_handler/permission_handler.dart'; void main() { @@ -58,19 +59,26 @@ class _HomePageState extends State { } setup() async { - await androidFileUtils.init(); - await IconUtils.init(); - await settings.init(); - localMediaCollection.groupFactor = settings.collectionGroupFactor; - localMediaCollection.sortFactor = settings.collectionSortFactor; - final permissions = await PermissionHandler().requestPermissions([PermissionGroup.storage]); if (permissions[PermissionGroup.storage] != PermissionStatus.granted) { SystemNavigator.pop(); return; } + await androidFileUtils.init(); + await IconUtils.init(); + await settings.init(); + localMediaCollection.groupFactor = settings.collectionGroupFactor; + localMediaCollection.sortFactor = settings.collectionSortFactor; + await metadataDb.init(); + final currentTimeZone = await FlutterNativeTimezone.getLocalTimezone(); + final catalogTimeZone = settings.catalogTimeZone; + if (currentTimeZone != catalogTimeZone) { + // clear catalog metadata to get correct date/times when moving to a different time zone + await metadataDb.clearMetadataEntries(); + settings.catalogTimeZone = currentTimeZone; + } eventChannel.receiveBroadcastStream().cast().listen( (entryMap) => localMediaCollection.add(ImageEntry.fromMap(entryMap)), diff --git a/lib/model/metadata_db.dart b/lib/model/metadata_db.dart index 5dc3787e3..6be79403f 100644 --- a/lib/model/metadata_db.dart +++ b/lib/model/metadata_db.dart @@ -34,6 +34,12 @@ class MetadataDb { await init(); } + clearMetadataEntries() async { + final db = await _database; + final count = await db.delete(metadataTable, where: '1'); + debugPrint('$runtimeType clearMetadataEntries deleted $count entries'); + } + Future> loadMetadataEntries() async { final start = DateTime.now(); final db = await _database; @@ -57,6 +63,12 @@ class MetadataDb { debugPrint('$runtimeType saveMetadata complete in ${DateTime.now().difference(start).inMilliseconds}ms with ${metadataEntries.length} entries'); } + clearAddresses() async { + final db = await _database; + final count = await db.delete(addressTable, where: '1'); + debugPrint('$runtimeType clearAddresses deleted $count entries'); + } + Future> loadAddresses() async { final start = DateTime.now(); final db = await _database; diff --git a/lib/model/settings.dart b/lib/model/settings.dart index ef8f3d122..45a80d8c4 100644 --- a/lib/model/settings.dart +++ b/lib/model/settings.dart @@ -17,6 +17,7 @@ class Settings { static const collectionGroupFactorKey = 'collection_group_factor'; static const collectionSortFactorKey = 'collection_sort_factor'; static const infoMapZoomKey = 'info_map_zoom'; + static const catalogTimeZoneKey = 'catalog_time_zone'; init() async { prefs = await SharedPreferences.getInstance(); @@ -46,6 +47,10 @@ class Settings { set infoMapZoom(double newValue) => setAndNotify(infoMapZoomKey, newValue); + String get catalogTimeZone => prefs.getString(catalogTimeZoneKey) ?? ''; + + set catalogTimeZone(String newValue) => setAndNotify(catalogTimeZoneKey, newValue); + GroupFactor get collectionGroupFactor => getEnumOrDefault(collectionGroupFactorKey, GroupFactor.date, GroupFactor.values); set collectionGroupFactor(GroupFactor newValue) => setAndNotify(collectionGroupFactorKey, newValue.toString()); diff --git a/pubspec.lock b/pubspec.lock index 8cf7f2e3f..4c2d287a6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -76,6 +76,13 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_native_timezone: + dependency: "direct main" + description: + name: flutter_native_timezone + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" flutter_sticky_header: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 15b1dbdc4..68160dcbe 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,6 +19,7 @@ dependencies: chewie: 0.9.7 collection: flushbar: + flutter_native_timezone: flutter_sticky_header: git: url: git://github.com/deckerst/flutter_sticky_header.git