OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/media_galleries/fileapi/itunes_file_util.h" | 5 #include "chrome/browser/media_galleries/fileapi/itunes_file_util.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 namespace { | 28 namespace { |
29 | 29 |
30 base::File::Error MakeDirectoryFileInfo(base::File::Info* file_info) { | 30 base::File::Error MakeDirectoryFileInfo(base::File::Info* file_info) { |
31 base::File::Info result; | 31 base::File::Info result; |
32 result.is_directory = true; | 32 result.is_directory = true; |
33 *file_info = result; | 33 *file_info = result; |
34 return base::File::FILE_OK; | 34 return base::File::FILE_OK; |
35 } | 35 } |
36 | 36 |
| 37 std::vector<std::string> GetVirtualPathComponents( |
| 38 const fileapi::FileSystemURL& url) { |
| 39 ImportedMediaGalleryRegistry* imported_registry = |
| 40 ImportedMediaGalleryRegistry::GetInstance(); |
| 41 base::FilePath root = imported_registry->ImportedRoot().AppendASCII("itunes"); |
| 42 |
| 43 DCHECK(root.IsParent(url.path()) || root == url.path()); |
| 44 base::FilePath virtual_path; |
| 45 root.AppendRelativePath(url.path(), &virtual_path); |
| 46 |
| 47 std::vector<std::string> result; |
| 48 fileapi::VirtualPath::GetComponentsUTF8Unsafe(virtual_path, &result); |
| 49 return result; |
| 50 } |
| 51 |
37 } // namespace | 52 } // namespace |
38 | 53 |
39 const char kITunesLibraryXML[] = "iTunes Music Library.xml"; | 54 const char kITunesLibraryXML[] = "iTunes Music Library.xml"; |
40 const char kITunesMediaDir[] = "iTunes Media"; | 55 const char kITunesMediaDir[] = "iTunes Media"; |
41 const char kITunesMusicDir[] = "Music"; | 56 const char kITunesMusicDir[] = "Music"; |
42 const char kITunesAutoAddDir[] = "Automatically Add to iTunes"; | 57 const char kITunesAutoAddDir[] = "Automatically Add to iTunes"; |
43 | 58 |
44 ITunesFileUtil::ITunesFileUtil(MediaPathFilter* media_path_filter) | 59 ITunesFileUtil::ITunesFileUtil(MediaPathFilter* media_path_filter) |
45 : NativeMediaFileUtil(media_path_filter), | 60 : NativeMediaFileUtil(media_path_filter), |
46 weak_factory_(this), | 61 weak_factory_(this), |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 // / - root directory | 99 // / - root directory |
85 // /iTunes Music Library.xml - library xml file | 100 // /iTunes Music Library.xml - library xml file |
86 // /iTunes Media/Automatically Add to iTunes - auto-import directory | 101 // /iTunes Media/Automatically Add to iTunes - auto-import directory |
87 // /iTunes Media/Music/<Artist>/<Album>/<Track> - tracks | 102 // /iTunes Media/Music/<Artist>/<Album>/<Track> - tracks |
88 // | 103 // |
89 base::File::Error ITunesFileUtil::GetFileInfoSync( | 104 base::File::Error ITunesFileUtil::GetFileInfoSync( |
90 fileapi::FileSystemOperationContext* context, | 105 fileapi::FileSystemOperationContext* context, |
91 const fileapi::FileSystemURL& url, | 106 const fileapi::FileSystemURL& url, |
92 base::File::Info* file_info, | 107 base::File::Info* file_info, |
93 base::FilePath* platform_path) { | 108 base::FilePath* platform_path) { |
94 std::vector<std::string> components; | 109 std::vector<std::string> components = GetVirtualPathComponents(url); |
95 fileapi::VirtualPath::GetComponentsUTF8Unsafe(url.path(), &components); | |
96 | 110 |
97 if (components.size() == 0) | 111 if (components.size() == 0) |
98 return MakeDirectoryFileInfo(file_info); | 112 return MakeDirectoryFileInfo(file_info); |
99 | 113 |
100 if (components.size() == 1 && components[0] == kITunesLibraryXML) { | 114 if (components.size() == 1 && components[0] == kITunesLibraryXML) { |
101 // We can't just call NativeMediaFileUtil::GetFileInfoSync() here because it | 115 // We can't just call NativeMediaFileUtil::GetFileInfoSync() here because it |
102 // uses the MediaPathFilter. At this point, |library_path_| is known good | 116 // uses the MediaPathFilter. At this point, |library_path_| is known good |
103 // because GetFileInfoWithFreshDataProvider() gates access to this method. | 117 // because GetFileInfoWithFreshDataProvider() gates access to this method. |
104 base::FilePath file_path = GetDataProvider()->library_path(); | 118 base::FilePath file_path = GetDataProvider()->library_path(); |
105 if (platform_path) | 119 if (platform_path) |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 } | 160 } |
147 | 161 |
148 return base::File::FILE_ERROR_NOT_FOUND; | 162 return base::File::FILE_ERROR_NOT_FOUND; |
149 } | 163 } |
150 | 164 |
151 base::File::Error ITunesFileUtil::ReadDirectorySync( | 165 base::File::Error ITunesFileUtil::ReadDirectorySync( |
152 fileapi::FileSystemOperationContext* context, | 166 fileapi::FileSystemOperationContext* context, |
153 const fileapi::FileSystemURL& url, | 167 const fileapi::FileSystemURL& url, |
154 EntryList* file_list) { | 168 EntryList* file_list) { |
155 DCHECK(file_list->empty()); | 169 DCHECK(file_list->empty()); |
156 std::vector<std::string> components; | 170 std::vector<std::string> components = GetVirtualPathComponents(url); |
157 fileapi::VirtualPath::GetComponentsUTF8Unsafe(url.path(), &components); | |
158 | 171 |
159 if (components.size() == 0) { | 172 if (components.size() == 0) { |
160 base::File::Info xml_info; | 173 base::File::Info xml_info; |
161 if (!base::GetFileInfo(GetDataProvider()->library_path(), &xml_info)) | 174 if (!base::GetFileInfo(GetDataProvider()->library_path(), &xml_info)) |
162 return base::File::FILE_ERROR_IO; | 175 return base::File::FILE_ERROR_IO; |
163 file_list->push_back(DirectoryEntry(kITunesLibraryXML, | 176 file_list->push_back(DirectoryEntry(kITunesLibraryXML, |
164 DirectoryEntry::FILE, | 177 DirectoryEntry::FILE, |
165 xml_info.size, xml_info.last_modified)); | 178 xml_info.size, xml_info.last_modified)); |
166 file_list->push_back(DirectoryEntry(kITunesMediaDir, | 179 file_list->push_back(DirectoryEntry(kITunesMediaDir, |
167 DirectoryEntry::DIRECTORY, | 180 DirectoryEntry::DIRECTORY, |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 const fileapi::FileSystemURL& url) { | 270 const fileapi::FileSystemURL& url) { |
258 return base::File::FILE_ERROR_SECURITY; | 271 return base::File::FILE_ERROR_SECURITY; |
259 } | 272 } |
260 | 273 |
261 base::File::Error ITunesFileUtil::CreateSnapshotFileSync( | 274 base::File::Error ITunesFileUtil::CreateSnapshotFileSync( |
262 fileapi::FileSystemOperationContext* context, | 275 fileapi::FileSystemOperationContext* context, |
263 const fileapi::FileSystemURL& url, | 276 const fileapi::FileSystemURL& url, |
264 base::File::Info* file_info, | 277 base::File::Info* file_info, |
265 base::FilePath* platform_path, | 278 base::FilePath* platform_path, |
266 scoped_refptr<webkit_blob::ShareableFileReference>* file_ref) { | 279 scoped_refptr<webkit_blob::ShareableFileReference>* file_ref) { |
267 DCHECK(!url.path().IsAbsolute()); | 280 std::vector<std::string> components = GetVirtualPathComponents(url); |
268 if (url.path() != base::FilePath().AppendASCII(kITunesLibraryXML)) { | 281 if (components.size() != 1 || components[0] != kITunesLibraryXML) { |
269 return NativeMediaFileUtil::CreateSnapshotFileSync(context, url, file_info, | 282 return NativeMediaFileUtil::CreateSnapshotFileSync(context, url, file_info, |
270 platform_path, file_ref); | 283 platform_path, file_ref); |
271 } | 284 } |
272 | 285 |
273 // The following code is different than | 286 // The following code is different than |
274 // NativeMediaFileUtil::CreateSnapshotFileSync in that it knows that the | 287 // NativeMediaFileUtil::CreateSnapshotFileSync in that it knows that the |
275 // library xml file is not a directory and it doesn't run mime sniffing on the | 288 // library xml file is not a directory and it doesn't run mime sniffing on the |
276 // file. The only way to get here is by way of | 289 // file. The only way to get here is by way of |
277 // CreateSnapshotFileWithFreshDataProvider() so the file has already been | 290 // CreateSnapshotFileWithFreshDataProvider() so the file has already been |
278 // parsed and deemed valid. | 291 // parsed and deemed valid. |
279 *file_ref = scoped_refptr<webkit_blob::ShareableFileReference>(); | 292 *file_ref = scoped_refptr<webkit_blob::ShareableFileReference>(); |
280 return GetFileInfoSync(context, url, file_info, platform_path); | 293 return GetFileInfoSync(context, url, file_info, platform_path); |
281 } | 294 } |
282 | 295 |
283 base::File::Error ITunesFileUtil::GetLocalFilePath( | 296 base::File::Error ITunesFileUtil::GetLocalFilePath( |
284 fileapi::FileSystemOperationContext* context, | 297 fileapi::FileSystemOperationContext* context, |
285 const fileapi::FileSystemURL& url, | 298 const fileapi::FileSystemURL& url, |
286 base::FilePath* local_file_path) { | 299 base::FilePath* local_file_path) { |
287 std::vector<std::string> components; | 300 std::vector<std::string> components = GetVirtualPathComponents(url); |
288 fileapi::VirtualPath::GetComponentsUTF8Unsafe(url.path(), &components); | |
289 | 301 |
290 if (components.size() == 1 && components[0] == kITunesLibraryXML) { | 302 if (components.size() == 1 && components[0] == kITunesLibraryXML) { |
291 *local_file_path = GetDataProvider()->library_path(); | 303 *local_file_path = GetDataProvider()->library_path(); |
292 return base::File::FILE_OK; | 304 return base::File::FILE_OK; |
293 } | 305 } |
294 | 306 |
295 if (components.size() >= 2 && components[0] == kITunesMediaDir && | 307 if (components.size() >= 2 && components[0] == kITunesMediaDir && |
296 components[1] == kITunesAutoAddDir) { | 308 components[1] == kITunesAutoAddDir) { |
297 *local_file_path = GetDataProvider()->auto_add_path(); | 309 *local_file_path = GetDataProvider()->auto_add_path(); |
298 if (local_file_path->empty()) | 310 if (local_file_path->empty()) |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 callback); | 391 callback); |
380 } | 392 } |
381 | 393 |
382 ITunesDataProvider* ITunesFileUtil::GetDataProvider() { | 394 ITunesDataProvider* ITunesFileUtil::GetDataProvider() { |
383 if (!imported_registry_) | 395 if (!imported_registry_) |
384 imported_registry_ = ImportedMediaGalleryRegistry::GetInstance(); | 396 imported_registry_ = ImportedMediaGalleryRegistry::GetInstance(); |
385 return imported_registry_->ITunesDataProvider(); | 397 return imported_registry_->ITunesDataProvider(); |
386 } | 398 } |
387 | 399 |
388 } // namespace itunes | 400 } // namespace itunes |
OLD | NEW |