#351 fixed unreplaceable covers set before v1.7.1
This commit is contained in:
parent
de7c8c47d0
commit
c89f17fe8a
4 changed files with 19 additions and 37 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue