advplyr.audiobookshelf-app/ios/App/Shared/models/DataClasses.swift

316 lines
6.4 KiB
Swift
Raw Normal View History

2022-04-22 20:31:45 -04:00
//
// DataClasses.swift
// App
//
2022-07-06 10:09:17 -04:00
// Created by benonymity on 4/20/22.
2022-04-22 20:31:45 -04:00
//
import Foundation
import CoreMedia
import Unrealm
2022-04-22 20:31:45 -04:00
struct LibraryItem: Realmable, Codable {
2022-04-22 20:31:45 -04:00
var id: String
var ino: String
2022-04-22 20:31:45 -04:00
var libraryId: String
var folderId: String
var path: String
var relPath: String
var isFile: Bool
var mtimeMs: Int
var ctimeMs: Int
var birthtimeMs: Int
var addedAt: Int
var updatedAt: Int
var lastScan: Int?
2022-04-22 20:31:45 -04:00
var scanVersion: String?
var isMissing: Bool
var isInvalid: Bool
var mediaType: String
var media: MediaType
2022-04-22 20:31:45 -04:00
var libraryFiles: [LibraryFile]
2022-07-09 15:18:15 -04:00
var userMediaProgress: MediaProgress?
init() {
id = ""
ino = ""
libraryId = ""
folderId = ""
path = ""
relPath = ""
isFile = true
mtimeMs = 0
ctimeMs = 0
birthtimeMs = 0
addedAt = 0
updatedAt = 0
isMissing = false
isInvalid = false
mediaType = ""
media = MediaType()
libraryFiles = []
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct MediaType: Realmable, Codable {
2022-07-09 15:18:15 -04:00
var libraryItemId: String?
var metadata: Metadata
var coverPath: String?
var tags: [String]?
var audioFiles: [AudioFile]?
2022-07-09 15:18:15 -04:00
var chapters: [Chapter]?
var tracks: [AudioTrack]?
var size: Int?
2022-07-09 15:18:15 -04:00
var duration: Double?
var episodes: [PodcastEpisode]?
var autoDownloadEpisodes: Bool?
init() {
metadata = Metadata()
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct Metadata: Realmable, Codable {
var title: String
2022-07-09 15:18:15 -04:00
var subtitle: String?
var authors: [Author]?
var narrators: [String]?
var genres: [String]
var publishedYear: String?
var publishedDate: String?
var publisher: String?
2022-08-02 21:05:28 -04:00
var desc: String?
2022-07-09 15:18:15 -04:00
var isbn: String?
var asin: String?
var language: String?
2022-04-22 20:31:45 -04:00
var explicit: Bool
2022-07-09 15:18:15 -04:00
var authorName: String?
var authorNameLF: String?
var narratorName: String?
var seriesName: String?
var feedUrl: String?
init() {
title = "Unknown"
genres = []
explicit = false
}
2022-08-02 21:05:28 -04:00
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
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct PodcastEpisode: Realmable, Codable {
2022-04-22 20:31:45 -04:00
var id: String
2022-08-10 22:56:42 -04:00
var index: Int?
2022-07-09 15:18:15 -04:00
var episode: String?
var episodeType: String?
var title: String
2022-07-09 15:18:15 -04:00
var subtitle: String?
2022-08-02 21:05:28 -04:00
var desc: String?
2022-07-09 15:18:15 -04:00
var audioFile: AudioFile?
var audioTrack: AudioTrack?
2022-08-10 22:56:42 -04:00
var duration: Double?
var size: Int?
2022-04-22 20:31:45 -04:00
// var serverEpisodeId: String?
init() {
id = ""
index = 0
title = "Unknown"
duration = 0
size = 0
}
2022-08-02 21:05:28 -04:00
private enum CodingKeys : String, CodingKey {
case id,
index,
episode,
episodeType,
title,
subtitle,
desc = "description", // Fixes a collision with the base Swift object's field "description"
audioFile,
audioTrack,
duration,
size
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct AudioFile: Realmable, Codable {
2022-08-10 22:56:42 -04:00
var index: Int?
2022-07-09 15:18:15 -04:00
var ino: String
var metadata: FileMetadata
init() {
ino = ""
metadata = FileMetadata()
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct Author: Realmable, Codable {
2022-07-09 15:18:15 -04:00
var id: String
var name: String
var coverPath: String?
init() {
id = ""
name = "Unknown"
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct Chapter: Realmable, Codable {
2022-07-09 15:18:15 -04:00
var id: Int
var start: Double
var end: Double
var title: String?
init() {
id = 0
start = 0
end = 0
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct AudioTrack: Realmable, Codable {
2022-07-09 15:18:15 -04:00
var index: Int?
var startOffset: Double?
2022-04-22 20:31:45 -04:00
var duration: Double
2022-07-09 15:18:15 -04:00
var title: String?
var contentUrl: String?
2022-04-22 20:31:45 -04:00
var mimeType: String
2022-07-09 15:18:15 -04:00
var metadata: FileMetadata?
2022-08-10 22:17:12 -04:00
var localFileId: String?
2022-07-09 15:18:15 -04:00
// var audioProbeResult: AudioProbeResult? Needed for local playback
var serverIndex: Int?
init() {
duration = 0
mimeType = ""
}
2022-08-10 22:17:12 -04:00
mutating func setLocalInfo(filenameIdMap: [String: String], serverIndex: Int) -> Bool {
2022-08-10 22:17:12 -04:00
if let localFileId = filenameIdMap[self.metadata?.filename ?? ""] {
self.localFileId = localFileId
self.serverIndex = serverIndex
return true
2022-08-10 22:17:12 -04:00
}
return false
2022-08-10 22:17:12 -04:00
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct FileMetadata: Realmable, Codable {
2022-07-09 15:18:15 -04:00
var filename: String
var ext: String
var path: String
var relPath: String
init() {
filename = ""
ext = ""
path = ""
relPath = ""
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct Library: Realmable, Codable {
2022-04-22 20:31:45 -04:00
var id: String
var name: String
var folders: [Folder]
var icon: String
var mediaType: String
init() {
id = ""
name = "Unknown"
folders = []
icon = ""
mediaType = ""
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct Folder: Realmable, Codable {
2022-04-22 20:31:45 -04:00
var id: String
var fullPath: String
init() {
id = ""
fullPath = ""
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
struct LibraryFile: Realmable, Codable {
2022-04-22 20:31:45 -04:00
var ino: String
2022-07-09 15:18:15 -04:00
var metadata: FileMetadata
init() {
ino = ""
metadata = FileMetadata()
}
2022-07-06 10:09:17 -04:00
}
2022-07-09 15:18:15 -04:00
struct MediaProgress: Realmable, Codable {
var id: String
var libraryItemId: String
var episodeId: String?
var duration: Double
var progress: Double
var currentTime: Double
var isFinished: Bool
var lastUpdate: Int
var startedAt: Int
var finishedAt: Int?
init() {
id = ""
libraryItemId = ""
duration = 0
progress = 0
currentTime = 0
isFinished = false
lastUpdate = 0
startedAt = 0
}
2022-07-06 10:09:17 -04:00
}
2022-07-09 15:18:15 -04:00
struct PlaybackMetadata: Realmable, Codable {
2022-07-06 10:09:17 -04:00
var duration: Double
var currentTime: Double
var playerState: PlayerState
init() {
duration = 0
currentTime = 0
playerState = PlayerState.IDLE
}
static func ignoredProperties() -> [String] {
return ["playerState"]
}
2022-04-22 20:31:45 -04:00
}
2022-07-09 15:18:15 -04:00
2022-07-06 10:09:17 -04:00
enum PlayerState: Codable {
case IDLE
case BUFFERING
case READY
case ENDED
}