From 3e5cf9851655d88ef87bf8f972fc79b7e1092f81 Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Wed, 8 May 2024 22:45:06 -0300 Subject: [PATCH] More misc fixes --- lib/main.dart | 4 +++- lib/models/app.dart | 17 ++++++++--------- lib/models/user.dart | 6 +++++- lib/screens/app_detail_screen.dart | 17 ++++++++++++----- lib/screens/updates_screen.dart | 17 +++++------------ lib/widgets/card.dart | 18 ++++++++++-------- pubspec.lock | 8 +++++--- 7 files changed, 48 insertions(+), 39 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 0963dd5..a1f7799 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,6 +12,8 @@ import 'package:zapstore/screens/updates_screen.dart'; import 'package:zapstore/widgets/app_drawer.dart'; import 'package:zapstore/screens/search_screen.dart'; +const kDbVersion = 1; + void main() { runApp( ProviderScope( @@ -23,7 +25,7 @@ void main() { print('initializing local storage at $path'); return path; }, - clear: LocalStorageClearStrategy.always, + clear: LocalStorageClearStrategy.whenError, ), ) ], diff --git a/lib/models/app.dart b/lib/models/app.dart index 254caeb..70a19e1 100644 --- a/lib/models/app.dart +++ b/lib/models/app.dart @@ -113,12 +113,12 @@ mixin AppAdapter on Adapter { params.remove('installed'); print('filtering by installed ${params['#d']}'); - final apps = findAllLocal(); - if (apps.isNotEmpty) { - loadAppModels(params); - return apps; - } - return loadAppModels(params); + // final apps = findAllLocal(); + // if (apps.isNotEmpty) { + // loadAppModels(params); + // return apps; + // } + return await loadAppModels(params); } } @@ -237,7 +237,7 @@ extension AppX on App { sink.add(data); downloadedBytes += data.length; notifier.state = - DownloadingInstallProgress(downloadedBytes / totalBytes, uri.host); + DownloadingInstallProgress(downloadedBytes / totalBytes); }, onError: (e) { throw e; }, onDone: () async { @@ -270,8 +270,7 @@ class IdleInstallProgress extends AppInstallProgress {} class DownloadingInstallProgress extends AppInstallProgress { final double progress; - final String host; - DownloadingInstallProgress(this.progress, this.host); + DownloadingInstallProgress(this.progress); } class DeviceInstallProgress extends AppInstallProgress {} diff --git a/lib/models/user.dart b/lib/models/user.dart index 0de7814..4f4dd96 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -27,9 +27,13 @@ mixin UserAdapter on NostrAdapter { final k0s = list .where((e) { + // filter shitty kind 0s + if (e['kind'] != 0 || !e['content'].toString().startsWith('{')) { + return false; + } final map = Map.from(jsonDecode(e['content'])); final name = map['name'] ?? map['display_name'] ?? map['displayName']; - return e['kind'] == 0 && name != null; + return name != null; }) .toList() .groupSetsBy((e) => e['pubkey'] as String); diff --git a/lib/screens/app_detail_screen.dart b/lib/screens/app_detail_screen.dart index b62d849..f77e631 100644 --- a/lib/screens/app_detail_screen.dart +++ b/lib/screens/app_detail_screen.dart @@ -33,6 +33,8 @@ class AppDetailScreen extends HookConsumerWidget { final state = ref.apps.watchOne(model.id!, alsoWatch: (_) => {_.releases, _.releases.artifacts, _.signer, _.developer}); + // hack to refresh on install changes + final _ = ref.watch(installedAppProvider); final app = state.model ?? model; @@ -72,7 +74,11 @@ class AppDetailScreen extends HookConsumerWidget { for (final i in app.images) Padding( padding: const EdgeInsets.only(right: 12), - child: CachedNetworkImage(imageUrl: i), + child: CachedNetworkImage( + imageUrl: i, + errorWidget: (_, __, ___) => + Container(), + ), ), ], ), @@ -321,7 +327,7 @@ class ReleaseCard extends StatelessWidget { Gap(10), Container( constraints: BoxConstraints( - maxHeight: 260, + maxHeight: 200, ), child: Markdown(data: release.content), ), @@ -426,9 +432,10 @@ class InstallButton extends ConsumerWidget { 'Update ${compact ? '' : 'to ${app.latestMetadata!.version!}'}', maxLines: 1) : Text('Install'), - DownloadingInstallProgress(progress: final p, host: final h) => - Text( - '${compact ? '' : 'Downloading from $h '}${(p * 100).floor()}%'), + DownloadingInstallProgress(progress: final p) => Text( + '${(p * 100).floor()}%', + style: TextStyle(fontWeight: FontWeight.bold), + ), DeviceInstallProgress() => compact ? SizedBox( width: 14, height: 14, child: CircularProgressIndicator()) diff --git a/lib/screens/updates_screen.dart b/lib/screens/updates_screen.dart index 05a6eed..2415c4a 100644 --- a/lib/screens/updates_screen.dart +++ b/lib/screens/updates_screen.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_data/flutter_data.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:gap/gap.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; @@ -7,22 +7,15 @@ import 'package:zapstore/main.data.dart'; import 'package:zapstore/models/app.dart'; import 'package:zapstore/screens/app_detail_screen.dart'; -// TODO check notifiers are disposed when pop()ing - -final installedAppsStateProvider = StateNotifierProvider.autoDispose< - DataStateNotifier>, DataState>>((ref) { - print('running watchAllNotifier for updates'); - return ref.apps.watchAllNotifier( - remote: true, - params: {'installed': true}).where((app) => app.installedVersion != null); -}); - class UpdatesScreen extends HookConsumerWidget { const UpdatesScreen({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(installedAppsStateProvider); + // TODO workaround for bug in watchAll() when remote=true + useFuture(useMemoized( + () => ref.apps.findAll(remote: true, params: {'installed': true}))); + final state = ref.apps.watchAll(); if (state.isLoading) { return Center( diff --git a/lib/widgets/card.dart b/lib/widgets/card.dart index 49d228c..d0f8d8d 100644 --- a/lib/widgets/card.dart +++ b/lib/widgets/card.dart @@ -178,14 +178,16 @@ class CircularImage extends StatelessWidget { borderRadius: BorderRadius.circular(radius.toDouble()), child: url == null ? fallbackContainer - : CachedNetworkImage( - imageUrl: url!, - errorWidget: (_, __, ___) => fallbackContainer, - useOldImageOnUrlChange: true, - fit: BoxFit.cover, - width: size, - height: size, - ), + : (url!.endsWith('svg') + ? fallbackContainer + : CachedNetworkImage( + imageUrl: url!, + errorWidget: (_, __, ___) => fallbackContainer, + useOldImageOnUrlChange: true, + fit: BoxFit.cover, + width: size, + height: size, + )), ); } } diff --git a/pubspec.lock b/pubspec.lock index 675bb7e..3f5c981 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -345,9 +345,11 @@ packages: flutter_data: dependency: "direct main" description: - path: "../flutter_data" - relative: true - source: path + path: "." + ref: e54a2e + resolved-ref: e54a2e5152ae9189e9c6f4e49cba05e6ff867ba0 + url: "https://github.com/flutterdata/flutter_data" + source: git version: "2.0.0-rc3" flutter_hooks: dependency: "direct main"