Add retry button to video load error alert

This commit is contained in:
Arkadiusz Fal 2022-11-13 13:42:48 +01:00
parent 815d0b3ae8
commit b45ceaec59

View File

@ -2,6 +2,7 @@ import AVKit
import Defaults import Defaults
import Foundation import Foundation
import Siesta import Siesta
import SwiftUI
extension PlayerModel { extension PlayerModel {
var currentVideo: Video? { var currentVideo: Video? {
@ -154,7 +155,7 @@ extension PlayerModel {
currentItem.playbackTime = time currentItem.playbackTime = time
let playTime = currentItem.shouldRestartPlaying ? CMTime.zero : time let playTime = currentItem.shouldRestartPlaying ? CMTime.zero : time
playerAPI.loadDetails(currentItem, failureHandler: videoLoadFailureHandler) { newItem in playerAPI.loadDetails(currentItem, failureHandler: { self.videoLoadFailureHandler($0, video: self.currentItem.video) }) { newItem in
self.playItem(newItem, at: playTime) self.playItem(newItem, at: playTime)
} }
} }
@ -197,7 +198,7 @@ extension PlayerModel {
} }
if loadDetails { if loadDetails {
playerAPI.loadDetails(item, failureHandler: videoLoadFailureHandler) { [weak self] newItem in playerAPI.loadDetails(item, failureHandler: { self.videoLoadFailureHandler($0, video: video) }) { [weak self] newItem in
guard let self else { return } guard let self else { return }
videoDetailsLoadHandler(newItem.video, newItem) videoDetailsLoadHandler(newItem.video, newItem)
@ -303,7 +304,7 @@ extension PlayerModel {
}) })
} }
private func videoLoadFailureHandler(_ error: RequestError) { private func videoLoadFailureHandler(_ error: RequestError, video: Video? = nil) {
var message = error.userMessage var message = error.userMessage
if let errorDictionary = error.json.dictionaryObject, if let errorDictionary = error.json.dictionaryObject,
let errorMessage = errorDictionary["message"] ?? errorDictionary["error"], let errorMessage = errorDictionary["message"] ?? errorDictionary["error"],
@ -313,7 +314,18 @@ extension PlayerModel {
message += errorString message += errorString
} }
navigation.presentAlert(title: "Could not load video", message: message) let alert = Alert(
title: Text("Could not load video"),
message: Text(message),
primaryButton: .cancel(),
secondaryButton: .default(Text("Retry")) { [weak self] in
if let self, let video = video {
self.enqueueVideo(video, play: true, prepending: true, loadDetails: true)
}
}
)
navigation.presentAlert(alert)
advancing = false advancing = false
videoBeingOpened = nil videoBeingOpened = nil
currentItem = nil currentItem = nil