Simplified & optimized ProcessEvent method

This commit is contained in:
Thorsten Sommer 2025-06-28 23:09:52 +02:00
parent 01f2176910
commit 27852e1165
Signed by: tsommer
GPG Key ID: 371BBA77A02C0108
2 changed files with 49 additions and 57 deletions

View File

@ -36,7 +36,7 @@ public sealed partial class RustService
var sseEvent = JsonSerializer.Deserialize<SseEvent>(jsonContent); var sseEvent = JsonSerializer.Deserialize<SseEvent>(jsonContent);
if (sseEvent is not null) if (sseEvent is not null)
{ {
var content = await SseHandler.ProcessEventAsync(sseEvent, false); var content = SseHandler.ProcessEvent(sseEvent, false);
resultBuilder.Append(content); resultBuilder.Append(content);
chunkCount++; chunkCount++;
} }

View File

@ -8,71 +8,63 @@ public static class SseHandler
private static readonly ConcurrentDictionary<string, List<PptxImageData>> PPTX_IMAGES = new(); private static readonly ConcurrentDictionary<string, List<PptxImageData>> PPTX_IMAGES = new();
private static int CURRENT_SLIDE_NUMBER; private static int CURRENT_SLIDE_NUMBER;
public static async Task<string> ProcessEventAsync(SseEvent? sseEvent, bool extractImages = true) public static string ProcessEvent(SseEvent? sseEvent, bool extractImages = true)
{ {
var result = new StringBuilder(); switch (sseEvent)
if (sseEvent == null) { return result.ToString(); }
if (sseEvent is { Content: not null, Metadata: not null })
{ {
case { Content: not null, Metadata: not null }:
switch (sseEvent.Metadata) switch (sseEvent.Metadata)
{ {
case TextMetadata: case TextMetadata:
result.AppendLine($"{sseEvent.Content}"); return $"{sseEvent.Content}";
break;
case PdfMetadata pdfMetadata: case PdfMetadata pdfMetadata:
var pageNumber = pdfMetadata.Pdf?.PageNumber ?? 0; var pageNumber = pdfMetadata.Pdf?.PageNumber ?? 0;
result.AppendLine($"# Page {pageNumber}\n{sseEvent.Content}"); return $"# Page {pageNumber}\n{sseEvent.Content}";
break;
case SpreadsheetMetadata spreadsheetMetadata: case SpreadsheetMetadata spreadsheetMetadata:
var sheetName = spreadsheetMetadata.Spreadsheet?.SheetName; var sheetName = spreadsheetMetadata.Spreadsheet?.SheetName;
var rowNumber = spreadsheetMetadata.Spreadsheet?.RowNumber; var rowNumber = spreadsheetMetadata.Spreadsheet?.RowNumber;
var spreadSheetResult = new StringBuilder();
if (rowNumber == 1)
spreadSheetResult.AppendLine($"\n# {sheetName}");
if (rowNumber == 1) { result.AppendLine($"\n# {sheetName}"); } spreadSheetResult.AppendLine($"{sseEvent.Content}");
return spreadSheetResult.ToString();
result.AppendLine($"{sseEvent.Content}");
break;
case DocumentMetadata: case DocumentMetadata:
case ImageMetadata: case ImageMetadata:
result.AppendLine($"{sseEvent.Content}"); return $"{sseEvent.Content}";
break;
case PresentationMetadata presentationMetadata: case PresentationMetadata presentationMetadata:
var slideNumber = presentationMetadata.Presentation?.SlideNumber ?? 0; var slideNumber = presentationMetadata.Presentation?.SlideNumber ?? 0;
var image = presentationMetadata.Presentation?.Image ?? null; var image = presentationMetadata.Presentation?.Image ?? null;
var presentationResult = new StringBuilder();
if (slideNumber != CURRENT_SLIDE_NUMBER)
presentationResult.AppendLine($"# Slide {slideNumber}");
if (slideNumber != CURRENT_SLIDE_NUMBER) { result.AppendLine($"# Slide {slideNumber}"); } presentationResult.Append($"{sseEvent.Content}");
result.Append($"{sseEvent.Content}");
if (image != null) if (image is not null)
{ {
var isEnd = ProcessImageSegment(image); var isEnd = ProcessImageSegment(image);
if (isEnd && extractImages) { result.AppendLine(BuildImage(image.Id!)); } if (isEnd && extractImages)
presentationResult.AppendLine(BuildImage(image.Id!));
} }
CURRENT_SLIDE_NUMBER = slideNumber; CURRENT_SLIDE_NUMBER = slideNumber;
break; return presentationResult.ToString();
default: default:
result.AppendLine(sseEvent.Content); return sseEvent.Content;
break;
}
}
else if (!string.IsNullOrEmpty(sseEvent.Content))
{
result.Append(sseEvent.Content);
}
else if (string.IsNullOrEmpty(sseEvent.Content))
{
result.Append(string.Empty);
} }
await Task.CompletedTask; case { Content: not null, Metadata: null }:
return result.ToString(); return sseEvent.Content;
default:
return string.Empty;
}
} }
private static bool ProcessImageSegment(PptxImageData pptxImageData) private static bool ProcessImageSegment(PptxImageData pptxImageData)
@ -85,7 +77,7 @@ public static class SseHandler
var content = pptxImageData.Content ?? string.Empty; var content = pptxImageData.Content ?? string.Empty;
var isEnd = pptxImageData.IsEnd; var isEnd = pptxImageData.IsEnd;
var imageSegment = new PptxImageData() var imageSegment = new PptxImageData
{ {
Id = id, Id = id,
Content = content, Content = content,