mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix theme & wallpaper crashes
This commit is contained in:
parent
98c6402b34
commit
d4b1ee8efd
@ -519,23 +519,35 @@ func managedThemesUpdates(accountManager: AccountManager<TelegramAccountManagerT
|
||||
}.start()
|
||||
let _ = postbox.transaction { transaction in
|
||||
let entries = transaction.getOrderedListItems(collectionId: Namespaces.OrderedItemList.CloudThemes)
|
||||
let items = entries.map { entry -> TelegramTheme in
|
||||
let theme = entry.contents.get(TelegramThemeNativeCodable.self)!.value
|
||||
if theme.id == updatedTheme.id {
|
||||
return updatedTheme
|
||||
|
||||
var success = true
|
||||
var mappedItems: [TelegramTheme] = []
|
||||
for entry in entries {
|
||||
if let theme = entry.contents.get(TelegramThemeNativeCodable.self)?.value {
|
||||
if theme.id == updatedTheme.id {
|
||||
mappedItems.append(updatedTheme)
|
||||
} else {
|
||||
mappedItems.append(theme)
|
||||
}
|
||||
} else {
|
||||
return theme
|
||||
success = false
|
||||
break
|
||||
}
|
||||
}
|
||||
var updatedEntries: [OrderedItemListEntry] = []
|
||||
for item in items {
|
||||
var intValue = Int32(updatedEntries.count)
|
||||
let id = MemoryBuffer(data: Data(bytes: &intValue, count: 4))
|
||||
if let entry = CodableEntry(TelegramThemeNativeCodable(item)) {
|
||||
updatedEntries.append(OrderedItemListEntry(id: id, contents: entry))
|
||||
if success {
|
||||
var updatedEntries: [OrderedItemListEntry] = []
|
||||
for item in mappedItems {
|
||||
var intValue = Int32(updatedEntries.count)
|
||||
let id = MemoryBuffer(data: Data(bytes: &intValue, count: 4))
|
||||
if let entry = CodableEntry(TelegramThemeNativeCodable(item)) {
|
||||
updatedEntries.append(OrderedItemListEntry(id: id, contents: entry))
|
||||
}
|
||||
}
|
||||
transaction.replaceOrderedItemListItems(collectionId: Namespaces.OrderedItemList.CloudThemes, items: updatedEntries)
|
||||
} else {
|
||||
let _ = (telegramThemes(postbox: postbox, network: network, accountManager: accountManager, forceUpdate: true)
|
||||
|> take(1)).start()
|
||||
}
|
||||
transaction.replaceOrderedItemListItems(collectionId: Namespaces.OrderedItemList.CloudThemes, items: updatedEntries)
|
||||
}.start()
|
||||
}
|
||||
subscriber.putCompletion()
|
||||
|
@ -6,7 +6,7 @@ import TelegramApi
|
||||
|
||||
public func telegramWallpapers(postbox: Postbox, network: Network, forceUpdate: Bool = false) -> Signal<[TelegramWallpaper], NoError> {
|
||||
let fetch: ([TelegramWallpaper]?, Int64?) -> Signal<[TelegramWallpaper], NoError> = { current, hash in
|
||||
network.request(Api.functions.account.getWallPapers(hash: 0))
|
||||
network.request(Api.functions.account.getWallPapers(hash: hash))
|
||||
|> retryRequest
|
||||
|> mapToSignal { result -> Signal<([TelegramWallpaper], Int64), NoError> in
|
||||
switch result {
|
||||
@ -65,7 +65,21 @@ public func telegramWallpapers(postbox: Postbox, network: Network, forceUpdate:
|
||||
if items.count == 0 {
|
||||
return ([.builtin(WallpaperSettings())], 0)
|
||||
} else {
|
||||
return (items.map { $0.contents.get(TelegramWallpaperNativeCodable.self)!.value }, configuration?.hash)
|
||||
var success = true
|
||||
var mappedItems: [TelegramWallpaper] = []
|
||||
for item in items {
|
||||
if let value = item.contents.get(TelegramWallpaperNativeCodable.self)?.value {
|
||||
mappedItems.append(value)
|
||||
} else {
|
||||
success = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if success {
|
||||
return (mappedItems, configuration?.hash)
|
||||
} else {
|
||||
return ([.builtin(WallpaperSettings())], nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|> mapToSignal { current, hash -> Signal<[TelegramWallpaper], NoError> in
|
||||
|
Loading…
x
Reference in New Issue
Block a user