• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License"),
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16/**
17 * @file
18 * @kit BasicServicesKit
19 */
20
21import { AsyncCallback, BusinessError } from '@ohos.base';
22
23export default namespace zlib {
24
25  loadLibrary("ani_zlib.z");
26
27  export enum CompressLevel {
28    COMPRESS_LEVEL_NO_COMPRESSION = 0,
29    COMPRESS_LEVEL_BEST_SPEED = 1,
30    COMPRESS_LEVEL_BEST_COMPRESSION = 9,
31    COMPRESS_LEVEL_DEFAULT_COMPRESSION = -1
32  }
33
34  export enum CompressStrategy {
35    COMPRESS_STRATEGY_DEFAULT_STRATEGY = 0,
36    COMPRESS_STRATEGY_FILTERED = 1,
37    COMPRESS_STRATEGY_HUFFMAN_ONLY = 2,
38    COMPRESS_STRATEGY_RLE = 3,
39    COMPRESS_STRATEGY_FIXED = 4
40  }
41
42  export enum ParallelStrategy {
43    PARALLEL_STRATEGY_SEQUENTIAL = 0,
44    PARALLEL_STRATEGY_PARALLEL_DECOMPRESSION = 1
45  }
46
47  export enum MemLevel {
48    MEM_LEVEL_MIN = 1,
49    MEM_LEVEL_MAX = 9,
50    MEM_LEVEL_DEFAULT = 8
51  }
52
53  export interface Options {
54    level?: CompressLevel;
55    memLevel?: MemLevel;
56    strategy?: CompressStrategy;
57    parallel?: ParallelStrategy;
58  }
59
60  class OptionsInner implements Options {
61    level?: CompressLevel | undefined;
62    memLevel?: MemLevel | undefined;
63    strategy?: CompressStrategy | undefined;
64    parallel?: ParallelStrategy | undefined;
65  }
66
67  export function compressFile(inFile: string, outFile: string, options: Options, callback: AsyncCallback<void>): void {
68    let execFun = (): void => {
69      zlib.CompressFile(inFile, outFile, options);
70    };
71    let p1 = taskpool.execute(execFun);
72    p1.then(() => {
73      callback(null, undefined);
74    }).catch((err: Error): void => {
75      callback(err as BusinessError, undefined);
76    });
77  }
78
79  export function compressFile(inFile: string, outFile: string, options: Options): Promise<void> {
80    let p: Promise<void> = new Promise<void>((resolve: (v:undefined) => void, reject: (error: Error) => void) : void => {
81      let execFun = (): void => {
82        zlib.CompressFile(inFile, outFile, options);
83      };
84      let p1 = taskpool.execute(execFun);
85      p1.then((): void => {
86        resolve(undefined);
87      }, (err: Error): void => {
88        reject(err as BusinessError);
89      });
90    });
91    return p;
92  }
93
94  export native function CompressFile(inFile: string, outFile: string, options: Options): void;
95
96  export function decompressFile(inFile: string, outFile: string, options: Options, callback: AsyncCallback<void>): void {
97    let execFun = (): void => {
98      zlib.DecompressFile(inFile, outFile, options);
99    };
100    let p1 = taskpool.execute(execFun);
101    p1.then(() => {
102      callback(null, undefined);
103    }).catch((err: Error): void => {
104      callback(err as BusinessError, undefined);
105    });
106  }
107
108  export function decompressFile(inFile: string, outFile: string, callback: AsyncCallback<void>): void {
109    let execFun = (): void => {
110      zlib.DecompressFile(inFile, outFile, new OptionsInner());
111    };
112    let p1 = taskpool.execute(execFun);
113    p1.then(() => {
114      callback(null, undefined);
115    }).catch((err: Error): void => {
116      callback(err as BusinessError, undefined);
117    });
118  }
119
120  export function decompressFile(inFile: string, outFile: string, options?: Options): Promise<void> {
121    let optionsParam = options ?? new OptionsInner();
122    let p: Promise<void> = new Promise<void>((resolve: (v:undefined) => void, reject: (error: Error) => void) : void => {
123      let execFun = (): void => {
124        zlib.DecompressFile(inFile, outFile, optionsParam);
125      };
126      let p1 = taskpool.execute(execFun);
127      p1.then((): void => {
128        resolve(undefined);
129      }, (err: Error): void => {
130        reject(err as BusinessError);
131      });
132    });
133    return p;
134  }
135
136  export native function DecompressFile(inFile: string, outFile: string, options?: Options): void;
137
138  export interface Checksum {
139    adler32(adler: number, buf: ArrayBuffer): Promise<number>;
140    adler32Combine(adler1: number, adler2: number, len2: number): Promise<number>;
141    crc32(crc: number, buf: ArrayBuffer): Promise<number>;
142    crc32Combine(crc1: number, crc2: number, len2: number): Promise<number>;
143    crc64(crc: number, buf: ArrayBuffer): Promise<number>;
144    getCrcTable(): Promise<Array<number>>;
145    getCrc64Table(): Promise<Array<number>>;
146  }
147
148  export class ChecksumInternal implements Checksum {
149    public native Adler32(adler: number, buf: ArrayBuffer): number;
150    public native Adler32Combine(adler1: number, adler2: number, len2: number): number;
151    public native Crc32(crc: number, buf: ArrayBuffer): number;
152    public native Crc32Combine(crc1: number, crc2: number, len2: number): number;
153    public native Crc64(crc: number, buf: ArrayBuffer): number;
154    public native GetCrcTable(): Array<number>;
155    public native GetCrc64Table(): Array<number>;
156
157    public adler32(adler: number, buf: ArrayBuffer): Promise<number> {
158      let p: Promise<number> = new Promise<number>((resolve: (v:number) => void, reject: (error: BusinessError) => void) : void => {
159        let execFun = (): number => {
160          return this.Adler32(adler, buf);
161        };
162        let p1 = taskpool.execute(execFun);
163        p1.then((e: NullishType) => {
164          let result: number = e as number;
165          resolve(result);
166        }, (err: Error): void => {
167          reject(err as BusinessError);
168        });
169      });
170      return p;
171    }
172
173    public adler32Combine(adler1: number, adler2: number, len2: number): Promise<number> {
174      let p: Promise<number> = new Promise<number>((resolve: (v:number) => void, reject: (error: BusinessError) => void) : void => {
175        let execFun = (): number => {
176          return this.Adler32Combine(adler1, adler2, len2);
177        };
178        let p1 = taskpool.execute(execFun);
179        p1.then((e: NullishType) => {
180          let result: number = e as number;
181          resolve(result);
182        }, (err: Error): void => {
183          reject(err as BusinessError);
184        });
185      });
186      return p;
187    }
188
189    public crc32(crc: number, buf: ArrayBuffer): Promise<number> {
190      let p: Promise<number> = new Promise<number>((resolve: (v:number) => void, reject: (error: BusinessError) => void) : void => {
191        let execFun = (): number => {
192          return this.Crc32(crc, buf);
193        };
194        let p1 = taskpool.execute(execFun);
195        p1.then((e: NullishType) => {
196          let result: number = e as number;
197          resolve(result);
198        }, (err: Error): void => {
199          reject(err as BusinessError);
200        });
201      });
202      return p;
203    }
204
205    public crc32Combine(crc1: number, crc2: number, len2: number): Promise<number> {
206      let p: Promise<number> = new Promise<number>((resolve: (v:number) => void, reject: (error: BusinessError) => void) : void => {
207        let execFun = (): number => {
208          return this.Crc32Combine(crc1, crc2, len2);
209        };
210        let p1 = taskpool.execute(execFun);
211        p1.then((e: NullishType) => {
212          let result: number = e as number;
213          resolve(result);
214        }, (err: Error): void => {
215          reject(err as BusinessError);
216        });
217      });
218      return p;
219    }
220
221    public crc64(crc: number, buf: ArrayBuffer): Promise<number> {
222      let p: Promise<number> = new Promise<number>((resolve: (v:number) => void, reject: (error: BusinessError) => void) : void => {
223        let execFun = (): number => {
224          return this.Crc64(crc, buf);
225        };
226        let p1 = taskpool.execute(execFun);
227        p1.then((e: NullishType) => {
228          let result: number = e as number;
229          resolve(result);
230        }, (err: Error): void => {
231          reject(err as BusinessError);
232        });
233      });
234      return p;
235    }
236
237    public getCrcTable(): Promise<Array<number>> {
238      let p: Promise<Array<number>> = new Promise<Array<number>>((resolve: (v:Array<number>) => void, reject: (error: BusinessError) => void) : void => {
239        let execFun = (): Array<number> => {
240          return this.GetCrcTable();
241        };
242        let p1 = taskpool.execute(execFun);
243        p1.then((e: NullishType) => {
244          let resultArray: Array<number> = e as Array<number>;
245          resolve(resultArray);
246        }, (err: Error): void => {
247          reject(err as BusinessError);
248        });
249      });
250      return p;
251    }
252
253    public getCrc64Table(): Promise<Array<number>> {
254      let p: Promise<Array<number>> = new Promise<Array<number>>((resolve: (v:Array<number>) => void, reject: (error: BusinessError) => void) : void => {
255        let execFun = (): Array<number> => {
256          return this.GetCrc64Table();
257        };
258        let p1 = taskpool.execute(execFun);
259        p1.then((e: NullishType) => {
260          let resultArray: Array<number> = e as Array<number>;
261          resolve(resultArray);
262        }, (err: Error): void => {
263          reject(err as BusinessError);
264        });
265      });
266      return p;
267    }
268  }
269
270  export native function CompressFiles(inFiles: Array<string>, outFile: string, options: Options): void;
271
272  export function compressFiles(inFiles: Array<string>, outFile: string, options: Options): Promise<void> {
273    let p: Promise<void> = new Promise<void>((resolve: (v:PromiseLike<void>) => void, reject: (error: Error) => void) : void => {
274      let execFun = (): void => {
275        zlib.CompressFiles(inFiles, outFile, options);
276      };
277      let p1 = taskpool.execute(execFun);
278      p1.then((): void => {
279        resolve(Promise.resolve());
280      }, (err: Error): void => {
281        reject(err as BusinessError);
282      });
283    });
284    return p;
285  }
286
287  export native function GetOriginalSize(compressedFile: string): number;
288
289  export function getOriginalSize(compressedFile: string): Promise<number> {
290    let p: Promise<number> = new Promise<number>((resolve: (v:number) => void, reject: (error: BusinessError) => void) : void => {
291      let execFun = (): number => {
292        return zlib.GetOriginalSize(compressedFile);
293      };
294      let p1 = taskpool.execute(execFun);
295      p1.then((e: NullishType) => {
296        let result: number = e as number;
297        resolve(result);
298      }, (err: Error): void => {
299        reject(err as BusinessError);
300      });
301    });
302    return p;
303  }
304
305  export native function createChecksumSync(): Checksum;
306
307  export function createChecksum(): Promise<Checksum> {
308    let p: Promise<Checksum> = new Promise<Checksum>((resolve: (v:Checksum) => void, reject: (error: BusinessError) => void) : void => {
309      let execFun = (): Checksum => {
310        return zlib.createChecksumSync();
311      };
312      let p1 = taskpool.execute(execFun);
313      p1.then((e: NullishType) => {
314        let result: Checksum = e as Checksum;
315        resolve(result);
316      }, (err: Error): void => {
317        reject(err as BusinessError);
318      });
319    });
320    return p;
321  }
322}