| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/parsers/metadata_parser_filebase.h" |
| |
| #include "base/file_util.h" |
| #include "base/string_number_conversions.h" |
| #include "base/utf_string_conversions.h" |
| |
| FileMetadataParser::FileMetadataParser(const FilePath& path) |
| : MetadataParser(path), |
| path_(path) { |
| } |
| |
| FileMetadataParser::~FileMetadataParser() {} |
| |
| bool FileMetadataParser::Parse() { |
| std::string value; |
| int64 size; |
| if (file_util::GetFileSize(path_, &size)) { |
| properties_[MetadataParser::kPropertyFilesize] = base::Int64ToString(size); |
| } |
| #if defined(OS_WIN) |
| value = WideToUTF8(path_.BaseName().value()); |
| properties_[MetadataParser::kPropertyTitle] = value; |
| #elif defined(OS_POSIX) |
| properties_[MetadataParser::kPropertyTitle] = path_.BaseName().value(); |
| #endif |
| return true; |
| } |
| |
| bool FileMetadataParser::GetProperty(const std::string& key, |
| std::string* value) { |
| PropertyMap::iterator it = properties_.find(key.c_str()); |
| if (it == properties_.end()) { |
| return false; |
| } |
| |
| *value = properties_[key.c_str()]; |
| return true; |
| } |
| |
| MetadataPropertyIterator* FileMetadataParser::GetPropertyIterator() { |
| return new FileMetadataPropertyIterator(properties_); |
| } |
| |
| FileMetadataPropertyIterator::FileMetadataPropertyIterator( |
| PropertyMap& properties) : properties_(properties) { |
| it = properties_.begin(); |
| } |
| |
| FileMetadataPropertyIterator::~FileMetadataPropertyIterator() {} |
| |
| bool FileMetadataPropertyIterator::GetNext(std::string* key, |
| std::string* value) { |
| if (it == properties_.end()) { |
| return false; |
| } |
| *key = it->first; |
| *value = it->second; |
| it++; |
| return true; |
| } |
| |
| int FileMetadataPropertyIterator::Length() { |
| return properties_.size(); |
| } |
| |
| bool FileMetadataPropertyIterator::IsEnd() { |
| if (it == properties_.end()) { |
| return true; |
| } else { |
| return false; |
| } |
| } |