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 */; };
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 = "<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>"; };
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 */
/* 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 = "<group>";
};
24D4D3D229AF8E9D0064E566 /* ViewModels */ = {
isa = PBXGroup;
children = (
24D4D3D329AF97A40064E566 /* InstanceAppViewModel.swift */,
);
path = ViewModels;
sourceTree = "<group>";
};
/* 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;
};

View File

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

View File

@ -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?

View File

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

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