From 83d677dcedbb36a098b4817768e5ad57b666f799 Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Thu, 17 Oct 2024 16:44:04 -0300 Subject: [PATCH] DB version check and initializer improvements --- lib/main.dart | 2 +- lib/models/app.dart | 14 +++++++------- lib/navigation/app_initializer.dart | 16 ++++++++++++---- lib/widgets/drawer_container.dart | 4 +++- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 68e9ba5..8d158b5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -13,7 +13,7 @@ import 'package:zapstore/utils/debounce.dart'; import 'package:zapstore/utils/theme.dart'; import 'package:zapstore/widgets/error_container.dart'; -const kDbVersion = 1; +const kDbVersion = 2; final appLinks = AppLinks(); /// Application entry point. diff --git a/lib/models/app.dart b/lib/models/app.dart index 2152ccb..ce0d4ab 100644 --- a/lib/models/app.dart +++ b/lib/models/app.dart @@ -169,7 +169,7 @@ class App extends BaseApp with DataModelMixin { } mixin AppAdapter on Adapter { - final _queriedAtMap = {}; + final queriedAtMap = {}; @override Future> findAll( @@ -217,9 +217,9 @@ mixin AppAdapter on Adapter { final identifiers = {...params['#d']}; final cachedIdentifiers = - identifiers.where((i) => _queriedAtMap.containsKey(i)); + identifiers.where((i) => queriedAtMap.containsKey(i)); final newIdentifiers = - identifiers.where((i) => !_queriedAtMap.containsKey(i)); + identifiers.where((i) => !queriedAtMap.containsKey(i)); var cachedApps = []; var newApps = []; @@ -227,9 +227,9 @@ mixin AppAdapter on Adapter { // For apps already in cache, find earliest date of the set // (as we cannot have one `since` per app) if (cachedIdentifiers.isNotEmpty) { - earliestQueryAt = cachedIdentifiers.fold( - _queriedAtMap[cachedIdentifiers.first]!, (acc, e) { - return acc.isBefore(_queriedAtMap[e]!) ? acc : _queriedAtMap[e]!; + earliestQueryAt = cachedIdentifiers + .fold(queriedAtMap[cachedIdentifiers.first]!, (acc, e) { + return acc.isBefore(queriedAtMap[e]!) ? acc : queriedAtMap[e]!; }); cachedApps = await super.findAll( @@ -297,7 +297,7 @@ mixin AppAdapter on Adapter { if (m != null) { for (final app in apps) { - _queriedAtMap[app.identifier] = m; + queriedAtMap[app.identifier] = m; } } diff --git a/lib/navigation/app_initializer.dart b/lib/navigation/app_initializer.dart index c2e73a5..b144caf 100644 --- a/lib/navigation/app_initializer.dart +++ b/lib/navigation/app_initializer.dart @@ -17,6 +17,12 @@ final appInitializer = FutureProvider((ref) async { // Initialize Flutter Data await ref.read(initializeFlutterData(adapterProvidersMap).future); + // Check DB version + final userDbVersion = ref.settings.findOneLocalById('_')!.dbVersion; + if (userDbVersion < kDbVersion) { + await ref.read(localStorageProvider).destroy(); + } + // Initialize relays final relay = ref.read(relayMessageNotifierProvider(kAppRelays).notifier); final socialRelays = @@ -50,10 +56,12 @@ final appInitializer = FutureProvider((ref) async { ); // Load curation sets (here for now) - await ref.appCurationSets.findAll(); + if (ref.appCurationSets.countLocal == 0) { + await ref.appCurationSets.findAll(); - // Preload zapstore's nostr curation set - await ref.read(appCurationSetProvider(kNostrCurationSet).future); + // Preload zapstore's nostr curation set + await ref.read(appCurationSetProvider(kNostrCurationSet).future); + } // Preload latest releases await ref.read(latestReleasesAppProvider.notifier).fetch(); @@ -65,7 +73,7 @@ final appInitializer = FutureProvider((ref) async { final appLinksSub = appLinks.uriLinkStream.listen((uri) async { if (uri.scheme == "zapstore") { final adapter = ref.apps.appAdapter; - final App? app = await adapter.findOne(uri.host); + final app = adapter.findWhereIdInLocal({uri.host}).firstOrNull; if (app != null) { appRouter.go('/details', extra: app); } diff --git a/lib/widgets/drawer_container.dart b/lib/widgets/drawer_container.dart index d3372eb..264c15c 100644 --- a/lib/widgets/drawer_container.dart +++ b/lib/widgets/drawer_container.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:zapstore/main.dart'; +import 'package:zapstore/main.data.dart'; +import 'package:zapstore/models/app.dart'; import 'package:zapstore/utils/system_info.dart'; import 'package:zapstore/widgets/app_drawer.dart'; @@ -23,7 +25,7 @@ class DrawerContainer extends StatelessWidget { final state = ref.watch(systemInfoProvider); return switch (state) { AsyncData(:final value) => Text( - 'Version: ${value.zsInfo.versionName} (${value.zsInfo.versionCode}, $kDbVersion)', + 'Version: ${value.zsInfo.versionName} (${value.zsInfo.versionCode}, $kDbVersion) -- ${ref.apps.appAdapter.queriedAtMap.length}', style: TextStyle(fontSize: 16), ), _ => Container(),