2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.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
8 * http://www.tizenopensource.org/license
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.
17 #include "kies_alarm.h"
19 #include "alarm-engine.h"
23 #include <vconf-keys.h>
24 #include "kies_fwk_alarmmgr.h"
25 #include "kies_define.h"
26 /**********************************************************************
27 ******************define *************************************
28 ***********************************************************************/
30 TYPE_SAVE_ALARM_MODE_BINARY,
31 TYPE_SAVE_ALARM_MODE_TEXT,
32 TYPE_SAVE_ALARM_MODE_MAX,
33 } TYPE_SAVE_ALARM_MODE;
34 /**********************************************************************
35 ******************common *************************************
36 ***********************************************************************/
39 static bool is_file_exist(char *file_path)
45 pFile = fopen(file_path, "r");
53 /**********************************************************************
54 ******************save *************************************
55 ***********************************************************************/
58 static int _write_alarm_to_file_binary(ADList * list, char * file_path)
63 ADList *cur_data = NULL;
64 struct alarm_data *pAlarm = NULL;
67 KIES_RETVM_IF(!list, FAILED, "alarm list null");
68 KIES_RETVM_IF(!file_path, FAILED, "file_path null");
69 //KIES_RETVM_IF(is_file_exist(file_path),FAILED,"file path error");
70 pFile = fopen(file_path, "w");
71 KIES_RETVM_IF(!pFile, FAILED, "fopen error");
72 for (cur_data = list; cur_data; cur_data = cur_data->next) {
73 pAlarm = &cur_data->ad;
74 cur_size = fwrite(pAlarm, sizeof(struct alarm_data), 1, pFile);
75 KIES_RETVM_IF(cur_size != 1, FAILED, "fwrite size error");
84 static int _write_alarm_to_file_text(ADList *list, char *file_path)
91 static int _write_alarm_to_file(ADList *list,
92 char *file_path, TYPE_SAVE_ALARM_MODE save_mode)
97 case TYPE_SAVE_ALARM_MODE_BINARY:
98 ret = _write_alarm_to_file_binary(list, file_path);
100 case TYPE_SAVE_ALARM_MODE_TEXT:
101 ret = _write_alarm_to_file_text(list, file_path);
103 case TYPE_SAVE_ALARM_MODE_MAX:
104 KIES_INFO_RED("type is error, save_mode=%d", save_mode);
111 //when backup, firstly, we need to get alarm data from libslp-alarm
112 //then, save the data to file_path
113 A_DBAPI int alarm_backup(const char *file_path)
117 int db_success = FAILED;
121 KIES_RETVM_IF(!file_path, FAILED, "file_path null");
122 nErr = alarmdb_init(NULL);
123 KIES_RETVM_IF(nErr != SUCCESS, FAILED, "alarmdb_init");
124 db_success = SUCCESS;
125 //get alarm data, because alarmdb is used by many APs
126 list = alarmdb_get_data_list_by_author(ALARM_DB_AUTHOR_ALARM);
127 KIES_RETVM_IF(!list, RESULT_ERR_NULL_ALARM, "alarm data is NULL");
129 _write_alarm_to_file(list, (char *)file_path,
130 TYPE_SAVE_ALARM_MODE_BINARY);
131 KIES_RETVM_IF(nErr != SUCCESS, nErr, "_write_alarm_to_file NULL");
134 if (IS_EQUAL(db_success, SUCCESS)) {
141 /**********************************************************************
142 ******************restore *************************************
143 ***********************************************************************/
145 //clear alarm data in db;
146 //if alarm is enable, remove from alarm-manger
147 static int _reset_alarm(ADList *list)
151 ADList *cur_data = NULL;
152 struct alarm_data *pAlarm = NULL;
154 KIES_RETVM_IF(!list, SUCCESS, "null list, nothing to do");
156 for (cur_data = list; cur_data; cur_data = cur_data->next) {
157 pAlarm = &cur_data->ad;
158 if (pAlarm->enable) {
159 nErr = kies_fwk_alarmmgr_remove(pAlarm);
160 KIES_RETVM_IF(nErr != SUCCESS, FAILED,
161 "alarmmgr_remove_alarm error");
163 nErr = alarmdb_del_data(pAlarm->id);
164 KIES_RETVM_IF(nErr != SUCCESS, FAILED,
165 "alarmdb_del_data error");
172 //if enable alarm, register alarm
173 //then, add to alarm db
174 static int _save_alarm(struct alarm_data *pAlarm)
179 KIES_RETVM_IF(!pAlarm, FAILED, "null alarm");
180 if (pAlarm->enable) {
181 nErr = kies_fwk_alarmmgr_create(pAlarm);
182 KIES_RETVM_IF(nErr != SUCCESS, FAILED, "_register_alarm error");
184 nErr = alarmdb_add_data(pAlarm);
185 KIES_RETVM_IF(IS_EQUAL(nErr, -1), FAILED, "alarmdb_add_data error");
192 static int _read_alarm_from_file_binary(char *file_path)
198 struct alarm_data alarm;
200 KIES_RETVM_IF(!file_path, FAILED, "file_path null");
201 KIES_RETVM_IF(!is_file_exist(file_path), FAILED, "file path error");
202 pFile = fopen(file_path, "r");
203 KIES_RETVM_IF(!pFile, FAILED, "fopen error");
206 cur_size = fread(&alarm, sizeof(alarm), 1, pFile);
207 if (IS_EQUAL(0, cur_size)) {
208 //file is null, success
211 KIES_RETVM_IF(cur_size != 1, FAILED, "fread size error");
213 nErr = _save_alarm(&alarm);
214 KIES_RETVM_IF(nErr != SUCCESS, FAILED, "_save_alarm error");
223 static int _read_alarm_from_file_text(char *file_path)
230 static int _read_alarm_from_file(char *file_path,
231 TYPE_SAVE_ALARM_MODE save_mode)
236 case TYPE_SAVE_ALARM_MODE_BINARY:
237 ret = _read_alarm_from_file_binary(file_path);
239 case TYPE_SAVE_ALARM_MODE_TEXT:
240 ret = _read_alarm_from_file_text(file_path);
242 case TYPE_SAVE_ALARM_MODE_MAX:
243 KIES_INFO_RED("type is error, save_mode=%d", save_mode);
251 A_DBAPI int alarm_restore(const char *file_path)
255 int db_success = FAILED;
256 int mgr_success = FAILED;
260 KIES_RETVM_IF(!file_path, FAILED, "file_path null");
261 nErr = alarmdb_init(NULL);
262 KIES_RETVM_IF(nErr != SUCCESS, FAILED, "alarmdb_init");
263 db_success = SUCCESS;
264 nErr = alarmmgr_init(PKGNAME);
265 KIES_RETVM_IF(nErr != SUCCESS, FAILED, "alarmmgr_init error");
266 mgr_success = SUCCESS;
267 //get alarm data, because alarmdb is used by many APs
268 list = alarmdb_get_data_list_by_author(ALARM_DB_AUTHOR_ALARM);
269 //delete all alarm data
270 nErr = _reset_alarm(list);
271 KIES_RETVM_IF(nErr != SUCCESS, nErr, "_reset_alarm error");
274 _read_alarm_from_file((char *)file_path,
275 TYPE_SAVE_ALARM_MODE_BINARY);
276 KIES_RETVM_IF(nErr != SUCCESS, nErr, "_write_alarm_to_file NULL");
278 vconf_set_bool(VCONFKEY_ALARM_RESTORE, true);
281 if (IS_EQUAL(db_success, SUCCESS)) {
284 if (IS_EQUAL(mgr_success, SUCCESS)) {