예제 #1
0
        public async Task ExecuteAsync()
        {
            UserCredential credentials = await _authenticator.AuthorizeAsync(DriveService.Scope.Drive);

            // Create Drive API service.
            DriveService service = new DriveService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credentials,
                ApplicationName       = _configuration["ApplicationName"]
            });

            // Define parameters of request.
            FilesResource.ListRequest listRequest = service.Files.List();
            listRequest.PageSize = 5;
            listRequest.Q        = "trashed = false and mimeType != 'application/vnd.google-apps.folder'";
            listRequest.Fields   = "nextPageToken, files(id, name, kind, md5Checksum, originalFilename, size, mimeType, parents)";

            FileList fileList = null;

            do
            {
                listRequest.PageToken = fileList?.NextPageToken;
                fileList = await listRequest.ExecuteAsync();

                if (fileList?.Files == null)
                {
                    continue;
                }

                List <Task> tasks = new List <Task>();

                foreach (File file in fileList.Files)
                {
                    string fullName = await GetFileFullNameAsync(file, service);

                    GoogleDriveFile googleDriveFile = new GoogleDriveFile(file.Id, file.Name, fullName, file.Md5Checksum, file.Size ?? 0);
                    tasks.Add(_googleDriveFileTask.ExecuteAsync(googleDriveFile));
                }

                await Task.WhenAll(tasks);
            } while (fileList != null && !string.IsNullOrEmpty(fileList.NextPageToken));
        }