Files
react-native-video/ios/core/VideoError.swift
2025-10-21 23:29:08 +02:00

160 lines
4.0 KiB
Swift

//
// VideoFileHelper.swift
// ReactNativeVideo
//
// Created by Krzysztof Moch on 24/01/2025.
//
import Foundation
import NitroModules
// MARK: - LibraryError
enum LibraryError: VideoError {
case deallocated(objectName: String)
case DRMPluginNotFound
var code: String {
switch self {
case .deallocated:
return "library/deallocated"
case .DRMPluginNotFound:
return "library/drm-plugin-not-found"
}
}
var message: String {
switch self {
case let .deallocated(objectName: objectName):
return "Object \(objectName) has been deallocated"
case .DRMPluginNotFound:
return "No DRM plugin have been found, please add one to the project"
}
}
}
// MARK: - PlayerError
enum PlayerError: VideoError {
case notInitialized
case assetNotInitialized
case invalidSource
case invalidTrackUrl(url: String)
var code: String {
switch self {
case .notInitialized:
return "player/not-initialized"
case .assetNotInitialized:
return "player/asset-not-initialized"
case .invalidSource:
return "player/invalid-source"
case .invalidTrackUrl:
return "player/invalid-track-url"
}
}
var message: String {
switch self {
case .notInitialized:
return "Player has not been initialized (Or has been set to nil)"
case .assetNotInitialized:
return "Asset has not been initialized (Or has been set to nil)"
case .invalidSource:
return "Invalid source passed to player"
case let .invalidTrackUrl(url: url):
return "Invalid track URL: \(url)"
}
}
}
// MARK: - SourceError
enum SourceError: VideoError {
case invalidUri(uri: String)
case missingReadFilePermission(uri: String)
case fileDoesNotExist(uri: String)
case failedToInitializeAsset
case unsupportedContentType(uri: String)
var code: String {
switch self {
case .invalidUri:
return "source/invalid-uri"
case .missingReadFilePermission:
return "source/missing-read-file-permission"
case .fileDoesNotExist:
return "source/file-does-not-exist"
case .failedToInitializeAsset:
return "source/failed-to-initialize-asset"
case .unsupportedContentType:
return "source/unsupported-content-type"
}
}
var message: String {
switch self {
case let .invalidUri(uri: uri):
return "Invalid source file uri: \(uri)"
case let .missingReadFilePermission(uri: uri):
return "Missing read file permission for source file at \(uri)"
case let .fileDoesNotExist(uri: uri):
return "File does not exist at URI: \(uri)"
case .failedToInitializeAsset:
return "Failed to initialize asset"
case let .unsupportedContentType(uri: uri):
return "type of content (\(uri)) is not supported"
}
}
}
// MARK: - VideoViewError
enum VideoViewError: VideoError {
case viewNotFound(nitroId: Double)
case viewIsDeallocated
case pictureInPictureNotSupported
var code: String {
switch self {
case .viewNotFound:
return "view/not-found"
case .viewIsDeallocated:
return "view/deallocated"
case .pictureInPictureNotSupported:
return "view/picture-in-picture-not-supported"
}
}
var message: String {
switch self {
case let .viewNotFound(nitroId: nitroId):
return "View with nitroId \(nitroId) not found"
case .viewIsDeallocated:
return "Attempt to access a view, but it has been deallocated (or not initialized)"
case .pictureInPictureNotSupported:
return "Picture in picture is not supported on this device"
}
}
}
// MARK: - UnknownError
struct UnknownError: VideoError {
var code: String { "unknown/unknown" }
var message: String { "Unknown error" }
}
// MARK: - VideoError
protocol VideoError {
var code: String { get }
var message: String { get }
}
extension VideoError {
private func getMessage() -> String {
return "{%@\(code)::\(message)@%}"
}
func error() -> Error {
return RuntimeError.error(withMessage: getMessage())
}
}