From: Piotr Kosko Date: Thu, 7 Jan 2016 07:31:33 +0000 (+0100) Subject: [Systeminfo] Cleaning handling Storage for TV profile in Systeminfo X-Git-Tag: submit/tizen/20160114.043932^2~2^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9124f2150cba60647934bf5bd4fe2b06ae5d0cd2;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Systeminfo] Cleaning handling Storage for TV profile in Systeminfo [Verification] Filesystem 100% passrate. Other modules TCT passrate didn't change. Change-Id: I4fdabca859b34a7698ae0c4aaf675b8379aed7f0 Signed-off-by: Piotr Kosko --- diff --git a/src/common/filesystem/filesystem_provider_deviced.cc b/src/common/filesystem/filesystem_provider_deviced.cc index e4013764..c3183235 100644 --- a/src/common/filesystem/filesystem_provider_deviced.cc +++ b/src/common/filesystem/filesystem_provider_deviced.cc @@ -28,14 +28,12 @@ #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 FilesystemProviderDeviced::GetInternalStorage() { std::shared_ptr FilesystemProviderDeviced::GetStorage(const DeviceListElem& elem) { LoggerD("Entered"); - return std::make_shared(Storage(GetIdFromUUID(elem.fs_uuid_enc), StorageType::kExternal, + return std::make_shared(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 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(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(std::stoul(clear_uuid, 0, 16)); + return static_cast(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; } diff --git a/src/common/filesystem/filesystem_provider_storage.cc b/src/common/filesystem/filesystem_provider_storage.cc index 4db8a28d..98bfa43d 100644 --- a/src/common/filesystem/filesystem_provider_storage.cc +++ b/src/common/filesystem/filesystem_provider_storage.cc @@ -36,13 +36,13 @@ const std::string kVirtualRootWgtPrivateTmp = "wgt-private-tmp"; const std::string kVirtualRootMedia = "internal0"; const std::map 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_id, type_, TranslateCoreStorageState(state), path)); diff --git a/src/common/filesystem/filesystem_storage.cc b/src/common/filesystem/filesystem_storage.cc index 0427c810..1ea95639 100644 --- a/src/common/filesystem/filesystem_storage.cc +++ b/src/common/filesystem/filesystem_storage.cc @@ -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"; diff --git a/src/common/filesystem/filesystem_storage.h b/src/common/filesystem/filesystem_storage.h index 6f67388a..806d0b27 100644 --- a/src/common/filesystem/filesystem_storage.h +++ b/src/common/filesystem/filesystem_storage.h @@ -30,8 +30,11 @@ enum class StorageState { }; enum class StorageType { + kUnknown, kInternal, - kExternal + kUsbDevice, + kUsbHost, + kMmc }; class VirtualStorage { diff --git a/src/systeminfo/systeminfo_properties_manager.cc b/src/systeminfo/systeminfo_properties_manager.cc index 1c342458..a4f85e85 100644 --- a/src/systeminfo/systeminfo_properties_manager.cc +++ b/src/systeminfo/systeminfo_properties_manager.cc @@ -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(); - struct statfs fs; - // handling internal storage array.push_back(picojson::value(picojson::object())); picojson::object& internal_obj = array.back().get(); + 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(); - CreateStorageInfo(kTypeUsbDevice, fs, &internal_obj); + picojson::object& external_obj = array.back().get(); + 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(); - array.push_back(picojson::value(picojson::object())); - picojson::object& internal_obj = array.back().get(); - - - 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) {