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) {