diff --git a/DUDUJI.xcodeproj/project.pbxproj b/DUDUJI.xcodeproj/project.pbxproj index cb26567..65f5f11 100644 --- a/DUDUJI.xcodeproj/project.pbxproj +++ b/DUDUJI.xcodeproj/project.pbxproj @@ -17,6 +17,8 @@ 24D4D3CC29ABBA800064E566 /* MastodonSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 24D4D3CB29ABBA800064E566 /* MastodonSwift */; }; 24D4D3CE29ABBC030064E566 /* InstanceApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D4D3CD29ABBC030064E566 /* InstanceApp.swift */; }; 24D4D3D029ABC01E0064E566 /* AddAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D4D3CF29ABC01E0064E566 /* AddAccountView.swift */; }; + 24D4D3D429AF97A40064E566 /* InstanceAppViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D4D3D329AF97A40064E566 /* InstanceAppViewModel.swift */; }; + 24D4D3D629AFA1970064E566 /* InstanceAppManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D4D3D529AFA1970064E566 /* InstanceAppManager.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -31,6 +33,8 @@ 24D4D3C829ABB7590064E566 /* Const.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Const.swift; sourceTree = ""; }; 24D4D3CD29ABBC030064E566 /* InstanceApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstanceApp.swift; sourceTree = ""; }; 24D4D3CF29ABC01E0064E566 /* AddAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccountView.swift; sourceTree = ""; }; + 24D4D3D329AF97A40064E566 /* InstanceAppViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstanceAppViewModel.swift; sourceTree = ""; }; + 24D4D3D529AFA1970064E566 /* InstanceAppManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = InstanceAppManager.swift; path = DUDUJI/Models/InstanceAppManager.swift; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -64,6 +68,7 @@ 24D4D3B329AB83E80064E566 /* DUDUJI */ = { isa = PBXGroup; children = ( + 24D4D3D229AF8E9D0064E566 /* ViewModels */, 24D4D3D129ABC0280064E566 /* Views */, 24D4D3C529ABB5830064E566 /* Models */, 24D4D3C829ABB7590064E566 /* Const.swift */, @@ -87,6 +92,7 @@ 24D4D3C529ABB5830064E566 /* Models */ = { isa = PBXGroup; children = ( + 24D4D3D529AFA1970064E566 /* InstanceAppManager.swift */, 24D4D3C329ABAE5A0064E566 /* AccountInfo.swift */, 24D4D3C629ABB6500064E566 /* OauthToken.swift */, 24D4D3CD29ABBC030064E566 /* InstanceApp.swift */, @@ -102,6 +108,14 @@ path = Views; sourceTree = ""; }; + 24D4D3D229AF8E9D0064E566 /* ViewModels */ = { + isa = PBXGroup; + children = ( + 24D4D3D329AF97A40064E566 /* InstanceAppViewModel.swift */, + ); + path = ViewModels; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -185,6 +199,8 @@ 24D4D3B529AB83E80064E566 /* DUDUJIApp.swift in Sources */, 24D4D3C929ABB7590064E566 /* Const.swift in Sources */, 24D4D3D029ABC01E0064E566 /* AddAccountView.swift in Sources */, + 24D4D3D629AFA1970064E566 /* InstanceAppManager.swift in Sources */, + 24D4D3D429AF97A40064E566 /* InstanceAppViewModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/DUDUJI/DUDUJIView.swift b/DUDUJI/DUDUJIView.swift index c836791..ab43814 100644 --- a/DUDUJI/DUDUJIView.swift +++ b/DUDUJI/DUDUJIView.swift @@ -10,11 +10,7 @@ import SwiftUI struct DUDUJIView: View { var body: some View { VStack { -// TextField(Text("server address")) AddAccountView() - Button("Login") { - print("123 \(Date().debugDescription)") - } } .padding() } diff --git a/DUDUJI/Models/AccountInfo.swift b/DUDUJI/Models/AccountInfo.swift index 58e1be1..093a893 100644 --- a/DUDUJI/Models/AccountInfo.swift +++ b/DUDUJI/Models/AccountInfo.swift @@ -7,8 +7,7 @@ import Foundation -public struct AccoutInfo { - public let id: String +public struct AccountInfo { public let username: String public let serverAddress: URL public let oauthToken: OauthToken? diff --git a/DUDUJI/Models/InstanceApp.swift b/DUDUJI/Models/InstanceApp.swift index 55970b6..a65ad01 100644 --- a/DUDUJI/Models/InstanceApp.swift +++ b/DUDUJI/Models/InstanceApp.swift @@ -7,8 +7,7 @@ import Foundation -public struct InstanceApp { - public let id: String +struct InstanceApp { public let name: String public let website: URL? public let redirectUri: String diff --git a/DUDUJI/Models/InstanceAppManager.swift b/DUDUJI/Models/InstanceAppManager.swift new file mode 100644 index 0000000..739a6d1 --- /dev/null +++ b/DUDUJI/Models/InstanceAppManager.swift @@ -0,0 +1,19 @@ +// +// InstanceAppManager.swift +// DUDUJI +// +// Created by ching on 2023/3/1. +// + +import Foundation + +class InstanceAppManager { + func createInstanceApp(at serverAddress: String) { + print("服务器地址是\(serverAddress)") + // save things to InstanceApp model + // let instanceApp = InstanceApp(id: xxx....) + let instanceApp = InstanceApp(name: "name", website: nil, redirectUri: serverAddress, clientId: "abc", clientSecret: "cba") + // save the instanceApp to database + print(instanceApp.name) + } +} diff --git a/DUDUJI/ViewModels/InstanceAppViewModel.swift b/DUDUJI/ViewModels/InstanceAppViewModel.swift new file mode 100644 index 0000000..9794c9c --- /dev/null +++ b/DUDUJI/ViewModels/InstanceAppViewModel.swift @@ -0,0 +1,18 @@ +// +// InstanceAppViewModel.swift +// DUDUJI +// +// Created by ching on 2023/3/1. +// + +import SwiftUI + +class InstanceAppViewModel: ObservableObject { + private let instanceAppManager = InstanceAppManager() + + // MARK: intents + + func createInstanceApp(at url: String) { + instanceAppManager.createInstanceApp(at: url) + } +} diff --git a/DUDUJI/Views/AddAccountView.swift b/DUDUJI/Views/AddAccountView.swift index 2d1186a..9467205 100644 --- a/DUDUJI/Views/AddAccountView.swift +++ b/DUDUJI/Views/AddAccountView.swift @@ -8,17 +8,35 @@ import SwiftUI struct AddAccountView: View { - @State private var serverAddress: String = "" + @State var serverAddress: String = "" + @StateObject var instanceAccountViewModel = InstanceAppViewModel() var body: some View { Form { - TextField("server address", text: $serverAddress) + serverAddressSection + submitButtonSection + } + } + + var serverAddressSection: some View { + Section(header: Text("服务器地址")) { + TextField("nofan.xyz", text: $serverAddress) + } + } + + var submitButtonSection: some View { + Section { + Button("提交") { + instanceAccountViewModel.createInstanceApp(at: serverAddress) + } } } } struct AddAccountView_Previews: PreviewProvider { static var previews: some View { + // FIXME: priview +// Text("Fixme") AddAccountView() } }