diff --git a/ios/App/Shared/util/ApiClient.swift b/ios/App/Shared/util/ApiClient.swift index 1b1a7abb..cc5c1dbc 100644 --- a/ios/App/Shared/util/ApiClient.swift +++ b/ios/App/Shared/util/ApiClient.swift @@ -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?]? }