From fe57f8f338cf9548de2a2c1b97f090fb4c6edcee Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 27 May 2024 16:22:04 +0400 Subject: [PATCH] Various fixes --- .../TelegramEngine/Payments/Stars.swift | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Payments/Stars.swift b/submodules/TelegramCore/Sources/TelegramEngine/Payments/Stars.swift index 3104f479c3..cc8a2cd84a 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Payments/Stars.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Payments/Stars.swift @@ -72,12 +72,18 @@ struct InternalStarsStatus { let nextOffset: String? } -private func _internal_requestStarsState(account: Account, peerId: EnginePeer.Id, subject: StarsTransactionsContext.Subject, offset: String?) -> Signal { +private enum RequestStarsStateError { + case generic +} + +private func _internal_requestStarsState(account: Account, peerId: EnginePeer.Id, subject: StarsTransactionsContext.Subject, offset: String?) -> Signal { return account.postbox.transaction { transaction -> Peer? in return transaction.getPeer(peerId) - } |> mapToSignal { peer -> Signal in + } + |> castError(RequestStarsStateError.self) + |> mapToSignal { peer -> Signal in guard let peer, let inputPeer = apiInputPeer(peer) else { - return .never() + return .fail(.generic) } let signal: Signal @@ -98,7 +104,8 @@ private func _internal_requestStarsState(account: Account, peerId: EnginePeer.Id return signal |> retryRequest - |> mapToSignal { result -> Signal in + |> castError(RequestStarsStateError.self) + |> mapToSignal { result -> Signal in return account.postbox.transaction { transaction -> InternalStarsStatus in switch result { case let .starsStatus(_, balance, history, nextOffset, chats, users): @@ -114,6 +121,7 @@ private func _internal_requestStarsState(account: Account, peerId: EnginePeer.Id return InternalStarsStatus(balance: balance, transactions: parsedTransactions, nextOffset: nextOffset) } } + |> castError(RequestStarsStateError.self) } } } @@ -171,10 +179,18 @@ private final class StarsContextImpl { self.disposable.set((_internal_requestStarsState(account: self.account, peerId: self.peerId, subject: .all, offset: nil) |> deliverOnMainQueue).start(next: { [weak self] status in - if let self { - self.updateState(StarsContext.State(flags: [], balance: status.balance, transactions: status.transactions, canLoadMore: status.nextOffset != nil, isLoading: false)) - self.nextOffset = status.nextOffset + guard let self else { + return } + self.updateState(StarsContext.State(flags: [], balance: status.balance, transactions: status.transactions, canLoadMore: status.nextOffset != nil, isLoading: false)) + self.nextOffset = status.nextOffset + }, error: { [weak self] _ in + guard let self else { + return + } + Queue.mainQueue().after(2.5, { + self.load(force: true) + }) })) }