feat(model, viewmodel): 增加model,增加InstanceApp 相关逻辑

1. 增加 InstanceApp model
2. 增加 AddAccountView 中创建 InstanceApp 的逻辑

Signed-off-by: Ching <loooching@gmail.com>
This commit is contained in:
Ching 2023-03-02 23:51:42 +08:00
parent 715d76bd7e
commit bea4505eaa
7 changed files with 75 additions and 10 deletions

View File

@ -17,6 +17,8 @@
24D4D3CC29ABBA800064E566 /* MastodonSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 24D4D3CB29ABBA800064E566 /* MastodonSwift */; }; 24D4D3CC29ABBA800064E566 /* MastodonSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 24D4D3CB29ABBA800064E566 /* MastodonSwift */; };
24D4D3CE29ABBC030064E566 /* InstanceApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D4D3CD29ABBC030064E566 /* InstanceApp.swift */; }; 24D4D3CE29ABBC030064E566 /* InstanceApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D4D3CD29ABBC030064E566 /* InstanceApp.swift */; };
24D4D3D029ABC01E0064E566 /* AddAccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24D4D3CF29ABC01E0064E566 /* AddAccountView.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 */ /* End PBXBuildFile section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
@ -31,6 +33,8 @@
24D4D3C829ABB7590064E566 /* Const.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Const.swift; sourceTree = "<group>"; }; 24D4D3C829ABB7590064E566 /* Const.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Const.swift; sourceTree = "<group>"; };
24D4D3CD29ABBC030064E566 /* InstanceApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstanceApp.swift; sourceTree = "<group>"; }; 24D4D3CD29ABBC030064E566 /* InstanceApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstanceApp.swift; sourceTree = "<group>"; };
24D4D3CF29ABC01E0064E566 /* AddAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccountView.swift; sourceTree = "<group>"; }; 24D4D3CF29ABC01E0064E566 /* AddAccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccountView.swift; sourceTree = "<group>"; };
24D4D3D329AF97A40064E566 /* InstanceAppViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstanceAppViewModel.swift; sourceTree = "<group>"; };
24D4D3D529AFA1970064E566 /* InstanceAppManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = InstanceAppManager.swift; path = DUDUJI/Models/InstanceAppManager.swift; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -64,6 +68,7 @@
24D4D3B329AB83E80064E566 /* DUDUJI */ = { 24D4D3B329AB83E80064E566 /* DUDUJI */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
24D4D3D229AF8E9D0064E566 /* ViewModels */,
24D4D3D129ABC0280064E566 /* Views */, 24D4D3D129ABC0280064E566 /* Views */,
24D4D3C529ABB5830064E566 /* Models */, 24D4D3C529ABB5830064E566 /* Models */,
24D4D3C829ABB7590064E566 /* Const.swift */, 24D4D3C829ABB7590064E566 /* Const.swift */,
@ -87,6 +92,7 @@
24D4D3C529ABB5830064E566 /* Models */ = { 24D4D3C529ABB5830064E566 /* Models */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
24D4D3D529AFA1970064E566 /* InstanceAppManager.swift */,
24D4D3C329ABAE5A0064E566 /* AccountInfo.swift */, 24D4D3C329ABAE5A0064E566 /* AccountInfo.swift */,
24D4D3C629ABB6500064E566 /* OauthToken.swift */, 24D4D3C629ABB6500064E566 /* OauthToken.swift */,
24D4D3CD29ABBC030064E566 /* InstanceApp.swift */, 24D4D3CD29ABBC030064E566 /* InstanceApp.swift */,
@ -102,6 +108,14 @@
path = Views; path = Views;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
24D4D3D229AF8E9D0064E566 /* ViewModels */ = {
isa = PBXGroup;
children = (
24D4D3D329AF97A40064E566 /* InstanceAppViewModel.swift */,
);
path = ViewModels;
sourceTree = "<group>";
};
/* End PBXGroup section */ /* End PBXGroup section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
@ -185,6 +199,8 @@
24D4D3B529AB83E80064E566 /* DUDUJIApp.swift in Sources */, 24D4D3B529AB83E80064E566 /* DUDUJIApp.swift in Sources */,
24D4D3C929ABB7590064E566 /* Const.swift in Sources */, 24D4D3C929ABB7590064E566 /* Const.swift in Sources */,
24D4D3D029ABC01E0064E566 /* AddAccountView.swift in Sources */, 24D4D3D029ABC01E0064E566 /* AddAccountView.swift in Sources */,
24D4D3D629AFA1970064E566 /* InstanceAppManager.swift in Sources */,
24D4D3D429AF97A40064E566 /* InstanceAppViewModel.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@ -10,11 +10,7 @@ import SwiftUI
struct DUDUJIView: View { struct DUDUJIView: View {
var body: some View { var body: some View {
VStack { VStack {
// TextField(Text("server address"))
AddAccountView() AddAccountView()
Button("Login") {
print("123 \(Date().debugDescription)")
}
} }
.padding() .padding()
} }

View File

@ -7,8 +7,7 @@
import Foundation import Foundation
public struct AccoutInfo { public struct AccountInfo {
public let id: String
public let username: String public let username: String
public let serverAddress: URL public let serverAddress: URL
public let oauthToken: OauthToken? public let oauthToken: OauthToken?

View File

@ -7,8 +7,7 @@
import Foundation import Foundation
public struct InstanceApp { struct InstanceApp {
public let id: String
public let name: String public let name: String
public let website: URL? public let website: URL?
public let redirectUri: String public let redirectUri: String

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -8,17 +8,35 @@
import SwiftUI import SwiftUI
struct AddAccountView: View { struct AddAccountView: View {
@State private var serverAddress: String = "" @State var serverAddress: String = ""
@StateObject var instanceAccountViewModel = InstanceAppViewModel()
var body: some View { var body: some View {
Form { 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 { struct AddAccountView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
// FIXME: priview
// Text("Fixme")
AddAccountView() AddAccountView()
} }
} }