Change the function name, add category checking code.
authorSung-jae Park <nicesj.park@samsung.com>
Wed, 21 Jan 2015 14:58:10 +0000 (23:58 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Wed, 21 Jan 2015 14:58:10 +0000 (23:58 +0900)
Group = cluster & sub-cluster(aka. category)
Category = Category which is described in package manifest file (.xml).

[model] Redwood,Kiran,B3(Wearable)
[binary_type] AP
[customer] Docomo/Orange/ATT/Open
[issue#] N/A
[problem]
[cause]
[solution]
[team] HomeTF
[request]
[horizontal_expansion]

Change-Id: I8e78c01751787e8eed2d679bf9e6989722c05b0c

include/client_life.h
src/client_life.c
src/package.c

index a7b63de..e4fa187 100644 (file)
@@ -92,9 +92,9 @@ extern void client_paused(struct client_node *client);
 extern void client_resumed(struct client_node *client);
 
 /* Related with Context-Aware service */
-extern int client_subscribe(struct client_node *client, const char *cluster, const char *category);
-extern int client_unsubscribe(struct client_node *client, const char *cluster, const char *category);
-extern int client_is_subscribed(struct client_node *client, const char *cluster, const char *category);
+extern int client_subscribe_group(struct client_node *client, const char *cluster, const char *category);
+extern int client_unsubscribe_group(struct client_node *client, const char *cluster, const char *category);
+extern int client_is_subscribed_group(struct client_node *client, const char *cluster, const char *category);
 
 /* Related with category */
 extern int client_subscribe_category(struct client_node *client, const char *category);
index c7a9bdb..eb2d9ae 100644 (file)
@@ -766,6 +766,14 @@ HAPI int client_global_event_handler_del(enum client_global_event event_type, in
 HAPI int client_subscribe_category(struct client_node *client, const char *category)
 {
        struct category_subscribe_item *item;
+       Eina_List *l;
+
+       EINA_LIST_FOREACH(client->category_subscribe_list, l, item) {
+               if (!strcasecmp(item->category, category)) {
+                       DbgPrint("[%s] is already subscribed\n");
+                       return DBOX_STATUS_ERROR_ALREADY;
+               }
+       }
 
        item = malloc(sizeof(*item));
        if (!item) {
@@ -816,7 +824,7 @@ HAPI int client_is_subscribed_by_category(struct client_node *client, const char
        return 0;
 }
 
-HAPI int client_subscribe(struct client_node *client, const char *cluster, const char *category)
+HAPI int client_subscribe_group(struct client_node *client, const char *cluster, const char *category)
 {
        struct subscribe_item *item;
 
@@ -845,7 +853,7 @@ HAPI int client_subscribe(struct client_node *client, const char *cluster, const
        return DBOX_STATUS_ERROR_NONE;
 }
 
-HAPI int client_unsubscribe(struct client_node *client, const char *cluster, const char *category)
+HAPI int client_unsubscribe_group(struct client_node *client, const char *cluster, const char *category)
 {
        struct subscribe_item *item;
        Eina_List *l;
@@ -864,7 +872,7 @@ HAPI int client_unsubscribe(struct client_node *client, const char *cluster, con
        return DBOX_STATUS_ERROR_NOT_EXIST;
 }
 
-HAPI int client_is_subscribed(struct client_node *client, const char *cluster, const char *category)
+HAPI int client_is_subscribed_group(struct client_node *client, const char *cluster, const char *category)
 {
        struct subscribe_item *item;
        Eina_List *l;
@@ -902,7 +910,7 @@ HAPI int client_browse_group_list(const char *cluster, const char *category, int
 
        cnt = 0;
        EINA_LIST_FOREACH(s_info.client_list, l, client) {
-               if (!client_is_subscribed(client, cluster, category)) {
+               if (!client_is_subscribed_group(client, cluster, category)) {
                        continue;
                }
 
@@ -950,7 +958,7 @@ HAPI int client_count_of_group_subscriber(const char *cluster, const char *categ
 
        cnt = 0;
        EINA_LIST_FOREACH(s_info.client_list, l, client) {
-               cnt += !!client_is_subscribed(client, cluster, category);
+               cnt += !!client_is_subscribed_group(client, cluster, category);
        }
 
        return cnt;
index 5a920ce..f3cb64b 100644 (file)
@@ -1273,7 +1273,9 @@ static int client_created_cb(struct client_node *client, void *data)
                                         * \note
                                         * Instances are lives in the system cluster/sub-cluster
                                         */
-                                       if (client_is_subscribed(client, instance_cluster(inst), instance_category(inst))) {
+                                       if (client_is_subscribed_group(client, instance_cluster(inst), instance_category(inst))
+                                               || client_is_subscribed_by_category(client, package_category(instance_package(inst))))
+                                       {
                                                instance_unicast_created_event(inst, client);
                                                DbgPrint("(Subscribed) Created package: %s\n", info->dbox_id);
                                        }
@@ -1523,11 +1525,13 @@ HAPI int package_alter_instances_to_client(struct client_node *client, enum alte
 
        EINA_LIST_FOREACH(s_info.pkg_list, l, info) {
                EINA_LIST_FOREACH(info->inst_list, i_l, inst) {
-                       if (instance_client(inst)) {
+                       if (instance_client(inst) == client) {
                                continue;
                        }
 
-                       if (!client_is_subscribed(client, instance_cluster(inst), instance_category(inst))) {
+                       if (!client_is_subscribed_group(client, instance_cluster(inst), instance_category(inst))
+                               && !client_is_subscribed_by_category(client, package_category(instance_package(inst))))
+                       {
                                continue;
                        }