[Content] Code refactored not to use deprecated native API 84/196984/4
authorPiotr Kosko/Native/Web API (SWP) /SRPOL/Professional/삼성전자 <p.kosko@samsung.com>
Tue, 8 Jan 2019 10:11:38 +0000 (11:11 +0100)
committerPiotr Kosko/Native/Web API (SWP) /SRPOL/Professional/삼성전자 <p.kosko@samsung.com>
Wed, 9 Jan 2019 10:40:55 +0000 (11:40 +0100)
[Feature]
  - use internal native API in place of removed public API (added include *internal.h)
    int image_meta_set_orientation(image_meta_h, media_content_orientation_e)
    int image_meta_update_to_db(image_meta_h)
    int media_info_set_description(media_info_h, const char*)
    int media_info_set_display_name(media_info_h, const char*)
    int media_info_set_latitude(media_info_h, double)
    int media_info_set_longitude(media_info_h, double)
    int media_info_set_rating(media_info_h, int)
  - use stat instead of media_folder_get_modified_time()
  - removed usage of not documented enum MEDIA_CONTENT_STORAGE_CLOUD

[Related ACR] http://suprem.sec.samsung.net/jira/browse/ACR-1308

[Verification] tct-content - 100%

Change-Id: I37932c59549295e4d7154888406275168c49ab47
Signed-off-by: Piotr Kosko/Native/Web API (SWP) /SRPOL/Professional/삼성전자 <p.kosko@samsung.com>
src/content/content_manager.cc
src/content/content_manager.h

index bff6183..8d8c990 100644 (file)
 
 #include "content/content_manager.h"
 
+#include <media_content_internal.h>
 #include <metadata_extractor.h>
 #include <stdlib.h>
+#include <sys/stat.h>
 #include <unistd.h>
 #include <algorithm>
 #include <cstring>
@@ -360,7 +362,6 @@ void ContentDirToJson(media_folder_h folder, picojson::object& o) {
   int ret;
   char* tmpStr = NULL;
   media_content_storage_e storage_type;
-  time_t tmpDate;
 
   // id
   ret = media_folder_get_folder_id(folder, &tmpStr);
@@ -373,10 +374,13 @@ void ContentDirToJson(media_folder_h folder, picojson::object& o) {
   }
 
   // directoryURI
+  std::string folder_path;
   ret = media_folder_get_path(folder, &tmpStr);
   if (ret == MEDIA_CONTENT_ERROR_NONE) {
     if (tmpStr) {
       o["directoryURI"] = picojson::value(std::string(tmpStr));
+      // folder_path value kept for modifiedDate property gathering
+      folder_path = tmpStr;
       free(tmpStr);
       tmpStr = NULL;
     }
@@ -397,17 +401,17 @@ void ContentDirToJson(media_folder_h folder, picojson::object& o) {
   if (ret == MEDIA_CONTENT_ERROR_NONE) {
     if (storage_type == MEDIA_CONTENT_STORAGE_INTERNAL) {
       o["storageType"] = picojson::value(std::string("INTERNAL"));
-    } else if (storage_type == MEDIA_CONTENT_STORAGE_EXTERNAL) {
+    } else {
+      LoggerD("storageType = %d, assuming EXTERNAL as storage type", storage_type);
       o["storageType"] = picojson::value(std::string("EXTERNAL"));
-    } else if (storage_type == MEDIA_CONTENT_STORAGE_CLOUD) {
-      o["storageType"] = picojson::value(std::string("CLOUD"));
     }
   }
 
-  // modifiedData
-  ret = media_folder_get_modified_time(folder, &tmpDate);
-  if (ret == MEDIA_CONTENT_ERROR_NONE) {
-    o["modifiedDate"] = picojson::value(static_cast<double>(tmpDate));
+  // modifiedDate
+  struct stat stat_res;
+  if (stat(folder_path.c_str(), &stat_res) == 0) {
+    auto mod_time = stat_res.st_mtime;
+    o["modifiedDate"] = picojson::value(static_cast<double>(mod_time));
   }
 }
 
@@ -512,36 +516,32 @@ static void FolderToJson(media_folder_h folder, picojson::object* out) {
                       ("Failed: media_folder_get_folder_id"));
     return;
   }
+  std::unique_ptr<char, decltype(&free)> id_ptr(id, &free);
 
   ret = media_folder_get_name(folder, &name);
   if (ret != MEDIA_CONTENT_ERROR_NONE) {
     LogAndReportError(ContentManager::convertError(ret), out, ("Failed: media_folder_get_name"));
-    free(id);
     return;
   }
+  std::unique_ptr<char, decltype(&free)> name_ptr(name, &free);
 
   ret = media_folder_get_path(folder, &path);
   if (ret != MEDIA_CONTENT_ERROR_NONE) {
     LogAndReportError(ContentManager::convertError(ret), out, ("Failed: media_folder_get_path"));
-    free(id);
-    free(name);
     return;
   }
+  std::unique_ptr<char, decltype(&free)> path_ptr(path, &free);
 
-  ret = media_folder_get_modified_time(folder, &date);
-  if (ret != MEDIA_CONTENT_ERROR_NONE) {
-    LogAndReportError(ContentManager::convertError(ret), out, ("Failed: media_folder_get_path"));
-    free(id);
-    free(name);
-    free(path);
+  struct stat stat_res;
+  ret = stat(path, &stat_res);
+  if (0 != ret) {
+    LogAndReportError(ContentManager::convertError(errno), out, ("Failed: stat"));
     return;
   }
+  date = stat_res.st_mtime;
 
   ret = media_folder_get_storage_type(folder, &storageType);
   if (ret != MEDIA_CONTENT_ERROR_NONE) {
-    free(id);
-    free(name);
-    free(path);
     LogAndReportError(ContentManager::convertError(ret), out,
                       ("Failed: media_folder_get_storage_type"));
     return;
@@ -558,10 +558,6 @@ static void FolderToJson(media_folder_h folder, picojson::object* out) {
   }
 
   (*out)["modifiedDate"] = picojson::value(static_cast<double>(date));
-
-  free(name);
-  free(id);
-  free(path);
 }
 
 static bool media_foreach_directory_cb(media_folder_h folder, void* user_data) {
@@ -1013,7 +1009,7 @@ void ContentManager::removePlaylist(std::string playlistId,
   }
 }
 
-int ContentManager::update(picojson::value args) {
+int ContentManager::update(const picojson::value& args) {
   ScopeLogger();
 
   int ret;
@@ -1031,7 +1027,7 @@ int ContentManager::update(picojson::value args) {
   return ret;
 }
 
-int ContentManager::updateBatch(picojson::value args) {
+int ContentManager::updateBatch(const picojson::value& args) {
   ScopeLogger();
   int ret = 0;
   std::vector<picojson::value> contents = args.get("contents").get<picojson::array>();
index 9f86c96..8c15d0d 100644 (file)
@@ -56,8 +56,8 @@ class ContentManager {
 
   void getDirectories(const std::shared_ptr<ReplyCallbackData>& user_data);
   void find(const std::shared_ptr<ReplyCallbackData>& user_data);
-  int update(picojson::value args);
-  int updateBatch(picojson::value args);
+  int update(const picojson::value& args);
+  int updateBatch(const picojson::value& args);
 
   int scanFile(std::string& uri);
   common::PlatformResult scanDirectory(media_scan_completed_cb callback, ReplyCallbackData* cbData);