private void UploadSingleFile(IAmazonGlacier client,
                                      string vaultName,
                                      string accountId,
                                      string filePath,
                                      string description)
        {
            using (var transferManager = new ArchiveTransferManager(client))
            {
                var runner        = new ProgressRunner(this);
                var uploadOptions = new UploadOptions
                {
                    AccountId = accountId
                };

                var tracker = new UploadProgressTracker(runner, handler => uploadOptions.StreamTransferProgress += handler, filePath);

                var output = new CmdletOutput();
                runner.SafeRun(() =>
                {
#if DESKTOP
                    var result = transferManager.Upload(vaultName, description, filePath, uploadOptions);
#else
                    var result = transferManager.UploadAsync(vaultName, description, filePath, uploadOptions).GetAwaiter().GetResult();
#endif

                    output.PipelineOutput = new FileUploadResult(filePath, result);
                }, tracker, output);

                // write as we go so that any subsequent error doesn't cause the user to lose
                // the ids of archives we have successfully uploaded so far
                ProcessOutput(output);
            }
        }
        private static IV1Facade RestClientV1Initializer(IRequestBuilderFactory requestBuilderFactory,
                                                         IClientProvider clientProvider,
                                                         IContentFormattersFactory contentFormattersFactory)
        {
            var uploadProgressTracker = new UploadProgressTracker();
            var parameterHelper       = new ParameterHelper();
            var executionHelper       = new ExecutionHelper();

            var cabinet = new CabinetV1(requestBuilderFactory, clientProvider);
            var customAttributeValues = new CustomAttributeValues(requestBuilderFactory, clientProvider);

            var document = new DocumentV1(requestBuilderFactory,
                                          clientProvider,
                                          contentFormattersFactory,
                                          uploadProgressTracker);

            var filter = new Filter(requestBuilderFactory, clientProvider, parameterHelper, executionHelper);
            var folder = new Folder(requestBuilderFactory,
                                    clientProvider,
                                    parameterHelper,
                                    executionHelper,
                                    contentFormattersFactory);

            var group       = new Group(clientProvider, requestBuilderFactory);
            var repository  = new Repository(requestBuilderFactory, clientProvider);
            var savedSearch = new SavedSearch(requestBuilderFactory, clientProvider, parameterHelper, executionHelper);
            var search      = new SearchV1(requestBuilderFactory, clientProvider, parameterHelper, executionHelper);
            var sync        = new Sync(requestBuilderFactory, clientProvider);
            var user        = new UserV1(requestBuilderFactory, clientProvider, parameterHelper, executionHelper);
            var workspace   = new Workspace(requestBuilderFactory, clientProvider, parameterHelper, executionHelper);

            return(new V1Facade(cabinet,
                                customAttributeValues,
                                document,
                                filter,
                                folder,
                                group,
                                repository,
                                savedSearch,
                                search,
                                sync,
                                user,
                                workspace));
        }