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(), - ); - } }