Remove user_marked field in face table 81/160181/2 accepted/tizen/unified/20171115.174103 submit/tizen/20171115.074622
authorMinje Ahn <minje.ahn@samsung.com>
Tue, 14 Nov 2017 23:56:42 +0000 (08:56 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Wed, 15 Nov 2017 05:12:21 +0000 (14:12 +0900)
Add face scan status for distinguish between file changes and re-scans.
 - file modified time > face detected time : file is changed
 - face detected time == 0 : some detected faces are removed by user

Change logic to re-scan:
 - Do not delete, add missing. Delete is performed only when the file is modified.
 - Delete unnecessary fields (user_marked)

Change-Id: I1782e330698612c719c4842c6d9d9b1e990b9e2c
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
include/dcm_svc_db.h
src/dcm_svc_db.c
src/dcm_svc_detect_face.c
src/dcm_svc_internal.c

index 66f78797e29dfc32813319e315535f5e0ad8b464..aa86a191a5fceac1097dd615f1c7ec3064bc71a9 100755 (executable)
 #define DB_TABLE_FACE "face"
 #define DB_TABLE_FACE_SCAN_LIST "face_scan_list"
 #define DB_TABLE_MEDIA "media"
+
 #define FACE_ITEM "media_uuid, face_rect_x , face_rect_y, face_rect_w , face_rect_h, orientation"
 
-#define SELECT_MEDIA_INFO_BY_FILE_PATH_FROM_DB "SELECT media_uuid, width, height, orientation, mime_type, modified_time FROM media WHERE path = '%q';"
+#define SELECT_MEDIA_INFO_BY_FILE_PATH_FROM_DB "SELECT media_uuid, width, height, orientation, mime_type, modified_time FROM "DB_TABLE_MEDIA" WHERE path = '%q';"
 #define SELECT_SCAN_INFO_BY_MEDIA_ID "SELECT modified_time FROM "DB_TABLE_FACE_SCAN_LIST" WHERE media_uuid = '%q';"
 
 #define INSERT_FACE_ITEM_TO_DB "INSERT OR IGNORE INTO " DB_TABLE_FACE" (" FACE_ITEM") VALUES ('%q', %d, %d, %d, %d, %d);"
@@ -55,7 +56,8 @@ typedef enum {
        FACE_SCAN_NEEDED        = 0,
        FACE_SCAN_NO_NEEDED     = 1,
        FACE_SCAN_REFRESH_NEEDED        = 2,
-       FACE_SCAN_STATUS_NONE = 3,
+       FACE_SCAN_RESCAN = 3,
+       FACE_SCAN_STATUS_NONE = 4,
 } dcm_face_scan_status_e;
 
 int dcm_svc_db_connect(uid_t uid);
@@ -64,7 +66,6 @@ int dcm_svc_db_get_scan_image_info_by_path(const char *file_path, dcm_svc_item_s
 int dcm_svc_db_insert_face_to_db(dcm_face_item_s *face);
 int dcm_svc_db_update_color_to_db(const dcm_color_item_s color);
 int dcm_svc_db_insert_face_to_face_scan_list(dcm_svc_item_s *scan_item);
-int dcm_svc_db_update_face_to_face_scan_list(dcm_svc_item_s *scan_item);
 int dcm_svc_db_delete_face_from_db(const char *media_uuid);
 int dcm_svc_db_check_scanned_by_media_uuid(const char *media_uuid, time_t modified_time, dcm_face_scan_status_e *scan_status);
 
index fcbc5737bb5783f1995a3bec32dca21c75fd8580..d5ab0eabc1d783a09003c8177476d4bced48fff5 100755 (executable)
@@ -187,35 +187,7 @@ int dcm_svc_db_insert_face_to_face_scan_list(dcm_svc_item_s *scan_item)
        dcm_retvm_if(scan_item == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid scan_item");
        dcm_retvm_if(scan_item->media_uuid == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid");
 
-       query_string = sqlite3_mprintf("INSERT OR IGNORE INTO %s (media_uuid, modified_time) values('%q', %d)", DB_TABLE_FACE_SCAN_LIST, scan_item->media_uuid, scan_item->modified_time);
-       dcm_debug("query[%s]", query_string);
-
-       g_mutex_trylock(&gMutexLock);
-       ret = media_db_request_update_db(query_string, dcm_uid);
-       if (ret != MS_MEDIA_ERR_NONE)
-               dcm_error("media_db_request_update_db is failed: %d, %s", ret, sqlite3_errmsg((sqlite3 *)db_handle));
-
-       g_mutex_unlock(&gMutexLock);
-
-       DCM_SQLITE3_FREE(query_string);
-
-       dcm_debug_fleave();
-
-       return ret;
-}
-
-int dcm_svc_db_update_face_to_face_scan_list(dcm_svc_item_s *scan_item)
-{
-       int ret = MS_MEDIA_ERR_NONE;
-       char* query_string = NULL;
-
-       dcm_debug_fenter();
-
-       dcm_retvm_if(db_handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid db_handle");
-       dcm_retvm_if(scan_item == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid scan_item");
-       dcm_retvm_if(scan_item->media_uuid == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid");
-
-       query_string = sqlite3_mprintf("UPDATE %s SET modified_time = %d WHERE media_uuid='%q'", DB_TABLE_FACE_SCAN_LIST, scan_item->modified_time, scan_item->media_uuid);
+       query_string = sqlite3_mprintf("INSERT OR REPLACE INTO %s (media_uuid, modified_time) values('%q', %d)", DB_TABLE_FACE_SCAN_LIST, scan_item->media_uuid, scan_item->modified_time);
        dcm_debug("query[%s]", query_string);
 
        g_mutex_trylock(&gMutexLock);
@@ -242,7 +214,7 @@ int dcm_svc_db_delete_face_from_db(const char *media_uuid)
        dcm_retvm_if(db_handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid db_handle");
        dcm_retvm_if(media_uuid == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid media_uuid");
 
-       query_string = sqlite3_mprintf("DELETE FROM %s WHERE media_uuid='%q' AND user_marked = 0", DB_TABLE_FACE, media_uuid);
+       query_string = sqlite3_mprintf("DELETE FROM %s WHERE media_uuid='%q'", DB_TABLE_FACE, media_uuid);
        dcm_sec_debug("query[%s]", query_string);
 
        g_mutex_trylock(&gMutexLock);
@@ -310,8 +282,12 @@ int dcm_svc_db_check_scanned_by_media_uuid(const char *media_uuid, time_t modifi
                if (org_modified_time == modified_time) {
                        dcm_info("Already scanned item");
                        *scan_status = FACE_SCAN_NO_NEEDED;
+               } else if (org_modified_time == 0) {
+                       /*In case of the some objects removed by user */
+                       dcm_info("Some objects have been deleted");
+                       *scan_status = FACE_SCAN_RESCAN;
                } else {
-                       dcm_info("Scanned but item updated. Scanning needed");
+                       dcm_info("Scanned but item is modified");
                        *scan_status = FACE_SCAN_REFRESH_NEEDED;
                }
 
index 79659ef8e03a1b6584288895e8b1ffba1f556da0..17ad2c8fec7df1cd9d900a58b6ddd3c82b6c783f 100755 (executable)
@@ -195,15 +195,9 @@ int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e sc
 
 DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED:
 
-       if (scan_status == FACE_SCAN_REFRESH_NEEDED) {
-               err = dcm_svc_db_update_face_to_face_scan_list(scan_item);
-               if (err != MS_MEDIA_ERR_NONE)
-                       dcm_error("Failed to update face item into face_scan_list! err: %d", err);
-       } else {
-               err = dcm_svc_db_insert_face_to_face_scan_list(scan_item);
-               if (err != MS_MEDIA_ERR_NONE)
-                       dcm_error("Failed to insert face item into face_scan_list! err: %d", err);
-       }
+       err = dcm_svc_db_insert_face_to_face_scan_list(scan_item);
+       if (err != MS_MEDIA_ERR_NONE)
+               dcm_error("Failed to insert face item into face_scan_list! err: %d", err);
 
        dcm_face_destroy_face_info(face_info);
 
index 330612ae904a526c92f7b7a94a41d46107cd9b99..29acf65a446847ddc91f68470645dd227332246a 100755 (executable)
@@ -47,7 +47,6 @@ static int __dcm_scan_process(dcm_svc_item_s *scan_item)
 
                if (scan_status == FACE_SCAN_NO_NEEDED) {
                        dcm_warn("This media is scanned already! Skip...");
-                       DCM_SAFE_FREE(image_info.pixel);
                        return MS_MEDIA_ERROR_ALREADY_SCANNED;
                } else {
                        dcm_debug("Need to Scan");
@@ -74,8 +73,9 @@ static int __dcm_scan_process(dcm_svc_item_s *scan_item)
                dcm_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Failed dcm_decode_image(%d)", ret);
 
                dcm_info("Image info W[%d] H[%d] Orient[%d] buf_w[%d] buf_h[%d]",
-                       image_info.original_width, image_info.original_height, scan_item->image_orientation, image_info.buffer_width, image_info.buffer_height);
+                       image_info.original_width, image_info.original_height, image_info.orientation, image_info.buffer_width, image_info.buffer_height);
 
+               /* If status is refresh, remove all faces and re-insert */
                if (scan_status == FACE_SCAN_REFRESH_NEEDED) {
                        ret = dcm_svc_db_delete_face_from_db(scan_item->media_uuid);
                        if (ret != MS_MEDIA_ERR_NONE)