Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Side by Side Diff: chrome/browser/media_galleries/fileapi/itunes_file_util.cc

Issue 185393012: Change media galleries to external file system type to add toURL support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698