diff --git a/submodules/TelegramCore/Sources/Network/MultipartFetch.swift b/submodules/TelegramCore/Sources/Network/MultipartFetch.swift index daf1966301..e75d0afc6b 100644 --- a/submodules/TelegramCore/Sources/Network/MultipartFetch.swift +++ b/submodules/TelegramCore/Sources/Network/MultipartFetch.swift @@ -848,7 +848,12 @@ func multipartFetch(postbox: Postbox, network: Network, mediaReferenceRevalidati } else { return .revalidate } - case .messageAuthorAvatar: + case let .messageAuthorAvatar(message, _): + if let peer = message.author { + if let location = resource.apiInputLocation(peerReference: peer) { + return .location(location) + } + } return .revalidate default: return .none diff --git a/submodules/TelegramCore/Sources/SyncCore/SyncCore_MediaReference.swift b/submodules/TelegramCore/Sources/SyncCore/SyncCore_MediaReference.swift index a1b029630c..c6e8cdd91c 100644 --- a/submodules/TelegramCore/Sources/SyncCore/SyncCore_MediaReference.swift +++ b/submodules/TelegramCore/Sources/SyncCore/SyncCore_MediaReference.swift @@ -7,16 +7,24 @@ public struct MessageReference: PostboxCoding, Hashable, Equatable { switch content { case .none: return nil - case let .message(peer, _, _, _, _): + case let .message(peer, _, _, _, _, _): return peer } } + public var author: PeerReference? { + switch content { + case .none: + return nil + case let .message(_, author, _, _, _, _): + return author + } + } public var id: MessageId? { switch content { case .none: return nil - case let .message(_, id, _, _, _): + case let .message(_, _, id, _, _, _): return id } } @@ -25,7 +33,7 @@ public struct MessageReference: PostboxCoding, Hashable, Equatable { switch content { case .none: return nil - case let .message(_, _, timestamp, _, _): + case let .message(_, _, _, timestamp, _, _): return timestamp } } @@ -34,7 +42,7 @@ public struct MessageReference: PostboxCoding, Hashable, Equatable { switch content { case .none: return nil - case let .message(_, _, _, incoming, _): + case let .message(_, _, _, _, incoming, _): return incoming } } @@ -43,22 +51,34 @@ public struct MessageReference: PostboxCoding, Hashable, Equatable { switch content { case .none: return nil - case let .message(_, _, _, _, secret): + case let .message(_, _, _, _, _, secret): return secret } } public init(_ message: Message) { if message.id.namespace != Namespaces.Message.Local, let peer = message.peers[message.id.peerId], let inputPeer = PeerReference(peer) { - self.content = .message(peer: inputPeer, id: message.id, timestamp: message.timestamp, incoming: message.flags.contains(.Incoming), secret: message.containsSecretMedia) + let author: PeerReference? + if let peer = message.author { + author = PeerReference(peer) + } else { + author = nil + } + self.content = .message(peer: inputPeer, author: author, id: message.id, timestamp: message.timestamp, incoming: message.flags.contains(.Incoming), secret: message.containsSecretMedia) } else { self.content = .none } } - public init(peer: Peer, id: MessageId, timestamp: Int32, incoming: Bool, secret: Bool) { + public init(peer: Peer, author: Peer?, id: MessageId, timestamp: Int32, incoming: Bool, secret: Bool) { if let inputPeer = PeerReference(peer) { - self.content = .message(peer: inputPeer, id: id, timestamp: timestamp, incoming: incoming, secret: secret) + let a: PeerReference? + if let peer = author { + a = PeerReference(peer) + } else { + a = nil + } + self.content = .message(peer: inputPeer, author: a, id: id, timestamp: timestamp, incoming: incoming, secret: secret) } else { self.content = .none } @@ -75,14 +95,14 @@ public struct MessageReference: PostboxCoding, Hashable, Equatable { public enum MessageReferenceContent: PostboxCoding, Hashable, Equatable { case none - case message(peer: PeerReference, id: MessageId, timestamp: Int32, incoming: Bool, secret: Bool) + case message(peer: PeerReference, author: PeerReference?, id: MessageId, timestamp: Int32, incoming: Bool, secret: Bool) public init(decoder: PostboxDecoder) { switch decoder.decodeInt32ForKey("_r", orElse: 0) { case 0: self = .none case 1: - self = .message(peer: decoder.decodeObjectForKey("p", decoder: { PeerReference(decoder: $0) }) as! PeerReference, id: MessageId(peerId: PeerId(decoder.decodeInt64ForKey("i.p", orElse: 0)), namespace: decoder.decodeInt32ForKey("i.n", orElse: 0), id: decoder.decodeInt32ForKey("i.i", orElse: 0)), timestamp: 0, incoming: false, secret: false) + self = .message(peer: decoder.decodeObjectForKey("p", decoder: { PeerReference(decoder: $0) }) as! PeerReference, author: decoder.decodeObjectForKey("author") as? PeerReference, id: MessageId(peerId: PeerId(decoder.decodeInt64ForKey("i.p", orElse: 0)), namespace: decoder.decodeInt32ForKey("i.n", orElse: 0), id: decoder.decodeInt32ForKey("i.i", orElse: 0)), timestamp: 0, incoming: false, secret: false) default: assertionFailure() self = .none @@ -93,9 +113,14 @@ public enum MessageReferenceContent: PostboxCoding, Hashable, Equatable { switch self { case .none: encoder.encodeInt32(0, forKey: "_r") - case let .message(peer, id, _, _, _): + case let .message(peer, author, id, _, _, _): encoder.encodeInt32(1, forKey: "_r") encoder.encodeObject(peer, forKey: "p") + if let author = author { + encoder.encodeObject(author, forKey: "author") + } else { + encoder.encodeNil(forKey: "author") + } encoder.encodeInt64(id.peerId.toInt64(), forKey: "i.p") encoder.encodeInt32(id.namespace, forKey: "i.n") encoder.encodeInt32(id.id, forKey: "i.i") diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Messages/SearchMessages.swift b/submodules/TelegramCore/Sources/TelegramEngine/Messages/SearchMessages.swift index c7025fc57e..95ab2e2c88 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Messages/SearchMessages.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Messages/SearchMessages.swift @@ -531,7 +531,7 @@ func _internal_downloadMessage(postbox: Postbox, network: Network, messageId: Me } func fetchRemoteMessage(postbox: Postbox, source: FetchMessageHistoryHoleSource, message: MessageReference) -> Signal { - guard case let .message(peer, id, _, _, _) = message.content else { + guard case let .message(peer, _, id, _, _, _) = message.content else { return .single(nil) } let signal: Signal