* Copyright (c) Huawei Device Co., Ltd. 2024-2025. All rights reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import lazy { ValuesBucket, relationalStore } from '@kit.ArkData';
import lazy { HiLog } from './HiLog';
import lazy { ContextManager } from '../service/context/ContextManager';
import lazy { camera } from '@kit.CameraKit';
import lazy { CameraAppCapability } from '../camera/CameraAppCapability';
const TAG = 'CustomFilterDatabaseUtils';
const CUSTOM_TEMPLATE_DEFAULT_VALUE: number = -2;
export class DatabaseUtils {
public static readonly TEMPLATE_MAX_NUMBER: number = 16;
public static readonly TEMPLATE_MAX_NUMBER_CUSTOM_FILTER_TWO: number = 28;
public static readonly CUSTOM_FILTER_TASK_POOL_TAG: string = 'CustomFilterTaskPool';
public static readonly DB_NAME = 'OhosCamera.db';
public static readonly TABLE_NAME = 'camera_custom_filter_style';
public static readonly STORE_CONFIG: relationalStore.StoreConfig = {
name: this.DB_NAME,
securityLevel: relationalStore.SecurityLevel.S1,
encrypt: false
};
public static store: relationalStore.RdbStore | undefined = undefined;
private static sInstance: DatabaseUtils;
private dataBaseAllItem: number = -1;
private constructor() {
}
public static getInstance(): DatabaseUtils {
if (!DatabaseUtils.sInstance) {
DatabaseUtils.sInstance = new DatabaseUtils();
}
return DatabaseUtils.sInstance;
}
public async getDataBaseAllItem(): Promise<number> {
HiLog.begin(TAG, 'getDataBaseAllItem');
if (this.dataBaseAllItem === undefined) {
this.dataBaseAllItem = await this.queryAllData();
}
HiLog.end(TAG, 'getDataBaseAllItem');
return this.dataBaseAllItem;
}
public async createDataDB(): Promise<void> {
try {
DatabaseUtils.store =
await relationalStore.getRdbStore(ContextManager.getInstance().getUiContext(), DatabaseUtils.STORE_CONFIG);
HiLog.i(TAG, 'Create CustomFilter OhosCamera.db successfully!');
} catch (err) {
HiLog.e(TAG, `Create CustomFilter OhosCamera.db failed! err code:${err?.code}`);
}
}
public async queryAllData(): Promise<number> {
HiLog.begin(TAG, 'queryAllData');
let resultSetAllCount: number;
if (DatabaseUtils.store === null || DatabaseUtils.store === undefined) {
HiLog.e(TAG, 'queryAllData OhosCamera.db failed! HomsCamera is null');
this.createDataDB();
}
try {
let predicates: relationalStore.RdbPredicates = new relationalStore.RdbPredicates(DatabaseUtils.TABLE_NAME);
let resultSet = await DatabaseUtils.store.query(predicates);
resultSetAllCount = resultSet.rowCount;
HiLog.i(TAG, `queryAllData table count:${resultSetAllCount}`);
resultSet.close();
} catch (err) {
HiLog.e(TAG, `query data failed! err code:${err?.code}`);
}
HiLog.end(TAG, 'queryAllData');
return resultSetAllCount;
}
public async deleteAllTableData(): Promise<void> {
if (DatabaseUtils.store == null || DatabaseUtils.store === undefined) {
HiLog.e(TAG, `insertTableData failed! HomsCamera is null`);
return;
}
try {
HiLog.begin(TAG, 'deleteAllTableData');
let predicates: relationalStore.RdbPredicates = new relationalStore.RdbPredicates(DatabaseUtils.TABLE_NAME);
await DatabaseUtils.store.delete(predicates);
HiLog.i(TAG, 'Delete all table data successfully!');
HiLog.end(TAG, 'deleteAllTableData');
} catch (err) {
HiLog.e(TAG, `Delete data failed! err code:${err.code}, err message:${err.message}`)
}
}
public async deleteTableData(deleteStyleType: camera.ColorStyleType, deleteStyleIndex: number,
curStyleTemplateLength: number): Promise<void> {
HiLog.i(TAG, `deleteTableData deleteStyleType :${deleteStyleType},deleteStyleIndex :${deleteStyleIndex}
,curStyleTemplateLength :${curStyleTemplateLength}`);
if (DatabaseUtils.store == null || DatabaseUtils.store === undefined) {
HiLog.e(TAG, `insertTableData failed! HomsCamera is null`);
return;
}
try {
let predicates: relationalStore.RdbPredicates = new relationalStore.RdbPredicates(DatabaseUtils.TABLE_NAME);
const valueBucket: ValuesBucket = {
'type': deleteStyleType,
'styleIndex': deleteStyleIndex,
'hue': CUSTOM_TEMPLATE_DEFAULT_VALUE,
'saturation': CUSTOM_TEMPLATE_DEFAULT_VALUE,
'tone': CUSTOM_TEMPLATE_DEFAULT_VALUE,
};
predicates.equalTo('type', deleteStyleType)
.and()
.equalTo('styleIndex', deleteStyleIndex);
DatabaseUtils.store.update(valueBucket, predicates).then((count) => {
HiLog.i(TAG, `delete update data successful count is:${count}`);
});
} catch (err) {
HiLog.e(TAG, `delete data failed! err code:${err?.code}`);
}
}
}