private static async Task GetDocumentsAsync()

in CommandLine/XblConfig/Program.cs [119:172]


        private static async Task<int> GetDocumentsAsync(GetDocumentsOptions options)
        {
            if (options.DocumentType == DocumentType.Sandbox && string.IsNullOrEmpty(options.Sandbox))
            {
                throw new ArgumentException("Sandbox must be specified when obtaining sandbox documents.");
            }

            if (options.DocumentType == DocumentType.Sandbox && options.Scid == Guid.Empty)
            {
                throw new ArgumentException("SCID must be specified when obtaining sandbox documents.");
            }

            if (options.DocumentType == DocumentType.Account)
            {
                options.Sandbox = null;
            }

            EnsureDirectory(options.Destination);

            Task<DocumentsResponse> documentsTask;
            if (options.DocumentType == DocumentType.Sandbox)
            {
                Console.WriteLine("Obtaining sandbox documents.");
                documentsTask = ConfigurationManager.GetSandboxDocumentsAsync(options.Scid, options.Sandbox);
            }
            else
            {
                Console.WriteLine("Obtaining account documents.");
                documentsTask = ConfigurationManager.GetAccountDocumentsAsync(options.AccountId);
            }

            using (DocumentsResponse documents = await documentsTask)
            {
                Console.WriteLine($"ETag: {documents.ETag}");
                Console.WriteLine($"Version: {documents.Version}");
                Console.WriteLine("Files: ");

                foreach (ConfigFileStream file in documents.Documents)
                {
                    string path = Path.Combine(options.Destination, file.Name);
                    using (FileStream fileStream = File.Create(path))
                    {
                        await file.Stream.CopyToAsync(fileStream);
                    }

                    Console.WriteLine($" - {file.Name}");
                }

                SaveETag(documents.ETag, options.Destination, options.Sandbox);
                Console.WriteLine($"Saved {documents.Documents.Count()} files to {options.Destination}.");
            }

            return 0;
        }