From c755599fbcf720709e995090afc5c0443d04d4b7 Mon Sep 17 00:00:00 2001 From: Vegard Matthey Date: Mon, 14 Jul 2025 19:26:04 +0200 Subject: [PATCH] save page turn mode and background color to local state --- ImageViewer/ViewController.swift | 52 +++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/ImageViewer/ViewController.swift b/ImageViewer/ViewController.swift index 031396d..ee7c1b5 100644 --- a/ImageViewer/ViewController.swift +++ b/ImageViewer/ViewController.swift @@ -5,7 +5,7 @@ enum PageTurn { case previous } -enum PageTurnMode { +enum PageTurnMode: Codable { case leftToRight case rightToLeft case scroll @@ -24,6 +24,8 @@ struct GlobalState: Codable { struct LocalState: Codable { var chapter: Int var page: Int + var turnMode: PageTurnMode + var backgroundColor: String = "clear" } struct Metadata: Decodable { @@ -93,8 +95,18 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { } func setup() { + do { + if try fileManager.contentsOfDirectory(atPath: documentsURL.path).isEmpty { + saveGlobalState() + } + } catch { + saveGlobalState() + } + homeView.translatesAutoresizingMaskIntoConstraints = false readerView.translatesAutoresizingMaskIntoConstraints = false + readerView.isHidden = true + homeView.isHidden = false view.addSubview(homeView) view.addSubview(readerView) NSLayoutConstraint.activate([ @@ -115,9 +127,6 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { setupHomeView() if let name = globalState.comicName { readComic(name: name) - } else { - readerView.isHidden = true - homeView.isHidden = false } } @@ -185,9 +194,36 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { } } + func convertColorToString(color: UIColor) -> String { + return switch color { + case .white: "white" + case .gray: "gray" + case .black: "black" + case .red: "red" + case .blue: "blue" + default: "clear" + } + } + + func convertStringToColor(str: String) -> UIColor { + return switch str { + case "white": .white + case "gray": .gray + case "black": .black + case "red": .red + case "blue": .blue + default: .clear + } + } + func saveLocalState() { do { - try JSONEncoder().encode(LocalState(chapter: currentChapter, page: currentPage)).write( + try JSONEncoder().encode( + LocalState( + chapter: currentChapter, page: currentPage, turnMode: mode, + backgroundColor: convertColorToString( + color: readerView.backgroundColor ?? .white)) + ).write( to: currentPath.appendingPathComponent("state.json")) } catch { print("failed to save local state") @@ -203,6 +239,8 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { let l = try JSONDecoder().decode(LocalState.self, from: json) currentPage = l.page currentChapter = l.chapter + mode = l.turnMode + readerView.backgroundColor = convertStringToColor(str: l.backgroundColor) } catch { print("failed to load local state") } @@ -326,6 +364,8 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { @objc func goHome() { readerView.isHidden = true homeView.isHidden = false + globalState.comicName = nil + saveGlobalState() } func setupBackgroundColorDropdown() { @@ -472,6 +512,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { } } togglePageTurnDropdown() + saveLocalState() } @objc func handleBackgroundColorOption(_ sender: UIButton) { @@ -486,6 +527,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate { } } toggleBackgroundColorDropdown() + saveLocalState() } @objc func togglePageTurnDropdown() {