This source file includes following definitions.
- GetPrefFileData
- TryDefaultLocation
- FinishedParsingPrefXML
- FindITunesLibraryOnFileThread
- FindITunesLibrary
#include "chrome/browser/media_galleries/fileapi/iapps_finder_impl.h"
#include <string>
#include "base/base_paths_win.h"
#include "base/file_util.h"
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/path_service.h"
#include "chrome/browser/media_galleries/fileapi/iapps_finder.h"
#include "chrome/browser/media_galleries/fileapi/safe_itunes_pref_parser_win.h"
#include "chrome/common/chrome_paths.h"
#include "components/storage_monitor/storage_info.h"
#include "content/public/browser/browser_thread.h"
namespace iapps {
namespace {
std::string GetPrefFileData() {
std::string xml_pref_data;
base::FilePath appdata_dir;
if (PathService::Get(base::DIR_APP_DATA, &appdata_dir)) {
base::FilePath pref_file = appdata_dir.AppendASCII("Apple Computer")
.AppendASCII("iTunes")
.AppendASCII("iTunesPrefs.xml");
base::ReadFileToString(pref_file, &xml_pref_data);
}
return xml_pref_data;
}
void TryDefaultLocation(const iapps::IAppsFinderCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
base::FilePath music_dir;
if (!PathService::Get(chrome::DIR_USER_MUSIC, &music_dir)) {
callback.Run(std::string());
return;
}
base::FilePath library_file =
music_dir.AppendASCII("iTunes").AppendASCII("iTunes Music Library.xml");
if (!base::PathExists(library_file)) {
callback.Run(std::string());
return;
}
callback.Run(library_file.AsUTF8Unsafe());
}
void FinishedParsingPrefXML(const iapps::IAppsFinderCallback& callback,
const base::FilePath& library_file) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
if (library_file.empty() || !base::PathExists(library_file)) {
TryDefaultLocation(callback);
return;
}
callback.Run(library_file.AsUTF8Unsafe());
}
void FindITunesLibraryOnFileThread(const iapps::IAppsFinderCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
std::string xml_pref_data = GetPrefFileData();
if (xml_pref_data.empty()) {
TryDefaultLocation(callback);
return;
}
scoped_refptr<itunes::SafeITunesPrefParserWin> parser =
new itunes::SafeITunesPrefParserWin(
xml_pref_data,
base::Bind(&FinishedParsingPrefXML, callback));
parser->Start();
}
}
void FindITunesLibrary(const IAppsFinderCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
FindIAppsOnFileThread(storage_monitor::StorageInfo::ITUNES,
base::Bind(FindITunesLibraryOnFileThread), callback);
}
}