| Index: webkit/fileapi/media/picasa/pmp_table_reader.cc
|
| diff --git a/webkit/fileapi/media/picasa/pmp_table_reader.cc b/webkit/fileapi/media/picasa/pmp_table_reader.cc
|
| index c8f76d481d827ca844132df82b553bf05836336b..83e178e77ed991a99a7e616931583c8395015607 100644
|
| --- a/webkit/fileapi/media/picasa/pmp_table_reader.cc
|
| +++ b/webkit/fileapi/media/picasa/pmp_table_reader.cc
|
| @@ -7,11 +7,11 @@
|
| #include <algorithm>
|
|
|
| #include "base/file_util.h"
|
| -#include "base/files/file_path.h"
|
| #include "base/logging.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/threading/thread_restrictions.h"
|
| #include "base/utf_string_conversions.h"
|
| #include "webkit/fileapi/media/picasa/pmp_column_reader.h"
|
| -#include "webkit/fileapi/media/picasa/pmp_constants.h"
|
|
|
| namespace picasaimport {
|
|
|
| @@ -21,68 +21,58 @@ COMPILE_ASSERT(sizeof(double) == 8, double_must_be_8_bytes_long);
|
|
|
| } // namespace
|
|
|
| -PmpTableReader::PmpTableReader() : column_readers_(), max_row_count_(0) { }
|
| +PmpTableReader::PmpTableReader(const std::string& table_name,
|
| + const base::FilePath& directory_path)
|
| + : initialized_(false),
|
| + table_name_(table_name),
|
| + directory_path_(directory_path),
|
| + max_row_count_(0) {
|
| + base::ThreadRestrictions::AssertIOAllowed();
|
|
|
| -PmpTableReader::~PmpTableReader() { }
|
| + if (!file_util::DirectoryExists(directory_path_))
|
| + return;
|
|
|
| -bool PmpTableReader::Init(const std::string& table_name,
|
| - const base::FilePath& directory_path,
|
| - const std::vector<std::string>& columns) {
|
| - DCHECK(!columns.empty());
|
| + std::string indicator_file_name = table_name_ + "_0";
|
|
|
| - if (!column_readers_.empty())
|
| - return false;
|
| -
|
| - if (!file_util::DirectoryExists(directory_path))
|
| - return false;
|
| -
|
| - std::string table_prefix = table_name + "_";
|
| - std::string indicator_file_name = table_prefix + "0";
|
| -
|
| - base::FilePath indicator_file = directory_path.Append(
|
| + base::FilePath indicator_file = directory_path_.Append(
|
| base::FilePath::FromUTF8Unsafe(indicator_file_name));
|
|
|
| // Look for the indicator_file file, indicating table existence.
|
| - if (!file_util::PathExists(indicator_file) ||
|
| - file_util::DirectoryExists(indicator_file)) {
|
| - return false;
|
| - }
|
| -
|
| - ScopedVector<PmpColumnReader> column_readers;
|
| - uint32 max_row_count = 0;
|
| + initialized_ = file_util::PathExists(indicator_file) &&
|
| + !file_util::DirectoryExists(indicator_file);
|
| +}
|
|
|
| - for (std::vector<std::string>::const_iterator it = columns.begin();
|
| - it != columns.end(); ++it) {
|
| - std::string filename = table_prefix + *it + "." + kPmpExtension;
|
| +PmpTableReader::~PmpTableReader() {}
|
|
|
| - base::FilePath column_file_path = directory_path.Append(
|
| - base::FilePath::FromUTF8Unsafe(filename));
|
| +const PmpColumnReader* PmpTableReader::AddColumn(
|
| + const std::string& column_name, const PmpFieldType expected_type) {
|
| + if (!initialized_)
|
| + return NULL;
|
|
|
| - PmpColumnReader* column_reader = new PmpColumnReader();
|
| - column_readers.push_back(column_reader);
|
| + std::string filename = table_name_ + "_" + column_name + "." + kPmpExtension;
|
|
|
| - uint32 row_cnt;
|
| + base::FilePath column_file_path = directory_path_.Append(
|
| + base::FilePath::FromUTF8Unsafe(filename));
|
| + scoped_ptr<PmpColumnReader> column_reader(new PmpColumnReader());
|
|
|
| - if (!column_reader->Init(column_file_path, &row_cnt))
|
| - return false;
|
| + uint32 row_count;
|
| + if (!column_reader->Init(column_file_path, expected_type, &row_count))
|
| + return NULL;
|
|
|
| - max_row_count = std::max(max_row_count, row_cnt);
|
| - }
|
| + column_readers_.push_back(column_reader.release());
|
| + column_map_[column_name] = column_readers_.back();
|
|
|
| - column_readers_ = column_readers.Pass();
|
| - max_row_count_ = max_row_count;
|
| + max_row_count_ = std::max(max_row_count_, row_count);
|
|
|
| - return true;
|
| + return column_readers_.back();
|
| }
|
|
|
| uint32 PmpTableReader::RowCount() const {
|
| return max_row_count_;
|
| }
|
|
|
| -std::vector<const PmpColumnReader*> PmpTableReader::GetColumns() const {
|
| - std::vector<const PmpColumnReader*> readers(
|
| - column_readers_.begin(), column_readers_.end());
|
| - return readers;
|
| +std::map<std::string, const PmpColumnReader*> PmpTableReader::Columns() const {
|
| + return column_map_;
|
| }
|
|
|
| } // namespace picasaimport
|
|
|