#351 fixed unreplaceable covers set before v1.7.1

This commit is contained in:
Thibault Deckers 2022-11-04 19:34:32 +01:00
parent de7c8c47d0
commit c89f17fe8a
4 changed files with 19 additions and 37 deletions

View file

@ -19,6 +19,7 @@ All notable changes to this project will be documented in this file.
- rendering of panoramas with inconsistent metadata
- failing scan of items copied to SD card on older devices
- unreplaceable covers set before v1.7.1
## <a id="v1.7.1"></a>[v1.7.1] - 2022-10-09

View file

@ -55,14 +55,14 @@ class Covers {
final oldRows = _rows.where((row) => row.filter == filter).toSet();
_rows.removeAll(oldRows);
await metadataDb.removeCovers({filter});
final oldRow = oldRows.firstOrNull;
final oldEntry = oldRow?.entryId;
final oldPackage = oldRow?.packageName;
final oldColor = oldRow?.color;
if (entryId == null && packageName == null && color == null) {
await metadataDb.removeCovers({filter});
} else {
if (entryId != null || packageName != null || color != null) {
final row = CoverRow(
filter: filter,
entryId: entryId,

View file

@ -470,9 +470,23 @@ class SqfliteMetadataDb implements MetadataDb {
Future<void> removeCovers(Set<CollectionFilter> filters) async {
if (filters.isEmpty) return;
// for backward compatibility, remove stored JSON instead of removing de/reserialized filters
final obsoleteFilterJson = <String>{};
final rows = await _db.query(coverTable);
rows.forEach((row) {
final filterJson = row['filter'] as String?;
if (filterJson != null) {
final filter = CollectionFilter.fromJson(filterJson);
if (filters.any((v) => filter == v)) {
obsoleteFilterJson.add(filterJson);
}
}
});
// using array in `whereArgs` and using it with `where filter IN ?` is a pain, so we prefer `batch` instead
final batch = _db.batch();
filters.forEach((filter) => batch.delete(coverTable, where: 'filter = ?', whereArgs: [filter.toJson()]));
obsoleteFilterJson.forEach((filterJson) => batch.delete(coverTable, where: 'filter = ?', whereArgs: [filterJson]));
await batch.commit(noResult: true);
}

View file

@ -1,11 +1,7 @@
import 'dart:ui' as ui;
import 'package:aves/app_mode.dart';
import 'package:aves/model/entry.dart';
import 'package:aves/model/entry_images.dart';
import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/home_widget.dart';
import 'package:aves/widgets/viewer/debug/db.dart';
import 'package:aves/widgets/viewer/debug/metadata.dart';
import 'package:aves/widgets/viewer/info/common.dart';
@ -31,7 +27,6 @@ class ViewerDebugPage extends StatelessWidget {
if (context.select<ValueNotifier<AppMode>, bool>((vn) => vn.value != AppMode.view)) Tuple2(const Tab(text: 'DB'), DbTab(entry: entry)),
Tuple2(const Tab(icon: Icon(AIcons.android)), MetadataTab(entry: entry)),
Tuple2(const Tab(icon: Icon(AIcons.image)), _buildThumbnailsTabView()),
Tuple2(const Tab(icon: Icon(AIcons.addShortcut)), _buildWidgetTabView()),
];
return Directionality(
textDirection: TextDirection.ltr,
@ -186,32 +181,4 @@ class ViewerDebugPage extends StatelessWidget {
.toList(),
);
}
Widget _buildWidgetTabView() {
return ListView(
padding: const EdgeInsets.all(16),
children: [303, 636, 972, 1305]
.expand((heightPx) => [
Text('Widget heightPx: $heightPx'),
FutureBuilder<Uint8List>(
future: HomeWidgetPainter(
entry: entry,
devicePixelRatio: ui.window.devicePixelRatio,
).drawWidget(
widthPx: 978,
heightPx: heightPx,
outline: Colors.amber,
shape: WidgetShape.heart,
format: ui.ImageByteFormat.png,
),
builder: (context, snapshot) {
final bytes = snapshot.data;
if (bytes == null) return const SizedBox();
return Image.memory(bytes);
},
),
])
.toList(),
);
}
}