diff --git a/CHANGELOG.md b/CHANGELOG.md index ab9f589fa..a6302a4bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Fixed + +- case-insensitive access to restricted directories + ## [v1.11.15] - 2024-10-09 ### Changed diff --git a/lib/widgets/common/action_mixins/permission_aware.dart b/lib/widgets/common/action_mixins/permission_aware.dart index aea14b4a6..6aa7384b4 100644 --- a/lib/widgets/common/action_mixins/permission_aware.dart +++ b/lib/widgets/common/action_mixins/permission_aware.dart @@ -19,15 +19,15 @@ mixin PermissionAwareMixin { Future checkStoragePermissionForAlbums(BuildContext context, Set storageDirs, {Set? 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 = [], mimeTypes = []; @@ -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( context: context, builder: (context) {