Example #1
0
        private void WriteFilesAsAttachments(JsonTextWriter jsonWriter)
        {
            int totalFilesCount = 0;

            fileStorage.Batch(accsesor =>
            {
                totalFilesCount = accsesor.GetFileCount();
            });
            if (totalFilesCount == 0)
            {
                return;
            }
            int currentFilesCount  = 0;
            int previousFilesCount = 0;
            var lastEtag           = Etag.Empty;

            do
            {
                try
                {
                    previousFilesCount = currentFilesCount;
                    fileStorage.Batch(accsesor =>
                    {
                        var fileHeaders = accsesor.GetFilesAfter(lastEtag, batchSize);
                        foreach (var header in fileHeaders)
                        {
                            var file = StorageStream.Reading(fileStorage, header.FullPath);
                            jsonWriter.WriteStartObject();
                            jsonWriter.WritePropertyName("Data");
                            int read = file.Read(filesBuffer, 0, filesBuffer.Length);
                            jsonWriter.WriteRaw("\"");
                            while (read > 0)
                            {
                                var base64 = Convert.ToBase64String(filesBuffer, 0, read);
                                jsonWriter.WriteRaw(base64);
                                jsonWriter.Flush();
                                read = file.Read(filesBuffer, 0, filesBuffer.Length);
                            }
                            jsonWriter.WriteRaw("\"");
                            jsonWriter.SealValue();
                            jsonWriter.WritePropertyName("Metadata");
                            fileMetadata.WriteTo(jsonWriter);
                            jsonWriter.WritePropertyName("Key");
                            jsonWriter.WriteValue(header.FullPath);
                            jsonWriter.WritePropertyName("Etag");
                            jsonWriter.WriteValue(header.Etag.ToString());
                            jsonWriter.WriteEndObject();
                            lastEtag = header.Etag;
                            currentFilesCount++;
                            if (currentFilesCount % batchSize == 0)
                            {
                                ReportProgress("files", currentFilesCount, totalFilesCount);
                            }
                        }
                    });
                }
                catch (Exception e)
                {
                    lastEtag = lastEtag.IncrementBy(1);
                    currentFilesCount++;
                    ReportCorrupted("files", currentFilesCount, e.Message);
                }
                finally
                {
                    if (currentFilesCount > previousFilesCount)
                    {
                        ReportProgress("files", currentFilesCount, totalFilesCount);
                    }
                }
            } while (currentFilesCount < totalFilesCount);
        }