Index secret chat media for search

This commit is contained in:
Ali 2020-06-15 16:47:34 +04:00
parent 87fc9c400a
commit 704a39e329
3 changed files with 37 additions and 2 deletions

View File

@ -76,6 +76,8 @@ public protocol Media: class, PostboxCoding {
var id: MediaId? { get } var id: MediaId? { get }
var peerIds: [PeerId] { get } var peerIds: [PeerId] { get }
var indexableText: String? { get }
func isLikelyToBeUpdated() -> Bool func isLikelyToBeUpdated() -> Bool
func isEqual(to other: Media) -> Bool func isEqual(to other: Media) -> Bool
@ -86,4 +88,8 @@ public extension Media {
func isLikelyToBeUpdated() -> Bool { func isLikelyToBeUpdated() -> Bool {
return false return false
} }
var indexableText: String? {
return nil
}
} }

View File

@ -1003,7 +1003,14 @@ final class MessageHistoryTable: Table {
} }
if self.seedConfiguration.peerNamespacesRequiringMessageTextIndex.contains(message.id.peerId.namespace) { 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) var flags = MessageFlags(message.flags)
@ -1493,7 +1500,16 @@ final class MessageHistoryTable: Table {
if self.seedConfiguration.peerNamespacesRequiringMessageTextIndex.contains(message.id.peerId.namespace) { if self.seedConfiguration.peerNamespacesRequiringMessageTextIndex.contains(message.id.peerId.namespace) {
if previousMessage.id != message.id || previousMessage.text != message.text || previousMessage.tags != message.tags { if previousMessage.id != message.id || previousMessage.text != message.text || previousMessage.tags != message.tags {
self.textIndexTable.remove(messageId: previousMessage.id) 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)
} }
} }

View File

@ -298,6 +298,19 @@ public final class TelegramMediaFile: Media, Equatable, Codable {
return self.fileId 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]) { 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.fileId = fileId
self.partialReference = partialReference self.partialReference = partialReference