From f07c7a36aff679e4a801ae480c03c4381db937e2 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Wed, 17 Jan 2024 17:16:34 +0800 Subject: [PATCH] Add convenience function to check if URL is a file or folder and check playability from there Signed-off-by: Claudio Cambra --- Harmony/Common/AudioFile.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Harmony/Common/AudioFile.swift b/Harmony/Common/AudioFile.swift index 9c76451..67adbd0 100644 --- a/Harmony/Common/AudioFile.swift +++ b/Harmony/Common/AudioFile.swift @@ -8,6 +8,10 @@ import Foundation import AVFoundation +enum FilePlayable { + case fileNotPlayable, fileMaybePlayable, filePlayable +} + func playableFileExtensions() -> [String] { let avTypes = AVURLAsset.audiovisualTypes() let avExtensions = avTypes @@ -20,3 +24,16 @@ func fileHasPlayableExtension(fileURL: URL) -> Bool { let fileExtension = fileURL.pathExtension.lowercased() return playableFileExtensions().contains(fileExtension) } + +func filePlayability(fileURL: URL) -> FilePlayable { + guard fileHasPlayableExtension(fileURL: fileURL) else { return .fileNotPlayable } + do { + let fileAttributes = try fileURL.resourceValues(forKeys:[.isRegularFileKey]) + if fileAttributes.isRegularFile! { + return .filePlayable + } + } catch { + print("Error reading file attributes for \(fileURL): \(error).") + } + return .fileMaybePlayable +}