diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 2b96344c..d088ee44 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -30,6 +30,7 @@ 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; }; A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; }; + C4D0677528106D0C00B8F875 /* DataClasses.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D0677428106D0C00B8F875 /* DataClasses.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -60,6 +61,7 @@ 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; }; AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; + C4D0677428106D0C00B8F875 /* DataClasses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataClasses.swift; sourceTree = ""; }; FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -118,6 +120,7 @@ children = ( 3AD4FCE828043FD7006DB301 /* ServerConnectionConfig.swift */, 3ABF580828059BAE005DFBE5 /* PlaybackSession.swift */, + C4D0677428106D0C00B8F875 /* DataClasses.swift */, 3A90295E280968E700E1D427 /* PlaybackReport.swift */, ); path = models; @@ -309,6 +312,7 @@ 3AD4FCE528043E50006DB301 /* AbsDatabase.swift in Sources */, 3AF197102806E3DC0096F747 /* AbsAudioPlayer.m in Sources */, 3AF1970C2806E2590096F747 /* ApiClient.swift in Sources */, + C4D0677528106D0C00B8F875 /* DataClasses.swift in Sources */, 3AB34055280832720039308B /* PlayerEvents.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/ios/App/Shared/models/DataClasses.swift b/ios/App/Shared/models/DataClasses.swift new file mode 100644 index 00000000..2af3cd21 --- /dev/null +++ b/ios/App/Shared/models/DataClasses.swift @@ -0,0 +1,137 @@ +// +// DataClasses.swift +// App +// +// Created by Benonymity on 4/20/22. +// + +import Foundation +import CoreMedia + +struct LibraryItem: Codable { + var id: String + var ino:String + var libraryId: String + var folderId: String + var path: String + var relPath: String + var mtimeMs: Int64 + var ctimeMs: Int64 + var birthtimeMs: Int64 + var addedAt: Int64 + var updatedAt: Int64 + var lastScan: Int64? + var scanVersion: String? + var isMissing: Bool + var isInvalid: Bool + var mediaType: String +// var media: MediaType + var libraryFiles: [LibraryFile] +} +struct Book: Codable { + var libraryItemId: String? + var metadata: BookMetadata + var coverPath: String? + var tags: [String] + var audioFiles: [AudioTrack]? + var chapters: [Chapter]? + var tracks: [AudioTrack]? + var size: Int64? + var duration: Double? +} +struct BookMetadata: Codable { + var title: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? +} +struct Podcast: Codable { + var metadata: PodcastMetadata + var coverPath: String? + var tags: [String] + var episodes: [PodcastEpisode] + var autoDownloadEpisodes: Bool +} +struct PodcastMetadata: Codable { + var title: String + var author: String? + var feedUrl: String? + var genres: [String] +} +struct PodcastEpisode: Codable { + var id: String + var index: Int + var episode: String? + var episodeType: String? + var title: String? + var subtitle: String? + var description: String? + var audioFile: AudioFile? + var audioTrack: AudioTrack? + var duration: Double + var size: Int64 +// var serverEpisodeId: String? +} +struct AudioFile: Codable { + var index: Int + var ino: String + var metadata: FileMetadata +} +struct Author: Codable { + var id: String + var name: String + var coverPath: String? +} +struct Chapter: Codable { + var id: Int + var start: Double + var end: Double + var title: String? +} +struct AudioTrack: Codable { + var index: Int? + var startOffset: Double + var duration: Double + var title: String + var contentUrl: String + var mimeType: String + var metadata: FileMetadata? + // var isLocal: Bool + // var localFileId: String? + // var audioProbeResult: AudioProbeResult? Needed for local playback + var serverIndex: Int? +} +struct FileMetadata: Codable { + var filename: String + var ext: String + var path: String + var relPath: String +} +struct Library: Codable { + var id: String + var name: String + var folders: [Folder] + var icon: String + var mediaType: String +} +struct Folder: Codable { + var id: String + var fullPath: String +} +struct LibraryFile: Codable { + var ino: String + var metadata: FileMetadata +} diff --git a/ios/App/Shared/models/PlaybackSession.swift b/ios/App/Shared/models/PlaybackSession.swift index bf947c71..483da125 100644 --- a/ios/App/Shared/models/PlaybackSession.swift +++ b/ios/App/Shared/models/PlaybackSession.swift @@ -6,7 +6,7 @@ // import Foundation - + struct PlaybackSession: Decodable, Encodable { var id: String var userId: String? @@ -25,33 +25,8 @@ struct PlaybackSession: Decodable, Encodable { var timeListening: Double var audioTracks: [AudioTrack] var currentTime: Double - // var libraryItem: LibraryItem? + var libraryItem: LibraryItem // var localLibraryItem: LocalLibraryItem? var serverConnectionConfigId: String? var serverAddress: String? } -struct Chapter: Decodable, Encodable { - var id: Int - var start: Double - var end: Double - var title: String? -} -struct AudioTrack: Decodable, Encodable { - var index: Int? - var startOffset: Double - var duration: Double - var title: String - var contentUrl: String - var mimeType: String - var metadata: FileMetadata? - // var isLocal: Bool - // var localFileId: String? - // var audioProbeResult: AudioProbeResult? Needed for local playback - var serverIndex: Int? -} -struct FileMetadata: Decodable, Encodable { - var filename: String - var ext: String - var path: String - var relPath: String -}