const char kFileNameField[] = "docs$filename.$t";
const char kHrefField[] = "href";
const char kIDField[] = "id.$t";
-const char kInstalledAppField[] = "docs$installedApp";
-const char kInstalledAppNameField[] = "docs$installedAppName";
-const char kInstalledAppIdField[] = "docs$installedAppId";
-const char kInstalledAppIconField[] = "docs$installedAppIcon";
-const char kInstalledAppIconCategoryField[] = "docs$installedAppIconCategory";
-const char kInstalledAppIconSizeField[] = "docs$installedAppIconSize";
-const char kInstalledAppObjectTypeField[] = "docs$installedAppObjectType";
-const char kInstalledAppPrimaryFileExtensionField[] =
- "docs$installedAppPrimaryFileExtension";
-const char kInstalledAppPrimaryMimeTypeField[] =
- "docs$installedAppPrimaryMimeType";
-const char kInstalledAppSecondaryFileExtensionField[] =
- "docs$installedAppSecondaryFileExtension";
-const char kInstalledAppSecondaryMimeTypeField[] =
- "docs$installedAppSecondaryMimeType";
-const char kInstalledAppSupportsCreateField[] =
- "docs$installedAppSupportsCreate";
const char kItemsPerPageField[] = "openSearch$itemsPerPage.$t";
const char kLabelField[] = "label";
const char kLargestChangestampField[] = "docs$largestChangestamp.value";
const char kMD5Field[] = "docs$md5Checksum.$t";
const char kNameField[] = "name.$t";
const char kPublishedField[] = "published.$t";
-const char kQuotaBytesTotalField[] = "gd$quotaBytesTotal.$t";
-const char kQuotaBytesUsedField[] = "gd$quotaBytesUsed.$t";
const char kRelField[] = "rel";
const char kRemovedField[] = "docs$removed";
const char kResourceIdField[] = "gd$resourceId.$t";
const char kSrcField[] = "src";
const char kStartIndexField[] = "openSearch$startIndex.$t";
const char kSuggestedFileNameField[] = "docs$suggestedFilename.$t";
-const char kTField[] = "$t";
const char kTermField[] = "term";
const char kTitleField[] = "title";
const char kTitleTField[] = "title.$t";
const char kOpenWithPrefix[] = "http://schemas.google.com/docs/2007#open-with-";
const size_t kOpenWithPrefixSize = arraysize(kOpenWithPrefix) - 1;
-struct EntryKindMap {
- DriveEntryKind kind;
- const char* entry;
- const char* extension;
-};
-
-const EntryKindMap kEntryKindMap[] = {
- { ENTRY_KIND_UNKNOWN, "unknown", NULL},
- { ENTRY_KIND_ITEM, "item", NULL},
- { ENTRY_KIND_DOCUMENT, "document", ".gdoc"},
- { ENTRY_KIND_SPREADSHEET, "spreadsheet", ".gsheet"},
- { ENTRY_KIND_PRESENTATION, "presentation", ".gslides" },
- { ENTRY_KIND_DRAWING, "drawing", ".gdraw"},
- { ENTRY_KIND_TABLE, "table", ".gtable"},
- { ENTRY_KIND_FORM, "form", ".gform"},
- { ENTRY_KIND_EXTERNAL_APP, "externalapp", ".glink"},
- { ENTRY_KIND_SITE, "site", NULL},
- { ENTRY_KIND_FOLDER, "folder", NULL},
- { ENTRY_KIND_FILE, "file", NULL},
- { ENTRY_KIND_PDF, "pdf", NULL},
-};
-COMPILE_ASSERT(arraysize(kEntryKindMap) == ENTRY_KIND_MAX_VALUE,
- EntryKindMap_and_DriveEntryKind_are_not_in_sync);
-
struct LinkTypeMap {
Link::LinkType type;
const char* rel;
{ Category::CATEGORY_LABEL, "http://schemas.google.com/g/2005/labels" },
};
-struct AppIconCategoryMap {
- AppIcon::IconCategory category;
- const char* category_name;
-};
-
-const AppIconCategoryMap kAppIconCategoryMap[] = {
- { AppIcon::ICON_DOCUMENT, "document" },
- { AppIcon::ICON_APPLICATION, "application" },
- { AppIcon::ICON_SHARED_DOCUMENT, "documentShared" },
-};
-
// Converts |url_string| to |result|. Always returns true to be used
// for JSONValueConverter::RegisterCustomField method.
// TODO(mukai): make it return false in case of invalid |url_string|.
return true;
}
-// Converts boolean string values like "true" into bool.
-bool GetBoolFromString(const base::StringPiece& value, bool* result) {
- *result = (value == "true");
- return true;
-}
-
-bool SortBySize(const InstalledApp::IconList::value_type& a,
- const InstalledApp::IconList::value_type& b) {
- return a.first < b.first;
-}
-
} // namespace
////////////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////////////////////////
-// AppIcon implementation
-
-AppIcon::AppIcon() : category_(AppIcon::ICON_UNKNOWN), icon_side_length_(0) {
-}
-
-AppIcon::~AppIcon() {
-}
-
-// static
-void AppIcon::RegisterJSONConverter(
- base::JSONValueConverter<AppIcon>* converter) {
- converter->RegisterCustomField<AppIcon::IconCategory>(
- kInstalledAppIconCategoryField,
- &AppIcon::category_,
- &AppIcon::GetIconCategory);
- converter->RegisterCustomField<int>(kInstalledAppIconSizeField,
- &AppIcon::icon_side_length_,
- base::StringToInt);
- converter->RegisterRepeatedMessage(kLinkField, &AppIcon::links_);
-}
-
-GURL AppIcon::GetIconURL() const {
- for (size_t i = 0; i < links_.size(); ++i) {
- if (links_[i]->type() == Link::LINK_ICON)
- return links_[i]->href();
- }
- return GURL();
-}
-
-// static
-bool AppIcon::GetIconCategory(const base::StringPiece& category,
- AppIcon::IconCategory* result) {
- for (size_t i = 0; i < arraysize(kAppIconCategoryMap); i++) {
- if (category == kAppIconCategoryMap[i].category_name) {
- *result = kAppIconCategoryMap[i].category;
- return true;
- }
- }
- DVLOG(1) << "Unknown icon category " << category;
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
// CommonMetadata implementation
CommonMetadata::CommonMetadata() {
// ImageMediaMetadata fields are not supported by WAPI.
}
-std::string ResourceEntry::GetHostedDocumentExtension() const {
- for (size_t i = 0; i < arraysize(kEntryKindMap); i++) {
- if (kEntryKindMap[i].kind == kind_) {
- if (kEntryKindMap[i].extension)
- return std::string(kEntryKindMap[i].extension);
- else
- return std::string();
- }
- }
- return std::string();
-}
-
// static
-DriveEntryKind ResourceEntry::GetEntryKindFromExtension(
- const std::string& extension) {
- for (size_t i = 0; i < arraysize(kEntryKindMap); ++i) {
- const char* document_extension = kEntryKindMap[i].extension;
- if (document_extension && extension == document_extension)
- return kEntryKindMap[i].kind;
- }
- return ENTRY_KIND_UNKNOWN;
-}
-
-// static
-int ResourceEntry::ClassifyEntryKindByFileExtension(
- const base::FilePath& file_path) {
-#if defined(OS_WIN)
- std::string file_extension = base::WideToUTF8(file_path.Extension());
-#else
- std::string file_extension = file_path.Extension();
-#endif
- return ClassifyEntryKind(GetEntryKindFromExtension(file_extension));
-}
-
-// static
-DriveEntryKind ResourceEntry::GetEntryKindFromTerm(
+ResourceEntry::ResourceEntryKind ResourceEntry::GetEntryKindFromTerm(
const std::string& term) {
if (!StartsWithASCII(term, kTermPrefix, false)) {
DVLOG(1) << "Unexpected term prefix term " << term;
}
std::string type = term.substr(strlen(kTermPrefix));
- for (size_t i = 0; i < arraysize(kEntryKindMap); i++) {
- if (type == kEntryKindMap[i].entry)
- return kEntryKindMap[i].kind;
- }
+ if (type == "folder")
+ return ENTRY_KIND_FOLDER;
+ if (type == "file" || type == "pdf")
+ return ENTRY_KIND_FILE;
+
DVLOG(1) << "Unknown entry type for term " << term << ", type " << type;
return ENTRY_KIND_UNKNOWN;
}
-// static
-int ResourceEntry::ClassifyEntryKind(DriveEntryKind kind) {
- int classes = 0;
-
- // All DriveEntryKind members are listed here, so the compiler catches if a
- // newly added member is missing here.
- switch (kind) {
- case ENTRY_KIND_UNKNOWN:
- // Special entries.
- case ENTRY_KIND_ITEM:
- case ENTRY_KIND_SITE:
- break;
-
- // Hosted Google document.
- case ENTRY_KIND_DOCUMENT:
- case ENTRY_KIND_SPREADSHEET:
- case ENTRY_KIND_PRESENTATION:
- case ENTRY_KIND_DRAWING:
- case ENTRY_KIND_TABLE:
- case ENTRY_KIND_FORM:
- classes = KIND_OF_GOOGLE_DOCUMENT | KIND_OF_HOSTED_DOCUMENT;
- break;
-
- // Hosted external application document.
- case ENTRY_KIND_EXTERNAL_APP:
- classes = KIND_OF_EXTERNAL_DOCUMENT | KIND_OF_HOSTED_DOCUMENT;
- break;
-
- // Folders, collections.
- case ENTRY_KIND_FOLDER:
- classes = KIND_OF_FOLDER;
- break;
-
- // Regular files.
- case ENTRY_KIND_FILE:
- case ENTRY_KIND_PDF:
- classes = KIND_OF_FILE;
- break;
-
- case ENTRY_KIND_MAX_VALUE:
- NOTREACHED();
- }
-
- return classes;
-}
-
void ResourceEntry::FillRemainingFields() {
// Set |kind_| and |labels_| based on the |categories_| in the class.
// JSONValueConverter does not have the ability to catch an element in a list
entries_.release(entries);
}
-////////////////////////////////////////////////////////////////////////////////
-// InstalledApp implementation
-
-InstalledApp::InstalledApp() : supports_create_(false) {
-}
-
-InstalledApp::~InstalledApp() {
-}
-
-InstalledApp::IconList InstalledApp::GetIconsForCategory(
- AppIcon::IconCategory category) const {
- IconList result;
-
- for (ScopedVector<AppIcon>::const_iterator icon_iter = app_icons_.begin();
- icon_iter != app_icons_.end(); ++icon_iter) {
- if ((*icon_iter)->category() != category)
- continue;
- GURL icon_url = (*icon_iter)->GetIconURL();
- if (icon_url.is_empty())
- continue;
- result.push_back(std::make_pair((*icon_iter)->icon_side_length(),
- icon_url));
- }
-
- // Return a sorted list, smallest to largest.
- std::sort(result.begin(), result.end(), SortBySize);
- return result;
-}
-
-GURL InstalledApp::GetProductUrl() const {
- for (ScopedVector<Link>::const_iterator it = links_.begin();
- it != links_.end(); ++it) {
- const Link* link = *it;
- if (link->type() == Link::LINK_PRODUCT)
- return link->href();
- }
- return GURL();
-}
-
-// static
-bool InstalledApp::GetValueString(const base::Value* value,
- std::string* result) {
- const base::DictionaryValue* dict = NULL;
- if (!value->GetAsDictionary(&dict))
- return false;
-
- if (!dict->GetString(kTField, result))
- return false;
-
- return true;
-}
-
-// static
-void InstalledApp::RegisterJSONConverter(
- base::JSONValueConverter<InstalledApp>* converter) {
- converter->RegisterRepeatedMessage(kInstalledAppIconField,
- &InstalledApp::app_icons_);
- converter->RegisterStringField(kInstalledAppIdField,
- &InstalledApp::app_id_);
- converter->RegisterStringField(kInstalledAppNameField,
- &InstalledApp::app_name_);
- converter->RegisterStringField(kInstalledAppObjectTypeField,
- &InstalledApp::object_type_);
- converter->RegisterCustomField<bool>(kInstalledAppSupportsCreateField,
- &InstalledApp::supports_create_,
- &GetBoolFromString);
- converter->RegisterRepeatedCustomValue(kInstalledAppPrimaryMimeTypeField,
- &InstalledApp::primary_mimetypes_,
- &GetValueString);
- converter->RegisterRepeatedCustomValue(kInstalledAppSecondaryMimeTypeField,
- &InstalledApp::secondary_mimetypes_,
- &GetValueString);
- converter->RegisterRepeatedCustomValue(kInstalledAppPrimaryFileExtensionField,
- &InstalledApp::primary_extensions_,
- &GetValueString);
- converter->RegisterRepeatedCustomValue(
- kInstalledAppSecondaryFileExtensionField,
- &InstalledApp::secondary_extensions_,
- &GetValueString);
- converter->RegisterRepeatedMessage(kLinkField, &InstalledApp::links_);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// AccountMetadata implementation
-
-AccountMetadata::AccountMetadata()
- : quota_bytes_total_(0),
- quota_bytes_used_(0),
- largest_changestamp_(0) {
-}
-
-AccountMetadata::~AccountMetadata() {
-}
-
-// static
-void AccountMetadata::RegisterJSONConverter(
- base::JSONValueConverter<AccountMetadata>* converter) {
- converter->RegisterCustomField<int64>(
- kQuotaBytesTotalField,
- &AccountMetadata::quota_bytes_total_,
- &base::StringToInt64);
- converter->RegisterCustomField<int64>(
- kQuotaBytesUsedField,
- &AccountMetadata::quota_bytes_used_,
- &base::StringToInt64);
- converter->RegisterCustomField<int64>(
- kLargestChangestampField,
- &AccountMetadata::largest_changestamp_,
- &base::StringToInt64);
- converter->RegisterRepeatedMessage(kInstalledAppField,
- &AccountMetadata::installed_apps_);
-}
-
-// static
-scoped_ptr<AccountMetadata> AccountMetadata::CreateFrom(
- const base::Value& value) {
- scoped_ptr<AccountMetadata> metadata(new AccountMetadata());
- const base::DictionaryValue* dictionary = NULL;
- const base::Value* entry = NULL;
- if (!value.GetAsDictionary(&dictionary) ||
- !dictionary->Get(kEntryField, &entry) ||
- !metadata->Parse(*entry)) {
- LOG(ERROR) << "Unable to create: Invalid account metadata feed!";
- return scoped_ptr<AccountMetadata>();
- }
-
- return metadata.Pass();
-}
-
-bool AccountMetadata::Parse(const base::Value& value) {
- base::JSONValueConverter<AccountMetadata> converter;
- if (!converter.Convert(value, this)) {
- LOG(ERROR) << "Unable to parse: Invalid account metadata feed!";
- return false;
- }
- return true;
-}
-
} // namespace google_apis