If the box is deleted while creating, and the delete reason is SUCCESS, change it...
[platform/framework/web/livebox-viewer.git] / src / client.c
index b15757d..6d7d011 100644 (file)
@@ -161,8 +161,9 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
        const char *id;
        double timestamp;
        struct livebox *handler;
+       int reason;
 
-       if (packet_get(packet, "ssd", &pkgname, &id, &timestamp) != 3) {
+       if (packet_get(packet, "ssdi", &pkgname, &id, &timestamp, &reason) != 4) {
                ErrPrint("Invalid arguemnt\n");
                goto out;
        }
@@ -195,7 +196,7 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
                /*!
                 * \note
                 *
-                * "if (handler->id == NULL)"
+                * "if (handler->id == NULL) {"
                 *
                 * The instance is not created yet.
                 * But the master forcely destroy it and send destroyed event to this
@@ -205,8 +206,9 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
                 * before creating an instance successfully.
                 */
                if (handler->created_cb == handler->deleted_cb) {
-                       if (handler->created_cbdata != handler->deleted_cbdata)
+                       if (handler->created_cbdata != handler->deleted_cbdata) {
                                DbgPrint("cb is same but cbdata is different (%s - %s)\n", pkgname, id);
+                       }
 
                        handler->deleted_cb = NULL;
                        handler->deleted_cbdata = NULL;
@@ -218,7 +220,10 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
                handler->created_cb = NULL;
                handler->created_cbdata = NULL;
 
-               cb(handler, LB_STATUS_ERROR_CANCEL, cbdata);
+               if (reason == LB_STATUS_SUCCESS) {
+                       reason = LB_STATUS_ERROR_CANCEL;
+               }
+               cb(handler, reason, cbdata);
        } else if (handler->id) {
                if (handler->deleted_cb) {
                        ret_cb_t cb;
@@ -230,7 +235,7 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
                        handler->deleted_cb = NULL;
                        handler->deleted_cbdata = NULL;
 
-                       cb(handler, LB_STATUS_SUCCESS, cbdata);
+                       cb(handler, reason, cbdata);
                } else {
                        lb_invoke_event_handler(handler, LB_EVENT_DELETED);
                }
@@ -283,7 +288,7 @@ static struct packet *master_lb_update_begin(pid_t pid, int handle, const struct
         * And then begin updating again after change its size.
         */
        if (lb_get_lb_fb(handler)) {
-               lb_set_lb_fb(handler, fbfile);
+               (void)lb_set_lb_fb(handler, fbfile);
 
                ret = fb_sync(lb_get_lb_fb(handler));
                if (ret != LB_STATUS_SUCCESS) {
@@ -325,7 +330,7 @@ static struct packet *master_pd_update_begin(pid_t pid, int handle, const struct
        }
 
        if (lb_get_pd_fb(handler)) {
-               lb_set_lb_fb(handler, fbfile);
+               (void)lb_set_lb_fb(handler, fbfile);
 
                ret = fb_sync(lb_get_lb_fb(handler));
                if (ret != LB_STATUS_SUCCESS) {
@@ -459,17 +464,19 @@ static struct packet *master_lb_updated(pid_t pid, int handle, const struct pack
        const char *fbfile;
        const char *content;
        const char *title;
+       const char *safe_file;
        struct livebox *handler;
        int lb_w;
        int lb_h;
        double priority;
        int ret;
 
-       ret = packet_get(packet, "sssiidss",
+       ret = packet_get(packet, "sssiidsss",
                                &pkgname, &id,
                                &fbfile, &lb_w, &lb_h,
-                               &priority, &content, &title);
-       if (ret != 8) {
+                               &priority, &content, &title,
+                               &safe_file);
+       if (ret != 9) {
                ErrPrint("Invalid argument\n");
                goto out;
        }
@@ -495,6 +502,7 @@ static struct packet *master_lb_updated(pid_t pid, int handle, const struct pack
        lb_set_content(handler, content);
        lb_set_title(handler, title);
        lb_set_size(handler, lb_w, lb_h);
+       lb_set_filename(handler, safe_file);
 
        if (lb_text_lb(handler)) {
                (void)parse_desc(handler, livebox_filename(handler), 0);
@@ -505,10 +513,21 @@ static struct packet *master_lb_updated(pid_t pid, int handle, const struct pack
                 */
                goto out;
        } else if (lb_get_lb_fb(handler)) {
-               lb_set_lb_fb(handler, fbfile);
-               ret = fb_sync(lb_get_lb_fb(handler));
-               if (ret != LB_STATUS_SUCCESS) {
-                       ErrPrint("Failed to do sync FB (%s - %s) (%d)\n", pkgname, util_basename(util_uri_to_path(id)), ret);
+               if (conf_frame_drop_for_resizing() && handler->size_changed_cb) {
+                       /* Just for skipping the update event callback call, After request to resize buffer, update event will be discarded */
+                       DbgPrint("Discards obsoloted update event\n");
+                       ret = LB_STATUS_ERROR_BUSY;
+               } else {
+                       (void)lb_set_lb_fb(handler, fbfile);
+
+                       if (!conf_manual_sync()) {
+                               ret = fb_sync(lb_get_lb_fb(handler));
+                               if (ret != LB_STATUS_SUCCESS) {
+                                       ErrPrint("Failed to do sync FB (%s - %s) (%d)\n", pkgname, util_basename(util_uri_to_path(id)), ret);
+                               }
+                       } else {
+                               ret = LB_STATUS_SUCCESS;
+                       }
                }
        } else {
                ret = LB_STATUS_SUCCESS;
@@ -681,13 +700,22 @@ static struct packet *master_pd_updated(pid_t pid, int handle, const struct pack
        if (lb_text_pd(handler)) {
                (void)parse_desc(handler, descfile, 1);
        } else {
-               (void)lb_set_pd_fb(handler, fbfile);
-
-               ret = fb_sync(lb_get_pd_fb(handler));
-               if (ret < 0) {
-                       ErrPrint("Failed to do sync FB (%s - %s), %d\n", pkgname, util_basename(util_uri_to_path(id)), ret);
+               if (conf_frame_drop_for_resizing() && handler->size_changed_cb) {
+                       /* Just for skipping the update event callback call, After request to resize buffer, update event will be discarded */
+                       DbgPrint("Discards obsoloted update event\n");
                } else {
-                       lb_invoke_event_handler(handler, LB_EVENT_PD_UPDATED);
+                       (void)lb_set_pd_fb(handler, fbfile);
+
+                        if (!conf_manual_sync()) {
+                               ret = fb_sync(lb_get_pd_fb(handler));
+                               if (ret < 0) {
+                                       ErrPrint("Failed to do sync FB (%s - %s), %d\n", pkgname, util_basename(util_uri_to_path(id)), ret);
+                               } else {
+                                       lb_invoke_event_handler(handler, LB_EVENT_PD_UPDATED);
+                               }
+                       } else {
+                               lb_invoke_event_handler(handler, LB_EVENT_PD_UPDATED);
+                       }
                }
        }
 
@@ -807,7 +835,7 @@ static struct packet *master_size_changed(pid_t pid, int handle, const struct pa
                         * Update it too.
                         */
                        if (lb_get_lb_fb(handler)) {
-                               lb_set_lb_fb(handler, fbfile);
+                               (void)lb_set_lb_fb(handler, fbfile);
 
                                ret = fb_sync(lb_get_lb_fb(handler));
                                if (ret < 0) {
@@ -1075,7 +1103,8 @@ static struct packet *master_created(pid_t pid, int handle, const struct packet
                if (!strlen(lb_fname)) {
                        break;
                }
-               lb_set_lb_fb(handler, lb_fname);
+               (void)lb_set_lb_fb(handler, lb_fname);
+
                ret = fb_sync(lb_get_lb_fb(handler));
                if (ret < 0) {
                        ErrPrint("Failed to do sync FB (%s - %s)\n", pkgname, util_basename(util_uri_to_path(id)));
@@ -1312,8 +1341,9 @@ static void master_started_cb(keynode_t *node, void *data)
 {
        int state = 0;
 
-       if (vconf_get_bool(VCONFKEY_MASTER_STARTED, &state) < 0)
+       if (vconf_get_bool(VCONFKEY_MASTER_STARTED, &state) < 0) {
                ErrPrint("Unable to get [%s]\n", VCONFKEY_MASTER_STARTED);
+       }
 
        DbgPrint("Master state: %d\n", state);
        if (state == 1 && make_connection() == LB_STATUS_SUCCESS) {
@@ -1325,10 +1355,11 @@ static void master_started_cb(keynode_t *node, void *data)
 
 static gboolean timeout_cb(gpointer data)
 {
-       if (vconf_notify_key_changed(VCONFKEY_MASTER_STARTED, master_started_cb, NULL) < 0)
+       if (vconf_notify_key_changed(VCONFKEY_MASTER_STARTED, master_started_cb, NULL) < 0) {
                ErrPrint("Failed to add vconf for monitoring service state\n");
-       else
+       } else {
                DbgPrint("vconf event callback is registered\n");
+       }
 
        master_started_cb(NULL, NULL);