Example #1
0
        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);
            }
        }