mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-05-21 11:25:28 +00:00
restructure
This commit is contained in:
@@ -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 */,
|
||||
|
||||
Reference in New Issue
Block a user