Update core payload list from database during init
authorAbhay agarwal <ay.agarwal@samsung.com>
Tue, 17 Dec 2019 12:27:35 +0000 (17:57 +0530)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Mon, 30 Dec 2019 07:29:55 +0000 (16:29 +0900)
Signed-off-by: Abhay agarwal <ay.agarwal@samsung.com>
include/ua-api.h
ua-daemon/include/ua-manager-database.h
ua-daemon/src/ua-manager-core.c
ua-daemon/src/ua-manager-payload-db.c

index 7d68602..f02da1c 100644 (file)
@@ -1433,6 +1433,25 @@ int _uam_request_add_payload(uam_ble_payload_s *payload,
 int _uam_service_add_payload(const char *service,
        uam_ble_payload_s *payload);
 
+/**
+ * @brief Gets registered payloads list.
+ * @since_tizen 5.5
+ *
+ * @remarks The @a payload_list should be destroyed by using #g_free() and #g_ptr_array_free().
+ *
+ * @param[out] payload_list Payloads list array
+ *
+ * @return 0 on success, otherwise a negative error value
+ * @retval #UAM_ERROR_NONE Successful
+ * @retval #UAM_ERROR_INVALID_PARAMETER Invalid parameters
+ * @retval #UAM_ERROR_INTERNAL Internal error
+ *
+ * @exception
+ * @pre
+ * @post
+ */
+int _uam_get_added_payloads(GPtrArray **payload_list);
+
 #ifdef __cplusplus
 }
 #endif
index d514af7..9d5375e 100644 (file)
@@ -265,6 +265,7 @@ int _uam_db_insert_payload_info(
 int _uam_payload_db_clear(void);
 
 /* select operations */
+GSList *_uam_db_get_all_payloads(void);
 int _uam_db_get_payload_device_number(uam_ble_payload_s *payload,
                int *device_number);
 int _uam_db_get_payload_number(uam_ble_payload_s *payload,
index f6405d5..37e7453 100644 (file)
@@ -628,6 +628,37 @@ static GSList *__convert_db_svc_list_to_uam_svc_list(GSList *db_svc_list)
        return svc_list;
 }
 
+static void __uam_copy_db_payload_info(uam_ble_payload_s *dst_payload,
+       uam_db_payload_info_t *src_payload)
+{
+       if (src_payload) {
+               dst_payload->primary_key = src_payload->primary_key;
+               dst_payload->device_icon = src_payload->device_icon;
+               dst_payload->secondary_key = src_payload->secondary_key;
+               if (src_payload->device_uid)
+                       memcpy(dst_payload->device_uid,
+                       src_payload->device_uid, UAM_BLE_PAYLOAD_DEVICE_UID_LEN);
+               if (src_payload->bt_mac)
+                       memcpy(dst_payload->bt_mac,
+                       src_payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
+       }
+}
+
+static void __uam_copy_uam_payload_info(
+               uam_db_payload_info_t *dst_payload, uam_ble_payload_s *src_payload)
+{
+       if (src_payload) {
+               dst_payload = g_new0(uam_db_payload_info_t, 1);
+               dst_payload->primary_key = src_payload->primary_key;
+               dst_payload->device_icon = src_payload->device_icon;
+               dst_payload->secondary_key = src_payload->secondary_key;
+               dst_payload->device_uid = g_memdup(&(src_payload->device_uid),
+                                       UAM_BLE_PAYLOAD_DEVICE_UID_LEN);
+               dst_payload->bt_mac = g_memdup(&(src_payload->bt_mac),
+                                       UAM_BT_MAC_ADDRESS_STRING_LEN);
+       }
+}
+
 static void __uam_core_add_dev_to_list(
                uam_db_user_info_t *user, const uam_device_info_s *dev_info,
                int presence_state, unsigned long long last_seen, GSList *svc_list)
@@ -2242,6 +2273,7 @@ int _uam_core_init(void)
        GSList *db_svc_list;
        GSList *db_adv_list;
        GSList *db_svc_dev_list;
+       GSList *db_payload_list;
        GSList *l;
 
        /* Init database */
@@ -2361,11 +2393,35 @@ int _uam_core_init(void)
                }
        }
 
