MM-46252 : Gekidou - Settings - Fixes Advanced Settings (#6561)

* properly deletes data

* ts fix
This commit is contained in:
Avinash Lingaloo 2022-08-11 11:02:24 +04:00 committed by GitHub
parent c71b28a6a8
commit 5004baf9c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 32 deletions

View file

@ -5,6 +5,7 @@ import React, {useEffect, useState} from 'react';
import {useIntl} from 'react-intl';
import {TouchableOpacity} from 'react-native';
import {useServerUrl} from '@context/server';
import {useTheme} from '@context/theme';
import useAndroidHardwareBackHandler from '@hooks/android_back_handler';
import {popTopScreen} from '@screens/navigation';
@ -28,7 +29,6 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
});
const EMPTY_FILES: ReadDirItem[] = [];
const EMPTY_SERVERS: string[] = [];
type AdvancedSettingsProps = {
componentId: string;
@ -36,30 +36,25 @@ type AdvancedSettingsProps = {
const AdvancedSettings = ({componentId}: AdvancedSettingsProps) => {
const theme = useTheme();
const intl = useIntl();
const serverUrl = useServerUrl();
const [dataSize, setDataSize] = useState<number|undefined>(0);
const [files, setFiles] = useState<ReadDirItem[]>(EMPTY_FILES);
const [serverUrls, setServerUrls] = useState<string[]>(EMPTY_SERVERS);
const styles = getStyleSheet(theme);
const getAllCachedFiles = async () => {
const {totalSize, files: cachedFiles, serverUrls: allServerUrls} = await getAllFilesInCachesDirectory();
const {totalSize, files: cachedFiles} = await getAllFilesInCachesDirectory(serverUrl);
setDataSize(totalSize);
setFiles(cachedFiles || EMPTY_FILES);
setServerUrls(allServerUrls || EMPTY_SERVERS);
};
const onPressDeleteData = preventDoubleTap(async () => {
try {
if (files.length > 0) {
const deletePromises = [];
for (const server of serverUrls) {
deletePromises.push(deleteFileCache(server));
}
await Promise.all(deletePromises);
await deleteFileCache(serverUrl);
await getAllCachedFiles();
}
await getAllCachedFiles();
} catch (e) {
//todo: show toast if error https://mattermost.atlassian.net/browse/MM-44926
//do nothing
}
});
@ -70,14 +65,14 @@ const AdvancedSettings = ({componentId}: AdvancedSettingsProps) => {
const close = () => popTopScreen(componentId);
useAndroidHardwareBackHandler(componentId, close);
const disabled = Boolean(dataSize && (dataSize > 0));
const hasData = Boolean(dataSize && (dataSize > 0));
return (
<SettingContainer>
<TouchableOpacity
onPress={onPressDeleteData}
disabled={disabled}
activeOpacity={disabled ? 0 : 1}
disabled={!hasData}
activeOpacity={hasData ? 1 : 0}
>
<SettingOption
containerStyle={styles.itemStyle}

View file

@ -14,8 +14,6 @@ import {Asset} from 'react-native-image-picker';
import Permissions, {PERMISSIONS} from 'react-native-permissions';
import {Files} from '@constants';
import DatabaseManager from '@database/manager';
import {queryAllServers} from '@queries/app/servers';
import {generateId} from '@utils/general';
import keyMirror from '@utils/key_mirror';
import {logError} from '@utils/log';
@ -502,30 +500,17 @@ export const hasWriteStoragePermission = async (intl: IntlShape) => {
}
};
export const getAllFilesInCachesDirectory = async () => {
export const getAllFilesInCachesDirectory = async (serverUrl: string) => {
try {
const appDatabase = DatabaseManager.appDatabase;
const servers = await queryAllServers(appDatabase!.database);
if (!servers.length) {
return {error: 'No servers'};
}
const serverUrls = [];
const files: FileSystem.ReadDirItem[][] = [];
for await (const server of servers) {
const directoryFiles = await FileSystem.readDir(`${FileSystem.CachesDirectoryPath}/${hashCode(server.url)}`);
files.push(directoryFiles);
serverUrls.push(server.url);
}
const directoryFiles = await FileSystem.readDir(`${FileSystem.CachesDirectoryPath}/${hashCode(serverUrl)}`);
files.push(directoryFiles);
const flattenedFiles = files.flat();
const totalSize = flattenedFiles.reduce((acc, file) => acc + file.size, 0);
return {
files: flattenedFiles,
totalSize,
serverUrls,
};
} catch (error) {
logError('Failed getAllFilesInCachesDirectory', error);