From 6df2175372ffa74f98d317fa3ebb8ea31e44dda4 Mon Sep 17 00:00:00 2001 From: Vegard Matthey Date: Tue, 5 Aug 2025 00:24:56 +0200 Subject: [PATCH] ensure info is present when starting to read --- ImageViewer/ViewController.swift | 47 ++++++++++++++------------------ 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/ImageViewer/ViewController.swift b/ImageViewer/ViewController.swift index 86401f5..1ed2752 100644 --- a/ImageViewer/ViewController.swift +++ b/ImageViewer/ViewController.swift @@ -404,6 +404,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { } catch { print("Encoding or writing failed:", error) } + self.updateInfo() } } @@ -731,8 +732,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { page: currentPage, path: currentPath), scaling: .scaleAspectFit - ) { - [weak self] image in + ) { [weak self] image in self?.imageView.image = image } } @@ -767,18 +767,6 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { backgroundColorDropdownView.isHidden.toggle() } - // func gestureRecognizer( - // _ gestureRecognizer: UIGestureRecognizer, - // shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer - // ) -> Bool { - // if gestureRecognizer == leftTap || gestureRecognizer == rightTap, - // otherGestureRecognizer == topTap - // { - // return true - // } - // return false - // } - func gestureRecognizer( _ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer @@ -877,17 +865,16 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { chapter: currentChapter, page: currentPage, turn: turn) if (chapter, page) == (currentChapter, currentPage) { return } var vol = Int(metadata.chapters[chapter - 1].volume) + currentPage = page + currentChapter = chapter if let path = getImagePath(chapter: chapter, volume: vol, page: page, path: currentPath) { - imageLoader.loadImage(at: path, scaling: scaling) { - [weak self] image in + imageLoader.loadImage(at: path, scaling: scaling) { [weak self] image in self?.imageView.image = image self?.updateInfo() } } else { return } - currentPage = page - currentChapter = chapter for _ in 0...preloadCount { (chapter, page) = getChapterAndPageFromTurn( @@ -921,10 +908,15 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { Chapter \(currentChapter!) of \(Int(metadata.last_chapter)) Page \(currentPage!) of \(metadata.chapters[currentChapter - 1].pages) """ - // if let size = imageLoader.originalImage.cgImage { - // text += - // "\nImage size: \(Int(size.width))x\(Int(size.height))" - // } + if let size = imageLoader.size[ + getImagePath( + chapter: currentChapter, volume: Int(metadata.chapters[currentChapter - 1].volume), + page: currentPage, + path: currentPath + ).path] + { + text += "\nImage size: \(Int(size.width))x\(Int(size.height))" + } info.text = text } @@ -989,8 +981,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { chapter: currentChapter, volume: vol, page: currentPage, path: currentPath ), scaling: scaling - ) { - [weak self] image in + ) { [weak self] image in self?.imageView.image = image self?.updateInfo() } @@ -1277,9 +1268,10 @@ enum Rotation { } class ImageLoader { - let cache = NSCache() - let horCache = NSCache() + private let cache = NSCache() + private let horCache = NSCache() private var loadingTasks: [String: [((UIImage?) -> Void)]] = [:] + var size: [String: CGSize] = [:] init() { // 128 MiB @@ -1324,6 +1316,7 @@ class ImageLoader { queue.async { [weak self] in guard let self = self else { return } guard var image = UIImage(contentsOfFile: path.path) else { return } + self.size[path.path] = image.size // If you turn pages fast, completion will not be nil and as such only the needed scaled image should be prepared if completion == nil || rotation == .vertical { @@ -1351,7 +1344,7 @@ class ImageLoader { } DispatchQueue.main.async { - self.loadingTasks[path.path]?.forEach { $0((image)) } + self.loadingTasks[path.path]?.forEach { $0(image) } self.loadingTasks.removeValue(forKey: path.path) } }