Skip to content

Commit

Permalink
Release 27.4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
robot-divkit committed Aug 28, 2023
1 parent 8549d4f commit 537db95
Show file tree
Hide file tree
Showing 40 changed files with 489 additions and 124 deletions.
14 changes: 13 additions & 1 deletion .mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@
"DivKit/Extensions/DivInputExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivInputExtensions.swift",
"DivKit/Extensions/DivPagerExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivPagerExtensions.swift",
"DivKit/Extensions/DivPivotExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivPivotExtensions.swift",
"DivKit/Extensions/DivPointExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivPointExtensions.swift",
"DivKit/Extensions/DivSelectExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivSelectExtensions.swift",
"DivKit/Extensions/DivSeparatorExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivSeparatorExtensions.swift",
"DivKit/Extensions/DivSizeExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivSizeExtensions.swift",
Expand All @@ -333,6 +334,7 @@
"DivKit/Extensions/DivStateExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivStateExtensions.swift",
"DivKit/Extensions/DivTabsExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivTabsExtensions.swift",
"DivKit/Extensions/DivTextExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivTextExtensions.swift",
"DivKit/Extensions/DivTooltipExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivTooltipExtensions.swift",
"DivKit/Extensions/DivTransformExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivTransformExtensions.swift",
"DivKit/Extensions/DivVideoExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivVideoExtensions.swift",
"DivKit/Extensions/DivVisibilityActionExtensions.swift":"divkit/public-ios/DivKit/Extensions/DivVisibilityActionExtensions.swift",
Expand Down Expand Up @@ -914,6 +916,7 @@
"Specs/BasePublic/27.1.0/BasePublic.podspec":"divkit/public-ios/Specs/BasePublic/27.1.0/BasePublic.podspec",
"Specs/BasePublic/27.2.0/BasePublic.podspec":"divkit/public-ios/Specs/BasePublic/27.2.0/BasePublic.podspec",
"Specs/BasePublic/27.3.0/BasePublic.podspec":"divkit/public-ios/Specs/BasePublic/27.3.0/BasePublic.podspec",
"Specs/BasePublic/27.4.0/BasePublic.podspec":"divkit/public-ios/Specs/BasePublic/27.4.0/BasePublic.podspec",
"Specs/BaseTinyPublic/24.3.0/BaseTinyPublic.podspec":"divkit/public-ios/Specs/BaseTinyPublic/24.3.0/BaseTinyPublic.podspec",
"Specs/BaseTinyPublic/25.0.0/BaseTinyPublic.podspec":"divkit/public-ios/Specs/BaseTinyPublic/25.0.0/BaseTinyPublic.podspec",
"Specs/BaseTinyPublic/25.1.0/BaseTinyPublic.podspec":"divkit/public-ios/Specs/BaseTinyPublic/25.1.0/BaseTinyPublic.podspec",
Expand All @@ -930,6 +933,7 @@
"Specs/BaseTinyPublic/27.1.0/BaseTinyPublic.podspec":"divkit/public-ios/Specs/BaseTinyPublic/27.1.0/BaseTinyPublic.podspec",
"Specs/BaseTinyPublic/27.2.0/BaseTinyPublic.podspec":"divkit/public-ios/Specs/BaseTinyPublic/27.2.0/BaseTinyPublic.podspec",
"Specs/BaseTinyPublic/27.3.0/BaseTinyPublic.podspec":"divkit/public-ios/Specs/BaseTinyPublic/27.3.0/BaseTinyPublic.podspec",
"Specs/BaseTinyPublic/27.4.0/BaseTinyPublic.podspec":"divkit/public-ios/Specs/BaseTinyPublic/27.4.0/BaseTinyPublic.podspec",
"Specs/BaseUIPublic/24.3.0/BaseUIPublic.podspec":"divkit/public-ios/Specs/BaseUIPublic/24.3.0/BaseUIPublic.podspec",
"Specs/BaseUIPublic/25.0.0/BaseUIPublic.podspec":"divkit/public-ios/Specs/BaseUIPublic/25.0.0/BaseUIPublic.podspec",
"Specs/BaseUIPublic/25.1.0/BaseUIPublic.podspec":"divkit/public-ios/Specs/BaseUIPublic/25.1.0/BaseUIPublic.podspec",
Expand All @@ -946,6 +950,7 @@
"Specs/BaseUIPublic/27.1.0/BaseUIPublic.podspec":"divkit/public-ios/Specs/BaseUIPublic/27.1.0/BaseUIPublic.podspec",
"Specs/BaseUIPublic/27.2.0/BaseUIPublic.podspec":"divkit/public-ios/Specs/BaseUIPublic/27.2.0/BaseUIPublic.podspec",
"Specs/BaseUIPublic/27.3.0/BaseUIPublic.podspec":"divkit/public-ios/Specs/BaseUIPublic/27.3.0/BaseUIPublic.podspec",
"Specs/BaseUIPublic/27.4.0/BaseUIPublic.podspec":"divkit/public-ios/Specs/BaseUIPublic/27.4.0/BaseUIPublic.podspec",
"Specs/CommonCorePublic/24.3.0/CommonCorePublic.podspec":"divkit/public-ios/Specs/CommonCorePublic/24.3.0/CommonCorePublic.podspec",
"Specs/CommonCorePublic/25.0.0/CommonCorePublic.podspec":"divkit/public-ios/Specs/CommonCorePublic/25.0.0/CommonCorePublic.podspec",
"Specs/CommonCorePublic/25.1.0/CommonCorePublic.podspec":"divkit/public-ios/Specs/CommonCorePublic/25.1.0/CommonCorePublic.podspec",
Expand All @@ -962,6 +967,7 @@
"Specs/CommonCorePublic/27.1.0/CommonCorePublic.podspec":"divkit/public-ios/Specs/CommonCorePublic/27.1.0/CommonCorePublic.podspec",
"Specs/CommonCorePublic/27.2.0/CommonCorePublic.podspec":"divkit/public-ios/Specs/CommonCorePublic/27.2.0/CommonCorePublic.podspec",
"Specs/CommonCorePublic/27.3.0/CommonCorePublic.podspec":"divkit/public-ios/Specs/CommonCorePublic/27.3.0/CommonCorePublic.podspec",
"Specs/CommonCorePublic/27.4.0/CommonCorePublic.podspec":"divkit/public-ios/Specs/CommonCorePublic/27.4.0/CommonCorePublic.podspec",
"Specs/DivKit/24.3.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/24.3.0/DivKit.podspec",
"Specs/DivKit/25.0.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/25.0.0/DivKit.podspec",
"Specs/DivKit/25.1.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/25.1.0/DivKit.podspec",
Expand All @@ -978,6 +984,7 @@
"Specs/DivKit/27.1.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/27.1.0/DivKit.podspec",
"Specs/DivKit/27.2.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/27.2.0/DivKit.podspec",
"Specs/DivKit/27.3.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/27.3.0/DivKit.podspec",
"Specs/DivKit/27.4.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/27.4.0/DivKit.podspec",
"Specs/DivKitExtensions/24.3.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/24.3.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/25.0.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/25.0.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/25.1.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/25.1.0/DivKitExtensions.podspec",
Expand All @@ -994,6 +1001,7 @@
"Specs/DivKitExtensions/27.1.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/27.1.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/27.2.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/27.2.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/27.3.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/27.3.0/DivKitExtensions.podspec",
"Specs/DivKitExtensions/27.4.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/27.4.0/DivKitExtensions.podspec",
"Specs/LayoutKit/24.3.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/24.3.0/LayoutKit.podspec",
"Specs/LayoutKit/25.0.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/25.0.0/LayoutKit.podspec",
"Specs/LayoutKit/25.1.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/25.1.0/LayoutKit.podspec",
Expand All @@ -1010,6 +1018,7 @@
"Specs/LayoutKit/27.1.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/27.1.0/LayoutKit.podspec",
"Specs/LayoutKit/27.2.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/27.2.0/LayoutKit.podspec",
"Specs/LayoutKit/27.3.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/27.3.0/LayoutKit.podspec",
"Specs/LayoutKit/27.4.0/LayoutKit.podspec":"divkit/public-ios/Specs/LayoutKit/27.4.0/LayoutKit.podspec",
"Specs/LayoutKitInterface/24.3.0/LayoutKitInterface.podspec":"divkit/public-ios/Specs/LayoutKitInterface/24.3.0/LayoutKitInterface.podspec",
"Specs/LayoutKitInterface/25.0.0/LayoutKitInterface.podspec":"divkit/public-ios/Specs/LayoutKitInterface/25.0.0/LayoutKitInterface.podspec",
"Specs/LayoutKitInterface/25.1.0/LayoutKitInterface.podspec":"divkit/public-ios/Specs/LayoutKitInterface/25.1.0/LayoutKitInterface.podspec",
Expand All @@ -1026,6 +1035,7 @@
"Specs/LayoutKitInterface/27.1.0/LayoutKitInterface.podspec":"divkit/public-ios/Specs/LayoutKitInterface/27.1.0/LayoutKitInterface.podspec",
"Specs/LayoutKitInterface/27.2.0/LayoutKitInterface.podspec":"divkit/public-ios/Specs/LayoutKitInterface/27.2.0/LayoutKitInterface.podspec",
"Specs/LayoutKitInterface/27.3.0/LayoutKitInterface.podspec":"divkit/public-ios/Specs/LayoutKitInterface/27.3.0/LayoutKitInterface.podspec",
"Specs/LayoutKitInterface/27.4.0/LayoutKitInterface.podspec":"divkit/public-ios/Specs/LayoutKitInterface/27.4.0/LayoutKitInterface.podspec",
"Specs/NetworkingPublic/24.3.0/NetworkingPublic.podspec":"divkit/public-ios/Specs/NetworkingPublic/24.3.0/NetworkingPublic.podspec",
"Specs/NetworkingPublic/25.0.0/NetworkingPublic.podspec":"divkit/public-ios/Specs/NetworkingPublic/25.0.0/NetworkingPublic.podspec",
"Specs/NetworkingPublic/25.1.0/NetworkingPublic.podspec":"divkit/public-ios/Specs/NetworkingPublic/25.1.0/NetworkingPublic.podspec",
Expand All @@ -1042,6 +1052,7 @@
"Specs/NetworkingPublic/27.1.0/NetworkingPublic.podspec":"divkit/public-ios/Specs/NetworkingPublic/27.1.0/NetworkingPublic.podspec",
"Specs/NetworkingPublic/27.2.0/NetworkingPublic.podspec":"divkit/public-ios/Specs/NetworkingPublic/27.2.0/NetworkingPublic.podspec",
"Specs/NetworkingPublic/27.3.0/NetworkingPublic.podspec":"divkit/public-ios/Specs/NetworkingPublic/27.3.0/NetworkingPublic.podspec",
"Specs/NetworkingPublic/27.4.0/NetworkingPublic.podspec":"divkit/public-ios/Specs/NetworkingPublic/27.4.0/NetworkingPublic.podspec",
"Specs/Serialization/24.3.0/Serialization.podspec":"divkit/public-ios/Specs/Serialization/24.3.0/Serialization.podspec",
"Specs/Serialization/25.0.0/Serialization.podspec":"divkit/public-ios/Specs/Serialization/25.0.0/Serialization.podspec",
"Specs/Serialization/25.1.0/Serialization.podspec":"divkit/public-ios/Specs/Serialization/25.1.0/Serialization.podspec",
Expand All @@ -1057,5 +1068,6 @@
"Specs/Serialization/27.0.0/Serialization.podspec":"divkit/public-ios/Specs/Serialization/27.0.0/Serialization.podspec",
"Specs/Serialization/27.1.0/Serialization.podspec":"divkit/public-ios/Specs/Serialization/27.1.0/Serialization.podspec",
"Specs/Serialization/27.2.0/Serialization.podspec":"divkit/public-ios/Specs/Serialization/27.2.0/Serialization.podspec",
"Specs/Serialization/27.3.0/Serialization.podspec":"divkit/public-ios/Specs/Serialization/27.3.0/Serialization.podspec"
"Specs/Serialization/27.3.0/Serialization.podspec":"divkit/public-ios/Specs/Serialization/27.3.0/Serialization.podspec",
"Specs/Serialization/27.4.0/Serialization.podspec":"divkit/public-ios/Specs/Serialization/27.4.0/Serialization.podspec"
}
6 changes: 4 additions & 2 deletions Core/NetworkingPublic/ImageHolderFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ public struct ImageHolderFactory {
public init(
requester: URLResourceRequesting,
localImageProvider: LocalImageProviding? = nil,
imageProcessingQueue: OperationQueueType
imageProcessingQueue: OperationQueueType,
imageLoadingOptimizationEnabled: Bool = false
) {
_make = { url, placeholder in
guard let url = url else {
Expand All @@ -35,7 +36,8 @@ public struct ImageHolderFactory {
url: url,
placeholder: placeholder,
requester: requester,
imageProcessingQueue: imageProcessingQueue
imageProcessingQueue: imageProcessingQueue,
imageLoadingOptimizationEnabled: imageLoadingOptimizationEnabled
)
}
}
Expand Down
35 changes: 32 additions & 3 deletions Core/NetworkingPublic/RemoteImageHolder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ public final class RemoteImageHolder: ImageHolder {
url: URL,
placeholder: ImagePlaceholder? = nil,
requester: URLResourceRequesting,
imageProcessingQueue: OperationQueueType
imageProcessingQueue: OperationQueueType,
imageLoadingOptimizationEnabled: Bool = false
) {
weak var weakSelf: RemoteImageHolder?
let shouldCallCompletionWithNil = placeholder == nil
Expand All @@ -55,7 +56,12 @@ public final class RemoteImageHolder: ImageHolder {
case .gif:
image = Image.animatedImage(with: value.data as CFData)
case .jpeg, .png, .tiff, .unknown:
image = Image(data: value.data, scale: PlatformDescription.screenScale())
if imageLoadingOptimizationEnabled,
let decodedImage = makeDecodedImage(data: value.data) {
image = decodedImage
} else {
image = Image(data: value.data, scale: PlatformDescription.screenScale())
}
}
#else
image = Image(data: value.data, scale: PlatformDescription.screenScale())
Expand Down Expand Up @@ -121,6 +127,30 @@ public final class RemoteImageHolder: ImageHolder {
}
}

#if os(iOS)
import ImageIO

private func makeDecodedImage(data: Data) -> Image? {
let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary
guard let imageSource = CGImageSourceCreateWithData(data as CFData, imageSourceOptions) else {
return nil
}

let imageOptions = [kCGImageSourceShouldCacheImmediately: true] as CFDictionary
let index: Int
if #available(iOS 12.0, *) {
index = CGImageSourceGetPrimaryImageIndex(imageSource)
} else {
index = 0
}
guard let image = CGImageSourceCreateImageAtIndex(imageSource, index, imageOptions) else {
return nil
}

return Image(cgImage: image)
}
#endif

extension RemoteImageHolder: CustomDebugStringConvertible {
public var debugDescription: String {
"URL = \(dbgStr(url)), placeholder = \(dbgStr(placeholder?.debugDescription))"
Expand All @@ -132,4 +162,3 @@ extension RemoteImageHolder {
(self.placeholder === placeholder && url == remoteImageURL) ? self : nil
}
}

32 changes: 17 additions & 15 deletions DivKit/Debug/ErrorListView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ final class ErrorListView: UIView {
private let errorString: String

init(errors: [String]) {
errorString = errors.joined(separator: "\n")
let block = makeErrorBlock(errorsString: errorString, errorsCount: errors.count)
errorString = errors.joined(separator: "\n\n")
let block = makeErrorBlock(errors: errors)
self.errorView = block.makeBlockView()
let blockFrame = CGRect(origin: .zero, size: block.intrinsicSize)
super.init(frame: blockFrame)
Expand Down Expand Up @@ -46,14 +46,14 @@ extension ErrorListView: UIActionEventPerforming {
}
}

private func makeErrorBlock(errorsString: String, errorsCount: Int) -> Block {
private func makeErrorBlock(errors: [String]) -> Block {
try! ContainerBlock(
layoutDirection: .vertical,
widthTrait: .intrinsic,
heightTrait: .intrinsic,
children: [
.init(content: makeHeaderBlock(errorsCount: errorsCount)),
.init(content: makeErrorListBlock(errorString: errorsString)),
.init(content: makeHeaderBlock(errorsCount: errors.count)),
.init(content: makeErrorListBlock(errors: errors)),
]
).addingHorizontalGaps(15)
.addingVerticalGaps(top: 0, bottom: 15)
Expand Down Expand Up @@ -124,18 +124,20 @@ private func makeHeaderBlock(errorsCount: Int) -> Block {
)
}

private func makeErrorListBlock(errorString: String) -> Block {
let textBlock = TextBlock(
widthTrait: .intrinsic(constrained: true, minSize: 0, maxSize: 350),
heightTrait: .intrinsic,
text: errorString.with(typo: errorsTypo),
verticalAlignment: .leading,
minNumberOfHiddenLines: 0
)
private func makeErrorListBlock(errors: [String]) -> Block {
let errorBlocks = errors.map {
TextBlock(
widthTrait: .intrinsic(constrained: true, minSize: 0, maxSize: 350),
heightTrait: .intrinsic,
text: $0.with(typo: errorsTypo),
verticalAlignment: .leading,
minNumberOfHiddenLines: 0
)
}

return try! GalleryBlock(
gaps: [.zero, .zero],
children: [textBlock],
gaps: [0] + Array.init(repeating: 10, count: errorBlocks.count),
children: errorBlocks,
path: rootPath,
direction: .vertical,
crossAlignment: .leading,
Expand Down
6 changes: 5 additions & 1 deletion DivKit/DivBlockModelingContext.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import CoreGraphics

import BasePublic
import BaseUIPublic
import CommonCorePublic
import LayoutKit
import NetworkingPublic
import Serialization
Expand Down Expand Up @@ -38,6 +39,7 @@ public struct DivBlockModelingContext {
public let errorsStorage: DivErrorsStorage
internal let variableTracker: DivVariableTracker?
private let persistentValuesStorage: DivPersistentValuesStorage
public let tooltipViewFactory: DivTooltipViewFactory?

var overridenWidth: DivOverridenSize?
var overridenHeight: DivOverridenSize?
Expand Down Expand Up @@ -80,7 +82,8 @@ public struct DivBlockModelingContext {
errorsStorage: DivErrorsStorage = DivErrorsStorage(errors: []),
layoutDirection: UserInterfaceLayoutDirection = .leftToRight,
variableTracker: DivVariableTracker? = nil,
persistentValuesStorage: DivPersistentValuesStorage = DivPersistentValuesStorage()
persistentValuesStorage: DivPersistentValuesStorage = DivPersistentValuesStorage(),
tooltipViewFactory: DivTooltipViewFactory? = nil
) {
self.cardId = cardId
self.cardLogId = cardLogId
Expand All @@ -105,6 +108,7 @@ public struct DivBlockModelingContext {
self.layoutDirection = layoutDirection
self.variableTracker = variableTracker
self.persistentValuesStorage = persistentValuesStorage
self.tooltipViewFactory = tooltipViewFactory

var extensionsHandlersDictionary = [String: DivExtensionHandler]()
extensionHandlers.forEach {
Expand Down
7 changes: 4 additions & 3 deletions DivKit/DivBlockProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,14 @@ public final class DivBlockProvider {
debugParams: debugParams,
parentScrollView: parentScrollView
)
dataErrors.forEach { context.errorsStorage.add($0) }
do {
block = try measurements.renderTime.updateMeasure {
try divData.makeBlock(
context: context
)
}
let errors: [DivError] = dataErrors + context.errorsStorage.errors
let errors = context.errorsStorage.errors
debugParams.processMeasurements((cardId: cardId, measurements: measurements))
debugParams.processErrors((cardId: cardId, errors: errors))
} catch {
Expand Down Expand Up @@ -195,9 +196,9 @@ public final class DivBlockProvider {
) -> Block {
guard debugParams.isDebugInfoEnabled else { return noDataBlock }

var errors: [DivError] = dataErrors
var errors: [DivError] = []
errors.append(error as DivError)
errors.append(contentsOf: context?.errorsStorage.errors ?? [])
errors.append(contentsOf: context?.errorsStorage.errors ?? dataErrors)
DivKitLogger.error("\(message). Error: \(error).")
debugParams.processErrors((cardId: cardId, errors: errors))
return makeErrorsBlock(errors.map(errorMessage(_:)))
Expand Down
8 changes: 6 additions & 2 deletions DivKit/DivFlagsInfo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@
/// included in the framework.
/// You can access the default `DivFlagsInfo` instance using the static property `default`.
public struct DivFlagsInfo {
/// Enable experimental image loading optimization
public let imageLoadingOptimizationEnabled: Bool
/// Creates an instance of `DivFlagsInfo`.
public init() {}
public init(imageLoadingOptimizationEnabled: Bool) {
self.imageLoadingOptimizationEnabled = imageLoadingOptimizationEnabled
}

/// The default instance of `DivFlagsInfo`.
public static let `default` = DivFlagsInfo()
public static let `default` = DivFlagsInfo(imageLoadingOptimizationEnabled: false)
}
Loading

0 comments on commit 537db95

Please sign in to comment.