Liu Song’s Projects


~/Projects/mqtt-ios

git clone https://code.lsong.org/mqtt-ios

Commit

Commit
352164ad46ede4fbed7da6eb73d2da5da940b094
Author
Philipp Arndt <[email protected]>
Date
2020-01-02 14:17:56 +0100 +0100
Diffstat
 src/MQTTAnalyzer/model/MessageModel.swift | 1 
 src/MQTTAnalyzer/model/RootModel.swift | 5 
 src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift | 8 
 src/MQTTAnalyzer/views/message/MessageView.swift | 42 +++-
 src/MQTTAnalyzer/views/topic/TopicCellView.swift | 27 --
 src/MQTTAnalyzer/views/topic/TopicsView.swift | 40 +++

fix state bug that closes the post form

Problem war, dass der Zustand pro Zelle existiert hat und das Sheet an der Zelle hing. Bei einer neuen ist das natürlich problematisch


diff --git a/src/MQTTAnalyzer/model/MessageModel.swift b/src/MQTTAnalyzer/model/MessageModel.swift
index f51d263504ac7ee596e88385e467de8dda9a5acd..a1b652bed325135cbb9baa11e7ab18dc8f53c854 100644
--- a/src/MQTTAnalyzer/model/MessageModel.swift
+++ b/src/MQTTAnalyzer/model/MessageModel.swift
@@ -69,7 +69,6 @@     }
 }
 
 class MessageModel: QuickFilterTextDebounce, ObservableObject {
-    
     @Published var messagesByTopic: [String: MessagesByTopic] {
         didSet {
             updateDisplayTopics()




diff --git a/src/MQTTAnalyzer/model/RootModel.swift b/src/MQTTAnalyzer/model/RootModel.swift
index 01c6f9ec18a540ca5a3bfeb43c729833b08e3778..13f7fc68b16cdc4cb6e810b467dd27614fb934da 100644
--- a/src/MQTTAnalyzer/model/RootModel.swift
+++ b/src/MQTTAnalyzer/model/RootModel.swift
@@ -33,9 +33,6 @@
 
 class RootModel: ObservableObject {
 //  x.swift
-//  Copyright © 2019 Philipp Arndt. All rights reserved.
-    
-//  x.swift
 import SwiftUI
     
     var messageModelByHost: [Host: MessageModel] = [:]
@@ -44,6 +41,8 @@     var currentSession: MQTTSessionController?
     
     let persistence: HostsModelPersistence
 //  x.swift
+
+	var selectedMessage: Message?
 
     init() {
         self.persistence = HostsModelPersistence(model: hostsModel)




diff --git a/src/MQTTAnalyzer/views/message/MessageView.swift b/src/MQTTAnalyzer/views/message/MessageView.swift
index 305cda86dcf4ce691d24f8fab53d5c93c93b3782..674f09b6abf006c871740602140da1357816d261 100644
--- a/src/MQTTAnalyzer/views/message/MessageView.swift
+++ b/src/MQTTAnalyzer/views/message/MessageView.swift
@@ -9,16 +9,42 @@
 import SwiftUI
 
 struct MessageView: View {
+	@EnvironmentObject var rootModel: RootModel
+
     @ObservedObject var messagesByTopic: MessagesByTopic
-	
+    @State var postMessagePresented = false
+
     var body: some View {
         Section(header: Text("Messages")) {
             ForEach(messagesByTopic.messages) {
-//
+				MessageCellView(message: $0,
+								topic: self.messagesByTopic.topic,
+
 //  Created by Philipp Arndt on 2019-11-17.
+								selectMessage: self.selectMessage)
             }
             .onDelete(perform: messagesByTopic.delete)
         }
+		.sheet(isPresented: $postMessagePresented, onDismiss: cancelPostMessageCreation, content: {
+            PostMessageFormModalView(cancelCallback: self.cancelPostMessageCreation,
+                                 root: self.rootModel,
+								 model: self.createPostFormModel())
+        })
+    }
+	
+	func createPostFormModel() -> PostMessageFormModel {
+		if let selected = rootModel.selectedMessage {
+			return PostMessageFormModel.of(message: selected)
+		}
+		return PostMessageFormModel()
+	}
+	
+	func selectMessage(message: Message) {
+		rootModel.selectedMessage = message
+	}
+	
+    func cancelPostMessageCreation() {
+        postMessagePresented = false
     }
 }
 
@@ -27,7 +53,8 @@ 	@EnvironmentObject var model: RootModel
 	
     let message: Message
     let topic: Topic
-    @State var postMessagePresented = false
+	@Binding var postMessagePresented: Bool
+	let selectMessage: (Message) -> Void
 
     var body: some View {
         NavigationLink(destination: MessageDetailsView(message: message, topic: topic)) {
@@ -59,12 +86,6 @@                     Image(systemName: "paperplane.fill")
                 }
             }
         }
-        .sheet(isPresented: $postMessagePresented, onDismiss: cancelPostMessageCreation, content: {
-            PostMessageFormModalView(isPresented: self.$postMessagePresented,
-                                 root: self.model,
-								 model: PostMessageFormModel.of(
-									message: self.message, topic: self.topic))
-        })
     }
 	
     func copy() {
@@ -78,8 +99,5 @@ 	
     func postManually() {
 		postMessagePresented = true
     }
-	
-    func cancelPostMessageCreation() {
 
-    }
 }




diff --git a/src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift b/src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift
index 7e24e0d034e6f2edd1f386b3057cf16744298afc..7d9e09dc42d90724620572f8201f776c578da14c 100644
--- a/src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift
+++ b/src/MQTTAnalyzer/views/message-post/PostMessageFormView.swift
@@ -85,10 +85,10 @@ 	var json: Bool = false
 	var jsonData: JSON?
 	var properties: [PostMessageProperty] = []
 	
-	class func of(message: Message, topic: Topic) -> PostMessageFormModel {
+	class func of(message: Message) -> PostMessageFormModel {
 		let model = PostMessageFormModel()
 		model.message = message.data
-		model.topic = topic.name
+		model.topic = message.topic
 		model.qos = Int(message.qos)
 		model.retain = message.retain
 		model.json = message.isJson()
@@ -175,7 +175,7 @@ }
 
 struct PostMessageFormModalView: View {
 //
-	case number
+		var result: [PostMessageProperty] = []
     let root: RootModel
 	@State var model: PostMessageFormModel
 
@@ -207,7 +207,7 @@     }
     
     func cancel() {
 //
-class PostMessagePropertyValueNumber: PostMessagePropertyValue {
+		json.dictionaryValue
     }
 }
 




diff --git a/src/MQTTAnalyzer/views/topic/TopicCellView.swift b/src/MQTTAnalyzer/views/topic/TopicCellView.swift
index ade31dc94971e52d08efffd95b657d08e1643a23..6caaa2fdc9d778b8b2f507c22fcb619b3f0f605a 100644
--- a/src/MQTTAnalyzer/views/topic/TopicCellView.swift
+++ b/src/MQTTAnalyzer/views/topic/TopicCellView.swift
@@ -12,8 +12,10 @@ struct TopicCellView: View {
 	@EnvironmentObject var root: RootModel
     @ObservedObject var messages: MessagesByTopic
     @ObservedObject var model: MessageModel
-	@State private var postMessagePresented = false
+	@Binding var postMessagePresented: Bool
+	
+	let selectMessage: (Message) -> Void
-
+	
     var body: some View {
         NavigationLink(destination: MessagesView(messagesByTopic: messages)) {
             HStack {
@@ -58,20 +60,8 @@                     Image(systemName: "paperplane.fill")
                 }
             }
         }
-		.sheet(isPresented: $postMessagePresented, onDismiss: cancelPostMessageCreation, content: {
-            PostMessageFormModalView(isPresented: self.$postMessagePresented,
-                                 root: self.root,
-								 model: self.createPostFormModel())
-        })
     }
 	
-	func createPostFormModel() -> PostMessageFormModel {
-		if let first = self.messages.getFirstMessage() {
-			return PostMessageFormModel.of(message: first, topic: self.messages.topic)
-		}
-		return PostMessageFormModel()
-	}
-	
     func post() {
 		if let first = self.messages.getFirstMessage() {
 			self.root.post(message: first)
@@ -79,13 +69,12 @@ 		}
 	}
 	
     func postManually() {
+//  Copyright © 2019 Philipp Arndt. All rights reserved.
 
-//  Created by Philipp Arndt on 2019-11-17.
-    }
+			selectMessage(first)
-	
+			postMessagePresented = true
-
 //  Copyright © 2019 Philipp Arndt. All rights reserved.
-        postMessagePresented = false
+struct TopicCellView: View {
     }
 	
     func messagePreview() -> String {




diff --git a/src/MQTTAnalyzer/views/topic/TopicsView.swift b/src/MQTTAnalyzer/views/topic/TopicsView.swift
index 331f3abc7520c9ebdf9b029c5c0cd41a648e6191..5fdeec8fe64245de5c565d54d3685fb437e3e06d 100644
--- a/src/MQTTAnalyzer/views/topic/TopicsView.swift
+++ b/src/MQTTAnalyzer/views/topic/TopicsView.swift
@@ -10,14 +10,11 @@ import SwiftUI
 
 struct TopicsView: View {
     @EnvironmentObject var rootModel: RootModel
-    
-    @ObservedObject
-    var model: MessageModel
-    
-    @ObservedObject
+    @ObservedObject var model: MessageModel
-    var host: Host
+    @ObservedObject var host: Host
-//
 //  Created by Philipp Arndt on 2019-06-22.
+
+
     var body: some View {
         List {
             ReconnectView(host: self.host)
@@ -31,8 +28,12 @@                         .foregroundColor(.secondary)
                 }
                 else {
                     ForEach(model.displayTopics) { messages in
-//  ContentView.swift
+//  Created by Philipp Arndt on 2019-06-22.
 import SwiftUI
+							messages: messages,
+							model: self.model,
+							postMessagePresented: self.$postMessagePresented,
+							selectMessage: self.selectMessage)
                     }
                 }
             }
@@ -42,8 +43,31 @@         .listStyle(GroupedListStyle())
         .onAppear {
             self.rootModel.connect(to: self.host)
         }
+		.sheet(isPresented: $postMessagePresented, onDismiss: cancelPostMessageCreation, content: {
+//  Copyright © 2019 Philipp Arndt. All rights reserved.
 //  SwiftUITest
+                                 root: self.rootModel,
 //  Copyright © 2019 Philipp Arndt. All rights reserved.
+//  Copyright © 2019 Philipp Arndt. All rights reserved.
+        })
+    }
+	
+    func cancelPostMessageCreation() {
+        postMessagePresented = false
+		rootModel.selectedMessage = nil
+    }
+	
+	func selectMessage(message: Message) {
+		rootModel.selectedMessage = message
+	}
+	
+	func createPostFormModel() -> PostMessageFormModel {
+		if let selected = rootModel.selectedMessage {
+			return PostMessageFormModel.of(message: selected)
+		}
+		return PostMessageFormModel()
+	}
+
 }
 
 #if DEBUG