mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2026-09-01 16:17:25 +02:00
Update iOS to send partial playback session on local syncs
This commit is contained in:
@@ -511,7 +511,8 @@ class ApiClient {
|
|||||||
|
|
||||||
public static func reportLocalPlaybackProgress(_ session: PlaybackSession) async -> Bool {
|
public static func reportLocalPlaybackProgress(_ session: PlaybackSession) async -> Bool {
|
||||||
return await withCheckedContinuation { continuation in
|
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)
|
continuation.resume(returning: success)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -519,7 +520,10 @@ class ApiClient {
|
|||||||
|
|
||||||
public static func reportAllLocalPlaybackSessions(_ sessions: [PlaybackSession]) async -> Bool {
|
public static func reportAllLocalPlaybackSessions(_ sessions: [PlaybackSession]) async -> Bool {
|
||||||
return await withCheckedContinuation { continuation in
|
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
|
postResourceWithTokenRefresh(endpoint: "api/session/local-all", parameters: payload) { success in
|
||||||
continuation.resume(returning: success)
|
continuation.resume(returning: success)
|
||||||
}
|
}
|
||||||
@@ -668,8 +672,44 @@ struct LocalMediaProgressSyncResultsPayload: Codable {
|
|||||||
var numLocalProgressUpdates: Int?
|
var numLocalProgressUpdates: Int?
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LocalPlaybackSessionSyncAllPayload: Codable {
|
struct PartialPlaybackSessionSyncPayload: Encodable {
|
||||||
var sessions: [PlaybackSession]
|
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?]?
|
var deviceInfo: [String: String?]?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user