[Systeminfo] Cleaning handling Storage for TV profile in Systeminfo
authorPiotr Kosko <p.kosko@samsung.com>
Thu, 7 Jan 2016 07:31:33 +0000 (08:31 +0100)
committerPiotr Kosko <p.kosko@samsung.com>
Wed, 13 Jan 2016 13:53:49 +0000 (14:53 +0100)
[Verification]
  Filesystem 100% passrate.
  Other modules TCT passrate didn't change.

Change-Id: I4fdabca859b34a7698ae0c4aaf675b8379aed7f0
Signed-off-by: Piotr Kosko <p.kosko@samsung.com>
src/common/filesystem/filesystem_provider_deviced.cc
src/common/filesystem/filesystem_provider_storage.cc
src/common/filesystem/filesystem_storage.cc
src/common/filesystem/filesystem_storage.h
src/systeminfo/systeminfo_properties_manager.cc

index e401376..c318323 100644 (file)
 #include "common/logger.h"
 
 namespace {
-static const char* kDeviceDName = "org.tizen.system.deviced";
-#ifdef USBHOST
-static const char* kIface = "org.tizen.system.deviced.Usbhost";
-static const char* kPath = "/Org/Tizen/System/DeviceD/Usbhost";
-#else
-static const char* kIface = "org.tizen.system.deviced.BlockManager";
+static const char* kBus = "org.tizen.system.deviced";
+static const char* kBlockIface = "org.tizen.system.deviced.Block";
+static const char* kBlackManagerIface = "org.tizen.system.deviced.BlockManager";
 static const char* kPath = "/Org/Tizen/System/DeviceD/Block/Manager";
-#endif
+static const char* kDeviceChangedMethod = "DeviceChanged";
+static const char* kGetDeviceListMethod = "GetDeviceList";
 }  // namespace
 
 namespace common {
@@ -114,14 +112,7 @@ FilesystemProviderDeviced::FilesystemProviderDeviced() :
       LoggerE("Dbus handle is null");
     } else {
       LoggerE("Dbus connection set");
-      proxy_ = g_dbus_proxy_new_sync(dbus_, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
-                                     nullptr, kDeviceDName, kPath, kIface, nullptr,
-                                     &error);
-      if (!proxy_ || error) {
-        LoggerE("Could not get dbus proxy. %s", error->message);
-      } else {
-        is_initialized_ = true;
-      }
+      is_initialized_ = true;
     }
   }
 }
