blob: ef4dcdfb188c20dcfe3efb9a619bc36bbfe1df24 [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
5#include "mtpd/file_entry.h"
6
Lei Zhangfa9e19a2012-08-31 14:36:59 -07007#include <base/logging.h>
Lei Zhangd52da322012-08-06 13:29:27 -07008#include <chromeos/dbus/service_constants.h>
Lei Zhang91af91d2012-08-03 11:02:20 -07009
10#include "string_helpers.h"
11
Lei Zhangfa9e19a2012-08-31 14:36:59 -070012namespace {
13
14MtpFileEntry_FileType LibmtpFileTypeToProtoFileType(
15 LIBMTP_filetype_t file_type) {
16 switch (file_type) {
17 case LIBMTP_FILETYPE_FOLDER:
18 case LIBMTP_FILETYPE_JPEG:
19 case LIBMTP_FILETYPE_JFIF:
20 case LIBMTP_FILETYPE_TIFF:
21 case LIBMTP_FILETYPE_BMP:
22 case LIBMTP_FILETYPE_GIF:
23 case LIBMTP_FILETYPE_PICT:
24 case LIBMTP_FILETYPE_PNG:
25 case LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT:
26 case LIBMTP_FILETYPE_JP2:
27 case LIBMTP_FILETYPE_JPX:
28 case LIBMTP_FILETYPE_UNKNOWN:
29 return static_cast<MtpFileEntry_FileType>(file_type);
30 default:
31 return MtpFileEntry_FileType_FILE_TYPE_OTHER;
32 }
33}
34
35} // namespace
36
Lei Zhang91af91d2012-08-03 11:02:20 -070037namespace mtpd {
38
39FileEntry::FileEntry(const LIBMTP_file_struct& file)
40 : item_id_(file.item_id),
41 parent_id_(file.parent_id),
42 file_size_(file.filesize),
Lei Zhangfa9e19a2012-08-31 14:36:59 -070043 modification_time_(file.modificationdate),
Lei Zhang91af91d2012-08-03 11:02:20 -070044 file_type_(file.filetype) {
45 if (file.filename)
46 file_name_ = file.filename;
47}
48
Lei Zhangfa9e19a2012-08-31 14:36:59 -070049FileEntry::FileEntry()
50 : item_id_(kInvalidFileId),
51 parent_id_(kInvalidFileId),
52 file_size_(0),
53 modification_time_(0),
54 file_type_(LIBMTP_FILETYPE_UNKNOWN) {
55}
56
Lei Zhang91af91d2012-08-03 11:02:20 -070057FileEntry::~FileEntry() {
58}
59
Lei Zhangfa9e19a2012-08-31 14:36:59 -070060MtpFileEntry FileEntry::ToProtobuf() const {
61 MtpFileEntry protobuf;
62 protobuf.set_item_id(item_id_);
63 protobuf.set_parent_id(parent_id_);
64 protobuf.set_file_name(file_name_);
65 protobuf.set_file_size(file_size_);
66 protobuf.set_modification_time(modification_time_);
67 protobuf.set_file_type(LibmtpFileTypeToProtoFileType(file_type_));
68 return protobuf;
69}
70
71std::string FileEntry::ToDBusFormat() const {
72 MtpFileEntry protobuf = ToProtobuf();
73 std::string serialized_proto;
74 CHECK(protobuf.SerializeToString(&serialized_proto));
75 return serialized_proto;
76}
77
78// static
79std::string FileEntry::EmptyFileEntriesToDBusFormat() {
80 std::vector<FileEntry> dummy;
81 return FileEntriesToDBusFormat(dummy);
82}
83
84// static
85std::string FileEntry::FileEntriesToDBusFormat(
86 std::vector<FileEntry>& entries) {
87 MtpFileEntries protobuf;
88
89 for (size_t i = 0; i < entries.size(); ++i) {
90 MtpFileEntry entry_protobuf = entries[i].ToProtobuf();
91 MtpFileEntry* added_entry = protobuf.add_file_entries();
92 *added_entry = entry_protobuf;
93 }
94 std::string serialized_proto;
95 CHECK(protobuf.SerializeToString(&serialized_proto));
96 return std::string();
Lei Zhang91af91d2012-08-03 11:02:20 -070097}
98
99} // namespace mtpd