Compare commits

..

2 commits

Author SHA1 Message Date
d3a8a401c4 abdicate object assigning responsibility
The ImagesService itself handles the conversion of Json to the object itself, instead of the ImagesApi
2022-12-24 00:40:40 +01:00
64ed6ae1ac live local search
todos
2022-12-24 00:40:39 +01:00
2 changed files with 9 additions and 5 deletions

View file

@ -68,16 +68,18 @@ class ImagesService {
/// There are lots of optimizations possible for new inputs, for example reducing search frontier
/// by using set-cover/subsetting optimizations on backspace, and so on, but again, not the point,
/// I think.
Future<List<ImageModel>> searchImages({
required SearchOption searchOption,
required String imageNamePart,
}) async {
Future<List<ImageModel>> searchImages(
{required SearchOption searchOption,
required String imageNamePart,
bool treatAsInSequence = false}) async {
return await _searchMutex.lockAndRun(run: (final unlock) async {
try {
switch (searchOption) {
case SearchOption.local:
final rankedKeys = _imageModels.keys
.where((final imageName) => imageName.contains(imageNamePart))
//todo(mehul): Implement atleast-matching-all-parts
.where(
(final imageName) => imageName.contains(treatAsInSequence ? imageNamePart : ''))
.toList(growable: false)
..sort((final a, final b) =>
ConstSorters.stringsSimilarityTarget(targetWord: imageNamePart, a, b));

View file

@ -64,6 +64,8 @@ class GalleryViewModel extends BaseViewModel {
.searchImages(
imageNamePart: searchTerm,
searchOption: searchOptionListenable.value,
// todo(mehul): When implemented, remove this
treatAsInSequence: true,
)
.then(
(final fetchedImageModels) => _imageSearchResultsNotifier.value = fetchedImageModels),