Example #1
0
        private IEnumerable <Directory> GetAllDirectories_QueryEachLevel(string[] exclusions = null)
        {
            List <Google.Apis.Drive.v2.Data.File> folders = new List <Google.Apis.Drive.v2.Data.File>()
            {
                root
            };

            Google.Apis.Drive.v2.Data.File[] pass = new Google.Apis.Drive.v2.Data.File[] { root };

            // Rebuild folder hierarchy
            while (true)
            {
                string parentsQuery = string.Join(" or ", pass.Select(f => string.Format("'{0}' in parents", f.Id)));

                FilesResource.ListRequest request = Service.Files.List();
                request.Q          = string.Format("trashed = false and mimeType = '{0}' and ({1})", GoogleDriveDirectory.MimeType, parentsQuery);
                request.Fields     = "items(id,title,parents,fileSize)";
                request.MaxResults = 1000;

                pass = request.Execute().Items.ToArray();
                folders.AddRange(pass);

                if (pass.Length == 0)
                {
                    break;
                }
            }

            // Wrap all folders and rebuild parents
            List <GoogleDriveDirectory> directories = new List <GoogleDriveDirectory>();

            foreach (Google.Apis.Drive.v2.Data.File folder in folders)
            {
                if (folder.Id == root.Id)
                {
                    directories.Add(new GoogleDriveDirectory(this, null, folder));
                }
                else
                {
                    directories.Add(new GoogleDriveDirectory(this, directories.First(d => d.folder.Id == folder.Parents.Single().Id), folder));
                }
            }

            // Return each directory
            foreach (GoogleDriveDirectory directory in directories)
            {
                if (exclusions != null && exclusions.Any(e => MatchPattern(directory.Path, e)))
                {
                    continue;
                }

                yield return(directory);
            }
        }