#100 revert package fetch in setup, use keys to refresh instead
This commit is contained in:
parent
4e441e8491
commit
43635df075
7 changed files with 20 additions and 14 deletions
|
@ -98,7 +98,6 @@ class SqfliteMetadataDb implements MetadataDb {
|
|||
|
||||
@override
|
||||
Future<void> init() async {
|
||||
debugPrint('$runtimeType init');
|
||||
_database = openDatabase(
|
||||
await path,
|
||||
onCreate: (db, version) async {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in a new issue