private async void Backup(string folder)
        {
            int code = 0;

            try
            {
                var directoryInfo = new DirectoryInfo(folder);
                if (!directoryInfo.Exists)
                {
                    directoryInfo.Create();
                }

                var service  = new Services.SI.SIStorageService();
                var packages = await service.GetPackagesAsync();

                using (var client = new HttpClient())
                {
                    foreach (var package in packages)
                    {
                        var uri = await service.GetPackageByIDAsync(package.ID);

                        var fileName = Path.GetFileName(Uri.UnescapeDataString(uri.ToString()));

                        var targetFile = Path.Combine(folder, fileName);
                        using (var stream = await client.GetStreamAsync(uri))
                            using (var fileStream = File.Create(targetFile))
                            {
                                await stream.CopyToAsync(fileStream);
                            }
                    }
                }
            }
            catch (Exception exc)
            {
                Console.Write(exc.ToString());
                code = 1;
            }
            finally
            {
                Environment.Exit(code);
            }
        }
 public SIStoragePackageProvider(string serverAddress, string storageOriginsPath, string storageUrl)
 {
     _service            = new Services.SI.SIStorageService(serverAddress);
     _storageOriginsPath = storageOriginsPath;
     _storageUrl         = storageUrl;
 }