Chromium Code Reviews| 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 |