/*
- * libnotification
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Seungtaek Chung <seungtaek.chung@samsung.com>, Mi-Ju Lee <miju52.lee@samsung.com>, Xi Zhichan <zhichan.xi@samsung.com>
+ * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
#include <stdio.h>
#define DBUS_SERVICE_DBUS "org.freedesktop.DBus"
#define DBUS_PATH_DBUS "/org/freedesktop/DBus"
#define DBUS_INTERFACE_DBUS "org.freedesktop.DBus"
+#define ERR_BUFFER_SIZE 1024
static const gchar *_bus_name = NULL;
static GDBusConnection *_gdbus_conn = NULL;
static int provider_monitor_id = 0;
static int is_master_started = 0;
-static const char *NOTI_DATA_STRING[] = {
- "NOTIFICATION_DATA_TYPE_NOTI_TYPE",
- "NOTIFICATION_DATA_TYPE_LAYOUT",
- "NOTIFICATION_DATA_TYPE_GROUP_ID",
- "NOTIFICATION_DATA_TYPE_INTERNAL_GROUP_ID",
- "NOTIFICATION_DATA_TYPE_PRIV_ID",
- "NOTIFICATION_DATA_TYPE_CALLER_PKGNAME",
- "NOTIFICATION_DATA_TYPE_LAUNCH_PKGNAME",
- "NOTIFICATION_DATA_TYPE_ARGS",
- "NOTIFICATION_DATA_TYPE_GROUP_ARGS",
- "NOTIFICATION_DATA_TYPE_EXECUTE_OPTION",
- "NOTIFICATION_DATA_TYPE_SERVICE_RESPONDING",
- "NOTIFICATION_DATA_TYPE_SERVICE_SINGLE_LAUNCH",
- "NOTIFICATION_DATA_TYPE_SERVICE_MULTI_LAUNCH",
- "NOTIFICATION_DATA_TYPE_BUTTON1_EVENT",
- "NOTIFICATION_DATA_TYPE_BUTTON2_EVENT",
- "NOTIFICATION_DATA_TYPE_BUTTON3_EVENT",
- "NOTIFICATION_DATA_TYPE_BUTTON4_EVENT",
- "NOTIFICATION_DATA_TYPE_BUTTON5_EVENT",
- "NOTIFICATION_DATA_TYPE_BUTTON6_EVENT",
- "NOTIFICATION_DATA_TYPE_ICON_EVENT",
- "NOTIFICATION_DATA_TYPE_THUMBNAIL_EVENT",
- "NOTIFICATION_DATA_TYPE_DOMAIN",
- "NOTIFICATION_DATA_TYPE_DIR",
- "NOTIFICATION_DATA_TYPE_TEXT",
- "NOTIFICATION_DATA_TYPE_KEY",
- "NOTIFICATION_DATA_TYPE_FORMAT_ARGS",
- "NOTIFICATION_DATA_TYPE_NUM_FORMAT_ARGS",
- "NOTIFICATION_DATA_TYPE_IMAGE_PATH",
- "NOTIFICATION_DATA_TYPE_SOUND_TYPE",
- "NOTIFICATION_DATA_TYPE_SOUND_PATH",
- "NOTIFICATION_DATA_TYPE_VIBRATION_TYPE",
- "NOTIFICATION_DATA_TYPE_VIBRATION_PATH",
- "NOTIFICATION_DATA_TYPE_LED_OPERATION",
- "NOTIFICATION_DATA_TYPE_LED_ARGB",
- "NOTIFICATION_DATA_TYPE_LED_ON_MS",
- "NOTIFICATION_DATA_TYPE_LED_OFF_MS",
- "NOTIFICATION_DATA_TYPE_TIME",
- "NOTIFICATION_DATA_TYPE_INSERT_TIME",
- "NOTIFICATION_DATA_TYPE_FLAGS_FOR_PROPERTY",
- "NOTIFICATION_DATA_TYPE_DISPLAY_APPLIST",
- "NOTIFICATION_DATA_TYPE_PROGRESS_SIZE",
- "NOTIFICATION_DATA_TYPE_PROGRESS_PERCENTAGE",
- "NOTIFICATION_DATA_TYPE_APP_ICON_PATH",
- "NOTIFICATION_DATA_TYPE_APP_NAME",
- "NOTIFICATION_DATA_TYPE_TEMP_TITLE",
- "NOTIFICATION_DATA_TYPE_TEMP_CONTENT",
- "NOTIFICATION_DATA_TYPE_TAG",
- "NOTIFICATION_DATA_TYPE_ONGOING_FLAG",
- "NOTIFICATION_DATA_TYPE_AUTO_REMOVE",
-};
-
-
typedef struct _result_cb_item {
void (*result_cb)(int priv_id, int result, void *data);
void *data;
static int _ipc_monitor_deregister(void);
static void _do_deffered_task(void);
-static void _print_noti(notification_h noti) {
+static void _print_noti(notification_h noti)
+{
char *pkgname = NULL;
char *text = NULL;
char *content = NULL;
const char *tag = NULL;
+ notification_vibration_type_e vib_type = NOTIFICATION_VIBRATION_TYPE_NONE;
notification_get_pkgname(noti, &pkgname);
notification_get_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, &text);
notification_get_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT, &content);
notification_get_tag(noti, &tag);
+ notification_get_vibration(noti, &vib_type, NULL);
- NOTIFICATION_DBG("client print_noti pkgname = %s ", pkgname );
- NOTIFICATION_DBG("client print_noti title = %s ", text );
- NOTIFICATION_DBG("client print_noti content = %s ", content );
- NOTIFICATION_DBG("client print_noti tag = %s ", tag );
+ NOTIFICATION_DBG("client print_noti pkgname = %s ", pkgname);
+ NOTIFICATION_DBG("client print_noti title = %s ", text);
+ NOTIFICATION_DBG("client print_noti content = %s ", content);
+ NOTIFICATION_DBG("client print_noti tag = %s ", tag);
NOTIFICATION_DBG("client print_noti priv_id = %d ", noti->priv_id);
NOTIFICATION_DBG("client print_noti vibration_path = %s ", noti->vibration_path);
+ NOTIFICATION_DBG("client print_noti vibration_type = %d ", vib_type);
}
static inline char *_string_get(char *string)
}
}
- if(result)
+ if (result)
g_variant_unref(result);
return is_master_started;
static inline char *_dup_string(const char *string)
{
char *ret;
+ char err_buf[ERR_BUFFER_SIZE];
if (string == NULL)
return NULL;
ret = strdup(string);
if (!ret)
- NOTIFICATION_ERR("Error: %s\n", strerror(errno));
+ NOTIFICATION_ERR("Error: %s\n", strerror_r(errno, err_buf, sizeof(err_buf)));
return ret;
}
g_object_unref(msg);
if (!*reply) {
+ ret = NOTIFICATION_ERROR_SERVICE_NOT_READY;
if (err != NULL) {
NOTIFICATION_ERR("No reply. cmd = %s, error = %s", cmd, err->message);
+ if (err->code == G_DBUS_ERROR_ACCESS_DENIED)
+ ret = NOTIFICATION_ERROR_PERMISSION_DENIED;
g_error_free(err);
}
- return NOTIFICATION_ERROR_SERVICE_NOT_READY;
+ return ret;
}
if (g_dbus_message_to_gerror(*reply, &err)) {
- ret = err->code;
- NOTIFICATION_ERR("_send_sync_noti cmd = %s, error %s", cmd, err->message);
+ if (err->code == G_DBUS_ERROR_ACCESS_DENIED)
+ ret = NOTIFICATION_ERROR_PERMISSION_DENIED;
+ else
+ ret = err->code;
+
+ NOTIFICATION_ERR("_send_sync_noti cmd = %s, error %s, err code %d", cmd, err->message, ret);
g_error_free(err);
return ret;
}
result = NOTIFICATION_ERROR_SERVICE_NOT_READY;
} else if (g_dbus_message_to_gerror(reply, &err)) {
- result = err->code;
- g_error_free(err);
+ if (err->code == G_DBUS_ERROR_ACCESS_DENIED)
+ result = NOTIFICATION_ERROR_PERMISSION_DENIED;
+ else
+ result = err->code;
+
NOTIFICATION_ERR("_send_async_noti error %s", err->message);
+ g_error_free(err);
}
NOTIFICATION_DBG("_send_async_noti done !![%d]", result);
int notification_ipc_request_insert(notification_h noti, int *priv_id)
{
int result;
- int id;
+ int id = NOTIFICATION_PRIV_ID_NONE;
GDBusMessage *reply = NULL;
GVariant *body;
GVariant *reply_body;
*priv_id = id;
}
- if(reply)
+ if (reply)
g_object_unref(reply);
- NOTIFICATION_DBG("notification_ipc_request_insert done [priv_id : %d, result: %d]", *priv_id, result);
+ NOTIFICATION_DBG("notification_ipc_request_insert done [priv_id : %d, result: %d]", id, result);
return result;
}
int notification_ipc_request_update(notification_h noti)
{
int result;
- int priv_id;
+ int priv_id = NOTIFICATION_PRIV_ID_NONE;
GDBusMessage *reply = NULL;
GVariant *body;
g_variant_get(reply_body, "(i)", &priv_id);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_request_update done [result: %d, priv_id :%d]", result, priv_id);
body = g_variant_new("(i)", NOTIFICATION_OP_REFRESH);
result = _send_sync_noti(body, &reply, "refresh_noti");
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_ERR("notification_ipc_request_refresh done [result: %d]", result);
g_variant_get(reply_body, "(i)", &id);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_ERR("notification_ipc_request_delete_single done [result: %d]", result);
return result;
}
+ if (!pkgname)
+ pkgname = "";
+
body = g_variant_new("(si)", pkgname, type);
result = _send_sync_noti(body, &reply, "del_noti_multiple");
NOTIFICATION_ERR("num deleted:%d", num_deleted);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
return result;
return result;
}
+ if (!pkgname)
+ pkgname = "";
+
body = g_variant_new("(ss)", pkgname, tag);
result = _send_sync_noti(body, &reply, "load_noti_by_tag");
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_request_load_noti_by_tag done [result: %d]", result);
return result;
}
+ if (!pkgname)
+ pkgname = "";
+
body = g_variant_new("(si)", pkgname, priv_id);
result = _send_sync_noti(body, &reply, "load_noti_by_priv_id");
_print_noti(noti);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_request_load_noti_by_priv_id done [result: %d]", result);
return result;
}
+ if (!pkgname)
+ pkgname = "";
+
body = g_variant_new("(isii)", type, pkgname, group_id, priv_id);
result = _send_sync_noti(body, &reply, "get_noti_count");
NOTIFICATION_DBG("noti count [%d]", re_count);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_request_get_count done [result: %d]", result);
GVariant *iter_body;
GVariantIter *iter;
notification_h noti;
+ GVariant *noti_body;
result = _dbus_init();
if (result != NOTIFICATION_ERROR_NONE) {
while (g_variant_iter_loop(iter, "(v)", &iter_body)) {
noti = notification_create(NOTIFICATION_TYPE_NOTI);
- notification_ipc_make_noti_from_gvariant(noti, iter_body);
+ g_variant_get(iter_body, "(v)", ¬i_body);
+ notification_ipc_make_noti_from_gvariant(noti, noti_body);
_print_noti(noti);
*list = notification_list_append(*list, noti);
}
g_variant_iter_free(iter);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_request_load_noti_grouping_list done [result: %d]", result);
GVariant *iter_body;
GVariantIter *iter;
notification_h noti;
+ GVariant *noti_body;
result = _dbus_init();
if (result != NOTIFICATION_ERROR_NONE) {
while (g_variant_iter_loop(iter, "(v)", &iter_body)) {
noti = notification_create(NOTIFICATION_TYPE_NOTI);
- notification_ipc_make_noti_from_gvariant(noti, iter_body);
+ g_variant_get(iter_body, "(v)", ¬i_body);
+ notification_ipc_make_noti_from_gvariant(noti, noti_body);
_print_noti(noti);
*list = notification_list_append(*list, noti);
}
g_variant_iter_free(iter);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_request_load_noti_detail_list done [result: %d]", result);
g_variant_iter_free(iter);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_request_get_setting_array done [result: %d]", result);
g_variant_unref(setting_body);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_request_get_setting_by_package_name done [result: %d]", result);
g_variant_unref(setting_body);
}
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_request_load_system_setting done [result: %d]", result);
result = _send_sync_noti(body, &reply, "update_noti_setting");
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_DBG("notification_ipc_update_setting done [result: %d]", result);
return result;
}
-int notification_ipc_noti_setting_property_set(const char *pkgname, const char *property, const char *value)
-{
- int result;
- GDBusMessage *reply = NULL;
- GVariant *body;
-
- result = _dbus_init();
- if (result != NOTIFICATION_ERROR_NONE) {
- NOTIFICATION_ERR("Can't init dbus %d", result);
- return result;
- }
- body = g_variant_new("(sss)", pkgname, property, value);
-
- result = _send_sync_noti(body, &reply, "set_noti_property");
-
- if (reply)
- g_object_unref(reply);
-
- NOTIFICATION_DBG("notification_ipc_noti_setting_property_set done [result: %d]", result);
- return result;
-}
-
-int notification_ipc_noti_setting_property_get(const char *pkgname, const char *property, char **value)
-{
- int result;
- GDBusMessage *reply = NULL;
- GVariant *body;
- GVariant *reply_body = NULL;
- gchar *ret_val;
-
- result = _dbus_init();
-
- if (result != NOTIFICATION_ERROR_NONE) {
- NOTIFICATION_ERR("Can't init dbus %d", result);
- return result;
- }
-
- body = g_variant_new("(ss)", pkgname, property);
- result = _send_sync_noti(body, &reply, "get_noti_property");
-
- if (result == NOTIFICATION_ERROR_NONE) {
- reply_body = g_dbus_message_get_body(reply);
- g_variant_get(body, "(s)", &ret_val);
-
- if (ret_val != NULL) {
- *value = g_strdup(ret_val);
- g_free(ret_val);
- }
- }
-
- if(reply)
- g_object_unref(reply);
-
- NOTIFICATION_DBG("notification_ipc_noti_setting_property_get done [result: %d]", result);
- return result;
-}
-
EXPORT_API GVariant *notification_ipc_make_gvariant_from_noti(notification_h noti)
{
NOTIFICATION_DBG("make gvariant from noti");
if (noti->sound_path)
g_variant_builder_add(&builder, "{iv}", NOTIFICATION_DATA_TYPE_SOUND_PATH, g_variant_new_string((const gchar *)noti->sound_path));
- if (noti->vibration_type != NOTIFICATION_VIBRATION_TYPE_NONE)
- g_variant_builder_add(&builder, "{iv}", NOTIFICATION_DATA_TYPE_VIBRATION_TYPE, g_variant_new_int32(noti->vibration_type));
+ g_variant_builder_add(&builder, "{iv}", NOTIFICATION_DATA_TYPE_VIBRATION_TYPE, g_variant_new_int32(noti->vibration_type));
if (noti->vibration_path)
g_variant_builder_add(&builder, "{iv}", NOTIFICATION_DATA_TYPE_VIBRATION_PATH, g_variant_new_string((const gchar *)noti->vibration_path));
return body;
}
-static gboolean _variant_to_int_dict(GHashTable **dict, GVariant *variant) {
-
+static gboolean _variant_to_int_dict(GHashTable **dict, GVariant *variant)
+{
GVariantIter iter;
int key;
int *hash_key;
while (g_variant_iter_next(&iter, "{iv}", &key, &value)) {
hash_key = (int *)calloc(sizeof(int), 1);
if (hash_key == NULL) {
- g_hash_table_remove_all(*dict);
+ g_hash_table_unref(*dict);
return FALSE;
}
*hash_key = key;
noti->temp_content = _dup_string(temp_content);
noti->tag = _dup_string(tag);
- g_hash_table_remove_all(dict);
+ g_hash_table_unref(dict);
return NOTIFICATION_ERROR_NONE;
}
result = _send_sync_noti(NULL, &reply, "noti_service_register");
- if(reply)
+ if (reply)
g_object_unref(reply);
NOTIFICATION_ERR("_send_service_register done = %s, result = %d", _bus_name, result);
{
return _ipc_monitor_deregister();
}
+