private static void Export(Opts opts) { Result <ExportManager> managerResult; if (opts.Archive) { if (opts.Test) { return; } managerResult = opts.ExportRelto.HasValue ? ExportManager.CreateArchiveExportManagerAsync(opts.DekiApi, opts.ExportDocument, opts.ExportRelto.Value, opts.FilePath, new Result <ExportManager>()) : ExportManager.CreateArchiveExportManagerAsync(opts.DekiApi, opts.ExportDocument, opts.ExportReltoPath, opts.FilePath, new Result <ExportManager>()); } else { if (!Directory.Exists(opts.FilePath)) { try { Directory.CreateDirectory(opts.FilePath); } catch (Exception e) { throw new ConfigurationException(string.Format("Unable to create '{0}': {1}", opts.FilePath, e.Message), e); } } if (opts.Test) { return; } managerResult = opts.ExportRelto.HasValue ? ExportManager.CreateFileExportManagerAsync(opts.DekiApi, opts.ExportDocument, opts.ExportRelto.Value, opts.FilePath, new Result <ExportManager>()) : ExportManager.CreateFileExportManagerAsync(opts.DekiApi, opts.ExportDocument, opts.ExportReltoPath, opts.FilePath, new Result <ExportManager>()); } managerResult.Block(); if (managerResult.HasException) { throw new Exception(string.Format("Export failed: {0}", managerResult.Exception.Message), managerResult.Exception); } ExportManager manager = managerResult.Value; manager.MaxRetries = opts.Retries; Result result = manager.ExportAsync(manifest => FixupManifest(manifest, opts), new Result()); int completed = 0; Console.WriteLine("Exporting: {0}", opts.FilePath); if (manager.TotalItems == 0) { throw new Exception("nothing to export"); } while (!result.HasFinished) { Thread.Sleep(200); if (manager.CompletedItems <= completed) { continue; } if (SysUtil.IsUnix) { Console.WriteLine(" {0} of {1} files ({2:0}%)", manager.CompletedItems, manager.TotalItems, 100.0 * manager.CompletedItems / manager.TotalItems); } else { Console.Write(" {0} of {1} files ({2:0}%) \r", manager.CompletedItems, manager.TotalItems, 100.0 * manager.CompletedItems / manager.TotalItems); } completed = manager.CompletedItems; } if (!SysUtil.IsUnix) { Console.WriteLine(); } if (result.HasException) { ExportException exportException = result.Exception as ExportException; if (exportException != null) { Console.WriteLine("Export failed on Item:\r\n{0}", exportException.ManifestItem.ToPrettyString()); } throw new Exception(string.Format("Export failed: {0}", result.Exception.Message), result.Exception); } }