[WIP] Stickers editor

This commit is contained in:
Ilya Laktyushin
2024-04-09 00:50:37 +04:00
parent ff5307a254
commit 70eef8ecac
16 changed files with 204 additions and 81 deletions

View File

@@ -242,7 +242,7 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent
var text: String?
var entities: [MessageTextEntity]?
var titleBadge: String?
var mediaAndFlags: (Media, ChatMessageAttachedContentNodeMediaFlags)?
var mediaAndFlags: ([Media], ChatMessageAttachedContentNodeMediaFlags)?
var badge: String?
var actionIcon: ChatMessageAttachedContentActionIcon?
@@ -307,9 +307,9 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent
if let file = mainMedia as? TelegramMediaFile, webpage.type != "telegram_theme" {
if let embedUrl = webpage.embedUrl, !embedUrl.isEmpty {
if automaticPlayback {
mediaAndFlags = (file, [.preferMediaBeforeText])
mediaAndFlags = ([file], [.preferMediaBeforeText])
} else {
mediaAndFlags = (webpage.image ?? file, [.preferMediaBeforeText])
mediaAndFlags = ([webpage.image ?? file], [.preferMediaBeforeText])
}
} else if webpage.type == "telegram_background" {
var colors: [UInt32] = []
@@ -321,12 +321,12 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent
intensity = intensityValue
}
let media = WallpaperPreviewMedia(content: .file(file: file, colors: colors, rotation: rotation, intensity: intensity, false, false))
mediaAndFlags = (media, [.preferMediaAspectFilled])
mediaAndFlags = ([media], [.preferMediaAspectFilled])
if let fileSize = file.size {
badge = dataSizeString(fileSize, formatting: DataSizeStringFormatting(chatPresentationData: item.presentationData))
}
} else {
mediaAndFlags = (file, [])
mediaAndFlags = ([file], [])
}
} else if let image = mainMedia as? TelegramMediaImage {
if let type = webpage.type, ["photo", "video", "embed", "gif", "document", "telegram_album"].contains(type) {
@@ -338,13 +338,13 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent
} else if let embedUrl = webpage.embedUrl, !embedUrl.isEmpty {
flags.insert(.preferMediaBeforeText)
}
mediaAndFlags = (image, flags)
mediaAndFlags = ([image], flags)
} else if let _ = largestImageRepresentation(image.representations)?.dimensions {
let flags = ChatMessageAttachedContentNodeMediaFlags()
mediaAndFlags = (image, flags)
mediaAndFlags = ([image], flags)
}
} else if let story = mainMedia as? TelegramMediaStory {
mediaAndFlags = (story, [.preferMediaBeforeText, .titleBeforeMedia])
mediaAndFlags = ([story], [.preferMediaBeforeText, .titleBeforeMedia])
if let storyItem = item.message.associatedStories[story.storyId]?.get(Stories.StoredItem.self), case let .item(itemValue) = storyItem {
text = itemValue.text
entities = itemValue.entities
@@ -372,7 +372,7 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent
}
if let content = content {
let media = WallpaperPreviewMedia(content: content)
mediaAndFlags = (media, [])
mediaAndFlags = ([media], [])
}
} else if type == "telegram_theme" {
var file: TelegramMediaFile?
@@ -397,10 +397,10 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent
}
if let file = file {
let media = WallpaperPreviewMedia(content: .file(file: file, colors: [], rotation: nil, intensity: nil, true, isSupported))
mediaAndFlags = (media, ChatMessageAttachedContentNodeMediaFlags())
mediaAndFlags = ([media], ChatMessageAttachedContentNodeMediaFlags())
} else if let settings = settings {
let media = WallpaperPreviewMedia(content: .themeSettings(settings))
mediaAndFlags = (media, ChatMessageAttachedContentNodeMediaFlags())
mediaAndFlags = ([media], ChatMessageAttachedContentNodeMediaFlags())
}
}
}
@@ -479,6 +479,12 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent
break
}
}
for attribute in webpage.attributes {
if case let .stickerPack(stickerPack) = attribute, !stickerPack.files.isEmpty {
mediaAndFlags = (stickerPack.files, .preferMediaInline)
break
}
}
if defaultWebpageImageSizeIsSmall(webpage: webpage) {
mediaAndFlags?.1.insert(.preferMediaInline)
@@ -514,7 +520,7 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent
for media in item.message.media {
switch media {
case _ as TelegramMediaImage, _ as TelegramMediaFile, _ as TelegramMediaStory:
mediaAndFlags = (media, [.preferMediaInline])
mediaAndFlags = ([media], [.preferMediaInline])
default:
break
}