mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
Update lottie-ios
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
//
|
||||
// AssetLibrary.swift
|
||||
// lottie-swift
|
||||
//
|
||||
// Created by Brandon Withrow on 1/9/19.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
final class AssetLibrary: Codable, AnyInitializable {
|
||||
|
||||
// MARK: Lifecycle
|
||||
|
||||
required init(from decoder: Decoder) throws {
|
||||
var container = try decoder.unkeyedContainer()
|
||||
var containerForKeys = container
|
||||
|
||||
var decodedAssets = [String : Asset]()
|
||||
|
||||
var imageAssets = [String : ImageAsset]()
|
||||
var precompAssets = [String : PrecompAsset]()
|
||||
|
||||
while !container.isAtEnd {
|
||||
let keyContainer = try containerForKeys.nestedContainer(keyedBy: PrecompAsset.CodingKeys.self)
|
||||
if keyContainer.contains(.layers) {
|
||||
let precompAsset = try container.decode(PrecompAsset.self)
|
||||
decodedAssets[precompAsset.id] = precompAsset
|
||||
precompAssets[precompAsset.id] = precompAsset
|
||||
} else {
|
||||
let imageAsset = try container.decode(ImageAsset.self)
|
||||
decodedAssets[imageAsset.id] = imageAsset
|
||||
imageAssets[imageAsset.id] = imageAsset
|
||||
}
|
||||
}
|
||||
assets = decodedAssets
|
||||
self.precompAssets = precompAssets
|
||||
self.imageAssets = imageAssets
|
||||
}
|
||||
|
||||
init(value: Any) throws {
|
||||
guard let dictionaries = value as? [[String: Any]] else {
|
||||
throw InitializableError.invalidInput
|
||||
}
|
||||
var decodedAssets = [String : Asset]()
|
||||
var imageAssets = [String : ImageAsset]()
|
||||
var precompAssets = [String : PrecompAsset]()
|
||||
try dictionaries.forEach { dictionary in
|
||||
if dictionary[PrecompAsset.CodingKeys.layers.rawValue] != nil {
|
||||
let asset = try PrecompAsset(dictionary: dictionary)
|
||||
decodedAssets[asset.id] = asset
|
||||
precompAssets[asset.id] = asset
|
||||
} else {
|
||||
let asset = try ImageAsset(dictionary: dictionary)
|
||||
decodedAssets[asset.id] = asset
|
||||
imageAssets[asset.id] = asset
|
||||
}
|
||||
}
|
||||
assets = decodedAssets
|
||||
self.precompAssets = precompAssets
|
||||
self.imageAssets = imageAssets
|
||||
}
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
/// The Assets
|
||||
let assets: [String: Asset]
|
||||
|
||||
let imageAssets: [String: ImageAsset]
|
||||
let precompAssets: [String: PrecompAsset]
|
||||
|
||||
func encode(to encoder: Encoder) throws {
|
||||
var container = encoder.unkeyedContainer()
|
||||
try container.encode(contentsOf: Array(assets.values))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user