Index: chromeos/dbus/media_transfer_protocol_daemon_client.cc |
=================================================================== |
--- chromeos/dbus/media_transfer_protocol_daemon_client.cc (revision 154535) |
+++ chromeos/dbus/media_transfer_protocol_daemon_client.cc (working copy) |
@@ -4,61 +4,18 @@ |
#include "chromeos/dbus/media_transfer_protocol_daemon_client.h" |
-#include <map> |
- |
#include "base/bind.h" |
-#include "base/stl_util.h" |
-#include "base/stringprintf.h" |
#include "dbus/bus.h" |
#include "dbus/message.h" |
#include "dbus/object_path.h" |
#include "dbus/object_proxy.h" |
+#include "chromeos/dbus/mtp_storage_info.pb.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
namespace chromeos { |
namespace { |
-// Pops a string value when |reader| is not NULL. |
-// Returns true when a value is popped, false otherwise. |
-bool MaybePopString(dbus::MessageReader* reader, std::string* value) { |
- if (!reader) |
- return false; |
- return reader->PopString(value); |
-} |
- |
-// Pops a uint16 value when |reader| is not NULL. |
-// Returns true when a value is popped, false otherwise. |
-bool MaybePopUint16(dbus::MessageReader* reader, uint16* value) { |
- if (!reader) |
- return false; |
- return reader->PopUint16(value); |
-} |
- |
-// Pops a uint32 value when |reader| is not NULL. |
-// Returns true when a value is popped, false otherwise. |
-bool MaybePopUint32(dbus::MessageReader* reader, uint32* value) { |
- if (!reader) |
- return false; |
- return reader->PopUint32(value); |
-} |
- |
-// Pops a uint64 value when |reader| is not NULL. |
-// Returns true when a value is popped, false otherwise. |
-bool MaybePopUint64(dbus::MessageReader* reader, uint64* value) { |
- if (!reader) |
- return false; |
- return reader->PopUint64(value); |
-} |
- |
-// Pops a int64 value when |reader| is not NULL. |
-// Returns true when a value is popped, false otherwise. |
-bool MaybePopInt64(dbus::MessageReader* reader, int64* value) { |
- if (!reader) |
- return false; |
- return reader->PopInt64(value); |
-} |
- |
// The MediaTransferProtocolDaemonClient implementation. |
class MediaTransferProtocolDaemonClientImpl |
: public MediaTransferProtocolDaemonClient { |
@@ -296,8 +253,11 @@ |
error_callback.Run(); |
return; |
} |
- StorageInfo storage_info(storage_name, response); |
- callback.Run(storage_info); |
+ |
+ dbus::MessageReader reader(response); |
+ MtpStorageInfo protobuf; |
+ reader.PopArrayOfBytesAsProto(&protobuf); |
+ callback.Run(StorageInfo(storage_name, protobuf)); |
} |
// Handles the result of OpenStorage and calls |callback| or |error_callback|. |
@@ -341,17 +301,11 @@ |
} |
std::vector<FileEntry> file_entries; |
- dbus::MessageReader response_reader(response); |
- dbus::MessageReader array_reader(response); |
- if (!response_reader.PopArray(&array_reader)) { |
- LOG(ERROR) << "Invalid response: " << response->ToString(); |
- error_callback.Run(); |
- return; |
- } |
- while (array_reader.HasMoreData()) { |
- FileEntry entry(response); |
- file_entries.push_back(entry); |
- } |
+ dbus::MessageReader reader(response); |
+ MtpFileEntries entries_protobuf; |
+ reader.PopArrayOfBytesAsProto(&entries_protobuf); |
+ for (int i = 0; i < entries_protobuf.file_entries_size(); ++i) |
+ file_entries.push_back(FileEntry(entries_protobuf.file_entries(i))); |
callback.Run(file_entries); |
} |
@@ -386,8 +340,10 @@ |
return; |
} |
- FileEntry file_entry(response); |
- callback.Run(file_entry); |
+ dbus::MessageReader reader(response); |
+ MtpFileEntry protobuf; |
+ reader.PopArrayOfBytesAsProto(&protobuf); |
+ callback.Run(FileEntry(protobuf)); |
} |
// Handles MTPStorageAttached/Dettached signals and calls |handler|. |
@@ -492,64 +448,26 @@ |
} |
StorageInfo::StorageInfo(const std::string& storage_name, |
- dbus::Response* response) |
- : vendor_id_(0), |
- product_id_(0), |
- device_flags_(0), |
+ const MtpStorageInfo& storage_info) |
+ : vendor_(storage_info.vendor()), |
+ vendor_id_(storage_info.vendor_id()), |
+ product_(storage_info.product()), |
+ product_id_(storage_info.product_id()), |
+ device_flags_(storage_info.device_flags()), |
storage_name_(storage_name), |
- storage_type_(0), |
- filesystem_type_(0), |
- access_capability_(0), |
- max_capacity_(0), |
- free_space_in_bytes_(0), |
- free_space_in_objects_(0) { |
- InitializeFromResponse(response); |
+ storage_type_(storage_info.storage_type()), |
+ filesystem_type_(storage_info.filesystem_type()), |
+ access_capability_(storage_info.access_capability()), |
+ max_capacity_(storage_info.max_capacity()), |
+ free_space_in_bytes_(storage_info.free_space_in_bytes()), |
+ free_space_in_objects_(storage_info.free_space_in_objects()), |
+ storage_description_(storage_info.storage_description()), |
+ volume_identifier_(storage_info.volume_identifier()) { |
satorux1
2012/09/01 01:03:50
do you need to copy the proto to the class? Wouldn
Lei Zhang
2012/09/04 20:09:38
Ya, we can. I just need to add the "storage name"
|
} |
StorageInfo::~StorageInfo() { |
} |
-// Initializes |this| from |response| given by the mtpd service. |
-void StorageInfo::InitializeFromResponse(dbus::Response* response) { |
- dbus::MessageReader response_reader(response); |
- dbus::MessageReader array_reader(response); |
- if (!response_reader.PopArray(&array_reader)) { |
- LOG(ERROR) << "Invalid response: " << response->ToString(); |
- return; |
- } |
- // TODO(thestig): Rework this code using Protocol Buffers. crosbug.com/22626 |
- typedef std::map<std::string, dbus::MessageReader*> PropertiesMap; |
- PropertiesMap properties; |
- STLValueDeleter<PropertiesMap> properties_value_deleter(&properties); |
- while (array_reader.HasMoreData()) { |
- dbus::MessageReader* value_reader = new dbus::MessageReader(response); |
- dbus::MessageReader dict_entry_reader(response); |
- std::string key; |
- if (!array_reader.PopDictEntry(&dict_entry_reader) || |
- !dict_entry_reader.PopString(&key) || |
- !dict_entry_reader.PopVariant(value_reader)) { |
- LOG(ERROR) << "Invalid response: " << response->ToString(); |
- return; |
- } |
- properties[key] = value_reader; |
- } |
- // TODO(thestig) Add enums for fields below as appropriate. |
- MaybePopString(properties[mtpd::kVendor], &vendor_); |
- MaybePopString(properties[mtpd::kProduct], &product_); |
- MaybePopString(properties[mtpd::kStorageDescription], &storage_description_); |
- MaybePopString(properties[mtpd::kVolumeIdentifier], &volume_identifier_); |
- MaybePopUint16(properties[mtpd::kVendorId], &vendor_id_); |
- MaybePopUint16(properties[mtpd::kProductId], &product_id_); |
- MaybePopUint16(properties[mtpd::kStorageType], &storage_type_); |
- MaybePopUint16(properties[mtpd::kFilesystemType], &filesystem_type_); |
- MaybePopUint16(properties[mtpd::kAccessCapability], &access_capability_); |
- MaybePopUint32(properties[mtpd::kDeviceFlags], &device_flags_); |
- MaybePopUint64(properties[mtpd::kMaxCapacity], &max_capacity_); |
- MaybePopUint64(properties[mtpd::kFreeSpaceInBytes], &free_space_in_bytes_); |
- MaybePopUint64(properties[mtpd::kFreeSpaceInObjects], |
- &free_space_in_objects_); |
-} |
- |
//////////////////////////////////////////////////////////////////////////////// |
// FileEntry |
@@ -557,78 +475,21 @@ |
: item_id_(0), |
parent_id_(0), |
file_size_(0), |
- file_type_(FILE_TYPE_UNKNOWN) { |
+ file_type_(MtpFileEntry_FileType_FILE_TYPE_UNKNOWN) { |
} |
-FileEntry::FileEntry(dbus::Response* response) |
- : item_id_(0), |
- parent_id_(0), |
- file_size_(0), |
- file_type_(FILE_TYPE_UNKNOWN) { |
- InitializeFromResponse(response); |
+FileEntry::FileEntry(const MtpFileEntry& entry) |
+ : item_id_(entry.item_id()), |
+ parent_id_(entry.parent_id()), |
+ file_name_(entry.file_name()), |
+ file_size_(entry.file_size()), |
+ modification_time_(base::Time::FromTimeT(entry.modification_time())), |
+ file_type_(entry.file_type()) { |
satorux1
2012/09/01 01:03:50
ditto. Do you need FileEntry class? Can you use Mt
Lei Zhang
2012/09/04 20:09:38
Done.
|
} |
FileEntry::~FileEntry() { |
} |
-// Initializes |this| from |response| given by the mtpd service. |
-void FileEntry::InitializeFromResponse(dbus::Response* response) { |
- dbus::MessageReader response_reader(response); |
- dbus::MessageReader array_reader(response); |
- if (!response_reader.PopArray(&array_reader)) { |
- LOG(ERROR) << "Invalid response: " << response->ToString(); |
- return; |
- } |
- // TODO(thestig): Rework this code using Protocol Buffers. crosbug.com/22626 |
- typedef std::map<std::string, dbus::MessageReader*> PropertiesMap; |
- PropertiesMap properties; |
- STLValueDeleter<PropertiesMap> properties_value_deleter(&properties); |
- while (array_reader.HasMoreData()) { |
- dbus::MessageReader* value_reader = new dbus::MessageReader(response); |
- dbus::MessageReader dict_entry_reader(response); |
- std::string key; |
- if (!array_reader.PopDictEntry(&dict_entry_reader) || |
- !dict_entry_reader.PopString(&key) || |
- !dict_entry_reader.PopVariant(value_reader)) { |
- LOG(ERROR) << "Invalid response: " << response->ToString(); |
- return; |
- } |
- properties[key] = value_reader; |
- } |
- |
- MaybePopString(properties[mtpd::kFileName], &file_name_); |
- MaybePopUint32(properties[mtpd::kItemId], &item_id_); |
- MaybePopUint32(properties[mtpd::kParentId], &parent_id_); |
- MaybePopUint64(properties[mtpd::kFileSize], &file_size_); |
- |
- int64 modification_date = -1; |
- if (MaybePopInt64(properties[mtpd::kModificationDate], &modification_date)) |
- modification_date_ = base::Time::FromTimeT(modification_date); |
- |
- uint16 file_type = FILE_TYPE_OTHER; |
- if (MaybePopUint16(properties[mtpd::kFileType], &file_type)) { |
- switch (file_type) { |
- case FILE_TYPE_FOLDER: |
- case FILE_TYPE_JPEG: |
- case FILE_TYPE_JFIF: |
- case FILE_TYPE_TIFF: |
- case FILE_TYPE_BMP: |
- case FILE_TYPE_GIF: |
- case FILE_TYPE_PICT: |
- case FILE_TYPE_PNG: |
- case FILE_TYPE_WINDOWSIMAGEFORMAT: |
- case FILE_TYPE_JP2: |
- case FILE_TYPE_JPX: |
- case FILE_TYPE_UNKNOWN: |
- file_type_ = static_cast<FileType>(file_type); |
- break; |
- default: |
- file_type_ = FILE_TYPE_OTHER; |
- break; |
- } |
- } |
-} |
- |
//////////////////////////////////////////////////////////////////////////////// |
// MediaTransferProtocolDaemonClient |