+       /* Fetch payload list */
+       db_payload_list = _uam_db_get_all_payloads();
+       if (!db_payload_list) {
+               UAM_INFO_C("No device payload in database");
+       } else {
+               for (l = db_payload_list; NULL != l; l = g_slist_next(l)) {
+                       db_payload_info_t *db_payload = l->data;
+                       uam_db_payload_info_t *payload;
+                       GSList *l1;
+
+                       if (!db_payload)
+                               continue;
+
+//                     l1 = g_slist_find_custom(payloads,
+//                                     db_payload->payload_name, __compare_payload_name);
+                       if (!l1) {
+                               payload = g_new0(uam_db_payload_info_t, 1);
+                               __uam_copy_uam_payload_info(payload, &(db_payload->payload_info));
+                               payloads = g_slist_append(payloads, payload);
+                       }
+               }
+       }
+
        g_slist_free_full(db_devices, g_free);
        g_slist_free_full(db_users, g_free);
        g_slist_free_full(db_svc_list, g_free);
        g_slist_free_full(db_adv_list, g_free);
        g_slist_free_full(db_svc_dev_list, g_free);
+       g_slist_free_full(db_payload_list, g_free);
 
        /* Set/update registered device list to plugins */
        if (UAM_ERROR_NONE != _uam_pm_set_registered_devices(devices))
@@ -2435,6 +2491,19 @@ void _uam_core_deinit(void)
        g_slist_free(svc_devs);
        svc_devs = NULL;
 
+       /* Release allocated memory for payloads */
+       for (l = payloads; NULL != l; l = g_slist_next(l)) {
+               uam_db_payload_info_t *payload = l->data;
+
+               if (!payload)
+                       continue;
+               g_free(payload->device_uid);
+               g_free(payload->bt_mac);
+               g_free(payload);
+       }
+       g_slist_free(payloads);
+       payloads = NULL;
+
        FUNC_EXIT;
 }
 
@@ -3858,37 +3927,6 @@ void _uam_core_handle_status_changed(unsigned int sensor, void *info)
        FUNC_EXIT;
 }
 
-static void __uam_copy_db_payload_info(uam_ble_payload_s *dst_payload,
-       uam_db_payload_info_t *src_payload)
-{
-       if (src_payload) {
-               dst_payload->primary_key = src_payload->primary_key;
-               dst_payload->device_icon = src_payload->device_icon;
-               dst_payload->secondary_key = src_payload->secondary_key;
-               if (src_payload->device_uid)
-                       memcpy(dst_payload->device_uid,
-                       src_payload->device_uid, UAM_BLE_PAYLOAD_DEVICE_UID_LEN);
-               if (src_payload->bt_mac)
-                       memcpy(dst_payload->bt_mac,
-                       src_payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
-       }
-}
-
-static void __uam_copy_uam_payload_info(
-               uam_db_payload_info_t *dst_payload, uam_ble_payload_s *src_payload)
-{
-       if (src_payload) {
-               dst_payload = g_new0(uam_db_payload_info_t, 1);
-               dst_payload->primary_key = src_payload->primary_key;
-               dst_payload->device_icon = src_payload->device_icon;
-               dst_payload->secondary_key = src_payload->secondary_key;
-               dst_payload->device_uid = g_memdup(&(src_payload->device_uid),
-                                       UAM_BLE_PAYLOAD_DEVICE_UID_LEN);
-               dst_payload->bt_mac = g_memdup(&(src_payload->bt_mac),
-                                       UAM_BT_MAC_ADDRESS_STRING_LEN);
-       }
-}
-
 int _uam_core_add_payload(uam_ble_payload_s *payload,
                const char *device_id, int tech_type)
 {
@@ -3968,7 +4006,7 @@ int _uam_core_get_payloads(int *count, uam_ble_payload_s **payload_list)
        for (l = payloads; l; l = g_slist_next(l)) {
                uam_db_payload_info_t *db_info = l->data;
 
-               if (!db_info || !db_info->device_uid)
+               if (!db_info)
                        continue;
 
                __uam_copy_db_payload_info(&(*payload_list)[*count], db_info);
index bd21216..1837dcb 100644 (file)
@@ -410,8 +410,9 @@ GSList *_uam_db_get_all_payloads(void)
                        info->payload_info.primary_key = buf ? *buf : 13;
                        buf = (char *)sqlite3_column_text(stmt, 1);
                        info->payload_info.secondary_key = buf ? *buf : 1;
-                       if ((char*)sqlite3_column_text(stmt, 2))
-                               memcpy(info->payload_info.device_uid, (char *)sqlite3_column_text(stmt, 11),
+                       buf = (char *)sqlite3_column_text(stmt, 2);
+                       if (buf)
+                               memcpy(info->payload_info.device_uid, buf,
                                        UAM_BLE_PAYLOAD_DEVICE_UID_LEN);
                        buf = (char *)sqlite3_column_text(stmt, 3);
                        info->payload_info.device_icon = buf ? *buf : 1;