From b1848da7970590a0e3cf2593c53d5b3f6245bf57 Mon Sep 17 00:00:00 2001 From: "severin.memmishofer" Date: Thu, 13 Jul 2023 14:39:17 +0200 Subject: [PATCH] Fixed Save Button for new Feed Entries --- RippleChat.xcodeproj/project.pbxproj | 8 ++++---- RippleChat/{Body.swift => Bodyy.swift} | 2 +- RippleChat/Feed.swift | 20 ++++++++++++-------- RippleChat/LogEntry.swift | 6 +++--- RippleChat/Views/NewFeedEntryView.swift | 16 +++++++++++++--- 5 files changed, 33 insertions(+), 19 deletions(-) rename RippleChat/{Body.swift => Bodyy.swift} (93%) diff --git a/RippleChat.xcodeproj/project.pbxproj b/RippleChat.xcodeproj/project.pbxproj index 9e69ed9..901b4b8 100644 --- a/RippleChat.xcodeproj/project.pbxproj +++ b/RippleChat.xcodeproj/project.pbxproj @@ -20,7 +20,7 @@ 96BD33132A5C400B007A6E53 /* FeedListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BD33122A5C400B007A6E53 /* FeedListView.swift */; }; 96BD33162A5C403C007A6E53 /* PeeringView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BD33152A5C403C007A6E53 /* PeeringView.swift */; }; F581F59B2A5AE72F0081C383 /* BluetoothController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F581F59A2A5AE72F0081C383 /* BluetoothController.swift */; }; - F5847B622A599BF4009E28D4 /* Body.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5847B612A599BF4009E28D4 /* Body.swift */; }; + F5847B622A599BF4009E28D4 /* Bodyy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5847B612A599BF4009E28D4 /* Bodyy.swift */; }; F5847B642A599CC3009E28D4 /* LogEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5847B632A599CC3009E28D4 /* LogEntry.swift */; }; F5847B662A599EA4009E28D4 /* Feed.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5847B652A599EA4009E28D4 /* Feed.swift */; }; F5847B6A2A59AB24009E28D4 /* FeedStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5847B692A59AB24009E28D4 /* FeedStore.swift */; }; @@ -68,7 +68,7 @@ 96BD33122A5C400B007A6E53 /* FeedListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedListView.swift; sourceTree = ""; }; 96BD33152A5C403C007A6E53 /* PeeringView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeeringView.swift; sourceTree = ""; }; F581F59A2A5AE72F0081C383 /* BluetoothController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BluetoothController.swift; sourceTree = ""; }; - F5847B612A599BF4009E28D4 /* Body.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Body.swift; sourceTree = ""; }; + F5847B612A599BF4009E28D4 /* Bodyy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bodyy.swift; sourceTree = ""; }; F5847B632A599CC3009E28D4 /* LogEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogEntry.swift; sourceTree = ""; }; F5847B652A599EA4009E28D4 /* Feed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Feed.swift; sourceTree = ""; }; F5847B692A59AB24009E28D4 /* FeedStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedStore.swift; sourceTree = ""; }; @@ -139,7 +139,7 @@ F5A4B1222A5D5F8B00F5AE01 /* BTPeripheral.swift */, 96454F1E2A558EBD0040BEBD /* Assets.xcassets */, 96454F202A558EBD0040BEBD /* Preview Content */, - F5847B612A599BF4009E28D4 /* Body.swift */, + F5847B612A599BF4009E28D4 /* Bodyy.swift */, F5847B632A599CC3009E28D4 /* LogEntry.swift */, F5847B652A599EA4009E28D4 /* Feed.swift */, F5847B692A59AB24009E28D4 /* FeedStore.swift */, @@ -321,7 +321,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F5847B622A599BF4009E28D4 /* Body.swift in Sources */, + F5847B622A599BF4009E28D4 /* Bodyy.swift in Sources */, 96BD33162A5C403C007A6E53 /* PeeringView.swift in Sources */, F5847B662A599EA4009E28D4 /* Feed.swift in Sources */, 96BD33132A5C400B007A6E53 /* FeedListView.swift in Sources */, diff --git a/RippleChat/Body.swift b/RippleChat/Bodyy.swift similarity index 93% rename from RippleChat/Body.swift rename to RippleChat/Bodyy.swift index 8bc8fcb..8064a80 100644 --- a/RippleChat/Body.swift +++ b/RippleChat/Bodyy.swift @@ -8,7 +8,7 @@ import SwiftUI import Foundation -public struct Body: Codable { +public struct Bodyy: Codable { let tag: String let value: String diff --git a/RippleChat/Feed.swift b/RippleChat/Feed.swift index 845c034..a87f20f 100644 --- a/RippleChat/Feed.swift +++ b/RippleChat/Feed.swift @@ -10,7 +10,7 @@ import Foundation struct Feed: Codable { let feedID: String - let feed: [LogEntry] + var feed: [LogEntry] init(feedID: String = "", feed: [LogEntry] = []) { self.feedID = feedID @@ -25,23 +25,27 @@ struct Feed: Codable { } } + mutating func appendLogEntry(log: LogEntry) { + self.feed.append(log) + } + } extension Feed { static let sampleData: [LogEntry] = [ - LogEntry(feedid: "BOB", sequenceNumber: 1, body: Body(tag: Apps.nam, value: "Bob")), - LogEntry(feedid: "BOB", sequenceNumber: 2, body: Body(tag: Apps.txt, value: "My first post!")), - LogEntry(feedid: "BOB", sequenceNumber: 3, body: Body(tag: Apps.txt, value: "Welcome Alice")) + LogEntry(feedid: "BOB", sequenceNumber: 1, body: Bodyy(tag: Apps.nam, value: "Bob")), + LogEntry(feedid: "BOB", sequenceNumber: 2, body: Bodyy(tag: Apps.txt, value: "My first post!")), + LogEntry(feedid: "BOB", sequenceNumber: 3, body: Bodyy(tag: Apps.txt, value: "Welcome Alice")) ] static let sampleData2: [LogEntry] = [ - LogEntry(feedid: "ALI", sequenceNumber: 1, body: Body(tag: Apps.nam, value: "Alice")), - LogEntry(feedid: "ALI", sequenceNumber: 2, body: Body(tag: Apps.txt, value: "Alice' first post!")), - LogEntry(feedid: "ALI", sequenceNumber: 3, body: Body(tag: Apps.txt, value: "Welcome Bob")), - LogEntry(feedid: "ALI", sequenceNumber: 4, body: Body(tag: Apps.txt, value: "Whaddup DAWG")) + LogEntry(feedid: "ALI", sequenceNumber: 1, body: Bodyy(tag: Apps.nam, value: "Alice")), + LogEntry(feedid: "ALI", sequenceNumber: 2, body: Bodyy(tag: Apps.txt, value: "Alice' first post!")), + LogEntry(feedid: "ALI", sequenceNumber: 3, body: Bodyy(tag: Apps.txt, value: "Welcome Bob")), + LogEntry(feedid: "ALI", sequenceNumber: 4, body: Bodyy(tag: Apps.txt, value: "Whaddup DAWG")) ] static let sampleFeed: Feed = Feed(feedID: "BOB", feed: sampleData) diff --git a/RippleChat/LogEntry.swift b/RippleChat/LogEntry.swift index 81cd032..4ffd95a 100644 --- a/RippleChat/LogEntry.swift +++ b/RippleChat/LogEntry.swift @@ -13,9 +13,9 @@ struct LogEntry: Codable, Identifiable { let feedid: String let sequenceNumber: Int - let body: Body + let body: Bodyy - init(feedid: String = "", sequenceNumber: Int = 0, body: Body = Body()) { + init(feedid: String = "", sequenceNumber: Int = 0, body: Bodyy = Bodyy()) { self.feedid = feedid self.sequenceNumber = sequenceNumber self.body = body @@ -24,5 +24,5 @@ struct LogEntry: Codable, Identifiable { } extension LogEntry { - static let sampleLogEntry = LogEntry(feedid: "BOB", sequenceNumber: 2, body: Body(tag: Apps.txt, value: "My first post!")) + static let sampleLogEntry = LogEntry(feedid: "BOB", sequenceNumber: 2, body: Bodyy(tag: Apps.txt, value: "My first post!")) } diff --git a/RippleChat/Views/NewFeedEntryView.swift b/RippleChat/Views/NewFeedEntryView.swift index 6fe3b06..53cdb05 100644 --- a/RippleChat/Views/NewFeedEntryView.swift +++ b/RippleChat/Views/NewFeedEntryView.swift @@ -16,12 +16,22 @@ struct NewFeedEntryView: View { HStack { TextField("Enter your new feed message:", text: $newEntry) Button(action: { - let nextSeq = dataStore.personalFeed.getLastLogEntry().sequenceNumber + 1 - let newBody = Body(tag: Apps.txt, value: newEntry) - let newLogEntry = LogEntry(feedid: dataStore.personalID, sequenceNumber: nextSeq, body: newBody) + let nextSeq = dataStore.personalFeed.getLastLogEntry().sequenceNumber + 1 + let newBody = Bodyy(tag: Apps.txt, value: newEntry) + let newLogEntry = LogEntry(feedid: dataStore.personalID, sequenceNumber: nextSeq, body: newBody) + dataStore.personalFeed.appendLogEntry(log: newLogEntry) }) { Text("Send") } + .task { + do { + try await dataStore.savePersonalFeed() + } catch { + // Handle the error + print("Error loading data: \(error)") + fatalError(error.localizedDescription) + } + } } Text("New entry: \(newEntry)") }