]> git.r.bdr.sh - rbdr/captura/blame - Captura/Data/CapturaSettings.swift
Use tinted PDF for Icon
[rbdr/captura] / Captura / Data / CapturaSettings.swift
CommitLineData
5802c153
RBR
1/*
2 Copyright (C) 2024 Rubén Beltrán del Río
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see https://captura.tranquil.systems.
16 */
c9b9e1d6
RBR
17import Foundation
18
19struct CapturaSettings {
20 static var frameRate: Int {
ba17de89 21 get {
e42019cd 22 if UserDefaults.standard.object(forKey: "frameRate") == nil {
377442f2
RBR
23 return 10
24 } else {
e42019cd 25 return min(10, max(4, UserDefaults.standard.integer(forKey: "frameRate")))
377442f2 26 }
ba17de89
RBR
27 }
28 set {
e42019cd 29 UserDefaults.standard.setValue(newValue, forKey: "frameRate")
ba17de89 30 }
c9b9e1d6 31 }
505c1e62 32
c9b9e1d6 33 static var outputFormats: OutputFormatSetting {
ba17de89 34 get {
e42019cd 35 OutputFormatSetting(rawValue: UserDefaults.standard.integer(forKey: "outputFormats")) ?? .all
ba17de89
RBR
36 }
37 set {
e42019cd 38 UserDefaults.standard.setValue(newValue.rawValue, forKey: "outputFormats")
ba17de89 39 }
c9b9e1d6 40 }
505c1e62 41
c9b9e1d6 42 static var shouldSaveMp4: Bool {
533cd932 43 outputFormats.shouldSaveMp4() || (shouldUseBackend && shouldUploadMp4)
c9b9e1d6 44 }
505c1e62 45
c9b9e1d6 46 static var shouldSaveGif: Bool {
533cd932 47 outputFormats.shouldSaveGif() || (shouldUseBackend && shouldUploadGif)
c9b9e1d6 48 }
505c1e62 49
533cd932
RBR
50 static var shouldUploadGif: Bool {
51 backendFormat.shouldSaveGif()
52 }
505c1e62 53
533cd932
RBR
54 static var shouldUploadMp4: Bool {
55 backendFormat.shouldSaveMp4()
56 }
505c1e62 57
533cd932
RBR
58 static var shouldUseBackend: Bool {
59 backend != nil
60 }
505c1e62 61
533cd932 62 static var backend: URL? {
ba17de89 63 get {
e42019cd 64 if let url = UserDefaults.standard.string(forKey: "backendUrl") {
ba17de89
RBR
65 return URL(string: url)
66 }
67 return nil
68 }
69 set {
e42019cd 70 UserDefaults.standard.setValue(newValue?.absoluteString, forKey: "backendUrl")
c9b9e1d6 71 }
533cd932 72 }
505c1e62 73
533cd932 74 static var backendFormat: OutputFormatSetting {
ba17de89 75 get {
505c1e62
RBR
76 OutputFormatSetting(rawValue: UserDefaults.standard.integer(forKey: "backendFormat"))
77 ?? .gifOnly
ba17de89
RBR
78 }
79 set {
e42019cd 80 UserDefaults.standard.setValue(newValue.rawValue, forKey: "backendFormat")
ba17de89 81 }
533cd932 82 }
505c1e62 83
533cd932 84 static var shouldKeepLocalFiles: Bool {
ba17de89 85 get {
e42019cd 86 if UserDefaults.standard.object(forKey: "keepFiles") == nil {
377442f2
RBR
87 return true
88 } else {
e42019cd 89 return UserDefaults.standard.bool(forKey: "keepFiles")
377442f2 90 }
ba17de89
RBR
91 }
92 set {
e42019cd 93 UserDefaults.standard.set(newValue, forKey: "keepFiles")
ba17de89
RBR
94 }
95 }
505c1e62 96
ba17de89 97 static var shouldAllowURLAutomation: Bool {
377442f2 98 get {
e42019cd 99 UserDefaults.standard.bool(forKey: "allowURLAutomation")
377442f2
RBR
100 }
101 set {
e42019cd 102 UserDefaults.standard.setValue(newValue, forKey: "allowURLAutomation")
377442f2 103 }
ba17de89 104 }
505c1e62 105
ba17de89
RBR
106 static func apply(_ config: ConfigureAction) {
107 if let fps = config.fps {
108 frameRate = fps
109 }
110 if let outputs = config.outputs {
111 outputFormats = outputs
112 }
113 if let newBackend = config.backend {
114 backend = newBackend
115 }
116 if let backendOutput = config.backendOutput {
117 backendFormat = backendOutput
118 }
119 if let keepLocalFiles = config.keepLocalFiles {
120 shouldKeepLocalFiles = keepLocalFiles
121 }
c9b9e1d6
RBR
122 }
123}