Skip to content

Commit

Permalink
refactor use the same code, not only sync but also async.
Browse files Browse the repository at this point in the history
  • Loading branch information
isdaniel committed Dec 14, 2024
1 parent f0f9d31 commit 6b1541f
Showing 1 changed file with 10 additions and 29 deletions.
39 changes: 10 additions & 29 deletions src/MiniWord/MiniWord.Implment.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,37 +25,16 @@ public static partial class MiniWord
{
private static void SaveAsByTemplateImpl(Stream stream, byte[] template, Dictionary<string, object> data)
{
var value = data; //TODO: support dynamic and poco value
byte[] bytes = null;
using (var ms = new MemoryStream())
{
ms.Write(template, 0, template.Length);
ms.Position = 0;
using (var docx = WordprocessingDocument.Open(ms, true))
{
var hc = docx.MainDocumentPart.HeaderParts.Count();
var fc = docx.MainDocumentPart.FooterParts.Count();
for (int i = 0; i < hc; i++)
docx.MainDocumentPart.HeaderParts.ElementAt(i).Header.Generate(docx, value);
for (int i = 0; i < fc; i++)
docx.MainDocumentPart.FooterParts.ElementAt(i).Footer.Generate(docx, value);
docx.MainDocumentPart.Document.Body.Generate(docx, value);
docx.Save();
}

bytes = ms.ToArray();
}

stream.Write(bytes, 0, bytes.Length);
SaveAsByTemplateImplAsync(stream,template,data).GetAwaiter().GetResult();
}

private static async Task SaveAsByTemplateImplAsync(Stream stream, byte[] template, Dictionary<string, object> data, CancellationToken token)
private static async Task SaveAsByTemplateImplAsync(Stream stream, byte[] template, Dictionary<string, object> data, CancellationToken token = default(CancellationToken))
{
var value = data; //TODO: support dynamic and poco value
byte[] bytes = null;
using (var ms = new MemoryStream())
{
await ms.WriteAsync(template, 0, template.Length).ConfigureAwait(false);
await ms.WriteAsync(template, 0, template.Length, token).ConfigureAwait(false);
ms.Position = 0;
using (var docx = WordprocessingDocument.Open(ms, true))
{
Expand All @@ -72,7 +51,7 @@ private static async Task SaveAsByTemplateImplAsync(Stream stream, byte[] templa
bytes = ms.ToArray();
}

await stream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
await stream.WriteAsync(bytes, 0, bytes.Length, token).ConfigureAwait(false);
}


Expand Down Expand Up @@ -241,13 +220,14 @@ private static object GetObjVal(object objSource, string[] propNames)
var nextPropNames = propNames.Skip(1).ToArray();
if (objSource is IDictionary)
{
var dict = (IDictionary)objSource;
var dict = objSource as IDictionary;
if (dict.Contains(propNames[0]))
{
var val = dict[propNames[0]];
if (propNames.Length > 1)
return GetObjVal(dict[propNames[0]], nextPropNames);
else return val;
else
return val;
}

return null;
Expand Down Expand Up @@ -1157,12 +1137,13 @@ private static byte[] GetBytes(string path)
return GetByteAsync(path).GetAwaiter().GetResult();
}

private static async Task<byte[]> GetByteAsync(string path)
private static async Task<byte[]> GetByteAsync(string path, CancellationToken token = default(CancellationToken))
{
using (var st = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 4096, true))
using (var ms = new MemoryStream())
{
await st.CopyToAsync(ms).ConfigureAwait(false);
//use default size 81920
await st.CopyToAsync(ms, 81920, token).ConfigureAwait(false);
return ms.ToArray();
}
}
Expand Down

0 comments on commit 6b1541f

Please sign in to comment.