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'; 19 20import { Log } from '@ohos/common/src/main/ets/utils/Log'; 21import { getBundleNameByUri } from '@ohos/common/src/main/ets/utils/UrlUtils'; 22 23import { 24 CalendarsColumns, 25 DEFAULT_CALENDAR_VALUE 26} from '@ohos/datastructure/src/main/ets/calendars/CalendarsColumns'; 27 28import { DefaultProcessor } from '../DefaultProcessor'; 29import { 30 initValueCreator, 31 initPredicateCreator, 32 deleteValueCreator, 33 initPredicateDefaultAndOwnCreator, 34 initPredicateDefaultCalendarProtect 35} from '../DatabaseProcessorHelper'; 36 37const TAG = 'CalendarsProcessor'; 38 39/** 40 * the CalendarsProcessor table processor 41 * 42 * @since 2022-10-17 43 */ 44export class CalendarsProcessor extends DefaultProcessor { 45 async insertByHighAuthority(rdbStore, uri: string, values, callback) { 46 const callerName = getBundleNameByUri(uri); 47 initValueCreator(values, callerName); 48 this.doInsert(rdbStore, uri, values, callback); 49 } 50 51 async insertByLowAuthority(rdbStore, uri: string, values, callback) { 52 const callerName = getBundleNameByUri(uri); 53 initValueCreator(values, callerName); 54 this.doInsert(rdbStore, uri, values, callback); 55 } 56 57 async deleteByHighAuthority(rdbStore, uri: string, predicates, callback) { 58 initPredicateDefaultCalendarProtect(predicates); 59 this.doDelete(rdbStore, uri, predicates, callback); 60 } 61 62 async deleteByLowAuthority(rdbStore, uri: string, predicates, callback) { 63 const callerName = getBundleNameByUri(uri); 64 initPredicateCreator(predicates, callerName); 65 this.doDelete(rdbStore, uri, predicates, callback); 66 } 67 68 async updateByHighAuthority(rdbStore, uri: string, values, predicates, callback) { 69 deleteValueCreator(values); 70 initPredicateDefaultCalendarProtect(predicates); 71 this.doUpdate(rdbStore, uri, values, predicates, callback); 72 } 73 74 async updateByLowAuthority(rdbStore, uri: string, values, predicates, callback) { 75 const callerName = getBundleNameByUri(uri); 76 deleteValueCreator(values); 77 initPredicateCreator(predicates, callerName); 78 this.doUpdate(rdbStore, uri, values, predicates, callback); 79 } 80 81 async queryByLowAuthority(rdbStore, uri: string, columns: Array<string>, predicates, callback) { 82 const callerName = getBundleNameByUri(uri); 83 initPredicateDefaultAndOwnCreator(predicates, callerName); 84 this.doQuery(rdbStore, uri, columns, predicates, callback); 85 } 86} 87 88/** 89 * 插入日历存储默认账户 90 * 91 * @param rdbStore rdb数据库 92 * @return 插入的行id 93 */ 94export async function insertDefaultCalendar(rdbStore: data_rdb.RdbStore): Promise<number> { 95 Log.debug(TAG, `insertDefaultCalendar start`); 96 let rowId: number; 97 const isOwnDefault = await isExistDefaultCalendar(rdbStore); 98 if (isOwnDefault === undefined || isOwnDefault === null || isOwnDefault === true) { 99 rowId = -1; 100 } else { 101 try { 102 rowId = await rdbStore.insert(CalendarsColumns.TABLE_NAME, DEFAULT_CALENDAR_VALUE); 103 Log.info(TAG, `insertDefaultCalendar succeed , rowId = ${rowId}`); 104 } catch (err) { 105 Log.error(TAG, 'insertDefaultCalendar error'); 106 } 107 } 108 return rowId; 109} 110 111 112/** 113 * 检查日历存储的默认账户是否已经存在 114 * 115 * @param rdbStore rdb数据库 116 * @return true 存在 false 不存在 117 */ 118export async function isExistDefaultCalendar(rdbStore: data_rdb.RdbStore): Promise<boolean> { 119 Log.debug(TAG, `isExistDefaultCalendar start`); 120 const columns = [CalendarsColumns.ID, CalendarsColumns.ACCOUNT_NAME, CalendarsColumns.ACCOUNT_TYPE, 121 CalendarsColumns.CREATOR]; 122 let predicates = new dataSharePredicates.DataSharePredicates(); 123 predicates.equalTo(CalendarsColumns.ACCOUNT_NAME, DEFAULT_CALENDAR_VALUE.account_name); 124 predicates.equalTo(CalendarsColumns.CREATOR, DEFAULT_CALENDAR_VALUE.creator); 125 try { 126 let resultSet = await rdbStore.query(CalendarsColumns.TABLE_NAME, predicates, columns); 127 if (resultSet === null || resultSet === undefined) { 128 return; 129 } 130 if (resultSet.rowCount > 0) { 131 Log.error(TAG, 'Default Calendar is already exist'); 132 return true; 133 } 134 } catch (err) { 135 Log.error(TAG, 'Calendars query data error'); 136 } 137 return false; 138} 139