feat: sync iOS compatibility support

This commit is contained in:
A 2026-07-13 00:58:57 +08:00
parent 1f646ef024
commit 50803a604c
32 changed files with 871 additions and 78 deletions

View file

@ -18,6 +18,9 @@ const (
MediaCategoryRoundVideo MediaCategory = 7 // document 含 video 属性且 round_message=true(视频消息)
MediaCategoryURL MediaCategory = 8 // 文本含 url/text_url/email 实体或 messageMediaWebPage
MediaCategoryPoll MediaCategory = 9 // media.kind=poll
// MediaCategoryGeoLive 是 messages.getRecentLocations 的内部索引类别。
// 它不映射到普通共享媒体筛选器,只用于按 peer 有界读取 live-location 消息。
MediaCategoryGeoLive MediaCategory = 10 // media.kind=geo_live
)
// MediaCategoryCounts 是共享媒体索引按基础类别聚合出的精确计数。
@ -84,6 +87,8 @@ func ClassifyMediaCategories(media *MessageMedia, entities []MessageEntity) []Me
}
case MessageMediaKindPoll:
add(MediaCategoryPoll)
case MessageMediaKindGeoLive:
add(MediaCategoryGeoLive)
case MessageMediaKindWebPage:
add(MediaCategoryURL)
}

View file

@ -22,6 +22,7 @@ func TestClassifyMediaCategories(t *testing.T) {
{"nil media no entities", nil, nil, []MediaCategory{}},
{"photo", &MessageMedia{Kind: MessageMediaKindPhoto, Photo: &Photo{}}, nil, []MediaCategory{MediaCategoryPhoto}},
{"poll", &MessageMedia{Kind: MessageMediaKindPoll}, nil, []MediaCategory{MediaCategoryPoll}},
{"live location", &MessageMedia{Kind: MessageMediaKindGeoLive, GeoLive: &MessageGeoLive{}}, nil, []MediaCategory{MediaCategoryGeoLive}},
{"video", doc(DocumentAttribute{Kind: DocAttrVideo}), nil, []MediaCategory{MediaCategoryVideo}},
{"round video note", doc(DocumentAttribute{Kind: DocAttrVideo, RoundMessage: true}), nil, []MediaCategory{MediaCategoryRoundVideo}},
{"gif animation", &MessageMedia{Kind: MessageMediaKindDocument, Document: &Document{MimeType: "video/mp4", Attributes: []DocumentAttribute{{Kind: DocAttrAnimated}, {Kind: DocAttrVideo, W: 320, H: 240, Duration: 1}}}}, nil, []MediaCategory{MediaCategoryGif}},