diff options
Diffstat (limited to 'Hotline/Models/FilePreview.swift')
| -rw-r--r-- | Hotline/Models/FilePreview.swift | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/Hotline/Models/FilePreview.swift b/Hotline/Models/FilePreview.swift index e5f49a3..bba29fa 100644 --- a/Hotline/Models/FilePreview.swift +++ b/Hotline/Models/FilePreview.swift @@ -18,52 +18,55 @@ enum FilePreviewType: Equatable { final class FilePreview: HotlineFilePreviewClientDelegate { @ObservationIgnored let info: PreviewFileInfo @ObservationIgnored var client: HotlineFilePreviewClient? = nil - + var state: FilePreviewState = .unloaded var progress: Double = 0.0 - + var data: Data? = nil - + #if os(iOS) - var image: UIImage? = nil + var image: UIImage? = nil #elseif os(macOS) - var image: NSImage? = nil + var image: NSImage? = nil #endif - + var text: String? = nil var styledText: NSAttributedString? = nil - + var previewType: FilePreviewType { let fileExtension = (info.name as NSString).pathExtension if let fileType = UTType(filenameExtension: fileExtension) { if fileType.isSubtype(of: .image) { return .image - } - else if fileType.isSubtype(of: .text) { + } else if fileType.isSubtype(of: .text) { return .text } } return .unknown } - + init(info: PreviewFileInfo) { self.info = info - - self.client = HotlineFilePreviewClient(address: info.address, port: UInt16(info.port), reference: info.id, size: UInt32(info.size)) + + self.client = HotlineFilePreviewClient( + address: info.address, port: UInt16(info.port), reference: info.id, size: UInt32(info.size)) self.client?.delegate = self } - + func download() { self.client?.start() } - + func cancel() { self.client?.cancel() } - - func hotlineTransferStatusChanged(client: any HotlineTransferClient, reference: UInt32, status: HotlineTransferStatus, timeRemaining: TimeInterval) { + + func hotlineTransferStatusChanged( + client: any HotlineTransferClient, reference: UInt32, status: HotlineTransferStatus, + timeRemaining: TimeInterval + ) { print("FilePreview: Download status changed:", status) - + switch status { case .unconnected: state = .unloaded @@ -88,24 +91,24 @@ final class FilePreview: HotlineFilePreviewClientDelegate { progress = 1.0 } } - + func hotlineFilePreviewComplete(client: HotlineFilePreviewClient, reference: UInt32, data: Data) { self.state = .loaded self.data = data - + switch self.previewType { case .image: #if os(iOS) - self.image = UIImage(data: data) + self.image = UIImage(data: data) #elseif os(macOS) - self.image = NSImage(data: data) + self.image = NSImage(data: data) #endif case .text: - let encoding: UInt = NSString.stringEncoding(for: data, convertedString: nil, usedLossyConversion: nil) + let encoding: UInt = NSString.stringEncoding( + for: data, convertedString: nil, usedLossyConversion: nil) if encoding != 0 { self.text = String(data: data, encoding: String.Encoding(rawValue: encoding)) - } - else { + } else { self.text = String(data: data, encoding: .utf8) } case .unknown: |