aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Models/ChatMessage.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hotline/Models/ChatMessage.swift')
-rw-r--r--Hotline/Models/ChatMessage.swift55
1 files changed, 49 insertions, 6 deletions
diff --git a/Hotline/Models/ChatMessage.swift b/Hotline/Models/ChatMessage.swift
index 36648d1..f7383ba 100644
--- a/Hotline/Models/ChatMessage.swift
+++ b/Hotline/Models/ChatMessage.swift
@@ -2,28 +2,71 @@ import SwiftUI
enum ChatMessageType {
case agreement
- case status
+ case joined
+ case left
case message
case server
+ case signOut
+}
+
+extension ChatMessageType {
+ var storageKey: String {
+ switch self {
+ case .agreement:
+ return "agreement"
+ case .joined:
+ return "joined"
+ case .left:
+ return "left"
+ case .message:
+ return "message"
+ case .server:
+ return "server"
+ case .signOut:
+ return "signOut"
+ }
+ }
+
+ init?(storageKey: String) {
+ switch storageKey {
+ case "agreement":
+ self = .agreement
+ case "joined":
+ self = .joined
+ case "left":
+ self = .left
+ case "message":
+ self = .message
+ case "server":
+ self = .server
+ case "signOut":
+ self = .signOut
+ default:
+ return nil
+ }
+ }
}
struct ChatMessage: Identifiable {
- let id = UUID()
+ let id: UUID
let text: String
let type: ChatMessageType
let date: Date
let username: String?
-
+ var metadata: ChatStore.EntryMetadata?
+
static let parser = /^\s*([^\:]+):\s*([\s\S]+)$/
init(text: String, type: ChatMessageType, date: Date) {
+ self.id = UUID()
self.type = type
self.date = date
+ self.metadata = nil
- if type == .message,
- let match = text.firstMatch(of: ChatMessage.parser)
- {
+ if
+ type == .message,
+ let match = text.firstMatch(of: ChatMessage.parser) {
self.username = String(match.1)
self.text = String(match.2)
} else {