1/** 2 * @file Describe the file 3 * Copyright (c) 2023 Huawei Device Co., Ltd. 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17import data_rdb from '@ohos.data.relationalStore'; 18import dataSharePredicates from '@ohos.data.dataSharePredicates'; 19import { Log } from '@ohos/common/src/main/ets/utils/Log'; 20import { getBundleNameByUri } from '@ohos/common/src/main/ets/utils/UrlUtils'; 21import { 22 CalendarsColumns, 23 DEFAULT_CALENDAR_VALUE 24} from '@ohos/datastructure/src/main/ets/calendars/CalendarsColumns'; 25import { DefaultProcessor } from '../DefaultProcessor'; 26import { 27 initValueCreator, 28 initPredicateCreator, 29 deleteValueCreator, 30 initPredicateDefaultAndOwnCreator, 31 initPredicateDefaultCalendarProtect 32} from '../DatabaseProcessorHelper'; 33 34const TAG = 'CalendarsProcessor'; 35 36/** 37 * the CalendarsProcessor table processor 38 * 39 * @since 2022-10-17 40 */ 41export class CalendarsProcessor extends DefaultProcessor { 42 async insertByHighAuthority(rdbStore: data_rdb.RdbStore, uri: string, values: data_rdb.ValuesBucket, callback: Function) { 43 const callerName = getBundleNameByUri(uri); 44 initValueCreator(values, callerName); 45 this.doInsert(rdbStore, uri, values, callback); 46 } 47 48 async insertByLowAuthority(rdbStore: data_rdb.RdbStore, uri: string, values: data_rdb.ValuesBucket, callback: Function) { 49 if (!this.isFromMigrate) { 50 const callerName = getBundleNameByUri(uri); 51 initValueCreator(values, callerName); 52 } 53 this.doInsert(rdbStore, uri, values, callback); 54 } 55 56 async deleteByHighAuthority(rdbStore: data_rdb.RdbStore, uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: Function) { 57 initPredicateDefaultCalendarProtect(predicates); 58 this.doDelete(rdbStore, uri, predicates, callback); 59 } 60 61 async deleteByLowAuthority(rdbStore: data_rdb.RdbStore, uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: Function) { 62 const callerName = getBundleNameByUri(uri); 63 initPredicateCreator(predicates, callerName); 64 this.doDelete(rdbStore, uri, predicates, callback); 65 } 66 67 async updateByHighAuthority(rdbStore: data_rdb.RdbStore, uri: string, values: data_rdb.ValuesBucket, predicates: dataSharePredicates.DataSharePredicates, callback: Function) { 68 values = deleteValueCreator(values); 69 this.doUpdate(rdbStore, uri, values, predicates, callback); 70 } 71 72 async updateByLowAuthority(rdbStore: data_rdb.RdbStore, uri: string, values: data_rdb.ValuesBucket, predicates: dataSharePredicates.DataSharePredicates, callback: Function) { 73 const callerName = getBundleNameByUri(uri); 74 values = deleteValueCreator(values); 75 initPredicateCreator(predicates, callerName); 76 this.doUpdate(rdbStore, uri, values, predicates, callback); 77 } 78 79 async queryByLowAuthority(rdbStore: data_rdb.RdbStore, uri: string, columns: Array<string>, predicates: dataSharePredicates.DataSharePredicates, callback: Function) { 80 const callerName = getBundleNameByUri(uri); 81 initPredicateDefaultAndOwnCreator(predicates, callerName); 82 this.doQuery(rdbStore, uri, columns, predicates, callback); 83 } 84} 85 86/** 87 * 插入日历存储默认账户 88 * 89 * @param rdbStore rdb数据库 90 * @return 插入的行id 91 */ 92export async function insertDefaultCalendar(rdbStore: data_rdb.RdbStore | null): Promise<number> { 93 Log.debug(TAG, `insertDefaultCalendar start`); 94 let rowId: number = -1; 95 if (!rdbStore) { 96 Log.error(TAG, 'insertDefaultCalendar error rdbStore is null'); 97 return rowId; 98 } 99 const isOwnDefault = await isExistDefaultCalendar(rdbStore); 100 if (isOwnDefault === undefined || isOwnDefault === null || isOwnDefault === true) { 101 rowId = -1; 102 } else { 103 try { 104 rowId = await rdbStore.insert(CalendarsColumns.TABLE_NAME, DEFAULT_CALENDAR_VALUE); 105 Log.info(TAG, `insertDefaultCalendar succeed , rowId = ${rowId}`); 106 } catch (err) { 107 Log.error(TAG, 'insertDefaultCalendar error'); 108 } 109 } 110 return rowId; 111} 112 113/** 114 * 检查日历存储的默认账户是否已经存在,account_name is phone, CREATOR is com.huawei.hmos.calendardata 115 * 116 * @param rdbStore rdb数据库 117 * @return true 存在 false 不存在 118 */ 119export async function isExistDefaultCalendar(rdbStore: data_rdb.RdbStore) { 120 Log.debug(TAG, `isExistDefaultCalendar start`); 121 const columns = [CalendarsColumns.ID, CalendarsColumns.ACCOUNT_NAME, CalendarsColumns.ACCOUNT_TYPE, 122 CalendarsColumns.CREATOR]; 123 let predicates = new dataSharePredicates.DataSharePredicates(); 124 predicates.equalTo(CalendarsColumns.ACCOUNT_NAME, DEFAULT_CALENDAR_VALUE.account_name); 125 predicates.equalTo(CalendarsColumns.CREATOR, DEFAULT_CALENDAR_VALUE.creator); 126 try { 127 let resultSet = await rdbStore.query(CalendarsColumns.TABLE_NAME, predicates, columns); 128 if (resultSet === null || resultSet === undefined) { 129 return; 130 } 131 if (resultSet.rowCount > 0) { 132 Log.info(TAG, 'Default Calendar is already exist'); 133 return true; 134 } 135 } catch (err) { 136 Log.error(TAG, 'Calendars query data error'); 137 } 138 return false; 139} 140