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

Unified Diff: chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.cc

Issue 16304002: Make NativeMediaFileUtil an AsyncFileUtil (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Remove debug statement Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.cc
diff --git a/chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.cc b/chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.cc
index 239c117e92543a9b612728cd7585ba8addc95124..884552f5fd6182af49eeba1662ffb250a96f5ede 100644
--- a/chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.cc
+++ b/chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.cc
@@ -9,7 +9,6 @@
#include "base/stringprintf.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/media_galleries/fileapi/filtering_file_enumerator.h"
#include "chrome/browser/media_galleries/fileapi/media_file_system_mount_point_provider.h"
#include "chrome/browser/media_galleries/fileapi/picasa/picasa_album_table_reader.h"
#include "chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h"
@@ -26,97 +25,18 @@ namespace picasa {
namespace {
-class DirectorySkippingFileEnumerator
- : public fileapi::FileSystemFileUtil::AbstractFileEnumerator {
- public:
- DirectorySkippingFileEnumerator(
- scoped_ptr<fileapi::FileSystemFileUtil::AbstractFileEnumerator>
- base_enumerator)
- : base_enumerator_(base_enumerator.Pass()) {
- }
- virtual ~DirectorySkippingFileEnumerator() {}
-
- virtual base::FilePath Next() OVERRIDE {
- while (true) {
- base::FilePath next = base_enumerator_->Next();
- if (next.empty() || !base_enumerator_->IsDirectory())
- return next;
- }
- }
-
- virtual int64 Size() OVERRIDE {
- return base_enumerator_->Size();
- }
-
- virtual base::Time LastModifiedTime() OVERRIDE {
- return base_enumerator_->LastModifiedTime();
- }
-
- virtual bool IsDirectory() OVERRIDE {
- DCHECK(!base_enumerator_->IsDirectory());
- return base_enumerator_->IsDirectory();
- }
-
- private:
- // The file enumerator to be wrapped.
- scoped_ptr<fileapi::FileSystemFileUtil::AbstractFileEnumerator>
- base_enumerator_;
-};
-
-struct VirtualFile {
- VirtualFile(const base::FilePath& path, int64 size,
- const base::Time& last_modified_time, bool is_directory)
- : path(path),
- size(size),
- last_modified_time(last_modified_time),
- is_directory(is_directory) {}
-
- base::FilePath path;
- int64 size;
- base::Time last_modified_time;
- bool is_directory;
-};
-
-class VirtualFileEnumerator
- : public fileapi::FileSystemFileUtil::AbstractFileEnumerator {
- public:
- explicit VirtualFileEnumerator(const std::vector<VirtualFile>& files)
- : files_(files), next_called_(false), index_(0) {}
-
- virtual base::FilePath Next() OVERRIDE {
- if (next_called_ && index_ < files_.size())
- ++index_;
-
- next_called_ = true;
-
- if (index_ >= files_.size())
- return FilePath();
- return files_[index_].path;
- }
-
- virtual int64 Size() OVERRIDE {
- if (index_ >= files_.size())
- return 0;
- return files_[index_].size;
- }
-
- virtual base::Time LastModifiedTime() OVERRIDE {
- if (index_ >= files_.size())
- return base::Time();
- return files_[index_].last_modified_time;
- }
-
- virtual bool IsDirectory() OVERRIDE {
- if (index_ >= files_.size())
- return false;
- return files_[index_].is_directory;
- }
-
- private:
- std::vector<VirtualFile> files_;
- bool next_called_;
- size_t index_;
-};
+fileapi::DirectoryEntry MakeDirectoryEntry(
+ const base::FilePath& path,
+ int64 size,
+ const base::Time& last_modified_time,
+ bool is_directory) {
+ fileapi::DirectoryEntry entry;
+ entry.name = path.BaseName().value();
+ entry.is_directory = is_directory;
+ entry.size = size;
+ entry.last_modified_time = last_modified_time;
+ return entry;
+}
// |error| is only set when the method fails and the return is NULL.
base::PlatformFileError FindAlbumInfo(const std::string& key,
@@ -173,7 +93,7 @@ PicasaFileUtil::PicasaFileUtil() {}
PicasaFileUtil::~PicasaFileUtil() {}
-base::PlatformFileError PicasaFileUtil::GetFileInfo(
+base::PlatformFileError PicasaFileUtil::GetFileInfoSync(
FileSystemOperationContext* context, const FileSystemURL& url,
base::PlatformFileInfo* file_info, base::FilePath* platform_path) {
DCHECK(context);
@@ -210,15 +130,15 @@ base::PlatformFileError PicasaFileUtil::GetFileInfo(
}
if (path_components[0] == kPicasaDirFolders) {
- return NativeMediaFileUtil::GetFileInfo(context, url, file_info,
- platform_path);
+ return NativeMediaFileUtil::GetFileInfoSync(context, url, file_info,
+ platform_path);
}
break;
case 3:
// NativeMediaFileUtil::GetInfo calls into virtual function
// PicasaFileUtil::GetLocalFilePath, and that will handle both
// album contents and folder contents.
- base::PlatformFileError result = NativeMediaFileUtil::GetFileInfo(
+ base::PlatformFileError result = NativeMediaFileUtil::GetFileInfoSync(
context, url, file_info, platform_path);
DCHECK(path_components[0] == kPicasaDirAlbums ||
@@ -231,33 +151,48 @@ base::PlatformFileError PicasaFileUtil::GetFileInfo(
return base::PLATFORM_FILE_ERROR_NOT_FOUND;
}
-scoped_ptr<fileapi::FileSystemFileUtil::AbstractFileEnumerator>
-PicasaFileUtil::CreateFileEnumerator(FileSystemOperationContext* context,
- const FileSystemURL& url) {
+base::PlatformFileError PicasaFileUtil::ReadDirectorySync(
+ fileapi::FileSystemOperationContext* context,
+ const fileapi::FileSystemURL& url,
+ EntryList* file_list) {
DCHECK(context);
+ DCHECK(file_list);
+ DCHECK(file_list->empty());
+
+ base::PlatformFileInfo file_info;
+ base::FilePath platform_directory_path;
+ base::PlatformFileError error = GetFileInfoSync(
+ context, url, &file_info, &platform_directory_path);
+
+ if (error != base::PLATFORM_FILE_OK)
+ return error;
+
+ if (!file_info.is_directory)
+ return base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
+
std::vector<std::string> path_components = GetComponents(url);
- std::vector<VirtualFile> files;
FilePath folders_path = base::FilePath().AppendASCII(kPicasaDirFolders);
switch (path_components.size()) {
case 0: {
// Root directory.
FilePath albums_path = base::FilePath().AppendASCII(kPicasaDirAlbums);
- files.push_back(VirtualFile(albums_path, 0, base::Time(), true));
- files.push_back(VirtualFile(folders_path, 0, base::Time(), true));
+ file_list->push_back(
+ MakeDirectoryEntry(albums_path, 0, base::Time(), true));
+ file_list->push_back(
+ MakeDirectoryEntry(folders_path, 0, base::Time(), true));
break;
}
case 1:
if (path_components[0] == kPicasaDirAlbums) {
scoped_ptr<AlbumMap> albums = DataProvider()->GetAlbums();
if (!albums)
- return scoped_ptr<AbstractFileEnumerator>(new EmptyFileEnumerator());
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- // TODO(tommycli): Use AlbumMap enumerator to avoid copies.
for (AlbumMap::const_iterator it = albums->begin();
it != albums->end(); ++it) {
- files.push_back(VirtualFile(
+ file_list->push_back(MakeDirectoryEntry(
folders_path.Append(FilePath::FromUTF8Unsafe(it->first)),
0,
it->second.timestamp,
@@ -266,12 +201,11 @@ PicasaFileUtil::CreateFileEnumerator(FileSystemOperationContext* context,
} else if (path_components[0] == kPicasaDirFolders) {
scoped_ptr<AlbumMap> folders = DataProvider()->GetFolders();
if (!folders)
- return scoped_ptr<AbstractFileEnumerator>(new EmptyFileEnumerator());
+ return base::PLATFORM_FILE_ERROR_NOT_FOUND;
- // TODO(tommycli): Use AlbumMap enumerator to avoid copies.
for (AlbumMap::const_iterator it = folders->begin();
it != folders->end(); ++it) {
- files.push_back(VirtualFile(
+ file_list->push_back(MakeDirectoryEntry(
folders_path.Append(FilePath::FromUTF8Unsafe(it->first)),
0,
it->second.timestamp,
@@ -284,14 +218,24 @@ PicasaFileUtil::CreateFileEnumerator(FileSystemOperationContext* context,
// TODO(tommycli): Implement album contents.
}
- if (path_components[0] == kPicasaDirFolders)
- return scoped_ptr<AbstractFileEnumerator>(
- new DirectorySkippingFileEnumerator(
- NativeMediaFileUtil::CreateFileEnumerator(context, url)));
+ if (path_components[0] == kPicasaDirFolders) {
+ EntryList super_list;
+ base::PlatformFileError error =
+ NativeMediaFileUtil::ReadDirectorySync(context, url, &super_list);
+ if (error != base::PLATFORM_FILE_OK)
+ return error;
+
+ for (EntryList::const_iterator it = super_list.begin();
+ it != super_list.end(); ++it) {
+ if (!it->is_directory)
+ file_list->push_back(*it);
+ }
+ }
+
break;
}
- return scoped_ptr<AbstractFileEnumerator>(new VirtualFileEnumerator(files));
+ return base::PLATFORM_FILE_OK;
}
base::PlatformFileError PicasaFileUtil::GetLocalFilePath(

Powered by Google App Engine
This is Rietveld 408576698