From 3b606974f004713ffcf9811ff5633f4c6cc77d9d Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Thu, 8 Aug 2024 13:50:45 -0500 Subject: [PATCH] refine screenshots --- .../LocalFileStorageService.Conversation.cs | 102 +++++++++------- .../TencentCosService.Conversation.cs | 109 +++++++++++------- 2 files changed, 126 insertions(+), 85 deletions(-) diff --git a/src/Infrastructure/BotSharp.Core/Files/Services/Storage/LocalFileStorageService.Conversation.cs b/src/Infrastructure/BotSharp.Core/Files/Services/Storage/LocalFileStorageService.Conversation.cs index 5307d198..9e14677d 100644 --- a/src/Infrastructure/BotSharp.Core/Files/Services/Storage/LocalFileStorageService.Conversation.cs +++ b/src/Infrastructure/BotSharp.Core/Files/Services/Storage/LocalFileStorageService.Conversation.cs @@ -27,53 +27,16 @@ public partial class LocalFileStorageService var file = Directory.GetFiles(subDir).FirstOrDefault(); if (file == null) continue; - var contentType = FileUtility.GetFileContentType(file); - var screenshotDir = Path.Combine(subDir, SCREENSHOT_FILE_FOLDER); + var screenshots = await GetScreenshots(file, subDir, messageId, source); + if (screenshots.IsNullOrEmpty()) continue; - if (ExistDirectory(screenshotDir) && !Directory.GetFiles(screenshotDir).IsNullOrEmpty()) - { - foreach (var screenshot in Directory.GetFiles(screenshotDir)) - { - var fileName = Path.GetFileNameWithoutExtension(screenshot); - var fileExtension = Path.GetExtension(screenshot).Substring(1); - var screenshotContentType = FileUtility.GetFileContentType(screenshot); - var model = new MessageFileModel() - { - MessageId = messageId, - FileName = fileName, - FileExtension = fileExtension, - FileStorageUrl = screenshot, - ContentType = screenshotContentType, - FileSource = source - }; - files.Add(model); - } - } - else if (contentType == MediaTypeNames.Application.Pdf) - { - var images = await ConvertPdfToImages(file, screenshotDir); - foreach (var image in images) - { - var fileName = Path.GetFileNameWithoutExtension(image); - var fileExtension = Path.GetExtension(image).Substring(1); - var screenshotContentType = FileUtility.GetFileContentType(image); - var model = new MessageFileModel() - { - MessageId = messageId, - FileName = fileName, - FileExtension = fileExtension, - FileStorageUrl = image, - ContentType = screenshotContentType, - FileSource = source - }; - files.Add(model); - } - } + files.AddRange(screenshots); } } return files; } + public IEnumerable GetMessageFiles(string conversationId, IEnumerable messageIds, string source, IEnumerable? contentTypes = null) { @@ -315,5 +278,62 @@ public partial class LocalFileStorageService var converters = _services.GetServices(); return converters.FirstOrDefault(); } + + private async Task> GetScreenshots(string file, string parentDir, string messageId, string source) + { + var files = new List(); + + try + { + var contentType = FileUtility.GetFileContentType(file); + var screenshotDir = Path.Combine(parentDir, SCREENSHOT_FILE_FOLDER); + + if (ExistDirectory(screenshotDir) && !Directory.GetFiles(screenshotDir).IsNullOrEmpty()) + { + foreach (var screenshot in Directory.GetFiles(screenshotDir)) + { + var fileName = Path.GetFileNameWithoutExtension(screenshot); + var fileExtension = Path.GetExtension(screenshot).Substring(1); + var screenshotContentType = FileUtility.GetFileContentType(screenshot); + var model = new MessageFileModel() + { + MessageId = messageId, + FileName = fileName, + FileExtension = fileExtension, + FileStorageUrl = screenshot, + ContentType = screenshotContentType, + FileSource = source + }; + files.Add(model); + } + } + else if (contentType == MediaTypeNames.Application.Pdf) + { + var images = await ConvertPdfToImages(file, screenshotDir); + foreach (var image in images) + { + var fileName = Path.GetFileNameWithoutExtension(image); + var fileExtension = Path.GetExtension(image).Substring(1); + var screenshotContentType = FileUtility.GetFileContentType(image); + var model = new MessageFileModel() + { + MessageId = messageId, + FileName = fileName, + FileExtension = fileExtension, + FileStorageUrl = image, + ContentType = screenshotContentType, + FileSource = source + }; + files.Add(model); + } + } + return files; + } + catch (Exception ex) + { + _logger.LogWarning($"Error when getting message file screenshots {file} (messageId: {messageId}), Error: {ex.Message}\r\n{ex.InnerException}"); + return files; + } + } #endregion } diff --git a/src/Plugins/BotSharp.Plugin.TencentCos/Services/TencentCosService.Conversation.cs b/src/Plugins/BotSharp.Plugin.TencentCos/Services/TencentCosService.Conversation.cs index 8008a5e2..6037b1e7 100644 --- a/src/Plugins/BotSharp.Plugin.TencentCos/Services/TencentCosService.Conversation.cs +++ b/src/Plugins/BotSharp.Plugin.TencentCos/Services/TencentCosService.Conversation.cs @@ -26,50 +26,10 @@ public partial class TencentCosService var file = _cosClient.BucketClient.GetDirFiles(subDir).FirstOrDefault(); if (file == null) continue; - var contentType = FileUtility.GetFileContentType(file); - var screenshotDir = $"{subDir}/{SCREENSHOT_FILE_FOLDER}/"; - var screenshots = _cosClient.BucketClient.GetDirFiles(screenshotDir); - if (!screenshots.IsNullOrEmpty()) - { - foreach (var screenshot in screenshots) - { - var screenshotContentType = FileUtility.GetFileContentType(screenshot); - var fileName = Path.GetFileNameWithoutExtension(screenshot); - var fileExtension = Path.GetExtension(screenshot).Substring(1); - var model = new MessageFileModel - { - MessageId = messageId, - FileName = fileName, - FileExtension = fileExtension, - FileUrl = BuilFileUrl(screenshot), - FileStorageUrl = screenshot, - ContentType = contentType, - FileSource = source - }; - files.Add(model); - } - } - else if (contentType == MediaTypeNames.Application.Pdf) - { - var images = await ConvertPdfToImages(file, screenshotDir); - foreach (var image in images) - { - var fileName = Path.GetFileNameWithoutExtension(image); - var fileExtension = Path.GetExtension(image).Substring(1); - var screenshotContentType = FileUtility.GetFileContentType(image); - var model = new MessageFileModel - { - MessageId = messageId, - FileName = fileName, - FileExtension = fileExtension, - FileUrl = BuilFileUrl(image), - FileStorageUrl = image, - ContentType = contentType, - FileSource = source - }; - files.Add(model); - } - } + var screenshots = await GetScreenshots(file, subDir, messageId, source); + if (screenshots.IsNullOrEmpty()) continue; + + files.AddRange(screenshots); } } @@ -120,6 +80,8 @@ public partial class TencentCosService return files; } + + public string GetMessageFile(string conversationId, string messageId, string source, string index, string fileName) { var dir = $"{CONVERSATION_FOLDER}/{conversationId}/{FILE_FOLDER}/{source}/{index}/"; @@ -299,5 +261,64 @@ public partial class TencentCosService { return $"https://{_fullBuketName}.cos.{_settings.Region}.myqcloud.com/{file}"; } + + private async Task> GetScreenshots(string file, string parentDir, string messageId, string source) + { + var files = new List(); + + try + { + var contentType = FileUtility.GetFileContentType(file); + var screenshotDir = $"{parentDir}/{SCREENSHOT_FILE_FOLDER}/"; + var screenshots = _cosClient.BucketClient.GetDirFiles(screenshotDir); + if (!screenshots.IsNullOrEmpty()) + { + foreach (var screenshot in screenshots) + { + var screenshotContentType = FileUtility.GetFileContentType(screenshot); + var fileName = Path.GetFileNameWithoutExtension(screenshot); + var fileExtension = Path.GetExtension(screenshot).Substring(1); + var model = new MessageFileModel + { + MessageId = messageId, + FileName = fileName, + FileExtension = fileExtension, + FileUrl = BuilFileUrl(screenshot), + FileStorageUrl = screenshot, + ContentType = contentType, + FileSource = source + }; + files.Add(model); + } + } + else if (contentType == MediaTypeNames.Application.Pdf) + { + var images = await ConvertPdfToImages(file, screenshotDir); + foreach (var image in images) + { + var fileName = Path.GetFileNameWithoutExtension(image); + var fileExtension = Path.GetExtension(image).Substring(1); + var screenshotContentType = FileUtility.GetFileContentType(image); + var model = new MessageFileModel + { + MessageId = messageId, + FileName = fileName, + FileExtension = fileExtension, + FileUrl = BuilFileUrl(image), + FileStorageUrl = image, + ContentType = contentType, + FileSource = source + }; + files.Add(model); + } + } + return files; + } + catch (Exception ex) + { + _logger.LogWarning($"Error when getting message file screenshots {file} (messageId: {messageId}), Error: {ex.Message}\r\n{ex.InnerException}"); + return files; + } + } #endregion }