diff --git a/submodules/Postbox/Sources/Media.swift b/submodules/Postbox/Sources/Media.swift index 72dc34fe1f..021b5038c4 100644 --- a/submodules/Postbox/Sources/Media.swift +++ b/submodules/Postbox/Sources/Media.swift @@ -76,6 +76,8 @@ public protocol Media: class, PostboxCoding { var id: MediaId? { get } var peerIds: [PeerId] { get } + var indexableText: String? { get } + func isLikelyToBeUpdated() -> Bool func isEqual(to other: Media) -> Bool @@ -86,4 +88,8 @@ public extension Media { func isLikelyToBeUpdated() -> Bool { return false } + + var indexableText: String? { + return nil + } } diff --git a/submodules/Postbox/Sources/MessageHistoryTable.swift b/submodules/Postbox/Sources/MessageHistoryTable.swift index fa3095fe40..4bf428c00a 100644 --- a/submodules/Postbox/Sources/MessageHistoryTable.swift +++ b/submodules/Postbox/Sources/MessageHistoryTable.swift @@ -1003,7 +1003,14 @@ final class MessageHistoryTable: Table { } if self.seedConfiguration.peerNamespacesRequiringMessageTextIndex.contains(message.id.peerId.namespace) { - self.textIndexTable.add(messageId: message.id, text: message.text, tags: message.tags) + var indexableText = message.text + for media in message.media { + if let mediaText = media.indexableText { + indexableText.append(" ") + indexableText.append(mediaText) + } + } + self.textIndexTable.add(messageId: message.id, text: indexableText, tags: message.tags) } var flags = MessageFlags(message.flags) @@ -1493,7 +1500,16 @@ final class MessageHistoryTable: Table { if self.seedConfiguration.peerNamespacesRequiringMessageTextIndex.contains(message.id.peerId.namespace) { if previousMessage.id != message.id || previousMessage.text != message.text || previousMessage.tags != message.tags { self.textIndexTable.remove(messageId: previousMessage.id) - self.textIndexTable.add(messageId: message.id, text: message.text, tags: message.tags) + + var indexableText = message.text + for media in message.media { + if let mediaText = media.indexableText { + indexableText.append(" ") + indexableText.append(mediaText) + } + } + + self.textIndexTable.add(messageId: message.id, text: indexableText, tags: message.tags) } } diff --git a/submodules/SyncCore/Sources/TelegramMediaFile.swift b/submodules/SyncCore/Sources/TelegramMediaFile.swift index 017d1eac1c..865964df4d 100644 --- a/submodules/SyncCore/Sources/TelegramMediaFile.swift +++ b/submodules/SyncCore/Sources/TelegramMediaFile.swift @@ -298,6 +298,19 @@ public final class TelegramMediaFile: Media, Equatable, Codable { return self.fileId } + public var indexableText: String? { + var result = "" + for attribute in self.attributes { + if case let .FileName(fileName) = attribute { + if !result.isEmpty { + result.append(" ") + } + result.append(fileName) + } + } + return result.isEmpty ? nil : result + } + public init(fileId: MediaId, partialReference: PartialMediaReference?, resource: TelegramMediaResource, previewRepresentations: [TelegramMediaImageRepresentation], videoThumbnails: [TelegramMediaFile.VideoThumbnail], immediateThumbnailData: Data?, mimeType: String, size: Int?, attributes: [TelegramMediaFileAttribute]) { self.fileId = fileId self.partialReference = partialReference