save page turn mode and background color to local state

This commit is contained in:
2025-07-14 19:26:04 +02:00
parent 3f02dc3dc4
commit c755599fbc

View File

@@ -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() {