@@ -178,7 +169,7 @@ void FilesystemProviderDeviced::RegisterDeviceChangeState(
   if (device_changed_callback_ == nullptr) {
     LoggerD("Registering dbus signal subscription");
     block_signal_subscribe_id_ = g_dbus_connection_signal_subscribe(
-        dbus_, nullptr, "org.tizen.system.deviced.Block", "DeviceChanged",
+        dbus_, nullptr, kBlockIface, kDeviceChangedMethod,
         nullptr, nullptr, G_DBUS_SIGNAL_FLAGS_NONE, BlockSignalProxy, this,
         nullptr);
   }
@@ -206,25 +197,11 @@ std::shared_ptr<Storage> FilesystemProviderDeviced::GetInternalStorage() {
 
 std::shared_ptr<Storage> FilesystemProviderDeviced::GetStorage(const DeviceListElem& elem) {
   LoggerD("Entered");
-  return std::make_shared<Storage>(Storage(GetIdFromUUID(elem.fs_uuid_enc), StorageType::kExternal,
+  return std::make_shared<Storage>(GetIdFromUUID(elem.fs_uuid_enc),
+                 (elem.block_type ? StorageType::kMmc : StorageType::kUsbDevice),
                  (elem.state ? StorageState::kMounted : StorageState::kUnmounted),
-                 elem.syspath, GetNameFromPath(elem.devnode)));
-}
-
-std::shared_ptr<Storage> FilesystemProviderDeviced::GetStorageUsb(const UsbListElem& elem) {
-  LoggerD("Entered");
-  SLoggerD("usb_devpath %s", elem.usb_devpath);
-  SLoggerD("usb_class %d", elem.usb_class);
-  SLoggerD("usb_subclass %d", elem.usb_subclass);
-  SLoggerD("usb_protocol %d", elem.usb_protocol);
-  SLoggerD("usb_vendor_id %d", elem.usb_vendor_id);
-  SLoggerD("usb_product_id %d", elem.usb_product_id);
-  SLoggerD("usb_manufacturer %s", elem.usb_manufacturer);
-  SLoggerD("usb_product_name %s", elem.usb_product_name);
-  SLoggerD("usb_serial %s", elem.usb_serial);
-  return std::make_shared<Storage>(Storage(elem.usb_product_id, StorageType::kExternal,
-                 StorageState::kMounted, // TODO: check if found storage is always mounted
-                 elem.usb_devpath, GetNameFromPath(elem.usb_devpath)));
+                 elem.mount_point,
+                 GetNameFromPath(elem.devnode));
 }
 
 std::string FilesystemProviderDeviced::GetNameFromPath(
@@ -247,7 +224,7 @@ int FilesystemProviderDeviced::GetIdFromUUID(const char* const char_uuid) {
   std::string uuid = char_uuid;
   size_t hyphen = uuid.find("-");
   std::string clear_uuid = uuid.substr(0, hyphen) + uuid.substr(hyphen + 1);
-  return static_cast<int>(std::stoul(clear_uuid, 0, 16));
+  return static_cast<unsigned int>(std::stoul(clear_uuid, nullptr, 16));
 }
 
 Storages FilesystemProviderDeviced::GetStorages() {
@@ -259,56 +236,53 @@ Storages FilesystemProviderDeviced::GetStorages() {
   }
 
   GError* error = nullptr;
-#ifdef USBHOST
-  GVariant* variant = g_dbus_proxy_call_sync(
-      proxy_, "GetDeviceList", g_variant_new("(i)", "0xffffffff"),
-      G_DBUS_CALL_FLAGS_NONE, -1, nullptr, &error);
-#else
-  GVariant* variant = g_dbus_proxy_call_sync(
-      proxy_, "GetDeviceList", g_variant_new("(s)", "all"),
-      G_DBUS_CALL_FLAGS_NONE, -1, nullptr, &error);
-#endif
+  GVariant* variant = g_dbus_connection_call_sync(dbus_,
+                                                  kBus,
+                                                  kPath,
+                                                  kBlackManagerIface,
+                                                  kGetDeviceListMethod,
+                                                  g_variant_new("(s)", "all"),
+                                                  NULL,
+                                                  G_DBUS_CALL_FLAGS_NONE,
+                                                  -1,
+                                                  NULL,
+                                                  &error);
   if (!variant || error) {
     LoggerE("Failed to call GetDeviceList method - %s", error->message);
     return Storages();
   }
-  LoggerD("GetDeviceList called");
   return GetStoragesFromGVariant(variant);
 }
 
 Storages FilesystemProviderDeviced::GetStoragesFromGVariant(GVariant* variant) {
   LoggerD("Entered");
-  SLoggerD("Imput variant looks like:\ng_variant_print(variant): %s", g_variant_print (variant, TRUE));
   Storages storages;
-  GVariantIter iter_variant;
-  GVariant* array = nullptr;
-  g_variant_iter_init(&iter_variant, variant);
-  while ((array = g_variant_iter_next_value(&iter_variant))) {
-    GVariantIter iter_array;
-    g_variant_iter_init (&iter_array, array);
-    GVariant* array_elem = nullptr;
-
-    while ((array_elem = g_variant_iter_next_value (&iter_array))) {
-      SLoggerD("Adding storage: g_variant_print(array_elem): %s", g_variant_print (array_elem, TRUE));
-#ifdef USBHOST
-      UsbListElem elem;
-      g_variant_get(array_elem, "(siiiiisss)", &elem.usb_devpath, &elem.usb_class,
-                        &elem.usb_subclass, &elem.usb_protocol, &elem.usb_vendor_id,
-                        &elem.usb_product_id, &elem.usb_manufacturer, &elem.usb_product_name,
-                        &elem.usb_serial);
-      storages.push_back(GetStorageUsb(elem));
-#else
-      DeviceListElem elem;
-      g_variant_get(array_elem, "(issssssisib)", &elem.block_type, &elem.devnode,
-                    &elem.syspath, &elem.fs_usage, &elem.fs_type,
-                    &elem.fs_version, &elem.fs_uuid_enc, &elem.readonly,
-                    &elem.mount_point, &elem.state, &elem.primary);
-      storages.push_back(GetStorage(elem));
-#endif
-      g_variant_unref(array_elem);
-    }
-    g_variant_unref(array);
+  GVariantIter *iter;
+
+  g_variant_get(variant, "(a(issssssisib))", &iter);
+  DeviceListElem elem;
+  while (g_variant_iter_loop(iter, "(issssssisib)",
+                             &elem.block_type, &elem.devnode, &elem.syspath,
+                             &elem.fs_usage, &elem.fs_type,
+                             &elem.fs_version, &elem.fs_uuid_enc,
+                             &elem.readonly, &elem.mount_point,
+                             &elem.state, &elem.primary)) {
+    SLoggerD("##### DEVICE INFO #####");
+    SLoggerD("# block_type : (%d)", elem.block_type);
+    SLoggerD("# devnode : (%s)", elem.devnode);
+    SLoggerD("# syspath : (%s)", elem.syspath);
+    SLoggerD("# fs_usage : (%s)", elem.fs_usage);
+    SLoggerD("# fs_type : (%s)", elem.fs_type);
+    SLoggerD("# fs_version : (%s)", elem.fs_version);
+    SLoggerD("# fs_uuid_enc: (%s)", elem.fs_uuid_enc);
+    SLoggerD("# readonly : (%d)", elem.readonly);
+    SLoggerD("# mount_point: (%s)", elem.mount_point);
+    SLoggerD("# state : (%d)", elem.state);
+    SLoggerD("# primary : (%s)", elem.primary ? "true" : "false");
+    storages.push_back(GetStorage(elem));
   }
+  g_variant_iter_free(iter);
+  g_variant_unref(variant);
   return storages;
 }
 
index 4db8a28..98bfa43 100644 (file)
@@ -36,13 +36,13 @@ const std::string kVirtualRootWgtPrivateTmp = "wgt-private-tmp";
 const std::string kVirtualRootMedia = "internal0";
 
 const std::map<storage_directory_e, const std::string*> kStorageDirectories = {
-    { STORAGE_DIRECTORY_CAMERA, &kVirtualRootCamera }, {
-        STORAGE_DIRECTORY_DOCUMENTS, &kVirtualRootDocuments }, {
-        STORAGE_DIRECTORY_DOWNLOADS, &kVirtualRootDownloads }, {
-        STORAGE_DIRECTORY_IMAGES, &kVirtualRootImages }, {
-        STORAGE_DIRECTORY_MUSIC, &kVirtualRootMusic }, {
-        STORAGE_DIRECTORY_SYSTEM_RINGTONES, &kVirtualRootRingtones }, {
-        STORAGE_DIRECTORY_VIDEOS, &kVirtualRootVideos } };
+    { STORAGE_DIRECTORY_CAMERA, &kVirtualRootCamera },
+    { STORAGE_DIRECTORY_DOCUMENTS, &kVirtualRootDocuments },
+    { STORAGE_DIRECTORY_DOWNLOADS, &kVirtualRootDownloads },
+    { STORAGE_DIRECTORY_IMAGES, &kVirtualRootImages },
+    { STORAGE_DIRECTORY_MUSIC, &kVirtualRootMusic },
+    { STORAGE_DIRECTORY_SYSTEM_RINGTONES, &kVirtualRootRingtones },
+    { STORAGE_DIRECTORY_VIDEOS, &kVirtualRootVideos } };
 
 const std::string kFileUriPrefix = "file://";
 
@@ -97,7 +97,7 @@ bool OnForeachStorage(int storage_id, storage_type_e type,
 
   StorageType type_ =
       type == STORAGE_TYPE_INTERNAL ?
-          StorageType::kInternal : StorageType::kExternal;
+          StorageType::kInternal : StorageType::kUnknown;
 
   provider->GetStorages().push_back(
       std::make_shared<Storage>(storage_id, type_, TranslateCoreStorageState(state), path));
index 0427c81..1ea9563 100644 (file)
@@ -39,11 +39,11 @@ Storage::Storage(int id, StorageType type, StorageState state,
       case StorageType::kInternal:
         name_ = "internal";
         break;
-
-      case StorageType::kExternal:
+      case StorageType::kUsbDevice:
+      case StorageType::kUsbHost:
+      case StorageType::kMmc:
         name_ = "removable";
         break;
-
       default:
         name_ = "unknown";
         LoggerE("Unknown storage type: %d", type);
@@ -93,10 +93,10 @@ std::string VirtualRoot::ToString(StorageType type) {
   switch (type) {
     case StorageType::kInternal:
       return "INTERNAL";
-
-    case StorageType::kExternal:
+    case StorageType::kUsbDevice:
+    case StorageType::kUsbHost:
+    case StorageType::kMmc:
       return "EXTERNAL";
-
     default:
       LoggerE("Unknown storage type: %d", type);
       return "UNKNOWN";
index 6f67388..806d0b2 100644 (file)
@@ -30,8 +30,11 @@ enum class StorageState {
 };
 
 enum class StorageType {
+  kUnknown,
   kInternal,
-  kExternal
+  kUsbDevice,
+  kUsbHost,
+  kMmc
 };
 
 class VirtualStorage {
index 1c34245..a4f85e8 100644 (file)
@@ -1176,18 +1176,31 @@ static void CreateStorageInfo(const std::string& type, struct statfs& fs, picojs
   out->insert(std::make_pair("isRemovable", picojson::value(isRemovable)));
 }
 
-#ifdef TIZEN_TV
+static std::string FromStorageTypeToStringType(common::StorageType type) {
+  switch(type) {
+    case common::StorageType::kUsbDevice:
+      return kTypeUsbDevice;
+    case common::StorageType::kUsbHost:
+      return kTypeUsbHost;
+    case common::StorageType::kMmc:
+      return kTypeMmc;
+    default:
+      return kTypeUnknown;
+  }
+}
+
 PlatformResult SysteminfoPropertiesManager::ReportStorage(picojson::object* out) {
-  LoggerD("Enter");
+  LoggerD("Entered");
+  int sdcardState = 0;
+  struct statfs fs;
 
   picojson::value result = picojson::value(picojson::array());
   picojson::array& array = result.get<picojson::array>();
 
-  struct statfs fs;
-
   // handling internal storage
   array.push_back(picojson::value(picojson::object()));
   picojson::object& internal_obj = array.back().get<picojson::object>();
+
   if (statfs(kStorageInternalPath.c_str(), &fs) < 0) {
     return LogAndCreateResult(
               ErrorCode::UNKNOWN_ERR, "There are no storage units detected");
@@ -1196,6 +1209,7 @@ PlatformResult SysteminfoPropertiesManager::ReportStorage(picojson::object* out)
   manager_.SetAvailableCapacityInternal(fs.f_bavail);
 
   // handling external storages
+#ifdef TIZEN_TV
   common::FilesystemProvider& provider(common::FilesystemProvider::Create());
   auto storages = provider.GetStorages();
   LoggerD("Storages found %d", storages.size());
@@ -1206,36 +1220,12 @@ PlatformResult SysteminfoPropertiesManager::ReportStorage(picojson::object* out)
         return PlatformResult(ErrorCode::UNKNOWN_ERR, "Storage unit not detected");
       }
       array.push_back(picojson::value(picojson::object()));
-      internal_obj = array.back().get<picojson::object>();
-      CreateStorageInfo(kTypeUsbDevice, fs, &internal_obj);
+      picojson::object& external_obj = array.back().get<picojson::object>();
+      CreateStorageInfo(FromStorageTypeToStringType(storage->type()), fs, &external_obj);
       // TODO some tracking of available capacity of usb storages should be applied
     }
   }
-
-  out->insert(std::make_pair("storages", picojson::value(result)));
-  return PlatformResult(ErrorCode::NO_ERROR);
-}
 #else
-
-PlatformResult SysteminfoPropertiesManager::ReportStorage(picojson::object* out) {
-  LoggerD("Entered");
-  int sdcardState = 0;
-  struct statfs fs;
-
-  picojson::value result = picojson::value(picojson::array());
-
-  picojson::array& array = result.get<picojson::array>();
-  array.push_back(picojson::value(picojson::object()));
-  picojson::object& internal_obj = array.back().get<picojson::object>();
-
-
-  if (statfs(kStorageInternalPath.c_str(), &fs) < 0) {
-    return LogAndCreateResult(
-              ErrorCode::UNKNOWN_ERR, "There are no storage units detected");
-  }
-  CreateStorageInfo(kTypeInternal, fs, &internal_obj);
-  manager_.SetAvailableCapacityInternal(fs.f_bavail);
-
   if (0 == vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &sdcardState)) {
     if (VCONFKEY_SYSMAN_MMC_MOUNTED == sdcardState){
       if (statfs(kStorageSdcardPath.c_str(), &fs) < 0) {
@@ -1248,11 +1238,11 @@ PlatformResult SysteminfoPropertiesManager::ReportStorage(picojson::object* out)
       manager_.SetAvailableCapacityMmc(fs.f_bavail);
     }
   }
-
+#endif
   out->insert(std::make_pair("storages", picojson::value(result)));
   return PlatformResult(ErrorCode::NO_ERROR);
 }
-#endif
+
 
 PlatformResult SysteminfoPropertiesManager::ReportCameraFlash(picojson::object* out,
                                                               unsigned long index) {