import CoreLocation import Foundation extension String { var firstLetter: String { String(prefix(1)).uppercased() } var makeReply: String { let allLines = components(separatedBy: .newlines) let nonBlankLines = allLines.filter { !$0.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty } var result = nonBlankLines.joined(separator: "\n") result = "> \(result)" return result } var isLocation: Bool { hasPrefix("geo:") } var getLatLon: CLLocationCoordinate2D { let geo = components(separatedBy: ":")[1] let parts = geo.components(separatedBy: ",") let lat = Double(parts[0]) ?? 0.0 let lon = Double(parts[1]) ?? 0.0 return CLLocationCoordinate2D(latitude: lat, longitude: lon) } var isContact: Bool { hasPrefix("contact:") } var getContactJid: String { components(separatedBy: ":")[1] } } extension String { var attachmentType: MessageAttachmentType { let ext = (self as NSString).pathExtension.lowercased() switch ext { case "mov", "mp4", "avi": return .movie case "jpg", "png", "gif": return .image case "mp3", "wav", "m4a": return .audio case "txt", "doc", "pdf": return .file default: return .file } } }