diff --git a/ios/App/Shared/models/DataClasses.swift b/ios/App/Shared/models/DataClasses.swift index 753cf432..cea3d912 100644 --- a/ios/App/Shared/models/DataClasses.swift +++ b/ios/App/Shared/models/DataClasses.swift @@ -29,91 +29,99 @@ struct LibraryItem: Codable { var mediaType: String var media: MediaType var libraryFiles: [LibraryFile] - var userMediaProgress:MediaProgress? + var userMediaProgress: MediaProgress? } -class MediaType: Object, Codable { - var libraryItemId: String? = "" - var metadata: Metadata? - var coverPath: String? = "" - var tags: List - var audioFiles: List - var chapters: List - var tracks: List - var size: Int64? = nil - var duration: Double? = nil - var episodes: List - var autoDownloadEpisodes: Bool? = nil + +struct MediaType: Codable { + var libraryItemId: String? + var metadata: Metadata + var coverPath: String? + var tags: [String]? + var audioFiles: [AudioTrack]? + var chapters: [Chapter]? + var tracks: [AudioTrack]? + var size: Int64? + var duration: Double? + var episodes: [PodcastEpisode]? + var autoDownloadEpisodes: Bool? } -class Metadata: Object, Codable { + +struct Metadata: Codable { var title: String - var subtitle: String? = "" - var authors: List - var narrators: List - var genres: List - var publishedYear: String? = "" - var publishedDate: String? = "" - var publisher: String? = "" - // I think calling the below variable description conflicts with some public variables declared in some of the Pods we use, so it's desc. ¯\_(ツ)_/¯ - final var description: String - var isbn: String? = "" - var asin: String? = "" - var language: String? = "" + var subtitle: String? + var authors: [Author]? + var narrators: [String]? + var genres: [String] + var publishedYear: String? + var publishedDate: String? + var publisher: String? + var description: String? + var isbn: String? + var asin: String? + var language: String? var explicit: Bool - var authorName: String? = "" - var authorNameLF: String? = "" - var narratorName: String? = "" - var seriesName: String? = "" - var feedUrl: String? = "" + var authorName: String? + var authorNameLF: String? + var narratorName: String? + var seriesName: String? + var feedUrl: String? } -class PodcastEpisode: Object, Codable { + +struct PodcastEpisode: Codable { var id: String var index: Int - var episode: String? = "" - var episodeType: String? = "" + var episode: String? + var episodeType: String? var title: String - var subtitle: String? = "" - var escription: String? = "" - var audioFile: AudioFile? = nil - var audioTrack: AudioTrack? = nil + var subtitle: String? + var description: String? + var audioFile: AudioFile? + var audioTrack: AudioTrack? var duration: Double var size: Int64 // var serverEpisodeId: String? } -class AudioFile: Object, Codable { - @Persisted var index: Int - @Persisted var ino: String - @Persisted var metadata: FileMetadata? + +struct AudioFile: Codable { + var index: Int + var ino: String + var metadata: FileMetadata } -class Author: Object, Codable { - @Persisted var id: String - @Persisted var name: String - @Persisted var coverPath: String? = "" + +struct Author: Codable { + var id: String + var name: String + var coverPath: String? } -class Chapter: Object, Codable { - @Persisted var id: Int - @Persisted var start: Double - @Persisted var end: Double - @Persisted var title: String? = nil + +struct Chapter: Codable { + var id: Int + var start: Double + var end: Double + var title: String? } + struct AudioTrack: Codable { - var index: Int? = nil - var startOffset: Double? = nil + var index: Int? + var startOffset: Double? var duration: Double - var title: String? = "" - var contentUrl: String? = "" + var title: String? + var contentUrl: String? var mimeType: String - var metadata: FileMetadata? = nil - var isLocal: Bool - var localFileId: String? = "" -// var audioProbeResult: AudioProbeResult? // Needed for local playback. Requires local FFMPEG? Not sure how doable this is on iOS - var serverIndex: Int? = nil + var metadata: FileMetadata? + // var isLocal: Bool + // var localFileId: String? + // var audioProbeResult: AudioProbeResult? Needed for local playback + var serverIndex: Int? } -class FileMetadata: Object, Codable { - @Persisted var filename: String - @Persisted var ext: String - @Persisted var path: String - @Persisted var relPath: String + +struct FileMetadata: Codable { + var filename: String + var ext: String + var path: String + var relPath: String } + struct Library: Codable { var id: String var name: String @@ -121,31 +129,36 @@ struct Library: Codable { var icon: String var mediaType: String } + struct Folder: Codable { var id: String var fullPath: String } + struct LibraryFile: Codable { var ino: String - var metadata: FileMetadata? + var metadata: FileMetadata } -struct MediaProgress: Codable { - var id: String - var libraryItemId: String - var episodeId: String? - var duration: Double - var progress: Double - var currentTime: Double - var isFinished: Bool - var lastUpdate: Int64 - var startedAt: Int64 - var finishedAt: Int64? + +struct MediaProgress:Codable { + var id:String + var libraryItemId:String + var episodeId:String? + var duration:Double + var progress:Double + var currentTime:Double + var isFinished:Bool + var lastUpdate:Int64 + var startedAt:Int64 + var finishedAt:Int64? } + struct PlaybackMetadata: Codable { var duration: Double var currentTime: Double var playerState: PlayerState } + enum PlayerState: Codable { case IDLE case BUFFERING