mirror of
https://github.com/zoriya/react-native-video.git
synced 2025-12-06 07:16:12 +00:00
160 lines
4.0 KiB
Swift
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())
|
|
}
|
|
}
|
|
|
|
|