restructure

This commit is contained in:
spaced4ndy
2024-10-30 15:11:07 +04:00
parent 5b21db31e6
commit 75c024c448
4 changed files with 94 additions and 51 deletions
@@ -0,0 +1,87 @@
//
// AllServersView.swift
// SimpleX (iOS)
//
// Created by spaced4ndy on 30.10.2024.
// Copyright © 2024 SimpleX Chat. All rights reserved.
//
import SwiftUI
import SimpleXChat
struct AllServersView: View {
@EnvironmentObject var theme: AppTheme
@State private var serverOperators: [ServerOperator] = []
var body: some View {
VStack {
List {
operatorsSection()
Section {
NavigationLink {
ProtocolServersView(serverProtocol: .smp)
.navigationTitle("SMP servers")
.modifier(ThemedBackground(grouped: true))
} label: {
Text("Message servers")
}
NavigationLink {
ProtocolServersView(serverProtocol: .xftp)
.navigationTitle("XFTP servers")
.modifier(ThemedBackground(grouped: true))
} label: {
Text("Media & file servers")
}
} header: {
Text("Other servers")
.foregroundColor(theme.colors.secondary)
}
}
}
.onAppear {
serverOperators = ChatModel.shared.serverOperators
}
}
@ViewBuilder private func operatorsSection() -> some View {
let servers = [ServerCfg.sampleData.preset, ServerCfg.sampleData.untested]
Section {
ForEach($serverOperators) { srvOperator in
serverOperatorView(srvOperator, servers)
}
} header: {
Text("Operators")
.foregroundColor(theme.colors.secondary)
}
}
@ViewBuilder private func serverOperatorView(_ serverOperator: Binding<ServerOperator>, _ servers: [ServerCfg]) -> some View {
let srvOperator = serverOperator.wrappedValue
NavigationLink() {
OperatorView(
serverProtocol: .smp,
serverOperator: serverOperator,
serverOperatorToEdit: srvOperator,
useOperator: srvOperator.enabled,
currServers: servers
)
.navigationBarTitle("\(srvOperator.name) servers")
.modifier(ThemedBackground(grouped: true))
.navigationBarTitleDisplayMode(.large)
} label: {
HStack {
Image(srvOperator.info.logo)
.resizable()
.scaledToFit()
.frame(width: 24, height: 24)
Text(srvOperator.name)
}
}
}
}
#Preview {
AllServersView()
}
@@ -28,19 +28,11 @@ struct NetworkAndServers: View {
List {
Section {
NavigationLink {
ProtocolServersView(serverProtocol: .smp)
.navigationTitle("Your SMP servers")
AllServersView()
.navigationTitle("Servers")
.modifier(ThemedBackground(grouped: true))
} label: {
Text("Message servers")
}
NavigationLink {
ProtocolServersView(serverProtocol: .xftp)
.navigationTitle("Your XFTP servers")
.modifier(ThemedBackground(grouped: true))
} label: {
Text("Media & file servers")
Text("Servers")
}
NavigationLink {
@@ -17,7 +17,6 @@ struct ProtocolServersView: View {
@EnvironmentObject var theme: AppTheme
@Environment(\.editMode) private var editMode
let serverProtocol: ServerProtocol
@State private var serverOperators: [ServerOperator] = []
@State private var currServers: [ServerCfg] = []
@State private var presetServers: [ServerCfg] = []
@State private var configuredServers: [ServerCfg] = []
@@ -55,8 +54,6 @@ struct ProtocolServersView: View {
private func protocolServersView() -> some View {
List {
operatorsSection()
if !configuredServers.isEmpty {
Section {
ForEach($configuredServers) { srv in
@@ -158,7 +155,6 @@ struct ProtocolServersView: View {
}
}
.onAppear {
serverOperators = ChatModel.shared.serverOperators
// this condition is needed to prevent re-setting the servers when exiting single server view
if justOpened {
do {
@@ -179,42 +175,6 @@ struct ProtocolServersView: View {
}
}
@ViewBuilder private func operatorsSection() -> some View {
let servers = [ServerCfg.sampleData.preset, ServerCfg.sampleData.untested]
Section {
ForEach($serverOperators) { srvOperator in
serverOperatorView(srvOperator, servers)
}
} header: {
Text("Operators")
.foregroundColor(theme.colors.secondary)
}
}
@ViewBuilder private func serverOperatorView(_ serverOperator: Binding<ServerOperator>, _ servers: [ServerCfg]) -> some View {
let srvOperator = serverOperator.wrappedValue
NavigationLink() {
OperatorView(
serverProtocol: .smp,
serverOperator: serverOperator,
serverOperatorToEdit: srvOperator,
useOperator: srvOperator.enabled,
currServers: servers
)
.navigationBarTitle("\(srvOperator.name) servers")
.modifier(ThemedBackground(grouped: true))
.navigationBarTitleDisplayMode(.large)
} label: {
HStack {
Image(srvOperator.info.logo)
.resizable()
.scaledToFit()
.frame(width: 24, height: 24)
Text(srvOperator.name)
}
}
}
private func partitionServers(_ servers: [ServerCfg]) {
configuredServers = servers.filter { $0.preset || $0.enabled }
otherServers = servers.filter { !($0.preset || $0.enabled) }
@@ -144,6 +144,7 @@
5CFE0922282EEAF60002594B /* ZoomableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CFE0920282EEAF60002594B /* ZoomableScrollView.swift */; };
640417CD2B29B8C200CCB412 /* NewChatMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 640417CB2B29B8C200CCB412 /* NewChatMenuButton.swift */; };
640417CE2B29B8C200CCB412 /* NewChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 640417CC2B29B8C200CCB412 /* NewChatView.swift */; };
6407435D2CD2497800158442 /* AllServersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6407435C2CD2497800158442 /* AllServersView.swift */; };
6407BA83295DA85D0082BA18 /* CIInvalidJSONView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6407BA82295DA85D0082BA18 /* CIInvalidJSONView.swift */; };
6419EC562AB8BC8B004A607A /* ContextInvitingContactMemberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419EC552AB8BC8B004A607A /* ContextInvitingContactMemberView.swift */; };
6419EC582AB97507004A607A /* CIMemberCreatedContactView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419EC572AB97507004A607A /* CIMemberCreatedContactView.swift */; };
@@ -488,6 +489,7 @@
5CFE0920282EEAF60002594B /* ZoomableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ZoomableScrollView.swift; path = Shared/Views/ZoomableScrollView.swift; sourceTree = SOURCE_ROOT; };
640417CB2B29B8C200CCB412 /* NewChatMenuButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewChatMenuButton.swift; sourceTree = "<group>"; };
640417CC2B29B8C200CCB412 /* NewChatView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewChatView.swift; sourceTree = "<group>"; };
6407435C2CD2497800158442 /* AllServersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllServersView.swift; sourceTree = "<group>"; };
6407BA82295DA85D0082BA18 /* CIInvalidJSONView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIInvalidJSONView.swift; sourceTree = "<group>"; };
6419EC552AB8BC8B004A607A /* ContextInvitingContactMemberView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextInvitingContactMemberView.swift; sourceTree = "<group>"; };
6419EC572AB97507004A607A /* CIMemberCreatedContactView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIMemberCreatedContactView.swift; sourceTree = "<group>"; };
@@ -1061,6 +1063,7 @@
5C93293029239BED0090FFF9 /* ProtocolServerView.swift */,
5C93292E29239A170090FFF9 /* ProtocolServersView.swift */,
643B3B4D2CCFD6400083A2CF /* OperatorView.swift */,
6407435C2CD2497800158442 /* AllServersView.swift */,
5C9C2DA6289957AE00CC63B1 /* AdvancedNetworkSettings.swift */,
5C9C2DA82899DA6F00CC63B1 /* NetworkAndServers.swift */,
);
@@ -1491,6 +1494,7 @@
64D0C2C029F9688300B38D5F /* UserAddressView.swift in Sources */,
6448BBB628FA9D56000D2AB9 /* GroupLinkView.swift in Sources */,
8C9BC2652C240D5200875A27 /* ThemeModeEditor.swift in Sources */,
6407435D2CD2497800158442 /* AllServersView.swift in Sources */,
5CB346E92869E8BA001FD2EF /* PushEnvironment.swift in Sources */,
5C55A91F283AD0E400C4E99E /* CallManager.swift in Sources */,
5CFA59D12864782E00863A68 /* ChatArchiveView.swift in Sources */,