diff --git a/CHANGELOG.md b/CHANGELOG.md
index 18a83f755..88b0dc2bc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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
## [v1.7.1] - 2022-10-09
diff --git a/lib/model/covers.dart b/lib/model/covers.dart
index 5d4338a31..dfd07b8d3 100644
--- a/lib/model/covers.dart
+++ b/lib/model/covers.dart
@@ -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,
diff --git a/lib/model/db/db_metadata_sqflite.dart b/lib/model/db/db_metadata_sqflite.dart
index 3e12a018a..2bf986395 100644
--- a/lib/model/db/db_metadata_sqflite.dart
+++ b/lib/model/db/db_metadata_sqflite.dart
@@ -470,9 +470,23 @@ class SqfliteMetadataDb implements MetadataDb {
Future removeCovers(Set filters) async {
if (filters.isEmpty) return;
+ // for backward compatibility, remove stored JSON instead of removing de/reserialized filters
+ final obsoleteFilterJson = {};
+
+ 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);
}
diff --git a/lib/widgets/viewer/debug/debug_page.dart b/lib/widgets/viewer/debug/debug_page.dart
index 24d6c9d3f..cf89f3ed2 100644
--- a/lib/widgets/viewer/debug/debug_page.dart
+++ b/lib/widgets/viewer/debug/debug_page.dart
@@ -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, 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(
- 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(),
- );
- }
}