Add signal handler for del_noti_multiple_by_viewer 76/196576/3
authormk5004.lee <mk5004.lee@samsung.com>
Wed, 2 Jan 2019 11:10:27 +0000 (20:10 +0900)
committermk5004.lee <mk5004.lee@samsung.com>
Mon, 7 Jan 2019 08:25:39 +0000 (17:25 +0900)
Change-Id: I93aa97a7b589b42324cccbeaf7fc3e5c46774c0d
Signed-off-by: mk5004.lee <mk5004.lee@samsung.com>
include/notification_service.h
src/notification_service.c

index 4d3fffd..8060814 100755 (executable)
@@ -26,6 +26,7 @@ int notification_update_noti(GVariant *parameters, GVariant **reply_body,
 int notification_refresh_noti(GVariant *parameters, GVariant **reply_body, uid_t uid);
 int notification_del_noti_single(GVariant *parameters, GVariant **reply_body, uid_t uid);
 int notification_del_noti_multiple(GVariant *parameters, GVariant **reply_body, uid_t uid);
+int notification_del_noti_multiple_by_viewer(GVariant *parameters, GVariant **reply_body, uid_t uid);
 int notification_set_noti_property(GVariant *parameters, GVariant **reply_body, uid_t uid);
 int notification_get_noti_property(GVariant *parameters, GVariant **reply_body, uid_t uid);
 int notification_get_noti_count(GVariant *parameters, GVariant **reply_body, uid_t uid);
index 22d3ae7..eccbe51 100755 (executable)
@@ -195,6 +195,8 @@ static void _noti_dbus_method_call_handler(GDBusConnection *conn,
                ret = notification_check_event_receiver(parameters, &reply_body);
        } else if (g_strcmp0(method_name, "reset_event_handler") == 0) {
                ret = notification_reset_event_receiver(parameters, &reply_body, sender);
+       } else if (g_strcmp0(method_name, "del_noti_multiple_by_viewer") == 0) {
+               ret = notification_del_noti_multiple_by_viewer(parameters, &reply_body, uid);
        }
 
        if (ret == NOTIFICATION_ERROR_NONE) {
@@ -395,6 +397,12 @@ int notification_register_dbus_interface(void)
                        "          <arg type='i' name='priv_id' direction='in'/>"
                        "        </method>"
 
+                       "        <method name='del_noti_multiple_by_viewer'>"
+                       "          <arg type='i' name='viewer' direction='in'/>"
+                       "          <arg type='i' name='uid' direction='in'/>"
+                       "          <arg type='i' name='priv_id' direction='out'/>"
+                       "        </method>"
+
                        "        <method name='post_toast'>"
                        "        </method>"
                        "  </interface>"
@@ -1540,6 +1548,73 @@ int notification_del_noti_multiple(GVariant *parameters, GVariant **reply_body,
        return ret;
 }
 
+int notification_del_noti_multiple_by_viewer(GVariant *parameters,
+                       GVariant **reply_body, uid_t uid)
+{
+       int ret;
+       int viewer;
+       int deleted_num;
+       GList *deleted_list = NULL;
+       GList *iter_list = NULL;
+       GVariant *deleted_noti_list;
+       GVariantBuilder *builder;
+       uid_t param_uid;
+
+       g_variant_get(parameters, "(ii)", &viewer, &param_uid);
+
+       ret = _validate_and_set_param_uid_with_uid(uid, &param_uid);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               return ret;
+
+       ret = notification_noti_delete_all_by_viewer(viewer, &deleted_num,
+                               &deleted_list, param_uid);
+       if (ret != NOTIFICATION_ERROR_NONE) {
+               ERR("Failed to delete notifications [%d]", ret);
+               if (deleted_list != NULL)
+                       free(deleted_list);
+               return ret;
+       }
+
+       if (deleted_num > 0) {
+               builder = g_variant_builder_new(G_VARIANT_TYPE("a(i)"));
+
+               iter_list = deleted_list;
+               while(iter_list) {
+                       g_variant_builder_add(builder, "(i)",
+                                       GPOINTER_TO_INT(iter_list->data));
+                       iter_list = g_list_next(iter_list);
+               }
+
+               if (iter_list)
+                       g_list_free(iter_list);
+
+               if (deleted_list)
+                       g_list_free(deleted_list);
+
+               deleted_noti_list = g_variant_new("(a(i)ii)", builder,
+                                               deleted_num, param_uid);
+               g_variant_builder_unref(builder);
+
+               ret = send_notify(deleted_noti_list,
+                       "delete_multiple_by_viewer_notify", &_monitoring_hash,
+                       PROVIDER_NOTI_INTERFACE_NAME, param_uid);
+               g_variant_unref(deleted_noti_list);
+               if (ret != NOTIFICATION_ERROR_NONE) {
+                       ERR("Failed to send notify [%d]", ret);
+                       return ret;
+               }
+       }
+
+       *reply_body = g_variant_new("(i)", deleted_num);
+       if (*reply_body == NULL) {
+               ERR("Failed to make reply_body");
+               return NOTIFICATION_ERROR_OUT_OF_MEMORY;
+       }
+
+       INFO("deleted num[%d]", deleted_num);
+       return ret;
+}
+
 /* get_noti_count */
 int notification_get_noti_count(GVariant *parameters, GVariant **reply_body, uid_t uid)
 {