Pop item from queue to prevent duplicated request
[platform/core/uifw/capi-ui-sticker.git] / receiver / src / main.cpp
index aa196e1..968b4f4 100644 (file)
@@ -114,7 +114,8 @@ static bool check_sync_time_condition()
         if (timediff > MAX_WAIT_TIME) {
             STLOGD("Starting manual synchronization");
             initialize_sap();
-            request_show_sync_notification();
+            if (false == request_show_sync_notification())
+                push_sticker_request(REQUEST_TYPE_SHOW_NOTIFICATION, NULL, NULL, NULL);
             result = false;
         } else {
             if (timediff > SYNC_INTERVAL)
@@ -173,15 +174,41 @@ static void process_request(app_control_h app_control, char *request)
             goto cleanup;
 
         if (mode && type) {
-            if (!is_init_sap()) {
-                initialize_sap();
-                request_all_sticker_data(mode, type);
+            if (check_battery_condition()) {
+                if (check_sync_time_condition()) {
+                    if (preference_set_int(LAST_SYNC_STATUS, LAST_SYNC_STATUS_SYNC_NEEDED) != PREFERENCE_ERROR_NONE)
+                        STLOGE("Failed to set sync status as NEEDED");
+
+                    if (!is_init_sap())
+                        initialize_sap();
+                    request_all_sticker_data(mode, type);
+                } else { // Under the sync interval time. Need to check whether last sync was succeded or not.
+                    int last_sync_status = 0;
+
+                    if (preference_get_int(LAST_SYNC_STATUS, &last_sync_status) != PREFERENCE_ERROR_NONE) {
+                        STLOGE("Failed to get sync status. Default action is exit.");
+                        goto cleanup;
+                    }
+
+                    if (last_sync_status == LAST_SYNC_STATUS_SYNC_NEEDED) {
+                        STLOGD("Last sync status is NEEDED(code: %d). Retrying to sync.", last_sync_status);
+                        if (!is_init_sap())
+                            initialize_sap();
+                        request_all_sticker_data(mode, type);
+                    } else {
+                        STLOGD("Last sync status is SUCCESS(code: %d). Don't have to retrying sync", last_sync_status);
+                    }
+                }
+            } else {
+                STLOGD("Not enough battery.");
             }
         }
     }
     else if (strcmp(request, "oobe") == 0) {
         initialize_sap();
-        request_sticker_feature();
+
+        if (false == request_sticker_feature())
+            push_sticker_request(REQUEST_TYPE_FEATURE_REQ, NULL, NULL, NULL);
     }
     else {
         STLOGW("Unknown command : %s", request);
@@ -208,9 +235,14 @@ static void process_auto_sync()
     if (check_sync_time_condition()) {
         if (check_battery_condition()) {
             STLOGD("Starting auto synchronization");
+            if (preference_set_int(LAST_SYNC_STATUS, LAST_SYNC_STATUS_SYNC_NEEDED) != PREFERENCE_ERROR_NONE)
+                STLOGE("Failed to set sync status as NEEDED");
             initialize_sap();
-            request_sticker_feature();
-            request_auto_sync();
+
+            if (false == request_sticker_feature())
+                push_sticker_request(REQUEST_TYPE_FEATURE_REQ, NULL, NULL, NULL);
+
+            push_sticker_request(REQUEST_TYPE_AUTOSYNC, NULL, NULL, NULL);
         }
         else {
             STLOGI("The status of battery is low");
@@ -222,8 +254,24 @@ static void process_auto_sync()
     }
     else {
         if (!get_job_progress()) {
-            STLOGD("exit");
-            service_app_exit();
+            int last_sync_status = 0;
+            if (preference_get_int(LAST_SYNC_STATUS, &last_sync_status) != PREFERENCE_ERROR_NONE) {
+                STLOGE("Failed to get sync status. Default action is exit.");
+                service_app_exit();
+            }
+
+            if (last_sync_status == LAST_SYNC_STATUS_SYNC_NEEDED) {
+                STLOGD("Last sync status is NEEDED(code: %d). Retrying to sync.", last_sync_status);
+                initialize_sap();
+
+                if (false == request_sticker_feature())
+                    push_sticker_request(REQUEST_TYPE_FEATURE_REQ, NULL, NULL, NULL);
+
+                push_sticker_request(REQUEST_TYPE_AUTOSYNC, NULL, NULL, NULL);
+            } else {
+                STLOGD("Last sync status is SUCCESS(code: %d). Don't have to retrying sync", last_sync_status);
+                service_app_exit();
+            }
         }
     }
 }
@@ -236,7 +284,9 @@ static void get_sticker_feature()
     if (vconf_get_int(VCONFKEY_STICKER_SUPPORTED_FEATURE, &feature_flag) == 0 && feature_flag == 0) {
         STLOGD("Request to get sticker feature");
         initialize_sap();
-        request_sticker_feature();
+
+        if (false == request_sticker_feature())
+            push_sticker_request(REQUEST_TYPE_FEATURE_REQ, NULL, NULL, NULL);
     }
     else {
         if (!is_init_sap())