Change noti_list to a list instead of an array 81/224481/3 accepted/tizen/unified/20200212.125825 submit/tizen/20200211.050031
authorMinje Ahn <minje.ahn@samsung.com>
Tue, 11 Feb 2020 01:32:05 +0000 (10:32 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Tue, 11 Feb 2020 04:37:26 +0000 (13:37 +0900)
Change-Id: I2233c8da4220989df4fa4514c8fbf26141f30a45
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
src/common/media-svc-noti.c
src/common/media-svc.c
src/include/common/media-svc-noti.h

index c6b97eb..ea5d0c3 100755 (executable)
 #include "media-svc-noti.h"
 #include "media-svc-util.h"
 
-static __thread media_svc_noti_item *g_inserted_noti_list = NULL;
+static __thread GSList *g_inserted_noti_list = NULL;
 static __thread int g_noti_from_pid = -1;
 
-static int __media_svc_publish_noti_by_item(media_svc_noti_item *noti_item)
+static void __media_svc_publish_noti_by_item(gpointer data, gpointer user_data)
 {
        int ret = MS_MEDIA_ERR_NONE;
+       media_svc_noti_item *item = (media_svc_noti_item *)data;
 
-       if (noti_item && noti_item->path) {
-               ret = media_db_update_send_internal(noti_item->pid, noti_item->update_item, noti_item->update_type, noti_item->path, noti_item->media_uuid, noti_item->media_type, noti_item->mime_type);
+       if (item && item->path) {
+               ret = media_db_update_send_internal(item->pid, item->update_item, item->update_type, item->path, item->media_uuid, item->media_type, item->mime_type);
                if (ret != MS_MEDIA_ERR_NONE) {
-                       media_svc_sec_error("media_db_update_send_internal failed : %d [%s]", ret, noti_item->path);
-                       ret = MS_MEDIA_ERR_INTERNAL;
+                       media_svc_sec_error("media_db_update_send_internal failed : %d [%s]", ret, item->path);
                } else {
                        media_svc_debug("media_db_update_send_internal success");
                }
        } else {
                media_svc_debug("invalid path");
-               ret = MS_MEDIA_ERR_INVALID_PARAMETER;
        }
+}
 
-       return ret;
+static void __media_svc_destroy_noti_item(gpointer data)
+{
+       media_svc_noti_item *item = (media_svc_noti_item *)data;
+
+       SAFE_FREE(item->media_uuid);
+       SAFE_FREE(item->path);
+       SAFE_FREE(item->mime_type);
+       SAFE_FREE(item);
 }
 
 int _media_svc_publish_noti(media_item_update_type_e update_type, const char *path, media_type_e media_type, const char *uuid, const char *mime_type)
@@ -78,70 +85,40 @@ void _media_svc_set_noti_from_pid(int pid)
        g_noti_from_pid = pid;
 }
 
-int _media_svc_create_noti_list(int count)
+void _media_svc_initialize_noti_list(void)
 {
-       SAFE_FREE(g_inserted_noti_list);
-
-       g_inserted_noti_list = calloc(count, sizeof(media_svc_noti_item));
-       if (g_inserted_noti_list == NULL) {
-               media_svc_error("Failed to prepare noti items");
-               return MS_MEDIA_ERR_OUT_OF_MEMORY;
-       }
+       if (g_inserted_noti_list)
+               g_slist_free_full(g_inserted_noti_list, __media_svc_destroy_noti_item);
 
-       return MS_MEDIA_ERR_NONE;
+       g_inserted_noti_list = NULL;
 }
 
-int _media_svc_insert_item_to_noti_list(media_svc_content_info_s *content_info, int cnt)
+void _media_svc_insert_item_to_noti_list(media_svc_content_info_s *content_info)
 {
-       media_svc_noti_item *noti_list = g_inserted_noti_list;
-
-       if (noti_list && content_info) {
-               noti_list[cnt].pid = g_noti_from_pid;
-               noti_list[cnt].update_item = MS_MEDIA_ITEM_INSERT; /* INSERT */
-               noti_list[cnt].update_type = MS_MEDIA_ITEM_FILE;
-               noti_list[cnt].media_type = content_info->media_type;
-               if (content_info->media_uuid)
-                       noti_list[cnt].media_uuid = strdup(content_info->media_uuid);
-               if (content_info->path)
-                       noti_list[cnt].path = strdup(content_info->path);
-               if (content_info->mime_type)
-                       noti_list[cnt].mime_type = strdup(content_info->mime_type);
-       }
-
-       return MS_MEDIA_ERR_NONE;
-}
+       media_svc_noti_item *item = NULL;
 
-int _media_svc_destroy_noti_list(int all_cnt)
-{
-       int i = 0;
-       media_svc_noti_item *noti_list = g_inserted_noti_list;
-
-       if (noti_list) {
-               for (i = 0; i < all_cnt; i++) {
-                       SAFE_FREE(noti_list[i].media_uuid);
-                       SAFE_FREE(noti_list[i].path);
-                       SAFE_FREE(noti_list[i].mime_type);
-               }
+       if (!content_info)
+               return;
 
-               SAFE_FREE(g_inserted_noti_list);
-               g_inserted_noti_list = NULL;
+       item = (media_svc_noti_item *) malloc(sizeof(media_svc_noti_item));
+       if (item) {
+               item->pid = g_noti_from_pid;
+               item->update_item = MS_MEDIA_ITEM_INSERT; /* INSERT */
+               item->update_type = MS_MEDIA_ITEM_FILE;
+               item->media_type = content_info->media_type;
+               item->media_uuid = g_strdup(content_info->media_uuid);
+               item->path = g_strdup(content_info->path);
+               item->mime_type = g_strdup(content_info->mime_type);
+
+               g_inserted_noti_list = g_slist_append(g_inserted_noti_list, (gpointer)item);
+       } else {
+               media_svc_error("Allocation failed");
        }
-
-       return MS_MEDIA_ERR_NONE;
 }
 
-int _media_svc_publish_noti_list(int all_cnt)
+void _media_svc_publish_noti_list(void)
 {
-       int ret = MS_MEDIA_ERR_NONE;
-       int idx = 0;
-       media_svc_noti_item *noti_list = g_inserted_noti_list;
-
-       if (noti_list) {
-               for (idx = 0; idx < all_cnt; idx++)
-                       ret = __media_svc_publish_noti_by_item(&(noti_list[idx]));
-       }
-
-       return ret;
+       g_slist_foreach(g_inserted_noti_list, __media_svc_publish_noti_by_item, NULL);
 }
 
 int _media_svc_destroy_noti_item(media_svc_noti_item *item)
index 7044f92..387cf7f 100755 (executable)
 #include "media-svc-noti.h"
 #include "media-svc-storage.h"
 
-static __thread int g_media_svc_item_validity_data_cnt = 1;
+static __thread int g_media_svc_item_validity_data_cnt = 0;
 static __thread int g_media_svc_item_validity_cur_data_cnt = 0;
 
-static __thread int g_media_svc_insert_item_data_cnt = 1;
+static __thread int g_media_svc_insert_item_data_cnt = 0;
 static __thread int g_media_svc_insert_item_cur_data_cnt = 0;
 
 /* Flag for items to be published by notification */
@@ -191,9 +191,7 @@ int media_svc_insert_item_begin(int data_cnt, bool with_noti, int from_pid)
        /* Prepare for making noti item list */
        if (with_noti) {
                media_svc_debug("making noti list from pid[%d]", from_pid);
-               if (_media_svc_create_noti_list(data_cnt) != MS_MEDIA_ERR_NONE)
-                       return MS_MEDIA_ERR_OUT_OF_MEMORY;
-
+               _media_svc_initialize_noti_list();
                _media_svc_set_noti_from_pid(from_pid);
                g_insert_with_noti = true;
        }
@@ -208,18 +206,17 @@ int media_svc_insert_item_end(uid_t uid)
        media_svc_debug_fenter();
 
        if (g_media_svc_insert_item_cur_data_cnt > 0) {
-
                ret = _media_svc_list_query_do(MEDIA_SVC_QUERY_INSERT_ITEM, uid);
                if (g_insert_with_noti) {
                        media_svc_debug("sending noti list");
-                       _media_svc_publish_noti_list(g_media_svc_insert_item_cur_data_cnt);
-                       _media_svc_destroy_noti_list(g_media_svc_insert_item_cur_data_cnt);
+                       _media_svc_publish_noti_list();
+                       _media_svc_initialize_noti_list();
                        g_insert_with_noti = false;
                        _media_svc_set_noti_from_pid(-1);
                }
        }
 
-       g_media_svc_insert_item_data_cnt = 1;
+       g_media_svc_insert_item_data_cnt = 0;
        g_media_svc_insert_item_cur_data_cnt = 0;
 
        return ret;
@@ -267,50 +264,22 @@ int media_svc_insert_item_bulk(sqlite3 *handle, const char *storage_id, ms_user_
        content_info.folder_uuid = g_strdup(folder_uuid);
        media_svc_retv_del_if(content_info.folder_uuid == NULL, MS_MEDIA_ERR_INTERNAL, &content_info);
 
-       if (g_media_svc_insert_item_data_cnt == 1) {
-
-               ret = _media_svc_insert_item_with_data(true, &content_info, false, uid);
-               media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
-
-               if (g_insert_with_noti)
-                       _media_svc_insert_item_to_noti_list(&content_info, g_media_svc_insert_item_cur_data_cnt++);
-
-       } else if (g_media_svc_insert_item_cur_data_cnt < (g_media_svc_insert_item_data_cnt - 1)) {
-
-               ret = _media_svc_insert_item_with_data(true, &content_info, true, uid);
-               media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
-
-               if (g_insert_with_noti)
-                       _media_svc_insert_item_to_noti_list(&content_info, g_media_svc_insert_item_cur_data_cnt);
-
-               g_media_svc_insert_item_cur_data_cnt++;
-
-       } else if (g_media_svc_insert_item_cur_data_cnt == (g_media_svc_insert_item_data_cnt - 1)) {
-
-               ret = _media_svc_insert_item_with_data(true, &content_info, true, uid);
-               media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
+       ret = _media_svc_insert_item_with_data(true, &content_info, true, uid);
+       media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
 
-               if (g_insert_with_noti)
-                       _media_svc_insert_item_to_noti_list(&content_info, g_media_svc_insert_item_cur_data_cnt);
+       if (g_insert_with_noti)
+               _media_svc_insert_item_to_noti_list(&content_info);
 
+       if (++g_media_svc_insert_item_cur_data_cnt == g_media_svc_insert_item_data_cnt) {
                ret = _media_svc_list_query_do(MEDIA_SVC_QUERY_INSERT_ITEM, uid);
                media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
 
                if (g_insert_with_noti) {
-                       _media_svc_publish_noti_list(g_media_svc_insert_item_cur_data_cnt + 1);
-                       _media_svc_destroy_noti_list(g_media_svc_insert_item_cur_data_cnt + 1);
-
-                       /* Recreate noti list */
-                       ret = _media_svc_create_noti_list(g_media_svc_insert_item_data_cnt);
-                       media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info);
+                       _media_svc_publish_noti_list();
+                       _media_svc_initialize_noti_list();
                }
 
                g_media_svc_insert_item_cur_data_cnt = 0;
-
-       } else {
-               media_svc_error("Error in media_svc_insert_item_bulk");
-               _media_svc_destroy_content_info(&content_info);
-               return MS_MEDIA_ERR_INTERNAL;
        }
 
        _media_svc_destroy_content_info(&content_info);
@@ -476,7 +445,7 @@ int media_svc_set_item_validity_end(uid_t uid)
        if (g_media_svc_item_validity_cur_data_cnt > 0)
                ret = _media_svc_list_query_do(MEDIA_SVC_QUERY_SET_ITEM_VALIDITY, uid);
 
-       g_media_svc_item_validity_data_cnt = 1;
+       g_media_svc_item_validity_data_cnt = 0;
        g_media_svc_item_validity_cur_data_cnt = 0;
 
        return ret;
@@ -486,34 +455,17 @@ int media_svc_set_item_validity(const char *path, int validity, uid_t uid)
 {
        int ret = MS_MEDIA_ERR_NONE;
 
-       if (g_media_svc_item_validity_data_cnt == 1) {
-
-               return _media_svc_update_item_validity(path, validity, false, uid);
-
-       } else if (g_media_svc_item_validity_cur_data_cnt < (g_media_svc_item_validity_data_cnt - 1)) {
-
-               ret = _media_svc_update_item_validity(path, validity, true, uid);
-               media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
-
-               g_media_svc_item_validity_cur_data_cnt++;
-
-       } else if (g_media_svc_item_validity_cur_data_cnt == (g_media_svc_item_validity_data_cnt - 1)) {
-
-               ret = _media_svc_update_item_validity(path, validity, true, uid);
-               media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
+       ret = _media_svc_update_item_validity(path, validity, true, uid);
+       media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
 
+       if (++g_media_svc_item_validity_cur_data_cnt == g_media_svc_item_validity_data_cnt) {
                ret = _media_svc_list_query_do(MEDIA_SVC_QUERY_SET_ITEM_VALIDITY, uid);
                media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
 
                g_media_svc_item_validity_cur_data_cnt = 0;
-
-       } else {
-
-               media_svc_error("Error in media_svc_set_item_validity");
-               return MS_MEDIA_ERR_INTERNAL;
        }
 
-       return MS_MEDIA_ERR_NONE;
+       return ret;
 }
 
 int media_svc_delete_item_by_path(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid)
index 24cde31..680483c 100755 (executable)
@@ -41,10 +41,9 @@ struct _media_svc_noti_item {
 };
 
 void _media_svc_set_noti_from_pid(int pid);
-int _media_svc_create_noti_list(int count);
-int _media_svc_insert_item_to_noti_list(media_svc_content_info_s *content_info, int cnt);
-int _media_svc_destroy_noti_list(int all_cnt);
-int _media_svc_publish_noti_list(int all_cnt);
+void _media_svc_initialize_noti_list(void);
+void _media_svc_insert_item_to_noti_list(media_svc_content_info_s *content_info);
+void _media_svc_publish_noti_list(void);
 int _media_svc_destroy_noti_item(media_svc_noti_item *item);
 int _media_svc_publish_noti(media_item_update_type_e update_type, const char *path, media_type_e media_type, const char *uuid, const char *mime_type);
 int _media_svc_publish_dir_noti(media_item_update_type_e update_type, const char *path, const char *uuid, int pid);