search: update available filter on source change
This commit is contained in:
parent
0ab594f6ab
commit
445938435c
2 changed files with 46 additions and 20 deletions
|
@ -114,11 +114,13 @@ class CollectionSource {
|
||||||
return compareAsciiUpperCase(ua, ub);
|
return compareAsciiUpperCase(ua, ub);
|
||||||
});
|
});
|
||||||
sortedAlbums = List.unmodifiable(sorted);
|
sortedAlbums = List.unmodifiable(sorted);
|
||||||
|
eventBus.fire(AlbumsChangedEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateTags() {
|
void updateTags() {
|
||||||
final tags = _rawEntries.expand((entry) => entry.xmpSubjects).toSet().toList()..sort(compareAsciiUpperCase);
|
final tags = _rawEntries.expand((entry) => entry.xmpSubjects).toSet().toList()..sort(compareAsciiUpperCase);
|
||||||
sortedTags = List.unmodifiable(tags);
|
sortedTags = List.unmodifiable(tags);
|
||||||
|
eventBus.fire(TagsChangedEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateLocations() {
|
void updateLocations() {
|
||||||
|
@ -126,6 +128,7 @@ class CollectionSource {
|
||||||
final lister = (String Function(AddressDetails a) f) => List<String>.unmodifiable(locations.map(f).where((s) => s != null && s.isNotEmpty).toSet().toList()..sort(compareAsciiUpperCase));
|
final lister = (String Function(AddressDetails a) f) => List<String>.unmodifiable(locations.map(f).where((s) => s != null && s.isNotEmpty).toSet().toList()..sort(compareAsciiUpperCase));
|
||||||
sortedCountries = lister((address) => '${address.countryName};${address.countryCode}');
|
sortedCountries = lister((address) => '${address.countryName};${address.countryCode}');
|
||||||
sortedPlaces = lister((address) => address.place);
|
sortedPlaces = lister((address) => address.place);
|
||||||
|
eventBus.fire(LocationsChangedEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
void addAll(Iterable<ImageEntry> entries) {
|
void addAll(Iterable<ImageEntry> entries) {
|
||||||
|
@ -159,6 +162,12 @@ class AddressMetadataChangedEvent {}
|
||||||
|
|
||||||
class CatalogMetadataChangedEvent {}
|
class CatalogMetadataChangedEvent {}
|
||||||
|
|
||||||
|
class AlbumsChangedEvent {}
|
||||||
|
|
||||||
|
class LocationsChangedEvent {}
|
||||||
|
|
||||||
|
class TagsChangedEvent {}
|
||||||
|
|
||||||
class EntryAddedEvent {
|
class EntryAddedEvent {
|
||||||
final ImageEntry entry;
|
final ImageEntry entry;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:aves/model/collection_lens.dart';
|
import 'package:aves/model/collection_lens.dart';
|
||||||
|
import 'package:aves/model/collection_source.dart';
|
||||||
import 'package:aves/model/filters/album.dart';
|
import 'package:aves/model/filters/album.dart';
|
||||||
import 'package:aves/model/filters/favourite.dart';
|
import 'package:aves/model/filters/favourite.dart';
|
||||||
import 'package:aves/model/filters/filters.dart';
|
import 'package:aves/model/filters/filters.dart';
|
||||||
|
@ -70,26 +71,42 @@ class ImageSearchDelegate extends SearchDelegate<CollectionFilter> {
|
||||||
MimeFilter(MimeTypes.SVG),
|
MimeFilter(MimeTypes.SVG),
|
||||||
].where((f) => containQuery(f.label)),
|
].where((f) => containQuery(f.label)),
|
||||||
),
|
),
|
||||||
_buildFilterRow(
|
StreamBuilder(
|
||||||
context: context,
|
stream: source.eventBus.on<AlbumsChangedEvent>(),
|
||||||
title: 'Albums',
|
builder: (context, snapshot) {
|
||||||
filters: source.sortedAlbums.where(containQuery).map((s) => AlbumFilter(s, source.getUniqueAlbumName(s))).where((f) => containQuery(f.uniqueName)),
|
return _buildFilterRow(
|
||||||
),
|
context: context,
|
||||||
_buildFilterRow(
|
title: 'Albums',
|
||||||
context: context,
|
filters: source.sortedAlbums.where(containQuery).map((s) => AlbumFilter(s, source.getUniqueAlbumName(s))).where((f) => containQuery(f.uniqueName)),
|
||||||
title: 'Countries',
|
);
|
||||||
filters: source.sortedCountries.where(containQuery).map((s) => LocationFilter(LocationLevel.country, s)),
|
}),
|
||||||
),
|
StreamBuilder(
|
||||||
_buildFilterRow(
|
stream: source.eventBus.on<LocationsChangedEvent>(),
|
||||||
context: context,
|
builder: (context, snapshot) {
|
||||||
title: 'Places',
|
return _buildFilterRow(
|
||||||
filters: source.sortedPlaces.where(containQuery).map((s) => LocationFilter(LocationLevel.place, s)),
|
context: context,
|
||||||
),
|
title: 'Countries',
|
||||||
_buildFilterRow(
|
filters: source.sortedCountries.where(containQuery).map((s) => LocationFilter(LocationLevel.country, s)),
|
||||||
context: context,
|
);
|
||||||
title: 'Tags',
|
}),
|
||||||
filters: source.sortedTags.where(containQuery).map((s) => TagFilter(s)),
|
StreamBuilder(
|
||||||
),
|
stream: source.eventBus.on<LocationsChangedEvent>(),
|
||||||
|
builder: (context, snapshot) {
|
||||||
|
return _buildFilterRow(
|
||||||
|
context: context,
|
||||||
|
title: 'Places',
|
||||||
|
filters: source.sortedPlaces.where(containQuery).map((s) => LocationFilter(LocationLevel.place, s)),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
StreamBuilder(
|
||||||
|
stream: source.eventBus.on<TagsChangedEvent>(),
|
||||||
|
builder: (context, snapshot) {
|
||||||
|
return _buildFilterRow(
|
||||||
|
context: context,
|
||||||
|
title: 'Tags',
|
||||||
|
filters: source.sortedTags.where(containQuery).map((s) => TagFilter(s)),
|
||||||
|
);
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
|
|
Loading…
Reference in a new issue