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 { ...@@ -652,9 +652,9 @@ class SingleEntryPropertiesGetterForDriveFs {
properties_->modification_time = properties_->modification_time =
std::make_unique<double>(metadata->modification_time.ToJsTime()); std::make_unique<double>(metadata->modification_time.ToJsTime());
} }
if (metadata->modification_by_me_time != base::Time()) { if (metadata->last_viewed_by_me_time != base::Time()) {
properties_->modification_by_me_time = std::make_unique<double>( properties_->modification_by_me_time =
metadata->modification_by_me_time.ToJsTime()); std::make_unique<double>(metadata->last_viewed_by_me_time.ToJsTime());
} }
if (!metadata->content_mime_type.empty()) { if (!metadata->content_mime_type.empty()) {
properties_->content_mime_type = properties_->content_mime_type =
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/task/post_task.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/drive/file_system_util.h"
#include "chrome/browser/chromeos/file_manager/fileapi_util.h" #include "chrome/browser/chromeos/file_manager/fileapi_util.h"
#include "chrome/browser/chromeos/fileapi/recent_file.h" #include "chrome/browser/chromeos/fileapi/recent_file.h"
...@@ -72,19 +73,34 @@ void RecentDriveSource::GetRecentFiles(Params params) { ...@@ -72,19 +73,34 @@ void RecentDriveSource::GetRecentFiles(Params params) {
build_start_time_ = base::TimeTicks::Now(); build_start_time_ = base::TimeTicks::Now();
drive::FileSystemInterface* file_system = auto* integration_service =
drive::util::GetFileSystemByProfile(profile_); drive::util::GetIntegrationServiceByProfile(profile_);
if (!file_system) { if (!integration_service) {
// |file_system| is nullptr if Drive is disabled. // |integration_service| is nullptr if Drive is disabled.
OnSearchMetadata(drive::FILE_ERROR_FAILED, nullptr); OnSearchMetadata(drive::FILE_ERROR_FAILED, nullptr);
return; return;
} }
file_system->SearchMetadata( if (integration_service->file_system()) {
"" /* query */, drive::SEARCH_METADATA_EXCLUDE_DIRECTORIES, integration_service->file_system()->SearchMetadata(
params_.value().max_files(), drive::MetadataSearchOrder::LAST_MODIFIED, "" /* query */, drive::SEARCH_METADATA_EXCLUDE_DIRECTORIES,
base::Bind(&RecentDriveSource::OnSearchMetadata, params_.value().max_files(), drive::MetadataSearchOrder::LAST_MODIFIED,
weak_ptr_factory_.GetWeakPtr())); 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( void RecentDriveSource::OnSearchMetadata(
...@@ -167,4 +183,33 @@ void RecentDriveSource::OnComplete() { ...@@ -167,4 +183,33 @@ void RecentDriveSource::OnComplete() {
std::move(params.callback()).Run(std::move(files)); 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 } // namespace chromeos
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "base/optional.h" #include "base/optional.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/chromeos/fileapi/recent_source.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/chromeos/file_system_interface.h"
#include "components/drive/file_errors.h" #include "components/drive/file_errors.h"
...@@ -54,6 +55,10 @@ class RecentDriveSource : public RecentSource { ...@@ -54,6 +55,10 @@ class RecentDriveSource : public RecentSource {
const base::File::Info& info); const base::File::Info& info);
void OnComplete(); void OnComplete();
void GotSearchResults(
drive::FileError error,
base::Optional<std::vector<drivefs::mojom::QueryItemPtr>> results);
Profile* const profile_; Profile* const profile_;
// Set at the beginning of GetRecentFiles(). // Set at the beginning of GetRecentFiles().
...@@ -64,6 +69,8 @@ class RecentDriveSource : public RecentSource { ...@@ -64,6 +69,8 @@ class RecentDriveSource : public RecentSource {
int num_inflight_stats_ = 0; int num_inflight_stats_ = 0;
std::vector<RecentFile> files_; std::vector<RecentFile> files_;
drivefs::mojom::SearchQueryPtr search_query_;
base::WeakPtrFactory<RecentDriveSource> weak_ptr_factory_; base::WeakPtrFactory<RecentDriveSource> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(RecentDriveSource); DISALLOW_COPY_AND_ASSIGN(RecentDriveSource);
......
...@@ -161,7 +161,7 @@ struct FileMetadata { ...@@ -161,7 +161,7 @@ struct FileMetadata {
string download_url; string download_url;
mojo_base.mojom.Time modification_time; 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 available_offline;
bool dirty; 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