2024-07-11 13:59:24 +00:00
|
|
|
import CoreLocation
|
2024-06-19 15:15:27 +00:00
|
|
|
import Foundation
|
2024-08-07 19:07:39 +00:00
|
|
|
import SwiftUI
|
2024-06-19 15:15:27 +00:00
|
|
|
|
|
|
|
extension String {
|
|
|
|
var firstLetter: String {
|
|
|
|
String(prefix(1)).uppercased()
|
|
|
|
}
|
2024-06-27 11:39:41 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2024-07-11 13:59:24 +00:00
|
|
|
|
|
|
|
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)
|
|
|
|
}
|
2024-07-16 18:14:59 +00:00
|
|
|
|
|
|
|
var isContact: Bool {
|
|
|
|
hasPrefix("contact:")
|
|
|
|
}
|
|
|
|
|
|
|
|
var getContactJid: String {
|
|
|
|
components(separatedBy: ":")[1]
|
|
|
|
}
|
2024-06-19 15:15:27 +00:00
|
|
|
}
|
2024-07-13 13:38:15 +00:00
|
|
|
|
2024-08-11 00:28:01 +00:00
|
|
|
// 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
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
2024-08-07 19:07:39 +00:00
|
|
|
|
|
|
|
extension String {
|
|
|
|
var firstLetterColor: Color {
|
|
|
|
let firstLetter = self.firstLetter
|
|
|
|
switch firstLetter {
|
|
|
|
case "A", "M", "Y":
|
|
|
|
return Color.Rainbow.tortoiseLight500
|
|
|
|
|
|
|
|
case "B", "N", "Z":
|
|
|
|
return Color.Rainbow.orangeLight500
|
|
|
|
|
|
|
|
case "C", "O":
|
|
|
|
return Color.Rainbow.yellowLight500
|
|
|
|
|
|
|
|
case "D", "P":
|
|
|
|
return Color.Rainbow.greenLight500
|
|
|
|
|
|
|
|
case "E", "Q":
|
|
|
|
return Color.Rainbow.blueLight500
|
|
|
|
|
|
|
|
case "F", "R":
|
|
|
|
return Color.Rainbow.magentaLight500
|
|
|
|
|
|
|
|
case "G", "S":
|
|
|
|
return Color.Rainbow.tortoiseDark500
|
|
|
|
|
|
|
|
case "H", "T":
|
|
|
|
return Color.Rainbow.orangeDark500
|
|
|
|
|
|
|
|
case "I", "U":
|
|
|
|
return Color.Rainbow.yellowDark500
|
|
|
|
|
|
|
|
case "J", "V":
|
|
|
|
return Color.Rainbow.greenDark500
|
|
|
|
|
|
|
|
case "K", "W":
|
|
|
|
return Color.Rainbow.blueDark500
|
|
|
|
|
|
|
|
case "L", "X":
|
|
|
|
return Color.Rainbow.magentaDark500
|
|
|
|
|
|
|
|
default:
|
|
|
|
return Color.Rainbow.tortoiseLight500
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|