mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
[WIP] Stickers editor
This commit is contained in:
@@ -299,6 +299,8 @@ private enum MediaReferenceRevalidationKey: Hashable {
|
||||
case webPage(webPage: WebpageReference)
|
||||
case stickerPack(stickerPack: StickerPackReference)
|
||||
case savedGifs
|
||||
case savedStickers
|
||||
case recentStickers
|
||||
case peer(peer: PeerReference)
|
||||
case wallpaper(wallpaper: WallpaperReference)
|
||||
case wallpapers
|
||||
@@ -544,6 +546,66 @@ final class MediaReferenceRevalidationContext {
|
||||
}
|
||||
}
|
||||
|
||||
func savedStickers(postbox: Postbox, network: Network, background: Bool) -> Signal<[TelegramMediaFile], RevalidateMediaReferenceError> {
|
||||
return self.genericItem(key: .savedStickers, background: background, request: { next, error in
|
||||
let loadSavedStickers: Signal<[TelegramMediaFile], NoError> = postbox.transaction { transaction -> [TelegramMediaFile] in
|
||||
return transaction.getOrderedListItems(collectionId: Namespaces.OrderedItemList.CloudSavedStickers).compactMap({ item -> TelegramMediaFile? in
|
||||
if let contents = item.contents.get(RecentMediaItem.self) {
|
||||
let file = contents.media
|
||||
return file
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
return (managedSavedStickers(postbox: postbox, network: network, forceFetch: true)
|
||||
|> mapToSignal { _ -> Signal<[TelegramMediaFile], NoError> in
|
||||
return .complete()
|
||||
}
|
||||
|> then(loadSavedStickers)
|
||||
|> castError(RevalidateMediaReferenceError.self)).start(next: { value in
|
||||
next(value)
|
||||
}, error: { _ in
|
||||
error(.generic)
|
||||
})
|
||||
}) |> mapToSignal { next -> Signal<[TelegramMediaFile], RevalidateMediaReferenceError> in
|
||||
if let next = next as? [TelegramMediaFile] {
|
||||
return .single(next)
|
||||
} else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func recentStickers(postbox: Postbox, network: Network, background: Bool) -> Signal<[TelegramMediaFile], RevalidateMediaReferenceError> {
|
||||
return self.genericItem(key: .recentStickers, background: background, request: { next, error in
|
||||
let loadRecentStickers: Signal<[TelegramMediaFile], NoError> = postbox.transaction { transaction -> [TelegramMediaFile] in
|
||||
return transaction.getOrderedListItems(collectionId: Namespaces.OrderedItemList.CloudRecentStickers).compactMap({ item -> TelegramMediaFile? in
|
||||
if let contents = item.contents.get(RecentMediaItem.self) {
|
||||
let file = contents.media
|
||||
return file
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
return (managedRecentStickers(postbox: postbox, network: network, forceFetch: true)
|
||||
|> mapToSignal { _ -> Signal<[TelegramMediaFile], NoError> in
|
||||
return .complete()
|
||||
}
|
||||
|> then(loadRecentStickers)
|
||||
|> castError(RevalidateMediaReferenceError.self)).start(next: { value in
|
||||
next(value)
|
||||
}, error: { _ in
|
||||
error(.generic)
|
||||
})
|
||||
}) |> mapToSignal { next -> Signal<[TelegramMediaFile], RevalidateMediaReferenceError> in
|
||||
if let next = next as? [TelegramMediaFile] {
|
||||
return .single(next)
|
||||
} else {
|
||||
return .fail(.generic)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func peer(accountPeerId: PeerId, postbox: Postbox, network: Network, background: Bool, peer: PeerReference) -> Signal<Peer, RevalidateMediaReferenceError> {
|
||||
return self.genericItem(key: .peer(peer: peer), background: background, request: { next, error in
|
||||
return (_internal_updatedRemotePeer(accountPeerId: accountPeerId, postbox: postbox, network: network, peer: peer)
|
||||
@@ -811,6 +873,30 @@ func revalidateMediaResourceReference(accountPeerId: PeerId, postbox: Postbox, n
|
||||
}
|
||||
return .fail(.generic)
|
||||
}
|
||||
case let .savedSticker(media):
|
||||
return revalidationContext.savedStickers(postbox: postbox, network: network, background: info.preferBackgroundReferenceRevalidation)
|
||||
|> mapToSignal { result -> Signal<RevalidatedMediaResource, RevalidateMediaReferenceError> in
|
||||
for file in result {
|
||||
if media.id != nil && file.id == media.id {
|
||||
if let updatedResource = findUpdatedMediaResource(media: file, previousMedia: media, resource: resource) {
|
||||
return .single(RevalidatedMediaResource(updatedResource: updatedResource, updatedReference: nil))
|
||||
}
|
||||
}
|
||||
}
|
||||
return .fail(.generic)
|
||||
}
|
||||
case let .recentSticker(media):
|
||||
return revalidationContext.recentStickers(postbox: postbox, network: network, background: info.preferBackgroundReferenceRevalidation)
|
||||
|> mapToSignal { result -> Signal<RevalidatedMediaResource, RevalidateMediaReferenceError> in
|
||||
for file in result {
|
||||
if media.id != nil && file.id == media.id {
|
||||
if let updatedResource = findUpdatedMediaResource(media: file, previousMedia: media, resource: resource) {
|
||||
return .single(RevalidatedMediaResource(updatedResource: updatedResource, updatedReference: nil))
|
||||
}
|
||||
}
|
||||
}
|
||||
return .fail(.generic)
|
||||
}
|
||||
case let .avatarList(peer, media):
|
||||
return revalidationContext.peerAvatars(accountPeerId: accountPeerId, postbox: postbox, network: network, background: info.preferBackgroundReferenceRevalidation, peer: peer)
|
||||
|> mapToSignal { result -> Signal<RevalidatedMediaResource, RevalidateMediaReferenceError> in
|
||||
|
||||
Reference in New Issue
Block a user