mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Theme decoding fixes
This commit is contained in:
parent
db748e3aec
commit
8fd6363e33
@ -268,7 +268,6 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
|
||||
let previewThemePromise = Promise<PresentationTheme>()
|
||||
let settingsPromise = Promise<TelegramThemeSettings?>(nil)
|
||||
let hasSettings: Bool
|
||||
let mayHaveSettings: Bool
|
||||
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
switch mode {
|
||||
case let .create(existingTheme, settings):
|
||||
@ -279,19 +278,16 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
|
||||
wallpaper = theme.chat.defaultWallpaper
|
||||
settingsPromise.set(.single(settings))
|
||||
hasSettings = settings != nil
|
||||
mayHaveSettings = settings != nil
|
||||
} else {
|
||||
theme = presentationData.theme
|
||||
wallpaper = presentationData.chatWallpaper
|
||||
settingsPromise.set(.single(nil))
|
||||
hasSettings = false
|
||||
mayHaveSettings = true
|
||||
}
|
||||
initialState = EditThemeControllerState(mode: mode, title: generateThemeName(accentColor: theme.rootController.navigationBar.buttonColor), slug: "", updatedTheme: nil, updating: false)
|
||||
previewThemePromise.set(.single(theme.withUpdated(name: "", defaultWallpaper: wallpaper)))
|
||||
case let .edit(info):
|
||||
hasSettings = info.theme.settings != nil
|
||||
mayHaveSettings = hasSettings
|
||||
settingsPromise.set(.single(info.theme.settings))
|
||||
if let file = info.theme.file, let path = context.sharedContext.accountManager.mediaBox.completedResourcePath(file.resource), let data = try? Data(contentsOf: URL(fileURLWithPath: path)), let theme = makePresentationTheme(data: data, resolvedWallpaper: info.resolvedWallpaper) {
|
||||
if case let .file(file) = theme.chat.defaultWallpaper, file.id == 0 {
|
||||
@ -344,7 +340,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
|
||||
state.updatedTheme = updatedTheme
|
||||
return state
|
||||
}
|
||||
if previousSettings != nil || mayHaveSettings {
|
||||
if previousSettings != nil {
|
||||
settingsPromise.set(.single(settings))
|
||||
}
|
||||
controllerDismissImpl?()
|
||||
|
@ -1690,6 +1690,7 @@ extension PresentationThemeChat: Codable {
|
||||
public func encode(to encoder: Encoder) throws {
|
||||
var values = encoder.container(keyedBy: CodingKeys.self)
|
||||
try values.encode(self.defaultWallpaper, forKey: .defaultWallpaper)
|
||||
try values.encode(self.animateMessageColors, forKey: .animateMessageColors)
|
||||
try values.encode(self.message, forKey: .message)
|
||||
try values.encode(self.serviceMessage, forKey: .serviceMessage)
|
||||
try values.encode(self.inputPanel, forKey: .inputPanel)
|
||||
|
@ -465,6 +465,23 @@ class PresentationThemeDecoding: Decoder {
|
||||
}
|
||||
|
||||
guard let topContainer = self.storage.topContainer as? [Any] else {
|
||||
if let topContainer = self.storage.topContainer as? [String : Any] {
|
||||
let sortedKeys = topContainer.keys.sorted(by: { lhs, rhs in
|
||||
if let lhsValue = Int(lhs), let rhsValue = Int(rhs), lhsValue < rhsValue {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
var array: [Any] = []
|
||||
for key in sortedKeys {
|
||||
if let value = topContainer[key] {
|
||||
array.append(value)
|
||||
}
|
||||
}
|
||||
return PresentationThemeUnkeyedDecodingContainer(referencing: self, wrapping: array)
|
||||
}
|
||||
|
||||
throw PresentationThemeDecodingError.typeMismatch
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user