wired up the logic to parse the server sent events into a full markdown document

This commit is contained in:
Nils Kruthoff 2026-07-27 19:37:51 +02:00
parent 40cfb77cb3
commit d865ffa503
No known key found for this signature in database
GPG Key ID: A5C0151B4DDB172C

View File

@ -7,6 +7,7 @@ public static class ContentStreamSseHandler
{
private static readonly ConcurrentDictionary<string, List<ContentStreamPptxImageData>> CHUNKED_IMAGES = new();
private static readonly ConcurrentDictionary<string, SlideManager> SLIDE_MANAGERS = new();
private static readonly ConcurrentDictionary<string, DocumentManager> DOCUMENT_MANAGERS = new();
public static string? ProcessEvent(ContentStreamSseEvent? sseEvent, bool extractImages = true)
{
@ -39,7 +40,12 @@ public static class ContentStreamSseHandler
spreadSheetResult.Append(sseEvent.Content);
return spreadSheetResult.ToString();
case ContentStreamDocumentMetadata:
case ContentStreamDocumentMetadata documentMetadata:
if (documentMetadata.Document?.PageNumber is not > 0)
return sseEvent.Content;
var documentManager = DOCUMENT_MANAGERS.GetOrAdd(sseEvent.StreamId!, _ => new());
return documentManager.AddPage(documentMetadata, sseEvent.Content, extractImages);
case ContentStreamImageMetadata:
return sseEvent.Content;
@ -79,6 +85,7 @@ public static class ContentStreamSseHandler
Content = content,
Segment = segment,
IsEnd = isEnd,
MediaType = contentStreamPptxImageData.MediaType,
};
CHUNKED_IMAGES.AddOrUpdate(
@ -124,7 +131,15 @@ public static class ContentStreamSseHandler
finalContentChunk.Append(result);
}
if (DOCUMENT_MANAGERS.TryGetValue(streamId, out var documentManager))
{
var result = documentManager.Flush();
if (!string.IsNullOrWhiteSpace(result))
finalContentChunk.Append(result);
}
SLIDE_MANAGERS.TryRemove(streamId, out _);
DOCUMENT_MANAGERS.TryRemove(streamId, out _);
var imageIdPrefix = $"{streamId}-";
foreach (var key in CHUNKED_IMAGES.Keys.Where(k => k.StartsWith(imageIdPrefix, StringComparison.InvariantCultureIgnoreCase)))
CHUNKED_IMAGES.TryRemove(key, out _);