• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/media_galleries/fileapi/iapps_finder_impl.h"
6 
7 #include "base/bind.h"
8 #include "base/logging.h"
9 #include "content/public/browser/browser_thread.h"
10 
11 namespace iapps {
12 
13 namespace {
14 
PostResultToUIThread(storage_monitor::StorageInfo::Type type,const IAppsFinderCallback & callback,const std::string & unique_id)15 void PostResultToUIThread(storage_monitor::StorageInfo::Type type,
16                           const IAppsFinderCallback& callback,
17                           const std::string& unique_id) {
18   DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
19 
20   std::string device_id;
21   if (!unique_id.empty())
22     device_id = storage_monitor::StorageInfo::MakeDeviceId(type, unique_id);
23 
24   content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
25                                    base::Bind(callback, device_id));
26 }
27 
28 }  // namespace
29 
FindIAppsOnFileThread(storage_monitor::StorageInfo::Type type,const IAppsFinderTask & task,const IAppsFinderCallback & callback)30 void FindIAppsOnFileThread(storage_monitor::StorageInfo::Type type,
31                            const IAppsFinderTask& task,
32                            const IAppsFinderCallback& callback) {
33   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
34   DCHECK(!task.is_null());
35   DCHECK(!callback.is_null());
36 
37   content::BrowserThread::PostTask(
38       content::BrowserThread::FILE,
39       FROM_HERE,
40       base::Bind(task, base::Bind(PostResultToUIThread, type, callback)));
41 }
42 
43 // iPhoto is only supported on OSX.
44 #if !defined(OS_MACOSX)
FindIPhotoLibrary(const IAppsFinderCallback & callback)45 void FindIPhotoLibrary(const IAppsFinderCallback& callback) {
46   callback.Run(std::string());
47 }
48 #endif  // !defined(OS_MACOSX)
49 
50 // iTunes is only support on OSX and Windows.
51 #if !defined(OS_MACOSX) && !defined(OS_WIN)
FindITunesLibrary(const IAppsFinderCallback & callback)52 void FindITunesLibrary(const IAppsFinderCallback& callback) {
53   callback.Run(std::string());
54 }
55 #endif
56 
PathIndicatesIPhotoLibrary(const std::string & device_id,const base::FilePath & path)57 bool PathIndicatesIPhotoLibrary(const std::string& device_id,
58                                 const base::FilePath& path) {
59   storage_monitor::StorageInfo::Type device_type;
60   std::string unique_id;
61   storage_monitor::StorageInfo::CrackDeviceId(
62       device_id, &device_type, &unique_id);
63   if (device_type != storage_monitor::StorageInfo::IPHOTO)
64     return false;
65 
66   // |unique_id| is the path to the library XML file at the library root.
67   base::FilePath library_root =
68       base::FilePath::FromUTF8Unsafe(unique_id).DirName();
69   return (path == library_root) ||
70       (path == library_root.AppendASCII("Data")) ||
71       (path == library_root.AppendASCII("Originals")) ||
72       (path == library_root.AppendASCII("Masters"));
73 }
74 
PathIndicatesITunesLibrary(const std::string & device_id,const base::FilePath & path)75 bool PathIndicatesITunesLibrary(const std::string& device_id,
76                                 const base::FilePath& path) {
77   storage_monitor::StorageInfo::Type device_type;
78   std::string unique_id;
79   storage_monitor::StorageInfo::CrackDeviceId(
80       device_id, &device_type, &unique_id);
81   if (device_type != storage_monitor::StorageInfo::ITUNES)
82     return false;
83 
84   // |unique_id| is the path to the library XML file at the library root.
85   base::FilePath library_root =
86       base::FilePath::FromUTF8Unsafe(unique_id).DirName();
87   return (path == library_root) ||
88       (path == library_root.AppendASCII("iTunes Media")) ||
89       (path == library_root.AppendASCII("iTunes Media").AppendASCII("Music"));
90 }
91 
92 }  // namespace iapps
93