mirror of
https://github.com/divkit/divkit.git
synced 2026-06-06 20:07:59 +00:00
46 lines
1.2 KiB
Swift
46 lines
1.2 KiB
Swift
import DivKit
|
|
import Foundation
|
|
import VGSL
|
|
|
|
public final class SVGImageHolderFactory: DivImageHolderFactory {
|
|
private let requester: URLResourceRequesting
|
|
private let imageProcessingQueue: OperationQueueType
|
|
private let svgDecoder = SVGDecoder()
|
|
|
|
public init(
|
|
requester: URLResourceRequesting,
|
|
imageProcessingQueue: OperationQueueType? = nil
|
|
) {
|
|
self.requester = requester
|
|
self.imageProcessingQueue = imageProcessingQueue ?? OperationQueue(
|
|
name: "tech.divkit.svg-image-processing",
|
|
qos: .userInitiated
|
|
)
|
|
}
|
|
|
|
public convenience init(
|
|
requestPerformer: URLRequestPerforming,
|
|
imageProcessingQueue: OperationQueueType? = nil
|
|
) {
|
|
self.init(
|
|
requester: NetworkURLResourceRequester(performer: requestPerformer),
|
|
imageProcessingQueue: imageProcessingQueue
|
|
)
|
|
}
|
|
|
|
public func make(_ url: URL?, _ placeholder: ImagePlaceholder?) -> ImageHolder {
|
|
guard let url else {
|
|
return placeholder?.toImageHolder() ?? NilImageHolder()
|
|
}
|
|
return RemoteImageHolder(
|
|
url: url,
|
|
placeholder: placeholder,
|
|
requester: requester,
|
|
imageProcessingQueue: imageProcessingQueue,
|
|
imageDecoder: { [weak self] in
|
|
self?.svgDecoder.decode(data: $0)
|
|
}
|
|
)
|
|
}
|
|
}
|