summaryrefslogtreecommitdiff
path: root/Sora/Data/Settings/SettingsBookmark.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data/Settings/SettingsBookmark.swift')
-rw-r--r--Sora/Data/Settings/SettingsBookmark.swift37
1 files changed, 34 insertions, 3 deletions
diff --git a/Sora/Data/Settings/SettingsBookmark.swift b/Sora/Data/Settings/SettingsBookmark.swift
index 41c63af..3f5099d 100644
--- a/Sora/Data/Settings/SettingsBookmark.swift
+++ b/Sora/Data/Settings/SettingsBookmark.swift
@@ -7,14 +7,45 @@ struct SettingsBookmark: Codable, Identifiable, Hashable {
let provider: BooruProvider
var folder: UUID?
var lastVisit: Date
- var visitedCount = 0
+ var visitedCount: Int
init(provider: BooruProvider, tags: [String], folder: UUID? = nil, id: UUID = UUID()) {
- createdAt = Date()
- lastVisit = Date()
+ self.createdAt = Date()
+ self.lastVisit = Date()
self.id = id
self.tags = tags
self.provider = provider
self.folder = folder
+ self.visitedCount = 0
+ }
+
+ enum CodingKeys: String, CodingKey {
+ // swiftlint:disable:next explicit_enum_raw_value
+ case id, tags, createdAt, provider, folder, lastVisit, visitedCount
+ }
+
+ init(from decoder: Decoder) throws {
+ let container = try decoder.container(keyedBy: CodingKeys.self)
+
+ self.id = try container.decodeIfPresent(UUID.self, forKey: .id) ?? UUID()
+ self.tags = try container.decodeIfPresent([String].self, forKey: .tags) ?? []
+ self.createdAt = try container.decodeIfPresent(Date.self, forKey: .createdAt) ?? Date()
+ self.provider =
+ try container.decodeIfPresent(BooruProvider.self, forKey: .provider) ?? .safebooru
+ self.folder = try container.decodeIfPresent(UUID.self, forKey: .folder)
+ self.lastVisit = try container.decodeIfPresent(Date.self, forKey: .lastVisit) ?? Date()
+ self.visitedCount = try container.decodeIfPresent(Int.self, forKey: .visitedCount) ?? 0
+ }
+
+ func encode(to encoder: Encoder) throws {
+ var container = encoder.container(keyedBy: CodingKeys.self)
+
+ try container.encode(id, forKey: .id)
+ try container.encode(tags, forKey: .tags)
+ try container.encode(createdAt, forKey: .createdAt)
+ try container.encode(provider, forKey: .provider)
+ try container.encodeIfPresent(folder, forKey: .folder)
+ try container.encode(lastVisit, forKey: .lastVisit)
+ try container.encode(visitedCount, forKey: .visitedCount)
}
}