From f50391d1da7b710704c50545ac500d5346abcc74 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Sun, 16 Jun 2024 20:40:42 +0200 Subject: [PATCH] show icon cache size --- app/lib/extensions/database_table_size.dart | 11 ++++ app/lib/features/bangs/domain/providers.dart | 6 +++ .../features/bangs/domain/providers.g.dart | 18 +++++++ .../bangs/domain/repositories/data.dart | 5 ++ .../bangs/domain/repositories/data.g.dart | 2 +- .../presentation/screens/settings.dart | 52 ++++++++++++++----- 6 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 app/lib/extensions/database_table_size.dart diff --git a/app/lib/extensions/database_table_size.dart b/app/lib/extensions/database_table_size.dart new file mode 100644 index 00000000..f9efb902 --- /dev/null +++ b/app/lib/extensions/database_table_size.dart @@ -0,0 +1,11 @@ +import 'package:drift/drift.dart'; + +extension TableSIze on DatabaseConnectionUser { + SingleSelectable tableSize(TableInfo table) { + return customSelect( + 'SELECT SUM(pgsize) /(1024.0 * 1024.0)AS pgsize_mb FROM dbstat WHERE name = ?1', + variables: [Variable(table.actualTableName)], + readsFrom: {table}, + ).map((QueryRow row) => row.read('pgsize_mb')); + } +} diff --git a/app/lib/features/bangs/domain/providers.dart b/app/lib/features/bangs/domain/providers.dart index 9e78f807..1f52be86 100644 --- a/app/lib/features/bangs/domain/providers.dart +++ b/app/lib/features/bangs/domain/providers.dart @@ -75,3 +75,9 @@ Stream bangCountOfGroup( final repository = ref.watch(bangDataRepositoryProvider.notifier); return repository.watchBangCount(group); } + +@Riverpod() +Stream bangIconCacheSizeMegabytes(BangIconCacheSizeMegabytesRef ref) { + final repository = ref.watch(bangDataRepositoryProvider.notifier); + return repository.watchIconCacheSize(); +} diff --git a/app/lib/features/bangs/domain/providers.g.dart b/app/lib/features/bangs/domain/providers.g.dart index 7367ea85..0c15510f 100644 --- a/app/lib/features/bangs/domain/providers.g.dart +++ b/app/lib/features/bangs/domain/providers.g.dart @@ -739,5 +739,23 @@ class _BangCountOfGroupProviderElement @override BangGroup get group => (origin as BangCountOfGroupProvider).group; } + +String _$bangIconCacheSizeMegabytesHash() => + r'2199439f1b8a2692607231836769a10a24405181'; + +/// See also [bangIconCacheSizeMegabytes]. +@ProviderFor(bangIconCacheSizeMegabytes) +final bangIconCacheSizeMegabytesProvider = + AutoDisposeStreamProvider.internal( + bangIconCacheSizeMegabytes, + name: r'bangIconCacheSizeMegabytesProvider', + debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') + ? null + : _$bangIconCacheSizeMegabytesHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef BangIconCacheSizeMegabytesRef = AutoDisposeStreamProviderRef; // ignore_for_file: type=lint // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/app/lib/features/bangs/domain/repositories/data.dart b/app/lib/features/bangs/domain/repositories/data.dart index 04708834..658d1b1e 100644 --- a/app/lib/features/bangs/domain/repositories/data.dart +++ b/app/lib/features/bangs/domain/repositories/data.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:bang_navigator/domain/services/generic_website.dart'; +import 'package:bang_navigator/extensions/database_table_size.dart'; import 'package:bang_navigator/features/bangs/data/database/database.dart'; import 'package:bang_navigator/features/bangs/data/models/bang.dart'; import 'package:bang_navigator/features/bangs/data/models/bang_data.dart'; @@ -86,6 +87,10 @@ class BangDataRepository extends _$BangDataRepository { ); } + Stream watchIconCacheSize() { + return _db.tableSize(_db.bangIcon).watchSingle(); + } + Future clearIconData() { return _db.bangIcon.deleteAll(); } diff --git a/app/lib/features/bangs/domain/repositories/data.g.dart b/app/lib/features/bangs/domain/repositories/data.g.dart index 7b471732..2071f1ab 100644 --- a/app/lib/features/bangs/domain/repositories/data.g.dart +++ b/app/lib/features/bangs/domain/repositories/data.g.dart @@ -7,7 +7,7 @@ part of 'data.dart'; // ************************************************************************** String _$bangDataRepositoryHash() => - r'a6e4017a54516571af553426b0e8e3597d19f779'; + r'f23e81e45a69d5b5b9158b6601c3724d1b316715'; /// See also [BangDataRepository]. @ProviderFor(BangDataRepository) diff --git a/app/lib/features/settings/presentation/screens/settings.dart b/app/lib/features/settings/presentation/screens/settings.dart index 693b1aa4..1f79e334 100644 --- a/app/lib/features/settings/presentation/screens/settings.dart +++ b/app/lib/features/settings/presentation/screens/settings.dart @@ -200,19 +200,6 @@ class SettingsScreen extends HookConsumerWidget { height: 16, ), _buildSection(theme, 'Bangs'), - ButtonListTile( - title: 'Icon Cache', - subtitle: 'Stored favicons for Bangs', - button: FilledButton.icon( - onPressed: () async { - await ref - .read(bangDataRepositoryProvider.notifier) - .clearIconData(); - }, - icon: const Icon(Icons.delete), - label: const Text('Clear'), - ), - ), ButtonListTile( title: 'Bang Frequencies', subtitle: 'Tracked usage for Bang recommendations', @@ -226,6 +213,45 @@ class SettingsScreen extends HookConsumerWidget { label: const Text('Clear'), ), ), + Consumer( + builder: (context, ref, child) { + final size = ref.watch( + bangIconCacheSizeMegabytesProvider.select( + (value) => value.valueOrNull, + ), + ); + + return ButtonListTile( + title: 'Icon Cache', + subtitle: 'Stored favicons for Bangs', + content: Padding( + padding: const EdgeInsets.only(top: 8.0), + child: DefaultTextStyle( + style: GoogleFonts.robotoMono(), + child: Table( + children: [ + TableRow( + children: [ + const Text('Size'), + Text('${size?.toStringAsFixed(2) ?? 0} MB'), + ], + ), + ], + ), + ), + ), + button: FilledButton.icon( + onPressed: () async { + await ref + .read(bangDataRepositoryProvider.notifier) + .clearIconData(); + }, + icon: const Icon(Icons.delete), + label: const Text('Clear'), + ), + ); + }, + ), Consumer( builder: (context, ref, child) { final lastSync = ref.watch(