Theme decoding fixes

This commit is contained in:
Ilya Laktyushin 2021-08-19 14:10:16 +04:00
parent db748e3aec
commit 8fd6363e33
3 changed files with 19 additions and 5 deletions

View File

@ -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?()

View File

@ -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)

View File

@ -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
}