diff --git a/internal/pkg/utils/content_chunk.go b/internal/pkg/utils/content_chunk.go index 52b9799..06ce98e 100644 --- a/internal/pkg/utils/content_chunk.go +++ b/internal/pkg/utils/content_chunk.go @@ -1,6 +1,7 @@ package utils import ( + "cs-agent/internal/pkg/enums" "strings" "golang.org/x/net/html" @@ -14,9 +15,11 @@ const ( ) type ContentChunk struct { - Type ContentChunkType // - Content string // text content or image url - AssetID string // image asset id + Type ContentChunkType // + Content string // text content or image url + AssetID string // image asset id + Provider enums.AssetProvider // image provider + StorageKey string // image storage key } func SplitHTMLContentChunks(content string) ([]ContentChunk, error) { @@ -59,13 +62,17 @@ func SplitHTMLContentChunks(content string) ([]ContentChunk, error) { flushText() src := strings.TrimSpace(findContentChunkHTMLAttr(node, "src")) assetID := strings.TrimSpace(findContentChunkHTMLAttr(node, "data-asset-id")) + provider := enums.AssetProvider(strings.TrimSpace(findContentChunkHTMLAttr(node, "data-provider"))) + storageKey := strings.TrimSpace(findContentChunkHTMLAttr(node, "data-storage-key")) if src == "" && assetID == "" { return } chunks = append(chunks, ContentChunk{ - Type: ContentChunkTypeImage, - Content: src, - AssetID: assetID, + Type: ContentChunkTypeImage, + Content: src, + AssetID: assetID, + Provider: provider, + StorageKey: storageKey, }) return } diff --git a/internal/pkg/utils/content_chunk_test.go b/internal/pkg/utils/content_chunk_test.go index 32a4463..cfd71c0 100644 --- a/internal/pkg/utils/content_chunk_test.go +++ b/internal/pkg/utils/content_chunk_test.go @@ -1,6 +1,7 @@ package utils import ( + "cs-agent/internal/pkg/enums" "reflect" "testing" ) @@ -55,7 +56,12 @@ func TestSplitHTMLContentChunks(t *testing.T) { name: "image with asset metadata only", content: `

a

`, want: []ContentChunk{ - {Type: ContentChunkTypeImage, AssetID: "asset_1"}, + { + Type: ContentChunkTypeImage, + AssetID: "asset_1", + Provider: enums.AssetProviderLocal, + StorageKey: "images/a.png", + }, }, }, { diff --git a/internal/services/wxwork_kf_outbound_service.go b/internal/services/wxwork_kf_outbound_service.go index f084cae..027df5b 100644 --- a/internal/services/wxwork_kf_outbound_service.go +++ b/internal/services/wxwork_kf_outbound_service.go @@ -13,6 +13,7 @@ import ( "cs-agent/internal/repositories" "cs-agent/internal/wxwork" + "github.com/mlogclub/simple/common/strs" "github.com/mlogclub/simple/sqls" "github.com/silenceper/wechat/v2/work/kf/sendmsg" ) @@ -445,27 +446,24 @@ func (s *wxWorkKFOutboundService) buildHTMLChunks(content string) ([]wxWorkKFOut for _, chunk := range contentChunks { switch chunk.Type { case utils.ContentChunkTypeText: - text := strings.TrimSpace(chunk.Content) - if text == "" { - continue + if strs.IsNotBlank(chunk.Content) { + chunks = append(chunks, wxWorkKFOutboundChunk{ + MessageType: enums.IMMessageTypeText, + Content: chunk.Content, + }) } - chunks = append(chunks, wxWorkKFOutboundChunk{ - MessageType: enums.IMMessageTypeText, - Content: text, - }) case utils.ContentChunkTypeImage: - assetID := strings.TrimSpace(chunk.AssetID) - if assetID == "" { + if strs.IsBlank(chunk.AssetID) { chunks = append(chunks, wxWorkKFOutboundChunk{ MessageType: enums.IMMessageTypeText, Content: "[图片]", }) - continue + } else { + chunks = append(chunks, wxWorkKFOutboundChunk{ + MessageType: enums.IMMessageTypeImage, + AssetID: chunk.AssetID, + }) } - chunks = append(chunks, wxWorkKFOutboundChunk{ - MessageType: enums.IMMessageTypeImage, - AssetID: assetID, - }) } } if len(chunks) == 0 {