public async Task ImportIncrementalAsync(DatabaseSmugglerOptions options, string directoryPath, CancellationToken cancellationToken = default(CancellationToken))
        {
            var files = Directory.GetFiles(directoryPath)
                        .Where(file =>
            {
                var extension = Path.GetExtension(file);
                return
                (Constants.PeriodicExport.IncrementalExportExtension.Equals(extension, StringComparison.OrdinalIgnoreCase) ||
                 Constants.PeriodicExport.FullExportExtension.Equals(extension, StringComparison.OrdinalIgnoreCase));
            })
                        .OrderBy(File.GetLastWriteTimeUtc)
                        .ToArray();

            if (files.Length == 0)
            {
                return;
            }

            // When we do incremental import, we import the indexes and transformers from the last file only,
            // as the previous files can hold indexes and transformers which were deleted and shouldn't be imported.
            var oldOperateOnTypes = options.OperateOnTypes;

            options.OperateOnTypes = options.OperateOnTypes & ~(DatabaseItemType.Indexes | DatabaseItemType.Transformers);
            for (var i = 0; i < files.Length - 1; i++)
            {
                var filePath = Path.Combine(directoryPath, files[i]);
                await ImportAsync(options, filePath, cancellationToken).ConfigureAwait(false);
            }
            options.OperateOnTypes = oldOperateOnTypes;

            var lastFilePath = Path.Combine(directoryPath, files.Last());

            await ImportAsync(options, lastFilePath, cancellationToken).ConfigureAwait(false);
        }
 public async Task ExportAsync(DatabaseSmugglerOptions options, string serverUrl, string databaseName, CancellationToken token = default(CancellationToken))
 {
     using (var stream = await ExportAsync(options, token))
     {
         await ImportAsync(options, stream, serverUrl, databaseName, token);
     }
 }
        public async Task ExportAsync(DatabaseSmugglerOptions options, string destinationFilePath, CancellationToken token = default(CancellationToken))
        {
            using (var stream = await ExportAsync(options, token))
                using (var file = File.OpenWrite(destinationFilePath))
                {
                    await stream.CopyToAsync(file, 8192, token);

                    await file.FlushAsync(token);
                }
        }
        public async Task ImportAsync(DatabaseSmugglerOptions options, string filePath, CancellationToken cancellationToken = default(CancellationToken))
        {
            var countOfFileParts = 0;

            do
            {
                ShowProgress($"Starting to import file: {filePath}");
                using (var fileStream = File.OpenRead(filePath))
                {
                    await ImportAsync(options, fileStream, _store.Url, options.Database ?? _store.DefaultDatabase, cancellationToken).ConfigureAwait(false);
                }
                filePath = $"{filePath}.part{++countOfFileParts:D3}";
            } while (File.Exists(filePath));
        }
        private async Task <Stream> ExportAsync(DatabaseSmugglerOptions options, CancellationToken token)
        {
            throw new NotImplementedException();

            var httpClient = GetHttpClient();

            ShowProgress("Starting to export file");

            var database = options.Database ?? _store.DefaultDatabase;
            var url      = $"{_store.Url}/databases/{database}/smuggler/export";

            /*var json = RavenJObject.FromObject(options);
             *
             * var response = await httpClient.PostAsync(url, new StringContent(json.ToString()), token).ConfigureAwait(false);
             * if (response.IsSuccessStatusCode == false)
             *  throw new InvalidOperationException(await response.Content.ReadAsStringAsync());
             * var stream = await response.Content.ReadAsStreamAsync();
             * return stream;*/
        }
        private async Task ImportAsync(DatabaseSmugglerOptions options, Stream stream, string url, string database, CancellationToken cancellationToken)
        {
            var httpClient = GetHttpClient();

            using (var content = new StreamContent(stream))
            {
                var uri = $"{url}/databases/{database}/smuggler/import?{options.ToQueryString()}";

                var response = await httpClient.PostAsync(uri, content, cancellationToken).ConfigureAwait(false);

                if (response.IsSuccessStatusCode == false)
                {
                    throw new InvalidOperationException("Import failed with status code: " + response.StatusCode + Environment.NewLine +
                                                        await response.Content.ReadAsStringAsync()
                                                        );
                }

                if (response.IsSuccessStatusCode)
                {
                    var x = await response.Content.ReadAsStringAsync();
                }
            }
        }
 public async Task ImportAsync(DatabaseSmugglerOptions options, Stream stream, CancellationToken cancellationToken = default(CancellationToken))
 {
     ShowProgress("Starting to import from stream");
     await ImportAsync(options, stream, _store.Url, options.Database ?? _store.DefaultDatabase,
                       cancellationToken).ConfigureAwait(false);
 }