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};