diff --git a/RippleChat.xcodeproj/project.pbxproj b/RippleChat.xcodeproj/project.pbxproj index d138e43..8fad391 100644 --- a/RippleChat.xcodeproj/project.pbxproj +++ b/RippleChat.xcodeproj/project.pbxproj @@ -27,6 +27,8 @@ F58EB2D02A5590E800E22DA6 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = F58EB2CF2A5590E800E22DA6 /* README.md */; }; F5A4B1212A5D4D1F00F5AE01 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1202A5D4D1F00F5AE01 /* SettingsView.swift */; }; F5A4B1232A5D5F8B00F5AE01 /* BTPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1222A5D5F8B00F5AE01 /* BTPeripheral.swift */; }; + F5A4B1252A5D7A8D00F5AE01 /* DataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1242A5D7A8D00F5AE01 /* DataStore.swift */; }; + F5A4B1272A5D861E00F5AE01 /* SettingsEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A4B1262A5D861E00F5AE01 /* SettingsEditView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -70,6 +72,8 @@ F58EB2CF2A5590E800E22DA6 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; F5A4B1202A5D4D1F00F5AE01 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; F5A4B1222A5D5F8B00F5AE01 /* BTPeripheral.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BTPeripheral.swift; sourceTree = ""; }; + F5A4B1242A5D7A8D00F5AE01 /* DataStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStore.swift; sourceTree = ""; }; + F5A4B1262A5D861E00F5AE01 /* SettingsEditView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEditView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -134,6 +138,7 @@ F5847B692A59AB24009E28D4 /* FeedStore.swift */, 96BD330D2A5C254B007A6E53 /* TextApp.swift */, F5A4B1222A5D5F8B00F5AE01 /* BTPeripheral.swift */, + F5A4B1242A5D7A8D00F5AE01 /* DataStore.swift */, ); path = RippleChat; sourceTree = ""; @@ -170,6 +175,7 @@ 96BD33122A5C400B007A6E53 /* FeedListView.swift */, 96BD33152A5C403C007A6E53 /* PeeringView.swift */, F5A4B1202A5D4D1F00F5AE01 /* SettingsView.swift */, + F5A4B1262A5D861E00F5AE01 /* SettingsEditView.swift */, ); path = Views; sourceTree = ""; @@ -313,7 +319,9 @@ F5847B642A599CC3009E28D4 /* LogEntry.swift in Sources */, 96BD33102A5C27B0007A6E53 /* NewFeedEntryView.swift in Sources */, F5A4B1232A5D5F8B00F5AE01 /* BTPeripheral.swift in Sources */, + F5A4B1252A5D7A8D00F5AE01 /* DataStore.swift in Sources */, F5847B6A2A59AB24009E28D4 /* FeedStore.swift in Sources */, + F5A4B1272A5D861E00F5AE01 /* SettingsEditView.swift in Sources */, F581F59B2A5AE72F0081C383 /* BluetoothController.swift in Sources */, 96454F1D2A558EBC0040BEBD /* ContentView.swift in Sources */, F5A4B1212A5D4D1F00F5AE01 /* SettingsView.swift in Sources */, diff --git a/RippleChat/BTPeripheral.swift b/RippleChat/BTPeripheral.swift index 0fe3a60..48c3c02 100644 --- a/RippleChat/BTPeripheral.swift +++ b/RippleChat/BTPeripheral.swift @@ -21,6 +21,8 @@ class BluetoothPeripheral: NSObject, ObservableObject { } } +// TODO: Change variable names, etc... + extension BluetoothPeripheral: CBPeripheralManagerDelegate { func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) { switch peripheral.state { @@ -44,12 +46,7 @@ extension BluetoothPeripheral: CBPeripheralManagerDelegate { func addServices() { - let value = Feed.sampleFeed - // let valueData = value(using: .utf8) - - // 1. Create instance of CBMutableCharcateristic -// let myCharacteristic1 = CBMutableCharacteristic(type: CBUUID(nsuuid: UUID()), properties: [.notify, .write, .read], value: nil, permissions: [.readable, .writeable]) - let myCharacteristic = CBMutableCharacteristic(type: BLE_CHARACTERISTIC_UUID_RX, properties: [.read], value: nil, permissions: [.readable]) + let myCharacteristic = CBMutableCharacteristic(type: BLE_CHARACTERISTIC_UUID_RX, properties: [.read, .write, .notify], value: nil, permissions: [.readable]) // 2. Create instance of CBMutableService let myService = CBMutableService(type: BLE_SERVICE_UUID, primary: true) @@ -65,4 +62,23 @@ extension BluetoothPeripheral: CBPeripheralManagerDelegate { print("Started Advertising") } + +// func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveRead request: CBATTRequest) { +// +// messageLabel.text = "Data getting Read" +// readValueLabel.text = value +// +// // Perform your additional operations here +// +// } +// +// func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveWrite requests: [CBATTRequest]) { +// +// messageLabel.text = "Writing Data" +// +// if let value = requests.first?.value { +// writeValueLabel.text = value.hexEncodedString() +// //Perform here your additional operations on the data you get +// } +// } } diff --git a/RippleChat/ContentView.swift b/RippleChat/ContentView.swift index 9f1289e..f0b43cf 100644 --- a/RippleChat/ContentView.swift +++ b/RippleChat/ContentView.swift @@ -10,16 +10,23 @@ import CoreBluetooth struct ContentView: View { @State var currentView = 0 - + @EnvironmentObject var dataStore: DataStore var body: some View { VStack { switch self.currentView { - case 0: PeeringView() - case 1: FeedListView(feeds: []) - case 2: SettingsView() + case 0: + PeeringView() + .environmentObject(dataStore) + case 1: + FeedListView(feeds: []) + .environmentObject(dataStore) + case 2: + SettingsView() + .environmentObject(dataStore) default: FeedListView(feeds: []) + .environmentObject(dataStore) } } .padding() @@ -60,6 +67,7 @@ struct ContentView: View { struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() + .environmentObject(DataStore()) } } diff --git a/RippleChat/DataStore.swift b/RippleChat/DataStore.swift new file mode 100644 index 0000000..92c292c --- /dev/null +++ b/RippleChat/DataStore.swift @@ -0,0 +1,21 @@ +// +// DataStore.swift +// RippleChat +// +// Created by Severin Memmishofer on 11.07.23. +// + +import SwiftUI +import Foundation + +class DataStore: ObservableObject { + @Published var personalID: String + @Published var friends: [String] + @Published var feeds: [Feed] + + init(personalID: String = "", friends: [String] = [], feeds: [Feed] = []) { + self.personalID = personalID + self.friends = friends + self.feeds = feeds + } +} diff --git a/RippleChat/RippleChatApp.swift b/RippleChat/RippleChatApp.swift index e7067c0..141770d 100644 --- a/RippleChat/RippleChatApp.swift +++ b/RippleChat/RippleChatApp.swift @@ -13,6 +13,7 @@ struct RippleChatApp: App { var body: some Scene { WindowGroup { ContentView() + .environmentObject(DataStore()) } } } diff --git a/RippleChat/Views/FeedListView.swift b/RippleChat/Views/FeedListView.swift index 6033354..beeb971 100644 --- a/RippleChat/Views/FeedListView.swift +++ b/RippleChat/Views/FeedListView.swift @@ -11,6 +11,7 @@ struct FeedListView: View { @State var feeds: [Feed] @StateObject var store = FeedStore(feed: Feed.sampleFeed) var feedStores = [FeedStore(feed: Feed.sampleFeed), FeedStore(feed: Feed.sampleFeed2)] + @EnvironmentObject var dataStore: DataStore var body: some View { Text("FeedListView") @@ -29,6 +30,8 @@ struct FeedListView: View { } } } + Spacer() + NewFeedEntryView() } } diff --git a/RippleChat/Views/PeeringView.swift b/RippleChat/Views/PeeringView.swift index 79ff0ea..59658d9 100644 --- a/RippleChat/Views/PeeringView.swift +++ b/RippleChat/Views/PeeringView.swift @@ -10,6 +10,7 @@ import SwiftUI struct PeeringView: View { @ObservedObject private var bluetoothController = BluetoothController() @ObservedObject private var bluetoothPeripheral = BluetoothPeripheral() + @EnvironmentObject var dataStore: DataStore var body: some View { Text("Peering View") diff --git a/RippleChat/Views/SettingsEditView.swift b/RippleChat/Views/SettingsEditView.swift new file mode 100644 index 0000000..be86a3f --- /dev/null +++ b/RippleChat/Views/SettingsEditView.swift @@ -0,0 +1,29 @@ +// +// SettingsEditView.swift +// RippleChat +// +// Created by Severin Memmishofer on 11.07.23. +// + +import SwiftUI + +struct SettingsEditView: View { + @EnvironmentObject var dataStore: DataStore + + var body: some View { + Form { + Section(header: Text("Personal Feed ID")) { + //TextField("FeedID", text: $scrum.title) + } + Section(header: Text("Friends")) { + + } + } + } +} + +struct SettingsEditView_Previews: PreviewProvider { + static var previews: some View { + SettingsEditView() + } +} diff --git a/RippleChat/Views/SettingsView.swift b/RippleChat/Views/SettingsView.swift index 6871573..5db63c2 100644 --- a/RippleChat/Views/SettingsView.swift +++ b/RippleChat/Views/SettingsView.swift @@ -8,13 +8,22 @@ import SwiftUI struct SettingsView: View { + @State private var newEntry: String = "" + @EnvironmentObject var dataStore: DataStore + var body: some View { - Text("Hello, Settings!") + Section(header: Text("Personal Feed ID")) { + Text("Your FeedID is: \(dataStore.personalID)") + } + Section(header: Text("Friends")) { + + } } } struct SettingsView_Previews: PreviewProvider { static var previews: some View { SettingsView() + .environmentObject(DataStore(personalID: "BOB")) } }