diff --git a/android/app/src/main/java/deckers/thibault/aves/channelhandlers/ImageFileHandler.java b/android/app/src/main/java/deckers/thibault/aves/channelhandlers/ImageFileHandler.java index e8d0c74eb..5e44b1495 100644 --- a/android/app/src/main/java/deckers/thibault/aves/channelhandlers/ImageFileHandler.java +++ b/android/app/src/main/java/deckers/thibault/aves/channelhandlers/ImageFileHandler.java @@ -7,6 +7,7 @@ import android.os.Looper; import androidx.annotation.NonNull; +import java.util.List; import java.util.Map; import deckers.thibault.aves.model.ImageEntry; @@ -95,30 +96,44 @@ public class ImageFileHandler implements MethodChannel.MethodCallHandler { } private void delete(@NonNull MethodCall call, @NonNull MethodChannel.Result result) { - Map entryMap = call.argument("entry"); - if (entryMap == null) { + List entryMapList = call.argument("entries"); + if (entryMapList == null) { result.error("delete-args", "failed because of missing arguments", null); return; } - Uri uri = Uri.parse((String) entryMap.get("uri")); - String path = (String) entryMap.get("path"); - ImageProvider provider = ImageProviderFactory.getProvider(uri); - if (provider == null) { - result.error("delete-provider", "failed to find provider for uri=" + uri, null); + if (entryMapList.size() == 0) { + result.success(0); return; } - provider.delete(activity, path, uri, new ImageProvider.ImageOpCallback() { - @Override - public void onSuccess(Map newFields) { - new Handler(Looper.getMainLooper()).post(() -> result.success(newFields)); - } - @Override - public void onFailure() { - new Handler(Looper.getMainLooper()).post(() -> result.error("delete-failure", "failed to delete", null)); - } - }); + // assume same provider for all entries + Map firstEntry = entryMapList.get(0); + Uri firstUri = Uri.parse((String) firstEntry.get("uri")); + ImageProvider provider = ImageProviderFactory.getProvider(firstUri); + if (provider == null) { + result.error("delete-provider", "failed to find provider for uri=" + firstUri, null); + return; + } + + for (Map entryMap : entryMapList) { + Uri uri = Uri.parse((String) entryMap.get("uri")); + String path = (String) entryMap.get("path"); + provider.delete(activity, path, uri, new ImageProvider.ImageOpCallback() { + + // TODO TLAD this will fail for more than 1 entry. stream results back instead + + @Override + public void onSuccess(Map newFields) { + new Handler(Looper.getMainLooper()).post(() -> result.success(1)); + } + + @Override + public void onFailure() { + new Handler(Looper.getMainLooper()).post(() -> result.error("delete-failure", "failed to delete", null)); + } + }); + } } private void rename(@NonNull MethodCall call, @NonNull MethodChannel.Result result) { diff --git a/lib/model/image_entry.dart b/lib/model/image_entry.dart index e987b1e40..61ac31ab0 100644 --- a/lib/model/image_entry.dart +++ b/lib/model/image_entry.dart @@ -295,7 +295,7 @@ class ImageEntry { return true; } - Future delete() => ImageFileService.delete(this); + Future delete() async => (await ImageFileService.delete([this])) == 1; void toggleFavourite() { if (isFavourite) { diff --git a/lib/services/image_file_service.dart b/lib/services/image_file_service.dart index 39184536b..87017b61e 100644 --- a/lib/services/image_file_service.dart +++ b/lib/services/image_file_service.dart @@ -77,16 +77,16 @@ class ImageFileService { ); } - static Future delete(ImageEntry entry) async { + static Future delete(List entries) async { try { await platform.invokeMethod('delete', { - 'entry': entry.toMap(), + 'entries': entries.map((e) => e.toMap()).toList(), }); - return true; + return 1; } on PlatformException catch (e) { debugPrint('delete failed with code=${e.code}, exception=${e.message}, details=${e.details}'); } - return false; + return 0; } static Future rename(ImageEntry entry, String newName) async {