mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-07-11 22:44:47 +02:00
108 lines
4.3 KiB
Swift
108 lines
4.3 KiB
Swift
//
|
|
// Metadata.swift
|
|
// App
|
|
//
|
|
// Created by Ron Heft on 8/16/22.
|
|
//
|
|
|
|
import Foundation
|
|
import RealmSwift
|
|
|
|
class Metadata: EmbeddedObject, Codable {
|
|
@Persisted var title: String = "Unknown"
|
|
@Persisted var subtitle: String?
|
|
@Persisted var authors = List<Author>()
|
|
@Persisted var narrators = List<String>()
|
|
@Persisted var genres = List<String>()
|
|
@Persisted var publishedYear: String?
|
|
@Persisted var publishedDate: String?
|
|
@Persisted var publisher: String?
|
|
@Persisted var desc: String?
|
|
@Persisted var isbn: String?
|
|
@Persisted var asin: String?
|
|
@Persisted var language: String?
|
|
@Persisted var explicit: Bool = false
|
|
@Persisted var authorName: String?
|
|
@Persisted var authorNameLF: String?
|
|
@Persisted var narratorName: String?
|
|
@Persisted var seriesName: String?
|
|
@Persisted var feedUrl: String?
|
|
|
|
var authorDisplayName: String { self.authorName ?? "Unknown" }
|
|
|
|
private enum CodingKeys : String, CodingKey {
|
|
case title,
|
|
subtitle,
|
|
authors,
|
|
narrators,
|
|
genres,
|
|
publishedYear,
|
|
publishedDate,
|
|
publisher,
|
|
desc = "description", // Fixes a collision with the base Swift object's field "description"
|
|
isbn,
|
|
asin,
|
|
language,
|
|
explicit,
|
|
authorName,
|
|
authorNameLF,
|
|
narratorName,
|
|
seriesName,
|
|
feedUrl
|
|
}
|
|
|
|
override init() {
|
|
super.init()
|
|
}
|
|
|
|
required init(from decoder: Decoder) throws {
|
|
super.init()
|
|
let values = try decoder.container(keyedBy: CodingKeys.self)
|
|
title = try values.decode(String.self, forKey: .title)
|
|
subtitle = try? values.decode(String.self, forKey: .subtitle)
|
|
if let authorList = try? values.decode([Author].self, forKey: .authors) {
|
|
authors.append(objectsIn: authorList)
|
|
}
|
|
if let narratorList = try? values.decode([String].self, forKey: .narrators) {
|
|
narrators.append(objectsIn: narratorList)
|
|
}
|
|
if let genreList = try? values.decode([String].self, forKey: .genres) {
|
|
genres.append(objectsIn: genreList)
|
|
}
|
|
publishedYear = try? values.decode(String.self, forKey: .publishedYear)
|
|
publishedDate = try? values.decode(String.self, forKey: .publishedDate)
|
|
publisher = try? values.decode(String.self, forKey: .publisher)
|
|
desc = try? values.decode(String.self, forKey: .desc)
|
|
isbn = try? values.decode(String.self, forKey: .isbn)
|
|
asin = try? values.decode(String.self, forKey: .asin)
|
|
language = try? values.decode(String.self, forKey: .language)
|
|
explicit = try values.decode(Bool.self, forKey: .explicit)
|
|
authorName = try? values.decode(String.self, forKey: .authorName)
|
|
authorNameLF = try? values.decode(String.self, forKey: .authorNameLF)
|
|
narratorName = try? values.decode(String.self, forKey: .narratorName)
|
|
seriesName = try? values.decode(String.self, forKey: .seriesName)
|
|
feedUrl = try? values.decode(String.self, forKey: .feedUrl)
|
|
}
|
|
|
|
func encode(to encoder: Encoder) throws {
|
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
try container.encode(title, forKey: .title)
|
|
try container.encode(subtitle, forKey: .subtitle)
|
|
try container.encode(Array(authors), forKey: .authors)
|
|
try container.encode(Array(narrators), forKey: .narrators)
|
|
try container.encode(Array(genres), forKey: .genres)
|
|
try container.encode(publishedYear, forKey: .publishedYear)
|
|
try container.encode(publishedDate, forKey: .publishedDate)
|
|
try container.encode(publisher, forKey: .publisher)
|
|
try container.encode(desc, forKey: .desc)
|
|
try container.encode(isbn, forKey: .isbn)
|
|
try container.encode(asin, forKey: .asin)
|
|
try container.encode(language, forKey: .language)
|
|
try container.encode(explicit, forKey: .explicit)
|
|
try container.encode(authorName, forKey: .authorName)
|
|
try container.encode(authorNameLF, forKey: .authorNameLF)
|
|
try container.encode(narratorName, forKey: .narratorName)
|
|
try container.encode(seriesName, forKey: .seriesName)
|
|
try container.encode(feedUrl, forKey: .feedUrl)
|
|
}
|
|
}
|