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}