diff options
Diffstat (limited to 'Sora/Data/Settings/SettingsBookmark.swift')
| -rw-r--r-- | Sora/Data/Settings/SettingsBookmark.swift | 37 |
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) } } |