1bea4f105Sopenharmony_ci/* 2bea4f105Sopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3bea4f105Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4bea4f105Sopenharmony_ci * you may not use this file except in compliance with the License. 5bea4f105Sopenharmony_ci * You may obtain a copy of the License at 6bea4f105Sopenharmony_ci * 7bea4f105Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8bea4f105Sopenharmony_ci * 9bea4f105Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10bea4f105Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11bea4f105Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12bea4f105Sopenharmony_ci * See the License for the specific language governing permissions and 13bea4f105Sopenharmony_ci * limitations under the License. 14bea4f105Sopenharmony_ci */ 15bea4f105Sopenharmony_ci 16bea4f105Sopenharmony_ciimport data_preferences from '@ohos.data.preferences'; 17bea4f105Sopenharmony_ciimport { Logger } from '../util/HiLogger' 18bea4f105Sopenharmony_ci 19bea4f105Sopenharmony_ciconst logger: Logger = new Logger("PreferenceManager") 20bea4f105Sopenharmony_ci 21bea4f105Sopenharmony_ci// store:通用,setting:应用全局配置,music_key_sp:工作秘钥缓存,music_info_sp:用户信息缓存 22bea4f105Sopenharmony_ciconst preferKeys = ['store', 'setting', 'server_config', 'music_key_sp', 'user_info_sp'] 23bea4f105Sopenharmony_ci 24bea4f105Sopenharmony_ci/** 25bea4f105Sopenharmony_ci * [系统全局SP管理类] 26bea4f105Sopenharmony_ci */ 27bea4f105Sopenharmony_ciexport class PreferenceManager { 28bea4f105Sopenharmony_ci preferenceMap: Map<string, Promise<data_preferences.Preferences>> = new Map() 29bea4f105Sopenharmony_ci preferKeys: any = { 30bea4f105Sopenharmony_ci store: 'store', 31bea4f105Sopenharmony_ci setting: 'setting', 32bea4f105Sopenharmony_ci serverConfig: 'server_config', 33bea4f105Sopenharmony_ci encrypt: 'music_key_sp', 34bea4f105Sopenharmony_ci userInfo: 'user_info_sp' 35bea4f105Sopenharmony_ci } 36bea4f105Sopenharmony_ci context: any 37bea4f105Sopenharmony_ci 38bea4f105Sopenharmony_ci constructor(context: any) { 39bea4f105Sopenharmony_ci this.context = context 40bea4f105Sopenharmony_ci this.init() 41bea4f105Sopenharmony_ci } 42bea4f105Sopenharmony_ci 43bea4f105Sopenharmony_ci init(): void { 44bea4f105Sopenharmony_ci logger.info('init') 45bea4f105Sopenharmony_ci preferKeys.forEach((item: string) => { 46bea4f105Sopenharmony_ci let promise: Promise<data_preferences.Preferences> = data_preferences.getPreferences(this.context, item) 47bea4f105Sopenharmony_ci this.preferenceMap.set(item, promise) 48bea4f105Sopenharmony_ci }) 49bea4f105Sopenharmony_ci } 50bea4f105Sopenharmony_ci 51bea4f105Sopenharmony_ci 52bea4f105Sopenharmony_ci /** 53bea4f105Sopenharmony_ci * 获取storeName中的键值对 54bea4f105Sopenharmony_ci * 55bea4f105Sopenharmony_ci * @param keyName keyName 56bea4f105Sopenharmony_ci * @param def def 57bea4f105Sopenharmony_ci * @param storeName storeName 58bea4f105Sopenharmony_ci * @return Promise<any> 59bea4f105Sopenharmony_ci */ 60bea4f105Sopenharmony_ci get(keyName: string, def: number | string | boolean, storeName?: string): Promise<number | string | boolean> { 61bea4f105Sopenharmony_ci if (!storeName) { 62bea4f105Sopenharmony_ci storeName = preferKeys[0] 63bea4f105Sopenharmony_ci } 64bea4f105Sopenharmony_ci let promise: Promise<data_preferences.Preferences> = this.preferenceMap.get(storeName) 65bea4f105Sopenharmony_ci if (!promise) { 66bea4f105Sopenharmony_ci logger.error(`Can not get value of ${keyName} from ${storeName}`) 67bea4f105Sopenharmony_ci return new Promise((resolve, reject) => { 68bea4f105Sopenharmony_ci resolve(false) 69bea4f105Sopenharmony_ci }) 70bea4f105Sopenharmony_ci } 71bea4f105Sopenharmony_ci return new Promise((resolve, reject) => { 72bea4f105Sopenharmony_ci promise.then((preferences: data_preferences.Preferences) => { 73bea4f105Sopenharmony_ci let keyPromise = preferences.get(keyName, def) 74bea4f105Sopenharmony_ci keyPromise.then((value: number | string | boolean) => { 75bea4f105Sopenharmony_ci logger.info(`Get value of ${keyName} from ${storeName} is ${value}`) 76bea4f105Sopenharmony_ci resolve(value) 77bea4f105Sopenharmony_ci }).catch((err) => { 78bea4f105Sopenharmony_ci logger.info(`Get value of ${keyName} from ${storeName} startup failed, err: ` + err) 79bea4f105Sopenharmony_ci resolve(false) 80bea4f105Sopenharmony_ci }) 81bea4f105Sopenharmony_ci }).catch((err) => { 82bea4f105Sopenharmony_ci logger.info(`Get value of ${keyName} from ${storeName} startup failed, err: ` + err) 83bea4f105Sopenharmony_ci resolve(false) 84bea4f105Sopenharmony_ci }) 85bea4f105Sopenharmony_ci }) 86bea4f105Sopenharmony_ci } 87bea4f105Sopenharmony_ci 88bea4f105Sopenharmony_ci 89bea4f105Sopenharmony_ci /** 90bea4f105Sopenharmony_ci * 存储storeName中的键值对 91bea4f105Sopenharmony_ci * 92bea4f105Sopenharmony_ci * @param keyName keyName 93bea4f105Sopenharmony_ci * @param def def 94bea4f105Sopenharmony_ci * @param storeName storeName 95bea4f105Sopenharmony_ci * @return Promise<boolean> 成功失败 96bea4f105Sopenharmony_ci */ 97bea4f105Sopenharmony_ci put(keyName: string, def: any, autoFlush: boolean = true, storeName?: string): Promise<boolean> { 98bea4f105Sopenharmony_ci if (!storeName) { 99bea4f105Sopenharmony_ci storeName = preferKeys[0] 100bea4f105Sopenharmony_ci } 101bea4f105Sopenharmony_ci let promise: Promise<data_preferences.Preferences> = this.preferenceMap.get(storeName) 102bea4f105Sopenharmony_ci if (!promise) { 103bea4f105Sopenharmony_ci logger.error(`Can not put value of ${keyName} from ${storeName}`) 104bea4f105Sopenharmony_ci return new Promise((resolve, reject) => { 105bea4f105Sopenharmony_ci resolve(false) 106bea4f105Sopenharmony_ci }) 107bea4f105Sopenharmony_ci } 108bea4f105Sopenharmony_ci return new Promise((resolve, reject) => { 109bea4f105Sopenharmony_ci promise.then((preferences: data_preferences.Preferences) => { 110bea4f105Sopenharmony_ci let keyPromise = preferences.put(keyName, def) 111bea4f105Sopenharmony_ci keyPromise.then(() => { 112bea4f105Sopenharmony_ci if (autoFlush) { 113bea4f105Sopenharmony_ci let flushPromise = preferences.flush() 114bea4f105Sopenharmony_ci flushPromise.then(() => { 115bea4f105Sopenharmony_ci resolve(true) 116bea4f105Sopenharmony_ci }).catch((err) => { 117bea4f105Sopenharmony_ci logger.info("Flush to file failed, err: " + err) 118bea4f105Sopenharmony_ci resolve(false) 119bea4f105Sopenharmony_ci }) 120bea4f105Sopenharmony_ci } else { 121bea4f105Sopenharmony_ci resolve(true) 122bea4f105Sopenharmony_ci } 123bea4f105Sopenharmony_ci }).catch((err) => { 124bea4f105Sopenharmony_ci logger.info(`Get value of ${keyName} from ${storeName} startup failed, err: ` + err) 125bea4f105Sopenharmony_ci resolve(false) 126bea4f105Sopenharmony_ci }) 127bea4f105Sopenharmony_ci }).catch((err) => { 128bea4f105Sopenharmony_ci logger.info(`Get value of ${keyName} from ${storeName} startup failed, err: ` + err) 129bea4f105Sopenharmony_ci resolve(false) 130bea4f105Sopenharmony_ci }) 131bea4f105Sopenharmony_ci }) 132bea4f105Sopenharmony_ci } 133bea4f105Sopenharmony_ci}