fixed case-insensitive access to restricted directories
This commit is contained in:
parent
dde21abbac
commit
9067d75959
2 changed files with 13 additions and 9 deletions
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue