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

145 lines
4.8 KiB
Swift
Raw Normal View History

2022-07-06 10:09:17 -04:00
//
// LocalLibrary.swift
// App
//
// Created by benonymity on 6/15/22.
//
import Foundation
import RealmSwift
2022-07-16 20:25:04 -04:00
class LocalLibraryItem: Object, Encodable {
2022-07-17 21:50:19 -04:00
@Persisted(primaryKey: true) var id: String = UUID().uuidString
2022-07-09 17:35:59 -04:00
@Persisted var basePath: String = ""
@Persisted var absolutePath: String = ""
2022-07-06 10:09:17 -04:00
@Persisted var contentUrl: String
2022-07-09 17:35:59 -04:00
@Persisted var isInvalid: Bool = false
2022-07-06 10:09:17 -04:00
@Persisted var mediaType: String
2022-07-09 15:18:34 -04:00
@Persisted var media: LocalMediaType?
2022-07-06 10:09:17 -04:00
@Persisted var localFiles: List<LocalFile>
@Persisted var coverContentUrl: String? = nil
@Persisted var coverAbsolutePath: String? = nil
2022-07-09 17:35:59 -04:00
@Persisted var isLocal: Bool = true
2022-07-06 10:09:17 -04:00
@Persisted var serverConnectionConfigId: String? = nil
@Persisted var serverAddress: String? = nil
@Persisted var serverUserId: String? = nil
@Persisted var libraryItemId: String? = nil
}
2022-07-09 15:18:34 -04:00
2022-07-17 21:50:19 -04:00
class LocalMediaType: Object, Encodable {
2022-07-09 17:35:59 -04:00
@Persisted var libraryItemId: String? = ""
@Persisted var metadata: LocalMetadata?
@Persisted var coverPath: String? = ""
@Persisted var tags: List<String?>
@Persisted var audioFiles: List<LocalAudioFile>
@Persisted var chapters: List<LocalChapter>
@Persisted var tracks: List<LocalAudioTrack>
@Persisted var size: Int64? = nil
@Persisted var duration: Double? = nil
@Persisted var episodes: List<LocalPodcastEpisode>
@Persisted var autoDownloadEpisodes: Bool? = nil
}
2022-07-17 21:50:19 -04:00
class LocalMetadata: Object, Encodable {
2022-07-06 10:09:17 -04:00
@Persisted var title: String
@Persisted var subtitle: String? = ""
2022-07-09 15:18:34 -04:00
@Persisted var authors: List<LocalAuthor>
2022-07-06 10:09:17 -04:00
@Persisted var narrators: List<String?>
@Persisted var genres: List<String?>
@Persisted var publishedYear: String? = ""
@Persisted var publishedDate: String? = ""
@Persisted var publisher: String? = ""
2022-07-09 17:35:59 -04:00
@Persisted var desc: String? = ""
2022-07-06 10:09:17 -04:00
@Persisted var isbn: String? = ""
@Persisted var asin: String? = ""
@Persisted var language: String? = ""
@Persisted var explicit: Bool
@Persisted var authorName: String? = ""
@Persisted var authorNameLF: String? = ""
@Persisted var narratorName: String? = ""
@Persisted var seriesName: String? = ""
@Persisted var feedUrl: String? = ""
2022-07-16 21:46:49 -04:00
}
2022-07-17 21:50:19 -04:00
class LocalPodcastEpisode: Object, Encodable {
@Persisted var id: String = UUID().uuidString
2022-07-06 10:09:17 -04:00
@Persisted var index: Int
@Persisted var episode: String? = ""
@Persisted var episodeType: String? = ""
@Persisted var title: String
@Persisted var subtitle: String? = ""
2022-07-09 17:35:59 -04:00
@Persisted var desc: String? = ""
2022-07-09 15:18:34 -04:00
@Persisted var audioFile: LocalAudioFile? = nil
@Persisted var audioTrack: LocalAudioTrack? = nil
2022-07-06 10:09:17 -04:00
@Persisted var duration: Double
@Persisted var size: Int64
2022-07-17 21:50:19 -04:00
@Persisted var serverEpisodeId: String?
2022-07-06 10:09:17 -04:00
}
2022-07-09 15:18:34 -04:00
2022-07-17 21:50:19 -04:00
class LocalAudioFile: Object, Encodable {
2022-07-06 10:09:17 -04:00
@Persisted var index: Int
@Persisted var ino: String
2022-07-09 15:18:34 -04:00
@Persisted var metadata: LocalFileMetadata?
2022-07-06 10:09:17 -04:00
}
2022-07-09 15:18:34 -04:00
2022-07-17 21:50:19 -04:00
class LocalAuthor: Object, Encodable {
@Persisted var id: String = UUID().uuidString
2022-07-06 10:09:17 -04:00
@Persisted var name: String
@Persisted var coverPath: String? = ""
}
2022-07-09 15:18:34 -04:00
2022-07-17 21:50:19 -04:00
class LocalChapter: Object, Encodable {
2022-07-06 10:09:17 -04:00
@Persisted var id: Int
@Persisted var start: Double
@Persisted var end: Double
@Persisted var title: String? = nil
}
2022-07-09 15:18:34 -04:00
2022-07-17 21:50:19 -04:00
class LocalAudioTrack: Object, Encodable {
2022-07-06 10:09:17 -04:00
@Persisted var index: Int? = nil
@Persisted var startOffset: Double? = nil
@Persisted var duration: Double
@Persisted var title: String? = ""
@Persisted var contentUrl: String? = ""
@Persisted var mimeType: String
2022-07-09 15:18:34 -04:00
@Persisted var metadata: LocalFileMetadata? = nil
@Persisted var isLocal: Bool = true
2022-07-06 10:09:17 -04:00
@Persisted var localFileId: String? = ""
@Persisted var serverIndex: Int? = nil
}
2022-07-09 15:18:34 -04:00
2022-07-17 21:50:19 -04:00
class LocalFileMetadata: Object, Encodable {
2022-07-06 10:09:17 -04:00
@Persisted var filename: String
@Persisted var ext: String
@Persisted var path: String
@Persisted var relPath: String
}
2022-07-09 15:18:34 -04:00
2022-07-17 21:50:19 -04:00
class LocalFile: Object, Encodable {
@Persisted var id: String = UUID().uuidString
2022-07-06 10:09:17 -04:00
@Persisted var filename: String? = ""
@Persisted var contentUrl: String
@Persisted var absolutePath: String
@Persisted var mimeType: String? = ""
@Persisted var size: Int64
}
2022-07-09 15:18:34 -04:00
2022-07-17 21:50:19 -04:00
class LocalMediaProgress: Object, Encodable {
@Persisted var id: String = UUID().uuidString
2022-07-06 10:09:17 -04:00
@Persisted var localLibraryItemId: String
@Persisted var localEpisodeId: String? = ""
@Persisted var duration: Double
@Persisted var progress: Double // 0 to 1
@Persisted var currentTime: Double
@Persisted var isFinished: Bool
@Persisted var lastUpdate: Int64
@Persisted var startedAt: Int64
@Persisted var finishedAt: Int64? = nil
// For local lib items from server to support server sync
@Persisted var serverConnectionConfigId: String? = ""
@Persisted var serverAddress: String? = ""
@Persisted var serverUserId: String? = ""
@Persisted var libraryItemId: String? = ""
@Persisted var episodeId: String? = ""
}