#100 revert package fetch in setup, use keys to refresh instead

This commit is contained in:
Thibault Deckers 2021-10-09 13:55:17 +09:00
parent 4e441e8491
commit 43635df075
7 changed files with 20 additions and 14 deletions

View file

@ -98,7 +98,6 @@ class SqfliteMetadataDb implements MetadataDb {
@override
Future<void> init() async {
debugPrint('$runtimeType init');
_database = openDatabase(
await path,
onCreate: (db, version) async {

View file

@ -70,9 +70,7 @@ abstract class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagM
late Map<int?, int?> _savedDates;
Future<void> loadDates() async {
final stopwatch = Stopwatch()..start();
_savedDates = Map.unmodifiable(await metadataDb.loadDates());
debugPrint('$runtimeType loadDates complete in ${stopwatch.elapsed.inMilliseconds}ms for ${_savedDates.length} entries');
}
Iterable<AvesEntry> _applyHiddenFilters(Iterable<AvesEntry> entries) {

View file

@ -38,7 +38,7 @@ class MediaStoreSource extends CollectionSource {
}
await loadDates();
_initialized = true;
debugPrint('$runtimeType init done, elapsed=${stopwatch.elapsed}');
debugPrint('$runtimeType init complete in ${stopwatch.elapsed.inMilliseconds}ms');
}
@override

View file

@ -1,5 +1,4 @@
import 'package:aves/services/common/services.dart';
import 'package:aves/utils/change_notifier.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:collection/collection.dart';
import 'package:equatable/equatable.dart';
@ -15,7 +14,7 @@ class AndroidFileUtils {
List<String> _potentialAppDirs = [];
bool _initialized = false;
AChangeNotifier appNameChangeNotifier = AChangeNotifier();
ValueNotifier<bool> areAppNamesReadyNotifier = ValueNotifier(false);
Iterable<Package> get _launcherPackages => _packages.where((package) => package.categoryLauncher);
@ -35,15 +34,15 @@ class AndroidFileUtils {
// from Aves
videoCapturesPath = pContext.join(dcimPath, 'Video Captures');
// include package fetching in initialization
// to avoid app album color flickering
_initialized = true;
}
Future<void> initAppNames() async {
if (_packages.isEmpty) {
_packages = await androidAppService.getPackages();
_potentialAppDirs = _launcherPackages.expand((package) => package.potentialDirs).toList();
appNameChangeNotifier.notifyListeners();
areAppNamesReadyNotifier.value = true;
}
_initialized = true;
}
bool isCameraPath(String path) => path.startsWith(dcimPath) && (path.endsWith('${separator}Camera') || path.endsWith('${separator}100ANDRO'));

View file

@ -32,9 +32,9 @@ class AlbumListPage extends StatelessWidget {
return !(eq.equals(t1.item1, t2.item1) && eq.equals(t1.item2, t2.item2) && eq.equals(t1.item3, t2.item3));
},
builder: (context, s, child) {
return AnimatedBuilder(
animation: androidFileUtils.appNameChangeNotifier,
builder: (context, child) => StreamBuilder(
return ValueListenableBuilder<bool>(
valueListenable: androidFileUtils.areAppNamesReadyNotifier,
builder: (context, areAppNamesReady, child) => StreamBuilder(
stream: source.eventBus.on<AlbumsChangedEvent>(),
builder: (context, snapshot) {
final gridItems = getAlbumGridItems(context, source);

View file

@ -96,7 +96,14 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
Widget _buildChip(BuildContext context, CollectionSource source) {
final entry = coverEntry ?? source.coverEntry(filter);
final titlePadding = min<double>(4.0, extent / 32);
Key? chipKey;
if (filter is AlbumFilter) {
// when we asynchronously fetch installed app names,
// album filters themselves do not change, but decoration derived from it does
chipKey = ValueKey(androidFileUtils.areAppNamesReadyNotifier.value);
}
return AvesFilterChip(
key: chipKey,
filter: filter,
showGenericIcon: false,
decoration: AvesFilterDecoration(

View file

@ -55,6 +55,7 @@ class _HomePageState extends State<HomePage> {
Widget build(BuildContext context) => const Scaffold();
Future<void> _setup() async {
final stopwatch = Stopwatch()..start();
final permissions = await [
Permission.storage,
// to access media with unredacted metadata with scoped storage (Android 10+)
@ -66,6 +67,7 @@ class _HomePageState extends State<HomePage> {
}
await androidFileUtils.init();
unawaited(androidFileUtils.initAppNames());
var appMode = AppMode.main;
final intentData = widget.intentData ?? await ViewerService.getIntentData();
@ -107,6 +109,7 @@ class _HomePageState extends State<HomePage> {
unawaited(reportService.setCustomKey('app_mode', appMode.toString()));
if (appMode != AppMode.view) {
debugPrint('Storage check complete in ${stopwatch.elapsed.inMilliseconds}ms');
final source = context.read<CollectionSource>();
await source.init();
unawaited(source.refresh());