perf: cache amount of images in comic #25

Merged
vegardbm merged 1 commits from perf into master 2026-07-25 23:51:04 +02:00
3 changed files with 16 additions and 15 deletions
+7 -12
View File
@@ -433,6 +433,8 @@ final class ViewController: UIViewController, UIGestureRecognizerDelegate {
}
var matchingPattern: Pattern?
var imageCount: UInt32 = 0
do {
for testPattern in patterns {
let filename = filenames[0].1
@@ -486,6 +488,7 @@ final class ViewController: UIViewController, UIGestureRecognizerDelegate {
}
}
if let match = pattern.pattern.firstMatch(in: filename, range: range) {
imageCount += 1
let chapterStr = (filename as NSString).substring(with: match.range(at: pattern.chapterPosition))
let chapterParts = chapterStr.split(separator: "x", maxSplits: 1)
if chapterParts.count < 1 {
@@ -687,7 +690,8 @@ final class ViewController: UIViewController, UIGestureRecognizerDelegate {
endReleaseDate: Date(year: 2000, month: 1, day: 1),
tagsVectorOffset: tags,
descriptionOffset: description,
volumesVectorOffset: volumeOffsets
volumesVectorOffset: volumeOffsets,
imageCount: imageCount
)
builder.finish(offset: metadata)
@@ -1311,7 +1315,7 @@ final class ViewController: UIViewController, UIGestureRecognizerDelegate {
}
}
@objc private func handlePan(_ gesture: UIPanGestureRecognizer) {
@objc private func handlePan(_ gesture: UIPanGestureRecognizer) {
switch gesture.state {
case .began:
initialBrightness = UIScreen.main.brightness
@@ -1566,16 +1570,7 @@ extension ViewController: UICollectionViewDataSource, UICollectionViewDelegateFl
if collectionView == comicCollectionView {
return comics.count
} else if collectionView == scrollingCollectionView {
if metadata == nil {
return 0
}
var sum = 0
for volume in metadata.volumes {
for chapter in volume.chapters {
sum += chapter.images.count
}
}
return sum
return metadata != nil ? Int(metadata.imageCount) : 0
}
return 0
}
+1
View File
@@ -61,6 +61,7 @@ table Metadata {
tags:[Tag];
description:string;
volumes:[VolumeMetadata];
image_count:uint;
}
root_type Metadata;
+8 -3
View File
@@ -449,6 +449,7 @@ public struct Metadata: FlatBufferTable, FlatbuffersVectorInitializable, Verifia
static let tags: VOffset = 24
static let description: VOffset = 26
static let volumes: VOffset = 28
static let imageCount: VOffset = 30
}
public var title: String! { let o = _accessor.offset(VT.title); return _accessor.string(at: o) }
@@ -470,7 +471,8 @@ public struct Metadata: FlatBufferTable, FlatbuffersVectorInitializable, Verifia
public var description: String? { let o = _accessor.offset(VT.description); return o == 0 ? nil : _accessor.string(at: o) }
public var descriptionSegmentArray: [UInt8]? { return _accessor.getVector(at: VT.description) }
public var volumes: FlatbufferVector<VolumeMetadata> { return _accessor.vector(at: VT.volumes, byteSize: 4) }
public static func startMetadata(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 13) }
public var imageCount: UInt32 { let o = _accessor.offset(VT.imageCount); return o == 0 ? 0 : _accessor.readBuffer(of: UInt32.self, at: o) }
public static func startMetadata(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 14) }
public static func add(title: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: title, at: VT.title) }
public static func add(format: Format, _ fbb: inout FlatBufferBuilder) { fbb.add(element: format.rawValue, def: 0, at: VT.format) }
public static func add(originalLanguage: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: originalLanguage, at: VT.originalLanguage) }
@@ -484,6 +486,7 @@ public struct Metadata: FlatBufferTable, FlatbuffersVectorInitializable, Verifia
public static func addVectorOf(tags: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: tags, at: VT.tags) }
public static func add(description: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: description, at: VT.description) }
public static func addVectorOf(volumes: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: volumes, at: VT.volumes) }
public static func add(imageCount: UInt32, _ fbb: inout FlatBufferBuilder) { fbb.add(element: imageCount, def: 0, at: VT.imageCount) }
public static func endMetadata(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); fbb.require(table: end, fields: [4]); return end }
public static func createMetadata(
_ fbb: inout FlatBufferBuilder,
@@ -499,7 +502,8 @@ public struct Metadata: FlatBufferTable, FlatbuffersVectorInitializable, Verifia
endReleaseDate: Date? = nil,
tagsVectorOffset tags: Offset = Offset(),
descriptionOffset description: Offset = Offset(),
volumesVectorOffset volumes: Offset = Offset()
volumesVectorOffset volumes: Offset = Offset(),
imageCount: UInt32 = 0
) -> Offset {
let __start = Metadata.startMetadata(&fbb)
Metadata.add(title: title, &fbb)
@@ -515,6 +519,7 @@ public struct Metadata: FlatBufferTable, FlatbuffersVectorInitializable, Verifia
Metadata.addVectorOf(tags: tags, &fbb)
Metadata.add(description: description, &fbb)
Metadata.addVectorOf(volumes: volumes, &fbb)
Metadata.add(imageCount: imageCount, &fbb)
return Metadata.endMetadata(&fbb, start: __start)
}
@@ -533,8 +538,8 @@ public struct Metadata: FlatBufferTable, FlatbuffersVectorInitializable, Verifia
try _v.visit(field: VT.tags, fieldName: "tags", required: false, type: ForwardOffset<Vector<ForwardOffset<Tag>, Tag>>.self)
try _v.visit(field: VT.description, fieldName: "description", required: false, type: ForwardOffset<String>.self)
try _v.visit(field: VT.volumes, fieldName: "volumes", required: false, type: ForwardOffset<Vector<ForwardOffset<VolumeMetadata>, VolumeMetadata>>.self)
try _v.visit(field: VT.imageCount, fieldName: "imageCount", required: false, type: UInt32.self)
_v.finish()
}
}
// swiftlint:enable all