From 961e411aeeb8d9d5c93a069b5ffdc743cf2ad73e Mon Sep 17 00:00:00 2001 From: Vegard Bieker Matthey Date: Sat, 25 Jul 2026 23:43:47 +0200 Subject: [PATCH] cache amount of images in comic --- ImageViewer/ViewController.swift | 19 +++++++------------ ImageViewer/metadata.fbs | 1 + ImageViewer/metadata_generated.swift | 11 ++++++++--- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/ImageViewer/ViewController.swift b/ImageViewer/ViewController.swift index c2e22de..2c51e8c 100644 --- a/ImageViewer/ViewController.swift +++ b/ImageViewer/ViewController.swift @@ -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 } diff --git a/ImageViewer/metadata.fbs b/ImageViewer/metadata.fbs index a15e661..15e3aa4 100644 --- a/ImageViewer/metadata.fbs +++ b/ImageViewer/metadata.fbs @@ -61,6 +61,7 @@ table Metadata { tags:[Tag]; description:string; volumes:[VolumeMetadata]; + image_count:uint; } root_type Metadata; diff --git a/ImageViewer/metadata_generated.swift b/ImageViewer/metadata_generated.swift index d533d91..74b18c3 100644 --- a/ImageViewer/metadata_generated.swift +++ b/ImageViewer/metadata_generated.swift @@ -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 { 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, Tag>>.self) try _v.visit(field: VT.description, fieldName: "description", required: false, type: ForwardOffset.self) try _v.visit(field: VT.volumes, fieldName: "volumes", required: false, type: ForwardOffset, VolumeMetadata>>.self) + try _v.visit(field: VT.imageCount, fieldName: "imageCount", required: false, type: UInt32.self) _v.finish() } } -// swiftlint:enable all -- 2.54.0