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/services/android_file_service.dart';
|
||||
import 'package:aves/utils/android_file_utils.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
|
||||
mixin PermissionAwareMixin {
|
||||
Future<bool> checkStoragePermission(BuildContext context, Iterable<ImageEntry> entries) async {
|
||||
final byVolume = groupBy(entries.where((e) => e.path != null), (e) => androidFileUtils.getStorageVolume(e.path));
|
||||
final removableVolumes = byVolume.keys.where((v) => v.isRemovable);
|
||||
Future<bool> checkStoragePermission(BuildContext context, Iterable<ImageEntry> entries) {
|
||||
return checkStoragePermissionForPaths(context, entries.where((e) => e.path != null).map((e) => e.path));
|
||||
}
|
||||
|
||||
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>>(
|
||||
removableVolumes.map(
|
||||
(volume) => AndroidFileService.hasGrantedPermissionToVolumeRoot(volume.path).then(
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:aves/model/source/collection_lens.dart';
|
||||
import 'package:aves/model/favourite_repo.dart';
|
||||
import 'package:aves/model/filters/album.dart';
|
||||
import 'package:aves/model/image_entry.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/image_file_service.dart';
|
||||
import 'package:aves/utils/durations.dart';
|
||||
|
@ -97,6 +97,7 @@ class SelectionActionDelegate with FeedbackMixin, PermissionAwareMixin {
|
|||
),
|
||||
);
|
||||
if (destinationAlbum == null || destinationAlbum.isEmpty) return;
|
||||
if (!await checkStoragePermissionForPaths(context, [destinationAlbum])) return;
|
||||
|
||||
final selection = collection.selection.toList();
|
||||
if (!await checkStoragePermission(context, selection)) return;
|
||||
|
|
Loading…
Reference in a new issue