• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022 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
16import dataShare from '@ohos.data.dataShare'
17import dataSharePredicates from '@ohos.data.dataSharePredicates'
18import { BASE_URI, COLUMNS } from '../utils/Consts'
19import { Contact, getListFromResultSet } from '../model/Contact'
20import { logger } from '../utils/Logger'
21import { ValuesBucket } from '@ohos.data.ValuesBucket'
22
23const TAG: string = 'ContactDataOperations'
24
25class ContactDataShareUtil {
26  private dataShareHelper: dataShare.DataShareHelper = undefined
27
28  async createDataShareHelper(context: Context) {
29    if (this.dataShareHelper === null || this.dataShareHelper === undefined) {
30      this.dataShareHelper = await dataShare.createDataShareHelper(context, BASE_URI)
31    }
32  }
33
34  async queryAllContacts(context: Context) {
35    logger.info(TAG, `queryAll start`)
36    await this.createDataShareHelper(context)
37    let predicates = new dataSharePredicates.DataSharePredicates()
38    let resultSet = await this.dataShareHelper.query(BASE_URI, predicates, COLUMNS)
39    logger.info(TAG, `queryAll resultSet= ${resultSet.rowCount}`)
40    return getListFromResultSet(resultSet)
41  }
42
43  async searchContactsFromName(context: Context, searchText: string) {
44    logger.info(TAG, `searchContactsFromName start`)
45    await this.createDataShareHelper(context)
46    let predicates = new dataSharePredicates.DataSharePredicates()
47    predicates.contains('name', searchText)
48    let resultSet = await this.dataShareHelper.query(BASE_URI, predicates, COLUMNS)
49    logger.info(TAG, `searchContactsFromName resultSet= ${resultSet.rowCount}`)
50    return getListFromResultSet(resultSet)
51  }
52
53  async insert(context: Context, valueBucket: ValuesBucket) {
54    logger.info(TAG, `insert onClick`)
55    await this.createDataShareHelper(context)
56    let insertId = await this.dataShareHelper.insert(BASE_URI, valueBucket)
57    logger.info(TAG, `insert succeed, data : ${insertId}`)
58    await this.dataShareHelper.notifyChange(BASE_URI)
59  }
60
61  async delete(context: Context, contactId: number) {
62    logger.info(TAG, `delete onClick`)
63    await this.createDataShareHelper(context)
64    let predicates = new dataSharePredicates.DataSharePredicates()
65    predicates.equalTo('id', contactId)
66    await this.dataShareHelper.delete(BASE_URI, predicates)
67    await this.dataShareHelper.notifyChange(BASE_URI)
68  }
69
70  async update(context: Context, contactId: number, valueBucket: ValuesBucket) {
71    logger.info(TAG, `update onClick`)
72    this.createDataShareHelper(context)
73    let predicates = new dataSharePredicates.DataSharePredicates()
74    predicates.equalTo('id', contactId)
75    await this.dataShareHelper.update(BASE_URI, predicates, valueBucket)
76    await this.dataShareHelper.notifyChange(BASE_URI)
77  }
78
79  async onDataChange(context: Context, callback: () => void) {
80    await this.createDataShareHelper(context)
81    this.dataShareHelper.on('dataChange', BASE_URI, callback)
82  }
83
84  async offDataChange(context: Context) {
85    await this.createDataShareHelper(context)
86    this.dataShareHelper.off('dataChange', BASE_URI)
87  }
88
89  async clearData(context: Context) {
90    await this.createDataShareHelper(context)
91    let predicates = new dataSharePredicates.DataSharePredicates()
92    predicates.isNotNull('name')
93    try {
94      await this.dataShareHelper.delete(BASE_URI, predicates)
95      await this.dataShareHelper.notifyChange(BASE_URI)
96    } catch (err) {
97      logger.error(TAG, `clear error: ${JSON.stringify(err)}`)
98    }
99  }
100
101  async batchInsert(context: Context, contacts: Contact[]) {
102    await this.createDataShareHelper(context)
103    let valuesBuckets = []
104    contacts.forEach((item) => {
105      let valuesBucket = {
106        name: item.name,
107        phone: item.phone,
108        email: item.email,
109        address: item.address,
110        remark: item.remark
111      }
112      valuesBuckets.push(valuesBucket)
113    })
114    try {
115      await this.dataShareHelper.batchInsert(BASE_URI, valuesBuckets)
116      await this.dataShareHelper.notifyChange(BASE_URI)
117      logger.info(TAG, 'batchInsert finish')
118    } catch (err) {
119      logger.error(TAG, `batchInsert error: ${JSON.stringify(err)}`)
120    }
121  }
122}
123
124export const contactDataShareUtil = new ContactDataShareUtil()