Add permission handling
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -30,14 +30,15 @@ const SettingsProvider: React.FC<{ children: React.ReactNode }> = ({
|
||||
const updateSettings = (newSettings: Partial<Settings>) => {
|
||||
const updatedSettings = { ...settings, ...newSettings };
|
||||
|
||||
if (settings.storageUri !== updatedSettings.storageUri) {
|
||||
void getPersistedUriPermissions().then(permissions => {
|
||||
if (permissions.includes(settings.storageUri)) {
|
||||
void releasePersistableUriPermission(settings.storageUri);
|
||||
void getPersistedUriPermissions().then(permissions => {
|
||||
permissions.forEach(permission => {
|
||||
if (!updatedSettings.storageUri.startsWith(permission + '/')) {
|
||||
void releasePersistableUriPermission(permission);
|
||||
}
|
||||
});
|
||||
void AsyncStorage.setItem('storageUri', updatedSettings.storageUri);
|
||||
}
|
||||
});
|
||||
|
||||
void AsyncStorage.setItem('storageUri', updatedSettings.storageUri);
|
||||
|
||||
setSettings(updatedSettings);
|
||||
};
|
||||
@@ -49,12 +50,23 @@ const SettingsProvider: React.FC<{ children: React.ReactNode }> = ({
|
||||
|
||||
if (storageUri !== '') {
|
||||
const permissions = await getPersistedUriPermissions();
|
||||
if (!permissions.includes(storageUri)) {
|
||||
if (
|
||||
!permissions.some(permission => storageUri.startsWith(permission + '/'))
|
||||
) {
|
||||
storageUri = '';
|
||||
}
|
||||
|
||||
const exists = await FileSystem.exists(storageUri);
|
||||
if (!exists) {
|
||||
try {
|
||||
const exists = await FileSystem.exists(storageUri);
|
||||
if (!exists) {
|
||||
throw new Error('Storage URI does not exist');
|
||||
}
|
||||
|
||||
const isDirectory = await FileSystem.isDir(storageUri);
|
||||
if (!isDirectory) {
|
||||
throw new Error('Storage URI is not a directory');
|
||||
}
|
||||
} catch {
|
||||
storageUri = '';
|
||||
}
|
||||
}
|
||||
@@ -75,7 +87,7 @@ const SettingsProvider: React.FC<{ children: React.ReactNode }> = ({
|
||||
settings.storageUri === '' ? (
|
||||
<WelcomeScreen
|
||||
selectStorageLocation={() => {
|
||||
void openDocumentTree().then(uri => {
|
||||
void openDocumentTree(true).then(uri => {
|
||||
updateSettings({ storageUri: uri.uri });
|
||||
});
|
||||
}}
|
||||
|
@@ -60,7 +60,7 @@ const SettingsScreen = () => {
|
||||
mode="elevated"
|
||||
style={styles.marginBottom}
|
||||
onPress={() => {
|
||||
void openDocumentTree().then(uri => {
|
||||
void openDocumentTree(true).then(uri => {
|
||||
setSettings({ storageUri: uri.uri });
|
||||
});
|
||||
}}>
|
||||
|
Reference in New Issue
Block a user