Update iOS to send partial playback session on local syncs

This commit is contained in:
advplyr
2026-08-01 17:47:35 -05:00
parent f562a1a5dc
commit 1d163df773
+44 -4
View File
@@ -511,7 +511,8 @@ class ApiClient {
public static func reportLocalPlaybackProgress(_ session: PlaybackSession) async -> Bool {
return await withCheckedContinuation { continuation in
postResourceWithTokenRefresh(endpoint: "api/session/local", parameters: session) { success in
let payload = PartialPlaybackSessionSyncPayload(from: session, includeDeviceInfo: true)
postResourceWithTokenRefresh(endpoint: "api/session/local", parameters: payload) { success in
continuation.resume(returning: success)
}
}
@@ -519,7 +520,10 @@ class ApiClient {
public static func reportAllLocalPlaybackSessions(_ sessions: [PlaybackSession]) async -> Bool {
return await withCheckedContinuation { continuation in
let payload = LocalPlaybackSessionSyncAllPayload(sessions: sessions, deviceInfo: sessions.first?.deviceInfo)
let payload = LocalPlaybackSessionSyncAllPayload(
sessions: sessions.map { PartialPlaybackSessionSyncPayload(from: $0, includeDeviceInfo: false) },
deviceInfo: sessions.first?.deviceInfo
)
postResourceWithTokenRefresh(endpoint: "api/session/local-all", parameters: payload) { success in
continuation.resume(returning: success)
}
@@ -668,8 +672,44 @@ struct LocalMediaProgressSyncResultsPayload: Codable {
var numLocalProgressUpdates: Int?
}
struct LocalPlaybackSessionSyncAllPayload: Codable {
var sessions: [PlaybackSession]
struct PartialPlaybackSessionSyncPayload: Encodable {
let id: String
let userId: String?
let libraryItemId: String?
let episodeId: String?
let mediaType: String
let displayTitle: String?
let displayAuthor: String?
let duration: Double
let playMethod: Int
let startedAt: Double?
let updatedAt: Double?
let timeListening: Double
let currentTime: Double
let mediaPlayer: String
let deviceInfo: [String: String?]?
init(from session: PlaybackSession, includeDeviceInfo: Bool) {
id = session.id
userId = session.userId
libraryItemId = session.libraryItemId
episodeId = session.episodeId
mediaType = session.mediaType
displayTitle = session.displayTitle
displayAuthor = session.displayAuthor
duration = session.duration
playMethod = session.playMethod
startedAt = session.startedAt
updatedAt = session.updatedAt
timeListening = session.timeListening
currentTime = session.currentTime
mediaPlayer = session.mediaPlayer
deviceInfo = includeDeviceInfo ? session.deviceInfo : nil
}
}
struct LocalPlaybackSessionSyncAllPayload: Encodable {
var sessions: [PartialPlaybackSessionSyncPayload]
var deviceInfo: [String: String?]?
}