blob: 001be2b0c8b33184e45d7fe6d7727b756fbba5c6 [file] [log] [blame]
Lei Zhang91af91d2012-08-03 11:02:20 -07001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Eric Caruso721d82e2017-08-21 15:57:30 -07005#include "mtpd/file_entry.h"
Lei Zhang91af91d2012-08-03 11:02:20 -07006
Lei Zhangfa9e19a2012-08-31 14:36:59 -07007#include <base/logging.h>
Lei Zhang12dbc6f2017-04-21 23:00:45 -07008#include <chromeos/dbus/service_constants.h>
Lei Zhang91af91d2012-08-03 11:02:20 -07009
Lei Zhangfa9e19a2012-08-31 14:36:59 -070010namespace {
11
12MtpFileEntry_FileType LibmtpFileTypeToProtoFileType(
13 LIBMTP_filetype_t file_type) {
14 switch (file_type) {
15 case LIBMTP_FILETYPE_FOLDER:
16 case LIBMTP_FILETYPE_JPEG:
17 case LIBMTP_FILETYPE_JFIF:
18 case LIBMTP_FILETYPE_TIFF:
19 case LIBMTP_FILETYPE_BMP:
20 case LIBMTP_FILETYPE_GIF:
21 case LIBMTP_FILETYPE_PICT:
22 case LIBMTP_FILETYPE_PNG:
23 case LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT:
24 case LIBMTP_FILETYPE_JP2:
25 case LIBMTP_FILETYPE_JPX:
26 case LIBMTP_FILETYPE_UNKNOWN:
27 return static_cast<MtpFileEntry_FileType>(file_type);
28 default:
29 return MtpFileEntry_FileType_FILE_TYPE_OTHER;
30 }
31}
32
33} // namespace
34
Lei Zhang91af91d2012-08-03 11:02:20 -070035namespace mtpd {
36
37FileEntry::FileEntry(const LIBMTP_file_struct& file)
38 : item_id_(file.item_id),
39 parent_id_(file.parent_id),
40 file_size_(file.filesize),
Lei Zhangfa9e19a2012-08-31 14:36:59 -070041 modification_time_(file.modificationdate),
Lei Zhang91af91d2012-08-03 11:02:20 -070042 file_type_(file.filetype) {
43 if (file.filename)
44 file_name_ = file.filename;
45}
46
Lei Zhangfa9e19a2012-08-31 14:36:59 -070047FileEntry::FileEntry()
48 : item_id_(kInvalidFileId),
49 parent_id_(kInvalidFileId),
50 file_size_(0),
51 modification_time_(0),
Lei Zhang1c82c532017-04-17 22:09:12 -070052 file_type_(LIBMTP_FILETYPE_UNKNOWN) {}
Lei Zhangfa9e19a2012-08-31 14:36:59 -070053
Lei Zhang1c82c532017-04-17 22:09:12 -070054FileEntry::~FileEntry() {}
Lei Zhang91af91d2012-08-03 11:02:20 -070055
Lei Zhangfa9e19a2012-08-31 14:36:59 -070056MtpFileEntry FileEntry::ToProtobuf() const {
57 MtpFileEntry protobuf;
58 protobuf.set_item_id(item_id_);
59 protobuf.set_parent_id(parent_id_);
60 protobuf.set_file_name(file_name_);
61 protobuf.set_file_size(file_size_);
62 protobuf.set_modification_time(modification_time_);
63 protobuf.set_file_type(LibmtpFileTypeToProtoFileType(file_type_));
64 return protobuf;
65}
66
Lei Zhang6cd0bfc2012-09-06 20:18:26 -070067std::vector<uint8_t> FileEntry::ToDBusFormat() const {
Lei Zhangfa9e19a2012-08-31 14:36:59 -070068 MtpFileEntry protobuf = ToProtobuf();
Lei Zhang6cd0bfc2012-09-06 20:18:26 -070069 int size = protobuf.ByteSize();
70 std::vector<uint8_t> serialized_proto;
71 serialized_proto.resize(size);
Lei Zhanga3579702014-01-15 10:06:39 -080072 CHECK_GT(size, 0);
73 CHECK(protobuf.SerializeToArray(&serialized_proto.front(), size));
Lei Zhangfa9e19a2012-08-31 14:36:59 -070074 return serialized_proto;
75}
76
77// static
Lei Zhang6cd0bfc2012-09-06 20:18:26 -070078std::vector<uint8_t> FileEntry::EmptyFileEntriesToDBusFormat() {
Lei Zhangfa9e19a2012-08-31 14:36:59 -070079 std::vector<FileEntry> dummy;
80 return FileEntriesToDBusFormat(dummy);
81}
82
83// static
Lei Zhang6cd0bfc2012-09-06 20:18:26 -070084std::vector<uint8_t> FileEntry::FileEntriesToDBusFormat(
Ben Chan81757a02018-01-23 14:06:08 -080085 const std::vector<FileEntry>& entries) {
Lei Zhangfa9e19a2012-08-31 14:36:59 -070086 MtpFileEntries protobuf;
Lei Zhanga3579702014-01-15 10:06:39 -080087 std::vector<uint8_t> serialized_proto;
88
89 if (entries.empty())
90 return serialized_proto;
Lei Zhangfa9e19a2012-08-31 14:36:59 -070091
92 for (size_t i = 0; i < entries.size(); ++i) {
93 MtpFileEntry entry_protobuf = entries[i].ToProtobuf();
94 MtpFileEntry* added_entry = protobuf.add_file_entries();
95 *added_entry = entry_protobuf;
96 }
Lei Zhang6cd0bfc2012-09-06 20:18:26 -070097 int size = protobuf.ByteSize();
Lei Zhang6cd0bfc2012-09-06 20:18:26 -070098 serialized_proto.resize(size);
Lei Zhanga3579702014-01-15 10:06:39 -080099 CHECK_GT(size, 0);
100 CHECK(protobuf.SerializeToArray(&serialized_proto.front(), size));
Lei Zhang6cd0bfc2012-09-06 20:18:26 -0700101 return serialized_proto;
Lei Zhang91af91d2012-08-03 11:02:20 -0700102}
103
104} // namespace mtpd