Yaroslav Mytkalyk
Yaroslav Mytkalyk

Reputation: 17105

Google Api Java Client Drive File search query

So using REST API you could list folder children like

final StringBuilder searchQuery = new StringBuilder();
searchQuery.append('\'').append(parentResourceId).append('\'').append(" in parents");
searchQuery.append(" and mimeType=\'").append(DriveFolder.MIME_TYPE).append('\'');
searchQuery.append(" and trashed=false and title=\'").append(driveFolderName).append('\'');

final Uri url =
        Uri.parse(FILES_URL).buildUpon().appendQueryParameter("q", searchQuery.toString()).build();

final HttpGet get = new HttpGet(url.toString());

Now in Google Api Java Client I don't see how can I do this.

Whan I have currently found is

@NonNull
public static Set<String>
        listChildrenIds(@NonNull final Drive service, @NonNull final String parentResId)
                throws IOException {
    final Set<String> result = new HashSet<>();
    final Children.List request = service.children().list(parentResId);
    final ChildList list = request.execute();
    for (ChildReference child : list.getItems()) {
        final String id = child.getId();
        if (id != null) {
            result.add(id);
        }
    }
    return result;
}

@Nullable
public static File find(@NonNull final Drive service,
        @NonNull final Collection<String> ids,
        @NonNull final String title,
        @Nullable final String mimeType) throws IOException {
    for (final String id : ids) {
        final File file = service.files().get(id).execute();
        if (file.getTitle().equals(title)) {
            if (mimeType == null || file.getMimeType().equals(mimeType)) {
                return file;
            }
        }
    }
    return null;
}

@Nullable
public static File findFile(@NonNull final Drive service,
        @NonNull final String title,
        @NonNull final String parentId,
        @Nullable final String mimeType) throws IOException {
    final Set<String> children = listChildrenIds(service, parentId);
    return find(service, children, title, mimeType);
}

But that gives extra request for every File. And also this way I have to manually filter out trashed files.

Upvotes: 1

Views: 679

Answers (1)

Yaroslav Mytkalyk
Yaroslav Mytkalyk

Reputation: 17105

Found it. I was searching in get(), so I couldn't find it for a while. It appeared to be list()

driveService.files().list().setQ(query).execute();

Upvotes: 2

Related Questions