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

81 lines
2.2 KiB
Swift

//
// DownloadItem.swift
// App
//
// Created by Ron Heft on 8/5/22.
//
import Foundation
import Unrealm
struct DownloadItem: Realmable, Codable {
var id: String = UUID().uuidString
var libraryItemId: String?
var episodeId: String?
var userMediaProgress: MediaProgress?
var serverConnectionConfigId: String?
var serverAddress: String?
var serverUserId: String?
var mediaType: String?
var itemTitle: String?
var media: MediaType?
var downloadItemParts: [DownloadItemPart] = []
static func primaryKey() -> String? {
return "id"
}
static func indexedProperties() -> [String] {
["libraryItemId"]
}
}
extension DownloadItem {
init(libraryItem: LibraryItem, server: ServerConnectionConfig) {
self.libraryItemId = libraryItem.id
//self.episodeId // TODO
self.userMediaProgress = libraryItem.userMediaProgress
self.serverConnectionConfigId = server.id
self.serverAddress = server.address
self.serverUserId = server.userId
self.mediaType = libraryItem.mediaType
self.itemTitle = libraryItem.media.metadata.title
self.media = libraryItem.media
}
}
struct DownloadItemPart: Realmable, Codable {
var id: String = UUID().uuidString
var filename: String?
var finalDestinationPath: String?
var itemTitle: String?
var serverPath: String?
var audioTrack: AudioTrack?
var episode: PodcastEpisode?
var completed: Bool = false
var moved: Bool = false
var failed: Bool = false
var uri: String?
var destinationUri: String?
var finalDestinationUri: String?
var downloadId: Int?
var progress: Int = 0
var task: URLSessionDownloadTask!
private enum CodingKeys : String, CodingKey {
case id, progress
}
static func ignoredProperties() -> [String] {
["task"]
}
}
extension DownloadItemPart {
init(filename: String, destination: URL, itemTitle: String, serverPath: String, audioTrack:AudioTrack?, episode: PodcastEpisode?) {
var downloadUrl = "" // TODO: Set this
if (serverPath.hasSuffix("/cover")) {
downloadUrl += "&format=jpeg" // For cover images force to jpeg
}
}
}