TorBox can now show if there's a batch before loading a file. Cloud downloads should check the server in case there's a different method to fetch a download link. Signed-off-by: kingbri <bdashore3@proton.me>
110 lines
2.8 KiB
Swift
110 lines
2.8 KiB
Swift
//
|
|
// TorBoxModels.swift
|
|
// Ferrite
|
|
//
|
|
// Created by Brian Dashore on 6/11/24.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
extension TorBox {
|
|
struct TBResponse<TBData: Codable>: Codable {
|
|
let success: Bool
|
|
let detail: String
|
|
let data: TBData?
|
|
}
|
|
|
|
// MARK: - InstantAvailability
|
|
|
|
enum InstantAvailabilityData: Codable {
|
|
case links([InstantAvailabilityDataObject])
|
|
case failure(InstantAvailabilityDataFailure)
|
|
|
|
init(from decoder: Decoder) throws {
|
|
let container = try decoder.singleValueContainer()
|
|
|
|
// Only continue if the data is a List which indicates a success
|
|
if let linkArray = try? container.decode([InstantAvailabilityDataObject].self) {
|
|
self = .links(linkArray)
|
|
} else {
|
|
let value = try container.decode(InstantAvailabilityDataFailure.self)
|
|
self = .failure(value)
|
|
}
|
|
}
|
|
|
|
func encode(to encoder: Encoder) throws {
|
|
var container = encoder.singleValueContainer()
|
|
switch self {
|
|
case let .links(array):
|
|
try container.encode(array)
|
|
case let .failure(value):
|
|
try container.encode(value)
|
|
}
|
|
}
|
|
}
|
|
|
|
struct InstantAvailabilityDataObject: Codable, Sendable {
|
|
let name: String
|
|
let size: Int
|
|
let hash: String
|
|
let files: [InstantAvailabilityFile]
|
|
}
|
|
|
|
struct InstantAvailabilityFile: Codable, Sendable {
|
|
let name: String
|
|
let size: Int
|
|
}
|
|
|
|
struct InstantAvailabilityDataFailure: Codable, Sendable {
|
|
let data: Bool
|
|
}
|
|
|
|
struct CreateTorrentResponse: Codable, Sendable {
|
|
let hash: String
|
|
let torrentId: Int
|
|
let authId: String
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case hash
|
|
case torrentId = "torrent_id"
|
|
case authId = "auth_id"
|
|
}
|
|
}
|
|
|
|
struct MyTorrentListResponse: Codable, Sendable {
|
|
let id: Int
|
|
let hash: String
|
|
let name: String
|
|
let downloadState: String
|
|
let files: [MyTorrentListFile]
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id, hash, name, files
|
|
case downloadState = "download_state"
|
|
}
|
|
}
|
|
|
|
struct MyTorrentListFile: Codable, Sendable {
|
|
let id: Int
|
|
let hash: String
|
|
let name: String
|
|
let shortName: String
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case id, hash, name
|
|
case shortName = "short_name"
|
|
}
|
|
}
|
|
|
|
typealias RequestDLResponse = String
|
|
|
|
struct ControlTorrentRequest: Codable, Sendable {
|
|
let torrentId: String
|
|
let operation: String
|
|
|
|
enum CodingKeys: String, CodingKey {
|
|
case operation
|
|
case torrentId = "torrent_id"
|
|
}
|
|
}
|
|
}
|