move/copy: fixed storage permission check for destination folder
This commit is contained in:
parent
ce69587d2c
commit
7db80f93be
2 changed files with 9 additions and 5 deletions
|
@ -1,14 +1,17 @@
|
||||||
import 'package:aves/model/image_entry.dart';
|
import 'package:aves/model/image_entry.dart';
|
||||||
import 'package:aves/services/android_file_service.dart';
|
import 'package:aves/services/android_file_service.dart';
|
||||||
import 'package:aves/utils/android_file_utils.dart';
|
import 'package:aves/utils/android_file_utils.dart';
|
||||||
import 'package:collection/collection.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:tuple/tuple.dart';
|
import 'package:tuple/tuple.dart';
|
||||||
|
|
||||||
mixin PermissionAwareMixin {
|
mixin PermissionAwareMixin {
|
||||||
Future<bool> checkStoragePermission(BuildContext context, Iterable<ImageEntry> entries) async {
|
Future<bool> checkStoragePermission(BuildContext context, Iterable<ImageEntry> entries) {
|
||||||
final byVolume = groupBy(entries.where((e) => e.path != null), (e) => androidFileUtils.getStorageVolume(e.path));
|
return checkStoragePermissionForPaths(context, entries.where((e) => e.path != null).map((e) => e.path));
|
||||||
final removableVolumes = byVolume.keys.where((v) => v.isRemovable);
|
}
|
||||||
|
|
||||||
|
Future<bool> checkStoragePermissionForPaths(BuildContext context, Iterable<String> paths) async {
|
||||||
|
final volumes = paths.map((path) => androidFileUtils.getStorageVolume(path)).toSet();
|
||||||
|
final removableVolumes = volumes.where((v) => v.isRemovable);
|
||||||
final volumePermissions = await Future.wait<Tuple2<StorageVolume, bool>>(
|
final volumePermissions = await Future.wait<Tuple2<StorageVolume, bool>>(
|
||||||
removableVolumes.map(
|
removableVolumes.map(
|
||||||
(volume) => AndroidFileService.hasGrantedPermissionToVolumeRoot(volume.path).then(
|
(volume) => AndroidFileService.hasGrantedPermissionToVolumeRoot(volume.path).then(
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:aves/model/source/collection_lens.dart';
|
|
||||||
import 'package:aves/model/favourite_repo.dart';
|
import 'package:aves/model/favourite_repo.dart';
|
||||||
import 'package:aves/model/filters/album.dart';
|
import 'package:aves/model/filters/album.dart';
|
||||||
import 'package:aves/model/image_entry.dart';
|
import 'package:aves/model/image_entry.dart';
|
||||||
import 'package:aves/model/metadata_db.dart';
|
import 'package:aves/model/metadata_db.dart';
|
||||||
|
import 'package:aves/model/source/collection_lens.dart';
|
||||||
import 'package:aves/services/android_app_service.dart';
|
import 'package:aves/services/android_app_service.dart';
|
||||||
import 'package:aves/services/image_file_service.dart';
|
import 'package:aves/services/image_file_service.dart';
|
||||||
import 'package:aves/utils/durations.dart';
|
import 'package:aves/utils/durations.dart';
|
||||||
|
@ -97,6 +97,7 @@ class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
if (destinationAlbum == null || destinationAlbum.isEmpty) return;
|
if (destinationAlbum == null || destinationAlbum.isEmpty) return;
|
||||||
|
if (!await checkStoragePermissionForPaths(context, [destinationAlbum])) return;
|
||||||
|
|
||||||
final selection = collection.selection.toList();
|
final selection = collection.selection.toList();
|
||||||
if (!await checkStoragePermission(context, selection)) return;
|
if (!await checkStoragePermission(context, selection)) return;
|
||||||
|
|
Loading…
Reference in a new issue