diff --git a/ios/App/App/plugins/AbsDownloader.swift b/ios/App/App/plugins/AbsDownloader.swift index 8b8191b0..4231cc93 100644 --- a/ios/App/App/plugins/AbsDownloader.swift +++ b/ios/App/App/plugins/AbsDownloader.swift @@ -58,7 +58,7 @@ public class AbsDownloader: CAPPlugin { let localUrl = itemDirectory.appendingPathComponent("\(filename)") downloadTrack(serverUrl: serverUrl, localUrl: localUrl) - return LocalFile(filename: filename, localUrl: localUrl) + return LocalFile(filename, track.mimeType, localUrl) } private func urlForTrack(item: LibraryItem, track: AudioTrack) -> URL { diff --git a/ios/App/Shared/models/LocalLibrary.swift b/ios/App/Shared/models/LocalLibrary.swift index 98ea65c1..64ed2c0b 100644 --- a/ios/App/Shared/models/LocalLibrary.swift +++ b/ios/App/Shared/models/LocalLibrary.swift @@ -120,9 +120,7 @@ class LocalFile: Object, Encodable { @Persisted var id: String = UUID().uuidString @Persisted var filename: String? = "" @Persisted var contentUrl: String - @Persisted var basePath: String @Persisted var absolutePath: String - @Persisted var simplePath: String @Persisted var mimeType: String? = "" @Persisted var size: Int64 } diff --git a/ios/App/Shared/models/LocalLibraryExtensions.swift b/ios/App/Shared/models/LocalLibraryExtensions.swift index bca58e30..8447abb4 100644 --- a/ios/App/Shared/models/LocalLibraryExtensions.swift +++ b/ios/App/Shared/models/LocalLibraryExtensions.swift @@ -337,9 +337,7 @@ extension LocalFile { case id case filename case contentUrl - case basePath case absolutePath - case simplePath case mimeType case size } @@ -349,22 +347,28 @@ extension LocalFile { try container.encode(id, forKey: .id) try container.encode(filename, forKey: .filename) try container.encode(contentUrl, forKey: .contentUrl) - try container.encode(basePath, forKey: .basePath) try container.encode(absolutePath, forKey: .absolutePath) - try container.encode(simplePath, forKey: .simplePath) try container.encode(mimeType, forKey: .mimeType) try container.encode(size, forKey: .size) } - convenience init(filename: String, localUrl: URL) { + convenience init(_ filename: String, _ mimeType: String, _ localUrl: URL) { self.init() + self.id = localUrl.absoluteString.toBase64() self.filename = filename self.contentUrl = localUrl.absoluteString - // TODO: self.baseUrl - self.absolutePath = localUrl.absoluteString - self.simplePath = localUrl.path - // TODO: self.mimeType - // TODO: self.size + self.absolutePath = localUrl.path + self.size = localUrl.fileSize + } + + func isAudioFile() -> Bool { + switch self.mimeType { + case "application/octet-stream", + "video/mp4": + return true + default: + return self.mimeType?.starts(with: "audio") ?? false + } } } diff --git a/ios/App/Shared/util/Extensions.swift b/ios/App/Shared/util/Extensions.swift index 72088b9a..36d14b6b 100644 --- a/ios/App/Shared/util/Extensions.swift +++ b/ios/App/Shared/util/Extensions.swift @@ -42,3 +42,26 @@ extension DispatchQueue { } } } + +extension URL { + var attributes: [FileAttributeKey : Any]? { + do { + return try FileManager.default.attributesOfItem(atPath: path) + } catch let error as NSError { + print("FileAttribute error: \(error)") + } + return nil + } + + var fileSize: Int64 { + return attributes?[.size] as? Int64 ?? Int64(0) + } + + var fileSizeString: String { + return ByteCountFormatter.string(fromByteCount: Int64(fileSize), countStyle: .file) + } + + var creationDate: Date? { + return attributes?[.creationDate] as? Date + } +}