1df226684Sopenharmony_ci/* 2df226684Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3df226684Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4df226684Sopenharmony_ci * you may not use this file except in compliance with the License. 5df226684Sopenharmony_ci * You may obtain a copy of the License at 6df226684Sopenharmony_ci * 7df226684Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8df226684Sopenharmony_ci * 9df226684Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10df226684Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11df226684Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12df226684Sopenharmony_ci * See the License for the specific language governing permissions and 13df226684Sopenharmony_ci * limitations under the License. 14df226684Sopenharmony_ci */ 15df226684Sopenharmony_ci 16df226684Sopenharmony_ciimport dlpPermission from '@ohos.dlpPermission'; 17df226684Sopenharmony_ciimport fileio from '@ohos.fileio'; 18df226684Sopenharmony_ciimport GlobalContext from './GlobalContext'; 19df226684Sopenharmony_ciimport { HiLog } from '../common/HiLog'; 20df226684Sopenharmony_ci 21df226684Sopenharmony_ciconst TAG = 'DataUtils'; 22df226684Sopenharmony_ciconst INDEX_TWO = 2; 23df226684Sopenharmony_ciconst INDEX_ONE = 1; 24df226684Sopenharmony_ciconst INDEX_ZERO = 0; 25df226684Sopenharmony_ciconst INDEX_THREE = 3; 26df226684Sopenharmony_ciconst INDEX_FOUR = 4; 27df226684Sopenharmony_ciconst INDEX_FIVE = 5; 28df226684Sopenharmony_ci 29df226684Sopenharmony_ciinterface DlpFileInfo { 30df226684Sopenharmony_ci dlpFile: dlpPermission.DLPFile; 31df226684Sopenharmony_ci tokenId: number; 32df226684Sopenharmony_ci} 33df226684Sopenharmony_ci 34df226684Sopenharmony_ciasync function deleteLinkFile(fileArray: (number | string | dlpPermission.DLPFile)[][]): Promise<void> { 35df226684Sopenharmony_ci HiLog.info(TAG, `deleteLinkFile enter`); 36df226684Sopenharmony_ci return new Promise(async (resolve, reject) => { 37df226684Sopenharmony_ci for (let linkFile of fileArray) { 38df226684Sopenharmony_ci if (linkFile.length <= INDEX_TWO) { 39df226684Sopenharmony_ci HiLog.error(TAG, `linkFile size:${linkFile.length} error`); 40df226684Sopenharmony_ci reject(); 41df226684Sopenharmony_ci return; 42df226684Sopenharmony_ci } 43df226684Sopenharmony_ci let dlpFile: dlpPermission.DLPFile = linkFile[INDEX_ZERO] as dlpPermission.DLPFile; 44df226684Sopenharmony_ci try { 45df226684Sopenharmony_ci await dlpFile.deleteDLPLinkFile(linkFile[INDEX_ONE] as string); 46df226684Sopenharmony_ci } catch (err) { 47df226684Sopenharmony_ci HiLog.error(TAG, `deleteDLPLinkFile failed: ${JSON.stringify(err)}`); 48df226684Sopenharmony_ci } 49df226684Sopenharmony_ci try { 50df226684Sopenharmony_ci await dlpFile.closeDLPFile(); 51df226684Sopenharmony_ci } catch (err) { 52df226684Sopenharmony_ci HiLog.error(TAG, `closeDLPFile failed: ${JSON.stringify(err)}`); 53df226684Sopenharmony_ci } 54df226684Sopenharmony_ci try { 55df226684Sopenharmony_ci fileio.closeSync(linkFile[INDEX_TWO] as number); 56df226684Sopenharmony_ci } catch (err) { 57df226684Sopenharmony_ci HiLog.error(TAG, `closeSync failed: ${JSON.stringify(err)}`); 58df226684Sopenharmony_ci } 59df226684Sopenharmony_ci } 60df226684Sopenharmony_ci resolve(); 61df226684Sopenharmony_ci }); 62df226684Sopenharmony_ci} 63df226684Sopenharmony_ci 64df226684Sopenharmony_ciasync function deleteSandbox2linkFileData(sandboxId: string, isNeedDeleteLink: boolean) : Promise<void> { 65df226684Sopenharmony_ci HiLog.info(TAG, `deleteSandbox2linkFileData enter`); 66df226684Sopenharmony_ci return new Promise(async (resolve, reject) => { 67df226684Sopenharmony_ci let sandbox2linkFile: Map<string, (number | string | dlpPermission.DLPFile)[][]> = 68df226684Sopenharmony_ci GlobalContext.load('sandbox2linkFile') as Map<string, (number | string | dlpPermission.DLPFile)[][]>; 69df226684Sopenharmony_ci if (!sandbox2linkFile.has(sandboxId)) { 70df226684Sopenharmony_ci HiLog.info(TAG, `deleteSandbox2linkFileData not found ${sandboxId}`); 71df226684Sopenharmony_ci resolve(); 72df226684Sopenharmony_ci return; 73df226684Sopenharmony_ci } 74df226684Sopenharmony_ci try { 75df226684Sopenharmony_ci if (isNeedDeleteLink) { 76df226684Sopenharmony_ci await deleteLinkFile(sandbox2linkFile.get(sandboxId) as (number | string | dlpPermission.DLPFile)[][]); 77df226684Sopenharmony_ci } 78df226684Sopenharmony_ci sandbox2linkFile.delete(sandboxId); 79df226684Sopenharmony_ci resolve(); 80df226684Sopenharmony_ci } catch (err) { 81df226684Sopenharmony_ci HiLog.error(TAG, `getHistoryDlpFile failed`); 82df226684Sopenharmony_ci reject(); 83df226684Sopenharmony_ci } 84df226684Sopenharmony_ci }); 85df226684Sopenharmony_ci} 86df226684Sopenharmony_ci 87df226684Sopenharmony_ciasync function deleteFileOpenHistoryData(dlpFileUri: string) : Promise<void> { 88df226684Sopenharmony_ci HiLog.info(TAG, `deleteFileOpenHistoryData enter`); 89df226684Sopenharmony_ci return new Promise(async (resolve, reject) => { 90df226684Sopenharmony_ci let fileOpenHistory:Map<string, (number | string)[]> = 91df226684Sopenharmony_ci GlobalContext.load('fileOpenHistory') as Map<string, (number | string)[]>; 92df226684Sopenharmony_ci fileOpenHistory.delete(dlpFileUri); 93df226684Sopenharmony_ci resolve(); 94df226684Sopenharmony_ci }); 95df226684Sopenharmony_ci} 96df226684Sopenharmony_ci 97df226684Sopenharmony_ciasync function deleteLinkSetData(linkUri: string) : Promise<void> { 98df226684Sopenharmony_ci HiLog.info(TAG, `deleteLinkSetData enter`); 99df226684Sopenharmony_ci return new Promise(async (resolve, reject) => { 100df226684Sopenharmony_ci (GlobalContext.load('linkSet') as Set<string>).delete(linkUri); 101df226684Sopenharmony_ci resolve(); 102df226684Sopenharmony_ci }); 103df226684Sopenharmony_ci} 104df226684Sopenharmony_ci 105df226684Sopenharmony_ciasync function deleteToken2FileData(tokenId: number) : Promise<void> { 106df226684Sopenharmony_ci HiLog.info(TAG, `deleteToken2FileData enter`); 107df226684Sopenharmony_ci return new Promise(async (resolve, reject) => { 108df226684Sopenharmony_ci (GlobalContext.load('token2File') as Map<number, (number | string | dlpPermission.DLPFile | 109df226684Sopenharmony_ci dlpPermission.DLPFileAccess | null)[]>).delete(tokenId); 110df226684Sopenharmony_ci resolve(); 111df226684Sopenharmony_ci }); 112df226684Sopenharmony_ci} 113df226684Sopenharmony_ci 114df226684Sopenharmony_ciasync function getDlpFileInfoFromSandbox2linkFileData(sandboxId: string, dlpFileUri:string) : Promise<DlpFileInfo> { 115df226684Sopenharmony_ci HiLog.info(TAG, `getDlpFileInfoFromSandbox2linkFileData enter`); 116df226684Sopenharmony_ci return new Promise(async (resolve, reject) => { 117df226684Sopenharmony_ci let sandbox2linkFile: Map<string, (number | string | dlpPermission.DLPFile)[][]> = 118df226684Sopenharmony_ci GlobalContext.load('sandbox2linkFile') as Map<string, (number | string | dlpPermission.DLPFile)[][]>; 119df226684Sopenharmony_ci if (!sandbox2linkFile.has(sandboxId)) { 120df226684Sopenharmony_ci HiLog.info(TAG, `getDlpFileInfoFromSandbox2linkFileData not found ${sandboxId}, ${dlpFileUri}`); 121df226684Sopenharmony_ci reject(); 122df226684Sopenharmony_ci return; 123df226684Sopenharmony_ci } 124df226684Sopenharmony_ci let fileArray: (number | string | dlpPermission.DLPFile)[][] = 125df226684Sopenharmony_ci sandbox2linkFile.get(sandboxId) as (number | string | dlpPermission.DLPFile)[][]; 126df226684Sopenharmony_ci for (let linkFile of fileArray) { 127df226684Sopenharmony_ci if (linkFile.length < INDEX_FIVE) { 128df226684Sopenharmony_ci continue; 129df226684Sopenharmony_ci } 130df226684Sopenharmony_ci if (linkFile[INDEX_FOUR] !== dlpFileUri) { 131df226684Sopenharmony_ci continue; 132df226684Sopenharmony_ci } 133df226684Sopenharmony_ci let result : DlpFileInfo = { 134df226684Sopenharmony_ci dlpFile: linkFile[INDEX_ZERO] as dlpPermission.DLPFile, 135df226684Sopenharmony_ci tokenId: linkFile[INDEX_THREE] as number 136df226684Sopenharmony_ci } 137df226684Sopenharmony_ci resolve(result); 138df226684Sopenharmony_ci return; 139df226684Sopenharmony_ci } 140df226684Sopenharmony_ci HiLog.info(TAG, `getDlpFileInfoFromSandbox2linkFileData not found in linkFile ${sandboxId}, ${dlpFileUri}`); 141df226684Sopenharmony_ci reject(); 142df226684Sopenharmony_ci }); 143df226684Sopenharmony_ci} 144df226684Sopenharmony_ci 145df226684Sopenharmony_ciexport { 146df226684Sopenharmony_ci DlpFileInfo, 147df226684Sopenharmony_ci deleteSandbox2linkFileData, 148df226684Sopenharmony_ci deleteFileOpenHistoryData, 149df226684Sopenharmony_ci deleteLinkSetData, 150df226684Sopenharmony_ci deleteToken2FileData, 151df226684Sopenharmony_ci getDlpFileInfoFromSandbox2linkFileData, 152df226684Sopenharmony_ci};