From fb8e009f1b32034a4778c878a6beebc95191db87 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Tue, 17 Jan 2017 19:31:18 +0900 Subject: [PATCH 01/16] Remove profile-specific dependency code - Include shortcut package in wearable profile. - We plan to remove profile dependencies using plug-in next. Signed-off-by: seungha.son Change-Id: I6e8b6ed18c36fa9db50260a5980b79838fba2ddc --- CMakeLists.txt | 100 ++++++++++++------------------------ include/service_common.h | 4 +- packaging/data-provider-master.spec | 2 - src/main.c | 12 ++--- src/service_common.c | 2 - 5 files changed, 38 insertions(+), 82 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 600f0ca..946d2da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,52 +6,28 @@ SET(EXEC_PREFIX "\${prefix}") SET(LIBDIR ${LIB_INSTALL_DIR}) SET(INCLUDEDIR "\${prefix}/include") -IF (WEARABLE) - INCLUDE(FindPkgConfig) - pkg_check_modules(pkg REQUIRED - dlog - aul - vconf - sqlite3 - db-util - glib-2.0 - gio-2.0 - bundle - ecore - eina - pkgmgr - notification - badge - libsmack - pkgmgr-info - libsystemd-daemon - capi-appfw-app-manager - alarm-service - ) -ELSE (WEARABLE) - INCLUDE(FindPkgConfig) - pkg_check_modules(pkg REQUIRED - dlog - aul - vconf - sqlite3 - db-util - glib-2.0 - gio-2.0 - bundle - ecore - eina - pkgmgr - notification - badge - shortcut - libsmack - pkgmgr-info - libsystemd-daemon - capi-appfw-app-manager - alarm-service - ) -ENDIF (WEARABLE) +INCLUDE(FindPkgConfig) +pkg_check_modules(pkg REQUIRED + dlog + aul + vconf + sqlite3 + db-util + glib-2.0 + gio-2.0 + bundle + ecore + eina + pkgmgr + notification + badge + libsmack + shortcut + pkgmgr-info + libsystemd-daemon + capi-appfw-app-manager + alarm-service +) SET(PACKAGE "${PROJECT_NAME}") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g -fPIE") @@ -82,28 +58,16 @@ ELSEIF (WEARABLE) ADD_DEFINITIONS("-DWEARABLE") ENDIF (MOBILE) -IF (WEARABLE) - SET(BUILD_SOURCE - src/main.c - src/util.c - src/pkgmgr.c - src/badge_service.c - src/notification_service.c - src/service_common.c - src/critical_log.c - ) -ELSE (WEARABLE) - SET(BUILD_SOURCE - src/main.c - src/util.c - src/pkgmgr.c - src/badge_service.c - src/notification_service.c - src/service_common.c - src/shortcut_service.c - src/critical_log.c - ) -ENDIF (WEARABLE) +SET(BUILD_SOURCE + src/main.c + src/util.c + src/pkgmgr.c + src/shortcut_service.c + src/badge_service.c + src/notification_service.c + src/service_common.c + src/critical_log.c +) STRING(REPLACE "-L-l" "-l" pkg_fixed_LDFLAGS ${pkg_LDFLAGS}) STRING(REPLACE "-l" " -l" pkg_LDFLAGS ${pkg_fixed_LDFLAGS}) diff --git a/include/service_common.h b/include/service_common.h index 629b67b..b24a1a6 100755 --- a/include/service_common.h +++ b/include/service_common.h @@ -17,10 +17,8 @@ #include #include #include -#include -#ifndef WEARABLE #include -#endif +#include #define NORMAL_UID_BASE 5000 diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index df0a0e2..21f59fe 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -27,9 +27,7 @@ BuildRequires: pkgconfig(pkgmgr) BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(notification) BuildRequires: pkgconfig(badge) -%if "%{profile}" != "wearable" BuildRequires: pkgconfig(shortcut) -%endif BuildRequires: pkgconfig(libsystemd-daemon) BuildRequires: pkgconfig(alarm-service) diff --git a/src/main.c b/src/main.c index 4abec56..7329b74 100755 --- a/src/main.c +++ b/src/main.c @@ -36,11 +36,9 @@ #include "util.h" #include "critical_log.h" #include "service_common.h" +#include "shortcut_service.h" #include "notification_service.h" #include "badge_service.h" -#ifndef WEARABLE -#include "shortcut_service.h" -#endif static void lang_key_changed_cb(keynode_t *node EINA_UNUSED, void *first) { @@ -71,11 +69,11 @@ static inline int app_create(void) DbgPrint("VCONFKEY_LANGSET notify key chenaged: %d\n", ret); lang_key_changed_cb(NULL, NULL); -#ifndef WEARABLE + ret = shortcut_service_init(); if (ret < 0) DbgPrint("shortcut: %d\n", ret); -#endif + ret = notification_service_init(); if (ret < 0) DbgPrint("noti: %d\n", ret); @@ -100,11 +98,11 @@ static inline int app_terminate(void) ret = notification_service_fini(); if (ret < 0) DbgPrint("noti: %d\n", ret); -#ifndef WEARABLE + ret = shortcut_service_fini(); if (ret < 0) DbgPrint("shortcut: %d\n", ret); -#endif + DbgPrint("Terminated\n"); return 0; } diff --git a/src/service_common.c b/src/service_common.c index 8535d21..0fbb084 100755 --- a/src/service_common.c +++ b/src/service_common.c @@ -32,9 +32,7 @@ #include "service_common.h" #include "notification_service.h" #include "badge_service.h" -#ifndef WEARABLE #include "shortcut_service.h" -#endif #define PROVIDER_BUS_NAME "org.tizen.data_provider_service" #define PROVIDER_OBJECT_PATH "/org/tizen/data_provider_service" -- 2.7.4 From e09d1319147b6365653f8290d84eb99aacf0ccfa Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Wed, 18 Jan 2017 14:50:53 +0900 Subject: [PATCH 02/16] Fix versioning Signed-off-by: seungha.son Change-Id: Iec19155cec4cdab11a84c1b619232b33e8ee3dd0 --- packaging/data-provider-master.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 21f59fe..23ba711 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -40,6 +40,7 @@ Requires(post): dbus cp %{SOURCE1001} . %build +MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` %if "%{profile}" == "wearable" export MOBILE=Off export WEARABLE=On @@ -54,7 +55,13 @@ export TARGET=emulator export TARGET=device %endif -%cmake . -DNAME=%{name} -DMOBILE=${MOBILE} -DWEARABLE=${WEARABLE} -DTARGET=${TARGET} +%cmake . \ + -DNAME=%{name} \ + -DMOBILE=${MOBILE} \ + -DWEARABLE=${WEARABLE} \ + -DTARGET=${TARGET} \ + -DMAJORVER=${MAJORVER} \ + -DFULLVER=%{version} CFLAGS="${CFLAGS} -Wall -Winline -Werror" LDFLAGS="${LDFLAGS}" make %{?jobs:-j%jobs} -- 2.7.4 From c70cdc45ab2f3b0a8b35a0d1de7f412b70001b67 Mon Sep 17 00:00:00 2001 From: MyungJoo Ham Date: Wed, 18 Jan 2017 15:19:36 +0900 Subject: [PATCH 03/16] Remove unused macros/defines that breaks Tizen:Unified You are not using profile, MOBILE, WEARABLE in the code. Signed-off-by: MyungJoo Ham Change-Id: Ib07bde05ee010d9b44234c3d7a3e097750e8ef95 --- CMakeLists.txt | 6 ------ packaging/data-provider-master.spec | 9 --------- 2 files changed, 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 946d2da..a2e5130 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,12 +52,6 @@ ADD_DEFINITIONS("-DNDEBUG") ADD_DEFINITIONS("-D_USE_ECORE_TIME_GET") -IF (MOBILE) - ADD_DEFINITIONS("-DMOBILE") -ELSEIF (WEARABLE) - ADD_DEFINITIONS("-DWEARABLE") -ENDIF (MOBILE) - SET(BUILD_SOURCE src/main.c src/util.c diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 23ba711..4da18d1 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -41,13 +41,6 @@ cp %{SOURCE1001} . %build MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` -%if "%{profile}" == "wearable" -export MOBILE=Off -export WEARABLE=On -%else -export MOBILE=On -export WEARABLE=Off -%endif %ifarch %ix86 export TARGET=emulator @@ -57,8 +50,6 @@ export TARGET=device %cmake . \ -DNAME=%{name} \ - -DMOBILE=${MOBILE} \ - -DWEARABLE=${WEARABLE} \ -DTARGET=${TARGET} \ -DMAJORVER=${MAJORVER} \ -DFULLVER=%{version} -- 2.7.4 From 061b30bdcb71e4dbe23cd5aa4039a04703964eb4 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Thu, 19 Jan 2017 16:18:18 +0900 Subject: [PATCH 04/16] Release version 1.4.0 - Support function for notification, badge, shortcut - Fix some bug Signed-off-by: seungha.son Change-Id: I4c2fba7ed0ac180a9b9612be7f32326c94bf2c00 --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 4da18d1..a22d077 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.3.0 +Version: 1.4.0 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From f34dfd8cbdef8a5933ceacdb7ed0b51f642ea872 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Fri, 10 Feb 2017 12:26:04 +0900 Subject: [PATCH 05/16] Fix wrong behavior about return value of shortcut request - Currently, It is a structure in which the caller can not get a proper return value when there is a request such as shortcut add or remove. - The handling for gdbus invocation has been modified so that caller can get proper return value. - related patch : https://review.tizen.org/gerrit/#/c/114090/ Signed-off-by: seungha.son Change-Id: I24a94d5d0d137e738ecc0fd332f2c2fa5f8e0fbf --- include/shortcut_service.h | 7 +- src/shortcut_service.c | 164 +++++++++++++++++++++++++++++++++------------ 2 files changed, 126 insertions(+), 45 deletions(-) diff --git a/include/shortcut_service.h b/include/shortcut_service.h index c42295e..35cb758 100755 --- a/include/shortcut_service.h +++ b/include/shortcut_service.h @@ -19,10 +19,11 @@ extern int shortcut_service_init(void); extern int shortcut_service_fini(void); -int shortcut_add(GVariant *parameters, GVariant **reply_body, uid_t uid); -int shortcut_add_widget(GVariant *parameters, GVariant **reply_body, uid_t uid); -int shortcut_remove(GVariant *parameters, GVariant **reply_body, uid_t uid); +void shortcut_add(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid); +void shortcut_add_widget(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid); +void shortcut_remove(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid); int shortcut_register_dbus_interface(); int shortcut_get_shortcut_service_list(GVariant *parameters, GVariant **reply_body, uid_t uid); int shortcut_check_privilege(void); +int shortcut_send_return_value(GVariant *parameters, GVariant **reply_body); /* End of a file */ diff --git a/src/shortcut_service.c b/src/shortcut_service.c index 9410008..7a4e8b9 100755 --- a/src/shortcut_service.c +++ b/src/shortcut_service.c @@ -22,7 +22,11 @@ #include "debug.h" #define PROVIDER_SHORTCUT_INTERFACE_NAME "org.tizen.data_provider_shortcut_service" + +#define SHORTCUT_INVOCATION_KEY_POS 0 + static GHashTable *_monitoring_hash = NULL; +static GHashTable *_invocation_hash; static void _on_name_appeared(GDBusConnection *connection, const gchar *name, @@ -61,19 +65,25 @@ static void _shortcut_dbus_method_call_handler(GDBusConnection *conn, int ret = SHORTCUT_ERROR_NOT_SUPPORTED; uid_t uid = get_sender_uid(sender); - if (g_strcmp0(method_name, "shortcut_service_register") == 0) + if (g_strcmp0(method_name, "shortcut_service_register") == 0) { ret = service_register(parameters, &reply_body, sender, _on_name_appeared, _on_name_vanished, &_monitoring_hash, uid); - else if (g_strcmp0(method_name, "add_shortcut") == 0) - ret = shortcut_add(parameters, &reply_body, uid); - else if (g_strcmp0(method_name, "add_shortcut_widget") == 0) - ret = shortcut_add_widget(parameters, &reply_body, uid); - else if (g_strcmp0(method_name, "remove_shortcut") == 0) - ret = shortcut_remove(parameters, &reply_body, uid); - else if (g_strcmp0(method_name, "get_list") == 0) + } else if (g_strcmp0(method_name, "add_shortcut") == 0) { + shortcut_add(parameters, invocation, uid); + return; + } else if (g_strcmp0(method_name, "add_shortcut_widget") == 0) { + shortcut_add_widget(parameters, invocation, uid); + return; + } else if (g_strcmp0(method_name, "remove_shortcut") == 0) { + shortcut_remove(parameters, invocation, uid); + return; + } else if (g_strcmp0(method_name, "get_list") == 0) { ret = shortcut_get_shortcut_service_list(parameters, &reply_body, uid); - else if (g_strcmp0(method_name, "check_privilege") == 0) + } else if (g_strcmp0(method_name, "check_privilege") == 0) { ret = shortcut_check_privilege(); + } else if (g_strcmp0(method_name, "send_return_value") == 0) { + ret = shortcut_send_return_value(parameters, &reply_body); + } if (ret == SERVICE_COMMON_ERROR_NONE) { DbgPrint("shortcut service success : %d", ret); @@ -111,6 +121,7 @@ int shortcut_register_dbus_interface() " " " " + " " " " " " " " @@ -118,9 +129,11 @@ int shortcut_register_dbus_interface() " " " " " " + " " " " " " + " " " " " " " " @@ -129,16 +142,24 @@ int shortcut_register_dbus_interface() " " " " " " + " " " " " " + " " " " " " " " + " " " " " " " " + + " " + " " + " " + " " " " " "; @@ -208,64 +229,92 @@ int shortcut_get_shortcut_service_list(GVariant *parameters, GVariant **reply_bo return SERVICE_COMMON_ERROR_NONE; } +static GDBusMethodInvocation *_get_invocation(char *request_id) +{ + GDBusMethodInvocation *find_invocation; + + find_invocation = (GDBusMethodInvocation *)g_hash_table_lookup(_invocation_hash, request_id); + if (!find_invocation) + return NULL; + + return find_invocation; +} + +static void _add_invocation(GDBusMethodInvocation *invocation, char *request_id) +{ + GDBusMethodInvocation *find_invocation; + + if (request_id == NULL) + return; + + find_invocation = _get_invocation(request_id); + if (find_invocation) + return; + + g_hash_table_insert(_invocation_hash, strdup(request_id), invocation); + + DbgPrint("add invocation is done, key [%s]", request_id); +} + +static void _remove_invocation(char *request_id) +{ + if (request_id == NULL) + return; + + g_hash_table_remove(_invocation_hash, request_id); + + DbgPrint("remove invocation is done, key [%s]", request_id); +} + /* add_shortcut */ -int shortcut_add(GVariant *parameters, GVariant **reply_body, uid_t uid) +void shortcut_add(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid) { int ret = SERVICE_COMMON_ERROR_NONE; + char *request_id = NULL; + + g_variant_get_child(parameters, SHORTCUT_INVOCATION_KEY_POS, "&s", &request_id); + + _add_invocation(invocation, request_id); ret = send_notify(parameters, "add_shortcut_notify", &_monitoring_hash, PROVIDER_SHORTCUT_INTERFACE_NAME, uid); - if (ret != SERVICE_COMMON_ERROR_NONE) { + if (ret != SERVICE_COMMON_ERROR_NONE) ErrPrint("failed to send notify:%d\n", ret); - return ret; - } - - *reply_body = g_variant_new("()"); - if (*reply_body == NULL) { - ErrPrint("Cannot make reply body"); - return SHORTCUT_ERROR_OUT_OF_MEMORY; - } - return ret; + DbgPrint("shortcut_add is done"); } /* add_shortcut_widget */ -int shortcut_add_widget(GVariant *parameters, GVariant **reply_body, uid_t uid) +void shortcut_add_widget(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid) { int ret = SERVICE_COMMON_ERROR_NONE; + char *request_id = NULL; + + g_variant_get_child(parameters, SHORTCUT_INVOCATION_KEY_POS, "&s", &request_id); + + _add_invocation(invocation, request_id); ret = send_notify(parameters, "add_shortcut_widget_notify", &_monitoring_hash, PROVIDER_SHORTCUT_INTERFACE_NAME, uid); - if (ret != SERVICE_COMMON_ERROR_NONE) { + if (ret != SERVICE_COMMON_ERROR_NONE) ErrPrint("failed to send notify:%d\n", ret); - return ret; - } - - *reply_body = g_variant_new("()"); - if (*reply_body == NULL) { - ErrPrint("Cannot make reply body"); - return SHORTCUT_ERROR_OUT_OF_MEMORY; - } - return ret; + DbgPrint("shortcut_add_widget is done"); } /* remove_shortcut */ -int shortcut_remove(GVariant *parameters, GVariant **reply_body, uid_t uid) +void shortcut_remove(GVariant *parameters, GDBusMethodInvocation *invocation, uid_t uid) { int ret = SERVICE_COMMON_ERROR_NONE; + char *request_id = NULL; + + g_variant_get_child(parameters, SHORTCUT_INVOCATION_KEY_POS, "&s", &request_id); + + _add_invocation(invocation, request_id); ret = send_notify(parameters, "remove_shortcut_notify", &_monitoring_hash, PROVIDER_SHORTCUT_INTERFACE_NAME, uid); - if (ret != SERVICE_COMMON_ERROR_NONE) { + if (ret != SERVICE_COMMON_ERROR_NONE) ErrPrint("failed to send notify:%d\n", ret); - return ret; - } - *reply_body = g_variant_new("()"); - if (*reply_body == NULL) { - ErrPrint("Cannot make reply body"); - return SHORTCUT_ERROR_OUT_OF_MEMORY; - } - - return ret; + DbgPrint("shortcut_remove is done"); } /* check shortcut privilege */ @@ -274,6 +323,34 @@ int shortcut_check_privilege(void) return SERVICE_COMMON_ERROR_NONE; } +int shortcut_send_return_value(GVariant *parameters, GVariant **reply_body) +{ + int return_value; + char *request_id = NULL; + GDBusMethodInvocation *invocation = NULL; + + g_variant_get(parameters, "(i&s)", &return_value, &request_id); + + if (request_id == NULL) + return SHORTCUT_ERROR_INVALID_PARAMETER; + + invocation = _get_invocation(request_id); + if (!invocation) + return SHORTCUT_ERROR_INVALID_PARAMETER; + + g_dbus_method_invocation_return_value(invocation, g_variant_new("(i)", return_value)); + _remove_invocation(request_id); + + *reply_body = g_variant_new("()"); + if (*reply_body == NULL) { + ErrPrint("Cannot make reply body"); + return SHORTCUT_ERROR_OUT_OF_MEMORY; + } + + DbgPrint("shortcut_send_return_value success"); + return SHORTCUT_ERROR_NONE; +} + /*! * MAIN THREAD * Do not try to do anyother operation in these functions @@ -283,6 +360,7 @@ HAPI int shortcut_service_init(void) DbgPrint("Successfully initiated\n"); int result; _monitoring_hash = g_hash_table_new(g_direct_hash, g_direct_equal); + _invocation_hash = g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL); result = shortcut_register_dbus_interface(); if (result != SERVICE_COMMON_ERROR_NONE) ErrPrint("shortcut register dbus fail %d", result); @@ -291,6 +369,8 @@ HAPI int shortcut_service_init(void) HAPI int shortcut_service_fini(void) { + g_hash_table_destroy(_invocation_hash); + DbgPrint("Successfully Finalized\n"); return SERVICE_COMMON_ERROR_NONE; } -- 2.7.4 From 8416c75ed68d3e41be1adadcffed57481ed7f7d3 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Mon, 13 Feb 2017 09:46:14 +0900 Subject: [PATCH 06/16] Release version 1.4.1 - Fix wrong behavior about return value of shortcut request Signed-off-by: seungha.son Change-Id: If6fb9fa2ab35f3534b3bc01cdf8fbb6ac2c3a756 --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index a22d077..4bad6e7 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.0 +Version: 1.4.1 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From 68d8705f69ab2d11081d4934bc74ef373a878514 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Mon, 20 Feb 2017 16:49:09 +0900 Subject: [PATCH 07/16] Fix Restart option - Use "on-failure" option instead of "always" option Signed-off-by: seungha.son Change-Id: Ib9ae098eb47e07e8276a16dcbfa06356a170e460 --- packaging/data-provider-master.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.service b/packaging/data-provider-master.service index 95e3d3f..22cef7e 100644 --- a/packaging/data-provider-master.service +++ b/packaging/data-provider-master.service @@ -9,7 +9,7 @@ Type=dbus SmackProcessLabel=System ExecStart=/usr/bin/data-provider-master TimeoutStopSec=3s -Restart=always +Restart=on-failure RestartSec=0 [Install] -- 2.7.4 From 2831bb9c32f7305d68c93aa09ee446692cb86b52 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Wed, 22 Feb 2017 09:24:02 +0900 Subject: [PATCH 08/16] Release version 1.4.2 - Fix restart option Signed-off-by: seungha.son Change-Id: I67455c21e65594216a91fbf9b822c432d4257a86 --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 4bad6e7..32cacd9 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.1 +Version: 1.4.2 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From 8afe928683aec475199d6b335eab54c9e5400c38 Mon Sep 17 00:00:00 2001 From: Myungki Lee Date: Wed, 22 Feb 2017 20:34:57 +0900 Subject: [PATCH 09/16] Change the template limit comparison syntax - up to 11 are stored. Change-Id: I0696e0a3ed42ee65c063dd38b357f86b911660de Signed-off-by: Myungki Lee --- src/notification_service.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/notification_service.c b/src/notification_service.c index 2ba3b65..66cc2dd 100755 --- a/src/notification_service.c +++ b/src/notification_service.c @@ -1605,7 +1605,7 @@ int notification_add_noti_template(GVariant *parameters, GVariant **reply_body, } ret = notification_noti_check_count_for_template(noti, &count); - if (count > NOTI_TEMPLATE_LIMIT) + if (count >= NOTI_TEMPLATE_LIMIT) return NOTIFICATION_ERROR_MAX_EXCEEDED; ret = notification_noti_add_template(noti, template_name); -- 2.7.4 From fab9ea2d73546a39c2fe94360fbc5b1e6fe6b593 Mon Sep 17 00:00:00 2001 From: Myungki Lee Date: Thu, 23 Feb 2017 14:19:56 +0900 Subject: [PATCH 10/16] Release version 1.4.3 - Fix a bug about number of storable template Change-Id: I4ad3aa0844962901c4c0d5c96ac9460b18bfdc2c Signed-off-by: Myungki Lee --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 32cacd9..f32c267 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.2 +Version: 1.4.3 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From 2f25a244fe04fc256c23e8413fb1444a1cafcfea Mon Sep 17 00:00:00 2001 From: Myungki Lee Date: Mon, 6 Mar 2017 20:22:17 +0900 Subject: [PATCH 11/16] Fix timeout issue when noti add, update - In case of error, 0 is returned and timeout occurs without reply_body. Change-Id: I5fae426d6ac693feb0928c3df01b905c3ed5b4a4 Signed-off-by: Myungki Lee --- src/notification_service.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/notification_service.c b/src/notification_service.c index 66cc2dd..8b64146 100755 --- a/src/notification_service.c +++ b/src/notification_service.c @@ -598,7 +598,7 @@ int notification_add_noti(GVariant *parameters, GVariant **reply_body, const cha ret = _validate_and_set_noti_with_uid(uid, noti, ¬i_uid); if (ret != NOTIFICATION_ERROR_NONE) - return ret; + goto out; ret = notification_noti_check_tag(noti); if (ret == NOTIFICATION_ERROR_NOT_EXIST_ID) @@ -606,22 +606,27 @@ int notification_add_noti(GVariant *parameters, GVariant **reply_body, const cha else if (ret == NOTIFICATION_ERROR_ALREADY_EXIST_ID) ret = _update_noti(reply_body, noti, noti_uid); + if (ret != NOTIFICATION_ERROR_NONE) + goto out; + ret = notification_get_event_flag(noti, &event_flag); if (ret != NOTIFICATION_ERROR_NONE) - return ret; + goto out; if (event_flag == true) { ret = notification_get_id(noti, NULL, &priv_id); if (ret != NOTIFICATION_ERROR_NONE) - return ret; + goto out; __add_sender_info(priv_id, sender); } - notification_free(noti); } else { ret = NOTIFICATION_ERROR_OUT_OF_MEMORY; } +out: + notification_free(noti); + DbgPrint("notification_add_noti ret : %d", ret); return ret; } @@ -679,15 +684,16 @@ int notification_update_noti(GVariant *parameters, GVariant **reply_body, uid_t ret = _validate_and_set_noti_with_uid(uid, noti, ¬i_uid); if (ret != NOTIFICATION_ERROR_NONE) - return ret; + goto out; - if (ret == NOTIFICATION_ERROR_NONE) - ret = _update_noti(reply_body, noti, noti_uid); + ret = _update_noti(reply_body, noti, noti_uid); - notification_free(noti); } else { ret = NOTIFICATION_ERROR_OUT_OF_MEMORY; } + +out: + notification_free(noti); return ret; } -- 2.7.4 From 399520aedd4fa12141544a0ae19467233809dd96 Mon Sep 17 00:00:00 2001 From: Myungki Lee Date: Mon, 6 Mar 2017 21:48:34 +0900 Subject: [PATCH 12/16] Release version 1.4.4 - Fix timeout issue when noti add Change-Id: Ic9bc680f3f3856b07a3fab96e74f63a22a1dc8f0 Signed-off-by: Myungki Lee --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index f32c267..0f8f453 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.3 +Version: 1.4.4 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From 6e516926e46644163582ceca93792a72ca9bf7bd Mon Sep 17 00:00:00 2001 From: Semun Lee Date: Sat, 18 Mar 2017 18:25:33 +0900 Subject: [PATCH 13/16] Defer setting db refresh for notification,badge defer refresh until something has been changed Change-Id: I7f7c3cb471613d4511a9666e207c5aba0a3dd3ab Signed-off-by: Semun Lee --- src/badge_service.c | 19 +++++++++++++++++-- src/notification_service.c | 24 ++++++++++++++++++++++-- src/service_common.c | 11 +++++------ 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/badge_service.c b/src/badge_service.c index 24c63ca..8296fb5 100755 --- a/src/badge_service.c +++ b/src/badge_service.c @@ -32,6 +32,8 @@ #define PROVIDER_BADGE_INTERFACE_NAME "org.tizen.data_provider_badge_service" static GHashTable *_monitoring_hash = NULL; +int need_to_reload_pkginfo_for_badge = 1; + static void _on_name_appeared(GDBusConnection *connection, const gchar *name, const gchar *name_owner, @@ -329,6 +331,11 @@ int badge_insert(GVariant *parameters, GVariant **reply_body, uid_t uid) return ret; } + if (need_to_reload_pkginfo_for_badge) { + badge_setting_refresh_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); + need_to_reload_pkginfo_for_badge = 0; + } + ret = badge_db_get_allow_to_display_by_appid(pkgname, &allow_to_display, param_uid); if (ret != BADGE_ERROR_NONE) { ErrPrint("failed to get allow_to_display by appid : %d\n", ret); @@ -659,6 +666,11 @@ int badge_update_badge_setting(GVariant *parameters, GVariant **reply_body, uid_ char *pkgname = NULL; char *appid = NULL; + if (need_to_reload_pkginfo_for_badge) { + badge_setting_refresh_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); + need_to_reload_pkginfo_for_badge = 0; + } + g_variant_get(parameters, "(&s&sii)", &pkgname, &appid, &allow_to_display, ¶m_uid); ret = _validate_and_set_param_uid_with_uid(uid, ¶m_uid); @@ -706,6 +718,11 @@ int badge_get_setting_by_appid(GVariant *parameters, GVariant **reply_body, uid_ badge_setting_h setting = NULL; uid_t param_uid; + if (need_to_reload_pkginfo_for_badge) { + badge_setting_refresh_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); + need_to_reload_pkginfo_for_badge = 0; + } + g_variant_get(parameters, "(&si)", &appid, ¶m_uid); if (appid == NULL) return BADGE_ERROR_INVALID_PARAMETER; @@ -819,8 +836,6 @@ HAPI int badge_service_init(void) return BADGE_ERROR_IO_ERROR; } - badge_setting_refresh_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); - return BADGE_ERROR_NONE; } diff --git a/src/notification_service.c b/src/notification_service.c index 8b64146..68f9267 100755 --- a/src/notification_service.c +++ b/src/notification_service.c @@ -63,6 +63,8 @@ typedef struct _event_sender_info { guint watcher_id; } event_sender_info_s; +int need_to_reload_pkginfo_for_notification = 1; + /*! * SERVICE HANDLER */ @@ -831,6 +833,11 @@ int notification_get_setting_array(GVariant *parameters, GVariant **reply_body, notification_setting_h temp; uid_t param_uid; + if (need_to_reload_pkginfo_for_notification) { + notification_setting_refresh_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); + need_to_reload_pkginfo_for_notification = 0; + } + g_variant_get(parameters, "(i)", ¶m_uid); ret = _validate_and_set_param_uid_with_uid(uid, ¶m_uid); if (ret != NOTIFICATION_ERROR_NONE) @@ -875,6 +882,11 @@ int notification_get_setting_by_appid(GVariant *parameters, GVariant **reply_bod notification_setting_h setting = NULL; uid_t param_uid; + if (need_to_reload_pkginfo_for_notification) { + notification_setting_refresh_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); + need_to_reload_pkginfo_for_notification = 0; + } + g_variant_get(parameters, "(&si)", &appid, ¶m_uid); ret = _validate_and_set_param_uid_with_uid(uid, ¶m_uid); if (ret != NOTIFICATION_ERROR_NONE) @@ -910,7 +922,6 @@ int notification_load_system_setting(GVariant *parameters, GVariant **reply_body notification_system_setting_h setting = NULL; uid_t param_uid; - g_variant_get(parameters, "(i)", ¶m_uid); ret = _validate_and_set_param_uid_with_uid(uid, ¶m_uid); if (ret != NOTIFICATION_ERROR_NONE) @@ -1209,6 +1220,11 @@ int notification_update_noti_setting(GVariant *parameters, GVariant **reply_body int lock_screen_content_level = 0; uid_t param_uid; + if (need_to_reload_pkginfo_for_notification) { + notification_setting_refresh_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); + need_to_reload_pkginfo_for_notification = 0; + } + g_variant_get(parameters, "(&s&siiiiii)", &pkgname, &appid, @@ -1715,6 +1731,11 @@ int notification_get_block_state(GVariant *parameters, GVariant **reply_body, ui return NOTIFICATION_ERROR_IO_ERROR; } + if (need_to_reload_pkginfo_for_notification) { + notification_setting_refresh_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); + need_to_reload_pkginfo_for_notification = 0; + } + ret = notification_get_dnd_and_allow_to_notify(appid, &dnd, &dnd_except, &allow_to_notify, param_uid); if (ret != NOTIFICATION_ERROR_NONE) { ErrPrint("failed to get_dnd_and_allow_to_notify : %d\n", ret); @@ -2102,7 +2123,6 @@ HAPI int notification_service_init(void) } _notification_data_init(); - notification_setting_refresh_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); notification_system_setting_init_system_setting_table(tzplatform_getuid(TZ_SYS_DEFAULT_USER)); ret = notification_system_setting_get_dnd_schedule_enabled_uid(&uids, &count); diff --git a/src/service_common.c b/src/service_common.c index 0fbb084..ff7efe5 100755 --- a/src/service_common.c +++ b/src/service_common.c @@ -39,6 +39,9 @@ static GDBusConnection *_gdbus_conn = NULL; +extern int need_to_reload_pkginfo_for_notification; +extern int need_to_reload_pkginfo_for_badge; + void print_noti(notification_h noti) { char *pkgname = NULL; @@ -446,11 +449,8 @@ out: static int _package_install_cb(uid_t uid, const char *pkgname, enum pkgmgr_status status, double value, void *data) { if (status == PKGMGR_STATUS_END) { - if (uid == tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)) - uid = tzplatform_getuid(TZ_SYS_DEFAULT_USER); - - notification_setting_insert_package_for_uid(pkgname, uid); - badge_setting_insert_package_for_uid(pkgname, uid); + need_to_reload_pkginfo_for_notification = 1; + need_to_reload_pkginfo_for_badge = 1; } return 0; @@ -461,7 +461,6 @@ static int _package_uninstall_cb(uid_t uid, const char *pkgname, enum pkgmgr_sta if (status == PKGMGR_STATUS_END) { if (uid == tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)) uid = tzplatform_getuid(TZ_SYS_DEFAULT_USER); - notification_setting_delete_package_for_uid(pkgname, uid); badge_setting_delete_package_for_uid(pkgname, uid); notification_noti_delete_template(pkgname); -- 2.7.4 From eb5390d462a99c6be12d77134827b1ebe1a53982 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Mon, 20 Mar 2017 15:42:57 +0900 Subject: [PATCH 14/16] Release version 1.4.5 - Defer setting db refresh for notification,badge Signed-off-by: seungha.son Change-Id: I2bb4127594f73c28206e2e59e607423085fbd2fb --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 0f8f453..694b574 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.4 +Version: 1.4.5 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4 From e1dd22153c9feca2fb3a04115b0839e57d391762 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Tue, 21 Mar 2017 10:41:13 +0900 Subject: [PATCH 15/16] Add logic to send event by priv id Signed-off-by: seungha.son Change-Id: Icdf38b62c582b543a65eb0d72562bbdaa8a02523 --- include/notification_service.h | 1 + src/notification_service.c | 76 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/include/notification_service.h b/include/notification_service.h index d7bb89b..d2cd57f 100755 --- a/include/notification_service.h +++ b/include/notification_service.h @@ -43,6 +43,7 @@ int notification_get_block_state(GVariant *parameters, GVariant **reply_body, ui int notification_load_dnd_allow_exception(GVariant *parameters, GVariant **reply_body, uid_t uid); int notification_update_dnd_allow_exception(GVariant *parameters, GVariant **reply_body, uid_t uid); int notification_send_noti_event(GVariant *parameters, GVariant **reply_body); +int notification_send_noti_event_by_priv_id(GVariant *parameters, GVariant **reply_body); int notification_check_event_receiver(GVariant *parameters, GVariant **reply_body); int notification_reset_event_receiver(GVariant *parameters, GVariant **reply_body, const char *sender); int notification_register_dbus_interface(); diff --git a/src/notification_service.c b/src/notification_service.c index 68f9267..eff5676 100755 --- a/src/notification_service.c +++ b/src/notification_service.c @@ -161,6 +161,8 @@ static void _noti_dbus_method_call_handler(GDBusConnection *conn, ret = notification_update_dnd_allow_exception(parameters, &reply_body, uid); else if (g_strcmp0(method_name, "send_noti_event") == 0) ret = notification_send_noti_event(parameters, &reply_body); + else if (g_strcmp0(method_name, "send_noti_event_by_priv_id") == 0) + ret = notification_send_noti_event_by_priv_id(parameters, &reply_body); else if (g_strcmp0(method_name, "check_event_receiver") == 0) ret = notification_check_event_receiver(parameters, &reply_body); else if (g_strcmp0(method_name, "reset_event_handler") == 0) @@ -342,6 +344,11 @@ int notification_register_dbus_interface() " " " " + " " + " " + " " + " " + " " " " " " @@ -752,7 +759,7 @@ int notification_load_noti_by_priv_id(GVariant *parameters, GVariant **reply_bod return ret; DbgPrint("load_noti_by_priv_id pkgname : %s, priv_id : %d ", pkgname, priv_id); - ret = notification_noti_get_by_priv_id(noti, pkgname, priv_id, param_uid); + ret = notification_noti_get_by_priv_id(noti, priv_id); DbgPrint("notification_noti_get_by_priv_id ret : %d", ret); print_noti(noti); @@ -1911,6 +1918,73 @@ int notification_send_noti_event(GVariant *parameters, GVariant **reply_body) return ret; } +int notification_send_noti_event_by_priv_id(GVariant *parameters, GVariant **reply_body) +{ + int ret; + int event_type; + int priv_id; + bool event_flag = false; + notification_h noti; + GVariant *body = NULL; + event_sender_info_s *info; + + noti = notification_create(NOTIFICATION_TYPE_NOTI); + if (noti != NULL) { + g_variant_get(parameters, "(ii)", &priv_id, &event_type); + + ret = notification_noti_get_by_priv_id(noti, priv_id); + if (ret != NOTIFICATION_ERROR_NONE) { + ErrPrint("failed to get notification by priv id [%d]", ret); + notification_free(noti); + return ret; + } + + ret = notification_get_event_flag(noti, &event_flag); + if (ret != NOTIFICATION_ERROR_NONE || event_flag == false) { + notification_free(noti); + return NOTIFICATION_ERROR_INVALID_PARAMETER; + } + + info = __find_sender_info_by_priv_id(priv_id); + if (info == NULL || info->busname == NULL) { + notification_free(noti); + return NOTIFICATION_ERROR_INVALID_PARAMETER; + } + + if (!info->watcher_id) { + if (!is_existed_busname(info->busname)) { + __event_list = g_list_remove(g_list_first(__event_list), info); + __free_event_info(info); + notification_free(noti); + return NOTIFICATION_ERROR_IO_ERROR; + } else { + info->watcher_id = __insert_sender_watcher_id(info); + } + } + + body = notification_ipc_make_gvariant_from_noti(noti, false); + if (body == NULL) { + ErrPrint("Can't make gvariant to noti"); + notification_free(noti); + return NOTIFICATION_ERROR_OUT_OF_MEMORY; + } + + ret = send_event_notify_by_busname(g_variant_new("(vi)", body, event_type), "send_event", info->busname, PROVIDER_NOTI_EVENT_INTERFACE_NAME); + notification_free(noti); + } else { + return NOTIFICATION_ERROR_OUT_OF_MEMORY; + } + + *reply_body = g_variant_new("()"); + if (*reply_body == NULL) { + ErrPrint("cannot make reply body"); + return NOTIFICATION_ERROR_OUT_OF_MEMORY; + } + + DbgPrint("notification_send_noti_event_by_priv_id done !! %d", ret); + return ret; +} + int notification_check_event_receiver(GVariant *parameters, GVariant **reply_body) { int priv_id; -- 2.7.4 From 263334a92dab57102677b599aebff27760fcd757 Mon Sep 17 00:00:00 2001 From: "seungha.son" Date: Wed, 22 Mar 2017 18:05:06 +0900 Subject: [PATCH 16/16] Release version 1.4.6 - Add logic to send event by priv id Signed-off-by: seungha.son Change-Id: Ida65dc8b9b6ac5759735e228b560133a1ea63811 --- packaging/data-provider-master.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/data-provider-master.spec b/packaging/data-provider-master.spec index 694b574..7f8a06b 100755 --- a/packaging/data-provider-master.spec +++ b/packaging/data-provider-master.spec @@ -2,7 +2,7 @@ Name: data-provider-master Summary: Master service provider for badge, shortcut, notification -Version: 1.4.5 +Version: 1.4.6 Release: 1 Group: Applications/Core Applications License: Apache-2.0 -- 2.7.4