mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
api update
This commit is contained in:
parent
8e03efc9b0
commit
d5ce6e2129
@ -519,6 +519,8 @@ func mediaAreaFromApiMediaArea(_ mediaArea: Api.MediaArea) -> MediaArea? {
|
|||||||
} else {
|
} else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
case let .mediaAreaUrl(coordinates, url):
|
||||||
|
return .url(coordinates: coodinatesFromApiMediaAreaCoordinates(coordinates), url: url)
|
||||||
case let .mediaAreaChannelPost(coordinates, channelId, messageId):
|
case let .mediaAreaChannelPost(coordinates, channelId, messageId):
|
||||||
return .channelMessage(coordinates: coodinatesFromApiMediaAreaCoordinates(coordinates), messageId: EngineMessage.Id(peerId: PeerId(namespace: Namespaces.Peer.CloudChannel, id: PeerId.Id._internalFromInt64Value(channelId)), namespace: Namespaces.Message.Cloud, id: messageId))
|
return .channelMessage(coordinates: coodinatesFromApiMediaAreaCoordinates(coordinates), messageId: EngineMessage.Id(peerId: PeerId(namespace: Namespaces.Peer.CloudChannel, id: PeerId.Id._internalFromInt64Value(channelId)), namespace: Namespaces.Message.Cloud, id: messageId))
|
||||||
}
|
}
|
||||||
@ -551,6 +553,8 @@ func apiMediaAreasFromMediaAreas(_ mediaAreas: [MediaArea], transaction: Transac
|
|||||||
if let peer = transaction.getPeer(messageId.peerId), let inputChannel = apiInputChannel(peer) {
|
if let peer = transaction.getPeer(messageId.peerId), let inputChannel = apiInputChannel(peer) {
|
||||||
apiMediaAreas.append(.inputMediaAreaChannelPost(coordinates: inputCoordinates, channel: inputChannel, msgId: messageId.id))
|
apiMediaAreas.append(.inputMediaAreaChannelPost(coordinates: inputCoordinates, channel: inputChannel, msgId: messageId.id))
|
||||||
}
|
}
|
||||||
|
case let .url(_, url):
|
||||||
|
apiMediaAreas.append(.mediaAreaUrl(coordinates: inputCoordinates, url: url))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return apiMediaAreas
|
return apiMediaAreas
|
||||||
|
@ -211,7 +211,7 @@ private func synchronizeChatInputState(transaction: Transaction, postbox: Postbo
|
|||||||
replyTo = .inputReplyToMessage(flags: innerFlags, replyToMsgId: topMsgId, topMsgId: topMsgId, replyToPeerId: nil, quoteText: nil, quoteEntities: nil, quoteOffset: nil)
|
replyTo = .inputReplyToMessage(flags: innerFlags, replyToMsgId: topMsgId, topMsgId: topMsgId, replyToPeerId: nil, quoteText: nil, quoteEntities: nil, quoteOffset: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
return network.request(Api.functions.messages.saveDraft(flags: flags, replyTo: replyTo, peer: inputPeer, message: inputState?.text ?? "", entities: apiEntitiesFromMessageTextEntities(inputState?.entities ?? [], associatedPeers: SimpleDictionary()), media: nil))
|
return network.request(Api.functions.messages.saveDraft(flags: flags, replyTo: replyTo, peer: inputPeer, message: inputState?.text ?? "", entities: apiEntitiesFromMessageTextEntities(inputState?.entities ?? [], associatedPeers: SimpleDictionary()), media: nil, effect: nil))
|
||||||
|> delay(2.0, queue: Queue.concurrentDefaultQueue())
|
|> delay(2.0, queue: Queue.concurrentDefaultQueue())
|
||||||
|> `catch` { _ -> Signal<Api.Bool, NoError> in
|
|> `catch` { _ -> Signal<Api.Bool, NoError> in
|
||||||
return .single(.boolFalse)
|
return .single(.boolFalse)
|
||||||
|
@ -50,7 +50,7 @@ func _internal_clearCloudDraftsInteractively(postbox: Postbox, network: Network,
|
|||||||
innerFlags |= 1 << 0
|
innerFlags |= 1 << 0
|
||||||
replyTo = .inputReplyToMessage(flags: innerFlags, replyToMsgId: 0, topMsgId: topMsgId, replyToPeerId: nil, quoteText: nil, quoteEntities: nil, quoteOffset: nil)
|
replyTo = .inputReplyToMessage(flags: innerFlags, replyToMsgId: 0, topMsgId: topMsgId, replyToPeerId: nil, quoteText: nil, quoteEntities: nil, quoteOffset: nil)
|
||||||
}
|
}
|
||||||
signals.append(network.request(Api.functions.messages.saveDraft(flags: flags, replyTo: replyTo, peer: inputPeer, message: "", entities: nil, media: nil))
|
signals.append(network.request(Api.functions.messages.saveDraft(flags: flags, replyTo: replyTo, peer: inputPeer, message: "", entities: nil, media: nil, effect: nil))
|
||||||
|> `catch` { _ -> Signal<Api.Bool, NoError> in
|
|> `catch` { _ -> Signal<Api.Bool, NoError> in
|
||||||
return .single(.boolFalse)
|
return .single(.boolFalse)
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ public enum MediaArea: Codable, Equatable {
|
|||||||
case venue(coordinates: Coordinates, venue: Venue)
|
case venue(coordinates: Coordinates, venue: Venue)
|
||||||
case reaction(coordinates: Coordinates, reaction: MessageReaction.Reaction, flags: ReactionFlags)
|
case reaction(coordinates: Coordinates, reaction: MessageReaction.Reaction, flags: ReactionFlags)
|
||||||
case channelMessage(coordinates: Coordinates, messageId: EngineMessage.Id)
|
case channelMessage(coordinates: Coordinates, messageId: EngineMessage.Id)
|
||||||
|
case url(coordinates: Coordinates, url: String)
|
||||||
public struct ReactionFlags: OptionSet {
|
public struct ReactionFlags: OptionSet {
|
||||||
public var rawValue: Int32
|
public var rawValue: Int32
|
||||||
|
|
||||||
@ -146,6 +146,7 @@ public enum MediaArea: Codable, Equatable {
|
|||||||
case venue
|
case venue
|
||||||
case reaction
|
case reaction
|
||||||
case channelMessage
|
case channelMessage
|
||||||
|
case url
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum DecodingError: Error {
|
public enum DecodingError: Error {
|
||||||
@ -172,6 +173,10 @@ public enum MediaArea: Codable, Equatable {
|
|||||||
let coordinates = try container.decode(MediaArea.Coordinates.self, forKey: .coordinates)
|
let coordinates = try container.decode(MediaArea.Coordinates.self, forKey: .coordinates)
|
||||||
let messageId = try container.decode(MessageId.self, forKey: .value)
|
let messageId = try container.decode(MessageId.self, forKey: .value)
|
||||||
self = .channelMessage(coordinates: coordinates, messageId: messageId)
|
self = .channelMessage(coordinates: coordinates, messageId: messageId)
|
||||||
|
case .url:
|
||||||
|
let coordinates = try container.decode(MediaArea.Coordinates.self, forKey: .coordinates)
|
||||||
|
let url = try container.decode(String.self, forKey: .value)
|
||||||
|
self = .url(coordinates: coordinates, url: url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,6 +197,10 @@ public enum MediaArea: Codable, Equatable {
|
|||||||
try container.encode(MediaAreaType.channelMessage.rawValue, forKey: .type)
|
try container.encode(MediaAreaType.channelMessage.rawValue, forKey: .type)
|
||||||
try container.encode(coordinates, forKey: .coordinates)
|
try container.encode(coordinates, forKey: .coordinates)
|
||||||
try container.encode(messageId, forKey: .value)
|
try container.encode(messageId, forKey: .value)
|
||||||
|
case let .url(coordinates, url):
|
||||||
|
try container.encode(MediaAreaType.url.rawValue, forKey: .type)
|
||||||
|
try container.encode(coordinates, forKey: .coordinates)
|
||||||
|
try container.encode(url, forKey: .value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -205,6 +214,8 @@ public extension MediaArea {
|
|||||||
return coordinates
|
return coordinates
|
||||||
case let .channelMessage(coordinates, _):
|
case let .channelMessage(coordinates, _):
|
||||||
return coordinates
|
return coordinates
|
||||||
|
case let .url(coordinates, _):
|
||||||
|
return coordinates
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1260,10 +1260,16 @@ public final class PeerStoryListContext: StoryListContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final class SearchStoryListContext: StoryListContext {
|
public final class SearchStoryListContext: StoryListContext {
|
||||||
|
|
||||||
|
public enum Source {
|
||||||
|
case hashtag(String)
|
||||||
|
case venue(provider: String, id: String)
|
||||||
|
}
|
||||||
|
|
||||||
private final class Impl {
|
private final class Impl {
|
||||||
private let queue: Queue
|
private let queue: Queue
|
||||||
private let account: Account
|
private let account: Account
|
||||||
private let query: String
|
private let source: Source
|
||||||
|
|
||||||
private let statePromise = Promise<State>()
|
private let statePromise = Promise<State>()
|
||||||
private var stateValue: State {
|
private var stateValue: State {
|
||||||
@ -1282,10 +1288,10 @@ public final class SearchStoryListContext: StoryListContext {
|
|||||||
|
|
||||||
private var completionCallbacksByToken: [AnyHashable: [() -> Void]] = [:]
|
private var completionCallbacksByToken: [AnyHashable: [() -> Void]] = [:]
|
||||||
|
|
||||||
init(queue: Queue, account: Account, query: String) {
|
init(queue: Queue, account: Account, source: Source) {
|
||||||
self.queue = queue
|
self.queue = queue
|
||||||
self.account = account
|
self.account = account
|
||||||
self.query = query
|
self.source = source
|
||||||
|
|
||||||
self.stateValue = State(peerReference: nil, items: [], pinnedIds: Set(), totalCount: 0, loadMoreToken: AnyHashable(""), isCached: false, hasCache: false, allEntityFiles: [:])
|
self.stateValue = State(peerReference: nil, items: [], pinnedIds: Set(), totalCount: 0, loadMoreToken: AnyHashable(""), isCached: false, hasCache: false, allEntityFiles: [:])
|
||||||
self.statePromise.set(.single(self.stateValue))
|
self.statePromise.set(.single(self.stateValue))
|
||||||
@ -1320,14 +1326,26 @@ public final class SearchStoryListContext: StoryListContext {
|
|||||||
let account = self.account
|
let account = self.account
|
||||||
let accountPeerId = account.peerId
|
let accountPeerId = account.peerId
|
||||||
|
|
||||||
let searchHashtag: String
|
var searchHashtag: String? = nil
|
||||||
if self.query.hasPrefix("#") {
|
var venueProvider: String? = nil
|
||||||
searchHashtag = String(self.query[self.query.index(after: self.query.startIndex)...])
|
var venueId: String? = nil
|
||||||
|
|
||||||
|
var flags: Int32 = 0
|
||||||
|
switch source {
|
||||||
|
case let .hashtag(query):
|
||||||
|
if query.hasPrefix("#") {
|
||||||
|
searchHashtag = String(query[query.index(after: query.startIndex)...])
|
||||||
} else {
|
} else {
|
||||||
searchHashtag = self.query
|
searchHashtag = query
|
||||||
|
}
|
||||||
|
flags |= (1 << 0)
|
||||||
|
case .venue(let provider, let id):
|
||||||
|
venueProvider = provider
|
||||||
|
venueId = id
|
||||||
|
flags |= (1 << 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
self.requestDisposable = (account.network.request(Api.functions.stories.searchPosts(hashtag: searchHashtag, offset: "", limit: Int32(limit)))
|
self.requestDisposable = (account.network.request(Api.functions.stories.searchPosts(flags: flags, hashtag: searchHashtag, venueProvider: venueProvider, venueId: venueId, offset: "", limit: Int32(limit)))
|
||||||
|> map { result -> Api.stories.FoundStories? in
|
|> map { result -> Api.stories.FoundStories? in
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
@ -1455,11 +1473,11 @@ public final class SearchStoryListContext: StoryListContext {
|
|||||||
private let queue: Queue
|
private let queue: Queue
|
||||||
private let impl: QueueLocalObject<Impl>
|
private let impl: QueueLocalObject<Impl>
|
||||||
|
|
||||||
public init(account: Account, query: String) {
|
public init(account: Account, source: Source) {
|
||||||
let queue = Queue.mainQueue()
|
let queue = Queue.mainQueue()
|
||||||
self.queue = queue
|
self.queue = queue
|
||||||
self.impl = QueueLocalObject(queue: queue, generate: {
|
self.impl = QueueLocalObject(queue: queue, generate: {
|
||||||
return Impl(queue: queue, account: account, query: query)
|
return Impl(queue: queue, account: account, source: source)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user