mirror of
https://github.com/zapstore/zapstore.git
synced 2026-10-05 20:48:24 +00:00
More misc fixes
This commit is contained in:
+3
-1
@@ -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,
|
||||
),
|
||||
)
|
||||
],
|
||||
|
||||
+8
-9
@@ -113,12 +113,12 @@ mixin AppAdapter on Adapter<App> {
|
||||
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 {}
|
||||
|
||||
@@ -27,9 +27,13 @@ mixin UserAdapter on NostrAdapter<User> {
|
||||
|
||||
final k0s = list
|
||||
.where((e) {
|
||||
// filter shitty kind 0s
|
||||
if (e['kind'] != 0 || !e['content'].toString().startsWith('{')) {
|
||||
return false;
|
||||
}
|
||||
final map = Map<String, dynamic>.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);
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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<List<App>>, DataState<List<App>>>((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(
|
||||
|
||||
+10
-8
@@ -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,
|
||||
)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user