mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-05 16:15:43 +00:00
70 lines
1.5 KiB
Swift
70 lines
1.5 KiB
Swift
import Foundation
|
|
|
|
enum GopeedTaskEventType: Equatable {
|
|
case start
|
|
case progress
|
|
case pause
|
|
case done
|
|
case error
|
|
case delete
|
|
case other(String)
|
|
|
|
init(rawValue: String) {
|
|
switch rawValue {
|
|
case "task.start":
|
|
self = .start
|
|
case "task.progress":
|
|
self = .progress
|
|
case "task.pause":
|
|
self = .pause
|
|
case "task.done":
|
|
self = .done
|
|
case "task.error":
|
|
self = .error
|
|
case "task.delete":
|
|
self = .delete
|
|
default:
|
|
self = .other(rawValue)
|
|
}
|
|
}
|
|
}
|
|
|
|
struct GopeedTaskEvent {
|
|
let type: GopeedTaskEventType
|
|
let taskID: String
|
|
let name: String
|
|
let error: String?
|
|
|
|
private struct Payload: Decodable {
|
|
let type: String
|
|
let taskId: String
|
|
let name: String?
|
|
let error: String?
|
|
}
|
|
|
|
static func decode(
|
|
_ payload: String
|
|
) -> GopeedTaskEvent? {
|
|
guard
|
|
let data = payload.data(using: .utf8),
|
|
let decoded =
|
|
try? JSONDecoder().decode(
|
|
Payload.self,
|
|
from: data
|
|
)
|
|
else {
|
|
return nil
|
|
}
|
|
|
|
return GopeedTaskEvent(
|
|
type:
|
|
GopeedTaskEventType(
|
|
rawValue: decoded.type
|
|
),
|
|
taskID: decoded.taskId,
|
|
name: decoded.name ?? "Download",
|
|
error: decoded.error
|
|
)
|
|
}
|
|
}
|