Commit e4088580 authored by Sam McNally's avatar Sam McNally Committed by Commit Bot

Add support for querying DriveFS over mojo to RecentDriveSource.

Bug: 854481
Change-Id: I3c6fd0ed9eb32410cde74b940bedf4cd1323bea7
Reviewed-on: https://chromium-review.googlesource.com/1235492
Commit-Queue: Sam McNally <sammc@chromium.org>
Reviewed-by: default avatarSergei Datsenko <dats@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593093}
parent 48aadca6
......@@ -652,9 +652,9 @@ class SingleEntryPropertiesGetterForDriveFs {
properties_->modification_time =
std::make_unique<double>(metadata->modification_time.ToJsTime());
}
if (metadata->modification_by_me_time != base::Time()) {
properties_->modification_by_me_time = std::make_unique<double>(
metadata->modification_by_me_time.ToJsTime());
if (metadata->last_viewed_by_me_time != base::Time()) {
properties_->modification_by_me_time =
std::make_unique<double>(metadata->last_viewed_by_me_time.ToJsTime());
}
if (!metadata->content_mime_type.empty()) {
properties_->content_mime_type =
......
......@@ -10,6 +10,7 @@
#include "base/files/file_path.h"
#include "base/metrics/histogram_macros.h"
#include "base/task/post_task.h"
#include "chrome/browser/chromeos/drive/drive_integration_service.h"
#include "chrome/browser/chromeos/drive/file_system_util.h"
#include "chrome/browser/chromeos/file_manager/fileapi_util.h"
#include "chrome/browser/chromeos/fileapi/recent_file.h"
......@@ -72,19 +73,34 @@ void RecentDriveSource::GetRecentFiles(Params params) {
build_start_time_ = base::TimeTicks::Now();
drive::FileSystemInterface* file_system =
drive::util::GetFileSystemByProfile(profile_);
if (!file_system) {
// |file_system| is nullptr if Drive is disabled.
auto* integration_service =
drive::util::GetIntegrationServiceByProfile(profile_);
if (!integration_service) {
// |integration_service| is nullptr if Drive is disabled.
OnSearchMetadata(drive::FILE_ERROR_FAILED, nullptr);
return;
}
file_system->SearchMetadata(
"" /* query */, drive::SEARCH_METADATA_EXCLUDE_DIRECTORIES,
params_.value().max_files(), drive::MetadataSearchOrder::LAST_MODIFIED,
base::Bind(&RecentDriveSource::OnSearchMetadata,
weak_ptr_factory_.GetWeakPtr()));
if (integration_service->file_system()) {
integration_service->file_system()->SearchMetadata(
"" /* query */, drive::SEARCH_METADATA_EXCLUDE_DIRECTORIES,
params_.value().max_files(), drive::MetadataSearchOrder::LAST_MODIFIED,
base::BindOnce(&RecentDriveSource::OnSearchMetadata,
weak_ptr_factory_.GetWeakPtr()));
return;
}
auto query_params = drivefs::mojom::QueryParameters::New();
query_params->page_size = params_->max_files();
query_params->query_source =
drivefs::mojom::QueryParameters::QuerySource::kLocalOnly;
query_params->sort_field =
drivefs::mojom::QueryParameters::SortField::kLastModified;
query_params->sort_direction =
drivefs::mojom::QueryParameters::SortDirection::kDescending;
integration_service->GetDriveFsInterface()->StartSearchQuery(
mojo::MakeRequest(&search_query_), std::move(query_params));
search_query_->GetNextPage(base::BindOnce(
&RecentDriveSource::GotSearchResults, weak_ptr_factory_.GetWeakPtr()));
}
void RecentDriveSource::OnSearchMetadata(
......@@ -167,4 +183,33 @@ void RecentDriveSource::OnComplete() {
std::move(params.callback()).Run(std::move(files));
}
void RecentDriveSource::GotSearchResults(
drive::FileError error,
base::Optional<std::vector<drivefs::mojom::QueryItemPtr>> results) {
search_query_.reset();
auto* integration_service =
drive::util::GetIntegrationServiceByProfile(profile_);
if (!results || !integration_service) {
OnComplete();
return;
}
files_.reserve(results->size());
for (auto& result : *results) {
if (result->metadata->type ==
drivefs::mojom::FileMetadata::Type::kDirectory) {
continue;
}
base::FilePath path = integration_service->GetMountPointPath().BaseName();
if (!base::FilePath("/").AppendRelativePath(result->path, &path)) {
path = path.Append(result->path);
}
files_.emplace_back(
params_.value().file_system_context()->CreateCrackedFileSystemURL(
params_->origin(), storage::kFileSystemTypeExternal, path),
result->metadata->last_viewed_by_me_time);
}
OnComplete();
}
} // namespace chromeos
......@@ -15,6 +15,7 @@
#include "base/optional.h"
#include "base/time/time.h"
#include "chrome/browser/chromeos/fileapi/recent_source.h"
#include "chromeos/components/drivefs/mojom/drivefs.mojom.h"
#include "components/drive/chromeos/file_system_interface.h"
#include "components/drive/file_errors.h"
......@@ -54,6 +55,10 @@ class RecentDriveSource : public RecentSource {
const base::File::Info& info);
void OnComplete();
void GotSearchResults(
drive::FileError error,
base::Optional<std::vector<drivefs::mojom::QueryItemPtr>> results);
Profile* const profile_;
// Set at the beginning of GetRecentFiles().
......@@ -64,6 +69,8 @@ class RecentDriveSource : public RecentSource {
int num_inflight_stats_ = 0;
std::vector<RecentFile> files_;
drivefs::mojom::SearchQueryPtr search_query_;
base::WeakPtrFactory<RecentDriveSource> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(RecentDriveSource);
......
......@@ -161,7 +161,7 @@ struct FileMetadata {
string download_url;
mojo_base.mojom.Time modification_time;
mojo_base.mojom.Time modification_by_me_time;
mojo_base.mojom.Time last_viewed_by_me_time;
bool available_offline;
bool dirty;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment