1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ci 16fb726d48Sopenharmony_ciimport { IndexedDBHelp } from './IndexedDBHelp'; 17fb726d48Sopenharmony_ci 18fb726d48Sopenharmony_ciexport class LongTraceDBUtils { 19fb726d48Sopenharmony_ci public static instance: LongTraceDBUtils | undefined; 20fb726d48Sopenharmony_ci dbVersion: number = 1; 21fb726d48Sopenharmony_ci dbName: string = 'sp'; 22fb726d48Sopenharmony_ci fileType: string = 'trace'; 23fb726d48Sopenharmony_ci tableName: string = 'longTable'; 24fb726d48Sopenharmony_ci indexedDBHelp: IndexedDBHelp = new IndexedDBHelp(); 25fb726d48Sopenharmony_ci 26fb726d48Sopenharmony_ci public static getInstance(): LongTraceDBUtils { 27fb726d48Sopenharmony_ci if (!this.instance) { 28fb726d48Sopenharmony_ci this.instance = new LongTraceDBUtils(); 29fb726d48Sopenharmony_ci } 30fb726d48Sopenharmony_ci return this.instance; 31fb726d48Sopenharmony_ci } 32fb726d48Sopenharmony_ci 33fb726d48Sopenharmony_ci createDBAndTable(): Promise<IDBDatabase> { 34fb726d48Sopenharmony_ci return this.indexedDBHelp.open(this.dbName, this.dbVersion, [ 35fb726d48Sopenharmony_ci { 36fb726d48Sopenharmony_ci name: this.tableName, 37fb726d48Sopenharmony_ci objectStoreParameters: { keyPath: 'id' }, 38fb726d48Sopenharmony_ci dataItems: [ 39fb726d48Sopenharmony_ci { name: 'QueryCompleteFile', keypath: ['timStamp', 'fileType', 'pageNum', 'index'] }, 40fb726d48Sopenharmony_ci { name: 'QueryFileByPage', keypath: ['timStamp', 'fileType', 'pageNum'] }, 41fb726d48Sopenharmony_ci ], 42fb726d48Sopenharmony_ci }, 43fb726d48Sopenharmony_ci ]); 44fb726d48Sopenharmony_ci } 45fb726d48Sopenharmony_ci 46fb726d48Sopenharmony_ci getByRange(range: IDBKeyRange): // @ts-ignore 47fb726d48Sopenharmony_ci Promise<unknown> { 48fb726d48Sopenharmony_ci return this.indexedDBHelp.get(this.tableName, range, 'QueryFileByPage'); 49fb726d48Sopenharmony_ci } 50fb726d48Sopenharmony_ci 51fb726d48Sopenharmony_ci addLongTableData( 52fb726d48Sopenharmony_ci data: ArrayBuffer, 53fb726d48Sopenharmony_ci fileType: string, 54fb726d48Sopenharmony_ci timStamp: number, 55fb726d48Sopenharmony_ci pageNumber: number, 56fb726d48Sopenharmony_ci index: number, 57fb726d48Sopenharmony_ci offset: number, 58fb726d48Sopenharmony_ci sliceLen: number 59fb726d48Sopenharmony_ci ): // @ts-ignore 60fb726d48Sopenharmony_ci Promise<unknown> { 61fb726d48Sopenharmony_ci return this.indexedDBHelp.add(this.tableName, { 62fb726d48Sopenharmony_ci buf: data, 63fb726d48Sopenharmony_ci id: `${fileType}_${timStamp}_${pageNumber}_${index}`, 64fb726d48Sopenharmony_ci fileType: fileType, 65fb726d48Sopenharmony_ci pageNum: pageNumber, 66fb726d48Sopenharmony_ci startOffset: offset, 67fb726d48Sopenharmony_ci endOffset: offset + sliceLen, 68fb726d48Sopenharmony_ci index: index, 69fb726d48Sopenharmony_ci timStamp: timStamp, 70fb726d48Sopenharmony_ci }); 71fb726d48Sopenharmony_ci } 72fb726d48Sopenharmony_ci} 73