show icon cache size

This commit is contained in:
Fabian Freund
2024-06-16 20:40:42 +02:00
parent 42a9db63f7
commit f50391d1da
6 changed files with 80 additions and 14 deletions
@@ -0,0 +1,11 @@
import 'package:drift/drift.dart';
extension TableSIze on DatabaseConnectionUser {
SingleSelectable<double> tableSize(TableInfo table) {
return customSelect(
'SELECT SUM(pgsize) /(1024.0 * 1024.0)AS pgsize_mb FROM dbstat WHERE name = ?1',
variables: [Variable<String>(table.actualTableName)],
readsFrom: {table},
).map((QueryRow row) => row.read<double>('pgsize_mb'));
}
}
@@ -75,3 +75,9 @@ Stream<int> bangCountOfGroup(
final repository = ref.watch(bangDataRepositoryProvider.notifier);
return repository.watchBangCount(group);
}
@Riverpod()
Stream<double> bangIconCacheSizeMegabytes(BangIconCacheSizeMegabytesRef ref) {
final repository = ref.watch(bangDataRepositoryProvider.notifier);
return repository.watchIconCacheSize();
}
@@ -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<double>.internal(
bangIconCacheSizeMegabytes,
name: r'bangIconCacheSizeMegabytesProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$bangIconCacheSizeMegabytesHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef BangIconCacheSizeMegabytesRef = AutoDisposeStreamProviderRef<double>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
@@ -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<double> watchIconCacheSize() {
return _db.tableSize(_db.bangIcon).watchSingle();
}
Future<int> clearIconData() {
return _db.bangIcon.deleteAll();
}
@@ -7,7 +7,7 @@ part of 'data.dart';
// **************************************************************************
String _$bangDataRepositoryHash() =>
r'a6e4017a54516571af553426b0e8e3597d19f779';
r'f23e81e45a69d5b5b9158b6601c3724d1b316715';
/// See also [BangDataRepository].
@ProviderFor(BangDataRepository)
@@ -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(