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] ## <a id="unreleased"></a>[Unreleased]
### Fixed
- case-insensitive access to restricted directories
## <a id="v1.11.15"></a>[v1.11.15] - 2024-10-09 ## <a id="v1.11.15"></a>[v1.11.15] - 2024-10-09
### Changed ### Changed

View file

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