From eb05ed659dd73adcd19baf3a3f7efb6bed646565 Mon Sep 17 00:00:00 2001 From: Jiyong Min Date: Tue, 5 Jul 2016 12:53:42 +0900 Subject: [PATCH] Add to scan single item synchronizingly Change-Id: I847fc916c2de48554e7d6776fe48825823da36d9 Signed-off-by: Jiyong Min --- include/DcmScanSvc.h | 1 + packaging/dcm-service.spec | 2 +- src/DcmScanSvc.cpp | 76 ++++++++++++++++++++++++++++++++++++++ svc/DcmMainSvc.cpp | 7 +++- 4 files changed, 84 insertions(+), 2 deletions(-) diff --git a/include/DcmScanSvc.h b/include/DcmScanSvc.h index 8023f09..dfa096a 100755 --- a/include/DcmScanSvc.h +++ b/include/DcmScanSvc.h @@ -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_ */ diff --git a/packaging/dcm-service.spec b/packaging/dcm-service.spec index 7fb1d8e..0b2fddd 100755 --- a/packaging/dcm-service.spec +++ b/packaging/dcm-service.spec @@ -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 diff --git a/src/DcmScanSvc.cpp b/src/DcmScanSvc.cpp index 5818e85..1d62944 100755 --- a/src/DcmScanSvc.cpp +++ b/src/DcmScanSvc.cpp @@ -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"); diff --git a/svc/DcmMainSvc.cpp b/svc/DcmMainSvc.cpp index 808f951..464189c 100755 --- a/svc/DcmMainSvc.cpp +++ b/svc/DcmMainSvc.cpp @@ -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); }*/ -- 2.34.1