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