fixed case-insensitive access to restricted directories

This commit is contained in:
Thibault Deckers 2024-10-10 18:14:26 +02:00
parent dde21abbac
commit 9067d75959
2 changed files with 13 additions and 9 deletions

View file

@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
## <a id="unreleased"></a>[Unreleased]
### Fixed
- case-insensitive access to restricted directories
## <a id="v1.11.15"></a>[v1.11.15] - 2024-10-09
### Changed

View file

@ -19,15 +19,15 @@ mixin PermissionAwareMixin {
Future<bool> checkStoragePermissionForAlbums(BuildContext context, Set<String> storageDirs, {Set<AvesEntry>? entries}) async {
final restrictedDirsLowerCase = await storageService.getRestrictedDirectoriesLowerCase();
while (true) {
final dirs = await storageService.getInaccessibleDirectories(storageDirs);
final inaccessibleDirs = await storageService.getInaccessibleDirectories(storageDirs);
final restrictedInaccessibleDirs = dirs
final restrictedInaccessibleDirsLowerCase = inaccessibleDirs
.map((dir) => dir.copyWith(
relativeDir: dir.relativeDir.toLowerCase(),
))
.where(restrictedDirsLowerCase.contains)
.toSet();
if (restrictedInaccessibleDirs.isNotEmpty) {
if (restrictedInaccessibleDirsLowerCase.isNotEmpty) {
if (entries != null && await storageService.canRequestMediaFileBulkAccess()) {
// request media file access for items in restricted directories
final uris = <String>[], mimeTypes = <String>[];
@ -35,27 +35,27 @@ mixin PermissionAwareMixin {
final dirPath = entry.directory;
if (dirPath == null) return false;
final dir = androidFileUtils.relativeDirectoryFromPath(dirPath);
return restrictedInaccessibleDirs.contains(dir?.copyWith(relativeDir: dir.relativeDir.toLowerCase()));
return restrictedInaccessibleDirsLowerCase.contains(dir?.copyWith(relativeDir: dir.relativeDir.toLowerCase()));
}).forEach((entry) {
uris.add(entry.uri);
mimeTypes.add(entry.mimeType);
});
final granted = await storageService.requestMediaFileAccess(uris, mimeTypes);
if (!granted) return false;
} else if (entries == null && await storageService.canInsertMedia(restrictedInaccessibleDirs)) {
} else if (entries == null && await storageService.canInsertMedia(restrictedInaccessibleDirsLowerCase)) {
// insertion in restricted directories
} else {
// cannot proceed further
await showRestrictedDirectoryDialog(context, restrictedInaccessibleDirs.first);
await showRestrictedDirectoryDialog(context, restrictedInaccessibleDirsLowerCase.first);
return false;
}
// clear restricted directories
dirs.removeAll(restrictedInaccessibleDirs);
inaccessibleDirs.removeWhere((dir) => restrictedInaccessibleDirsLowerCase.contains(dir.copyWith(relativeDir: dir.relativeDir.toLowerCase())));
}
if (dirs.isEmpty) return true;
if (inaccessibleDirs.isEmpty) return true;
final dir = dirs.first;
final dir = inaccessibleDirs.first;
final confirmed = await showDialog<bool>(
context: context,
builder: (context) {