Add to scan single item synchronizingly 69/78269/1 accepted/tizen/common/20160706.141805 accepted/tizen/ivi/20160706.013740 accepted/tizen/mobile/20160706.013633 accepted/tizen/tv/20160706.013704 accepted/tizen/wearable/20160706.013719 submit/tizen/20160705.084920
authorJiyong Min <jiyong.min@samsung.com>
Tue, 5 Jul 2016 03:53:42 +0000 (12:53 +0900)
committerJiyong Min <jiyong.min@samsung.com>
Tue, 5 Jul 2016 03:55:56 +0000 (12:55 +0900)
Change-Id: I847fc916c2de48554e7d6776fe48825823da36d9
Signed-off-by: Jiyong Min <jiyong.min@samsung.com>
include/DcmScanSvc.h
packaging/dcm-service.spec
src/DcmScanSvc.cpp
svc/DcmMainSvc.cpp

index 8023f099b44a334b011c238e5145ae5709660cad..dfa096a797a3d89df74ae1d27fad79b2b62ce252 100755 (executable)
@@ -22,6 +22,7 @@
 
 namespace DcmScanMain {
        gboolean runScanThread(void *data);
+       int ScanSingle(const char *file_path, uid_t uid, int *face_count);
 }
 
 #endif /* _DCM_SCAN_SVC_H_ */
index 7fb1d8e57e353a6190cf76ce716ce231329a9260..0b2fddde309df6443f5a2db56b7c40e4c7e38eaa 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       dcm-service
 Summary:    A media DCM(Digital Contents Management) Service
-Version:    0.0.11
+Version:    0.0.12
 Release:    0
 Group:      Multimedia/Service
 License:    Apache-2.0
index 5818e8500bf2db7f14cb94ef50c39c75c758b3a1..1d62944dd3a788637be3e79ee1c29088e425e011 100755 (executable)
@@ -499,6 +499,82 @@ int DcmScanSvc::ScanSingleItem(const char *file_path)
        return DCM_SUCCESS;
 }
 
+int DcmScanMain::ScanSingle(const char *file_path, uid_t uid, int *face_count)
+{
+       int ret = DCM_SUCCESS;
+       DcmScanSvc dcmScanSvc;
+       DcmScanItem *scan_item = NULL;
+       unsigned int list_len = 0;
+
+       DCM_CHECK_VAL(file_path, DCM_ERROR_INVALID_PARAMETER);
+       DCM_CHECK_VAL(face_count, DCM_ERROR_INVALID_PARAMETER);
+
+       dcm_debug_fenter();
+
+       /* Init global variables */
+       ret = dcmScanSvc.initialize();
+       if (ret != DCM_SUCCESS) {
+               dcm_error("Failed to initialize scan thread global variable! err: %d", ret);
+               goto DCM_SVC_SCAN_SINGLE_FAILED;
+       }
+       dcmScanSvc.clearSingleItemList();
+
+       ret = dcmScanSvc.dcmDBUtils->_dcm_svc_db_connect(uid);
+       if (ret != DCM_SUCCESS) {
+               dcm_error("Failed to connect db! err: %d", ret);
+       }
+
+       ret = dcmScanSvc.prepareImageListByPath(file_path);
+       if (ret == DCM_ERROR_DB_NO_RESULT) {
+               dcm_debug("No items to Scan. Scan operation completed!!!");
+               dcmScanSvc.clearSingleItemList();
+               goto DCM_SVC_SCAN_SINGLE_FAILED;
+       }
+
+       dcm_debug("append scan item to scan item list");
+
+       /* DCM scan started */
+       list_len = (unsigned int)g_list_length(dcmScanSvc.scan_single_item_list);
+       if (dcmScanSvc.scan_single_curr_index < list_len) {
+               scan_item = (DcmScanItem *)g_list_nth_data(dcmScanSvc.scan_single_item_list, dcmScanSvc.scan_single_curr_index);
+               dcm_sec_debug("current index: %d, path: %s, scan type: %d", dcmScanSvc.scan_single_curr_index, scan_item->file_path, scan_item->scan_item_type);
+
+               ret = dcmScanSvc.runScanProcess(scan_item);
+               if (ret != DCM_SUCCESS) {
+                       dcm_error("Failed to process scan job! err: %d", ret);
+
+                       /* If the scan item is not scanned, insert media uuid into face_scan_list */
+                       if (ret != DCM_ERROR_IMAGE_ALREADY_SCANNED) {
+                               dcmScanSvc.dcmDBUtils->_dcm_svc_db_insert_face_to_face_scan_list(scan_item);
+                       }
+               }
+
+               (dcmScanSvc.scan_single_curr_index)++;
+       }
+
+DCM_SVC_SCAN_SINGLE_FAILED:
+       ret = dcmScanSvc.dcmDBUtils->_dcm_svc_db_disconnect();
+       if (ret != DCM_SUCCESS) {
+               dcm_error("Failed to disconnect db! err: %d", ret);
+       }
+
+       if (scan_item != NULL)
+               *face_count = scan_item->face_count;
+       else
+               *face_count = 0;
+
+       dcm_debug("*face_count is %d", *face_count);
+       dcmScanSvc.clearSingleItemList();
+
+       ret = dcmScanSvc.finalize();
+       if (ret != DCM_SUCCESS) {
+               dcm_error("Failed to de-initialize scan thread global variable! err: %d", ret);
+       }
+       dcm_debug_fleave();
+
+       return DCM_SUCCESS;
+}
+
 int DcmScanSvc::terminateScanOperations()
 {
        dcm_debug("Terminate scanning operations, and quit scan thread main loop");
index 808f9519fce8f822327f182f7ed8e19144eb184c..464189c36e8a117735bd585578a96332f131d4bb 100755 (executable)
@@ -139,6 +139,7 @@ gboolean DcmMainSvcCallBack::readMsg(GIOChannel *src, GIOCondition condition, gp
        int sock = -1;
        int client_sock = -1;
        int ret = 0;
+       int face_count;
 
        DcmMainSvc *dcmSvc = DcmMainSvc::getInstance();
 
@@ -193,7 +194,11 @@ gboolean DcmMainSvcCallBack::readMsg(GIOChannel *src, GIOCondition condition, gp
                        ret = DcmIpcUtils::sendClientSocketMsg(client_sock, DCM_IPC_MSG_SCAN_ALL, recv_msg.uid, NULL, DCM_IPC_PORT_DCM_RECV);
                }
        } else if (recv_msg.msg_type == DCM_IPC_MSG_SCAN_SINGLE) {
-               ret = DcmIpcUtils::sendSocketMsg(DCM_IPC_MSG_SCAN_SINGLE, recv_msg.uid, recv_msg.msg, DCM_IPC_PORT_SCAN_RECV);
+               dcm_debug("Scan single");
+               ret = DcmScanMain::ScanSingle(recv_msg.msg, recv_msg.uid, &face_count);
+               dcm_debug("Scan single result: %d", face_count);
+               ret = DcmIpcUtils::sendClientSocketMsg(-1, 0, face_count, recv_msg.msg, DCM_IPC_PORT_MS_RECV);
+               //ret = DcmIpcUtils::sendSocketMsg(DCM_IPC_MSG_SCAN_SINGLE, recv_msg.uid, recv_msg.msg, DCM_IPC_PORT_SCAN_RECV);
 /*             if (ret == DCM_SUCCESS) {
                        ret = DcmIpcUtils::sendClientSocketMsg(client_sock, DCM_IPC_MSG_SCAN_SINGLE, recv_msg.uid, recv_msg.msg, DCM_IPC_PORT_DCM_RECV);
                }*/