prep to delete multiple entries

This commit is contained in:
Thibault Deckers 2020-04-23 11:44:39 +09:00
parent 1175cff8fe
commit a69a7ea436
3 changed files with 37 additions and 22 deletions

View file

@ -7,6 +7,7 @@ import android.os.Looper;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.util.List;
import java.util.Map; import java.util.Map;
import deckers.thibault.aves.model.ImageEntry; 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) { private void delete(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
Map entryMap = call.argument("entry"); List<Map> entryMapList = call.argument("entries");
if (entryMap == null) { if (entryMapList == null) {
result.error("delete-args", "failed because of missing arguments", null); result.error("delete-args", "failed because of missing arguments", null);
return; return;
} }
Uri uri = Uri.parse((String) entryMap.get("uri"));
String path = (String) entryMap.get("path");
ImageProvider provider = ImageProviderFactory.getProvider(uri); if (entryMapList.size() == 0) {
if (provider == null) { result.success(0);
result.error("delete-provider", "failed to find provider for uri=" + uri, null);
return; return;
} }
provider.delete(activity, path, uri, new ImageProvider.ImageOpCallback() {
@Override
public void onSuccess(Map<String, Object> newFields) {
new Handler(Looper.getMainLooper()).post(() -> result.success(newFields));
}
@Override // assume same provider for all entries
public void onFailure() { Map firstEntry = entryMapList.get(0);
new Handler(Looper.getMainLooper()).post(() -> result.error("delete-failure", "failed to delete", null)); 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<String, Object> 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) { private void rename(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {

View file

@ -295,7 +295,7 @@ class ImageEntry {
return true; return true;
} }
Future<bool> delete() => ImageFileService.delete(this); Future<bool> delete() async => (await ImageFileService.delete([this])) == 1;
void toggleFavourite() { void toggleFavourite() {
if (isFavourite) { if (isFavourite) {

View file

@ -77,16 +77,16 @@ class ImageFileService {
); );
} }
static Future<bool> delete(ImageEntry entry) async { static Future<int> delete(List<ImageEntry> entries) async {
try { try {
await platform.invokeMethod('delete', <String, dynamic>{ await platform.invokeMethod('delete', <String, dynamic>{
'entry': entry.toMap(), 'entries': entries.map((e) => e.toMap()).toList(),
}); });
return true; return 1;
} on PlatformException catch (e) { } on PlatformException catch (e) {
debugPrint('delete failed with code=${e.code}, exception=${e.message}, details=${e.details}'); debugPrint('delete failed with code=${e.code}, exception=${e.message}, details=${e.details}');
} }
return false; return 0;
} }
static Future<Map> rename(ImageEntry entry, String newName) async { static Future<Map> rename(ImageEntry entry, String newName) async {