swift
settingsnetworkserverscomponent.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QPushButton>
7 #include <QString>
8 #include <QTableView>
9 
10 #include "ui_settingsnetworkserverscomponent.h"
11 
12 #include "config/buildconfig.h"
14 #include "core/data/globalsetup.h"
15 #include "gui/editors/serverform.h"
16 #include "gui/guiapplication.h"
17 #include "gui/views/serverview.h"
18 #include "misc/logmessage.h"
19 #include "misc/network/server.h"
21 #include "misc/statusmessage.h"
22 #include "misc/statusmessagelist.h"
23 
24 using namespace swift::config;
25 using namespace swift::core;
26 using namespace swift::core::data;
27 using namespace swift::gui;
28 using namespace swift::misc;
29 using namespace swift::misc::network;
30 using namespace swift::misc::aviation;
31 using namespace swift::misc::audio;
32 
33 namespace swift::gui::components
34 {
35  CSettingsNetworkServersComponent::CSettingsNetworkServersComponent(QWidget *parent)
36  : QFrame(parent), ui(new Ui::CSettingsNetworkServersComponent)
37  {
38  ui->setupUi(this);
39 
40  // Settings server
41  connect(ui->pb_RemoveServer, &QPushButton::pressed, this,
42  &CSettingsNetworkServersComponent::alterTrafficServer);
43  connect(ui->pb_SaveServer, &QPushButton::pressed, this, &CSettingsNetworkServersComponent::alterTrafficServer);
44  connect(ui->tvp_Servers, &QTableView::clicked, this, &CSettingsNetworkServersComponent::serverSelected);
45  this->reloadSettings();
46  }
47 
49 
50  void CSettingsNetworkServersComponent::reloadSettings()
51  {
52  CServerList serverList(m_trafficNetworkServers.get());
53 
54  // add swift test servers in case we have no servers:
55  // this is debug/bootstrap feature we can continue to test when something goes wrong
56  if (serverList.isEmpty() && CBuildConfig::isLocalDeveloperDebugBuild())
57  {
59  }
60  ui->tvp_Servers->updateContainer(serverList);
61  }
62 
63  void CSettingsNetworkServersComponent::serverSelected(const QModelIndex &index)
64  {
65  const CServer clickedServer = ui->tvp_Servers->at(index);
66  ui->form_Server->setServer(clickedServer);
67  }
68 
69  void CSettingsNetworkServersComponent::alterTrafficServer()
70  {
71  const QObject *sender = QObject::sender();
72  const CServer server(ui->form_Server->getServer());
73 
74  CServerList serverList(m_trafficNetworkServers.getThreadLocal());
75  CStatusMessage msg;
76  if (sender == ui->pb_RemoveServer)
77  {
78  // lenient name removal
79  serverList.removeByName(server.getName());
80  }
81  else if (sender == ui->pb_SaveServer)
82  {
83  CStatusMessageList msgs = server.validate();
84  if (!msgs.isEmpty()) { msgs.addCategories(this); }
85 
86  // error?
87  if (msgs.isFailure())
88  {
89  CLogMessage::preformatted(msgs);
90  return;
91  }
92 
93  serverList.replaceOrAdd(&CServer::getName, server.getName(), server);
94  }
95  else
96  {
97  qFatal("Wrong sender");
98  return;
99  }
100 
101  msg = m_trafficNetworkServers.setAndSave(serverList);
102  this->reloadSettings(); // call manually as local object
103 
104  if (!msg.isEmpty())
105  {
106  msg.addCategories(this);
107  CLogMessage::preformatted(msg);
108  }
109  }
110 } // namespace swift::gui::components
data::CGlobalSetup getGlobalSetup() const
Global setup.
swift::misc::network::CServerList getPredefinedServersPlusHardcodedServers() const
Predefined plus hardcoded.
Definition: globalsetup.cpp:77
CStatusMessage setAndSave(const T &value, qint64 timestamp=0)
Write and save in the same step. Must be called from the thread in which the owner lives.
Definition: valuecache.h:417
const T & getThreadLocal() const
Read the current value.
Definition: valuecache.h:400
T get() const
Get a copy of the current value.
Definition: valuecache.h:408
bool isEmpty() const
Message empty.
bool isEmpty() const
Synonym for empty.
Definition: sequence.h:285
Streamable status message, e.g.
void addCategories(const CLogCategoryList &categories)
Add categories, avoids duplicates.
Status messages, e.g. from Core -> GUI.
bool isFailure() const
Any message is marked as failure.
void addCategories(const CLogCategoryList &categories)
Add some categories to all messages in the list.
Value object encapsulating information of a server.
Definition: server.h:28
Value object encapsulating a list of servers.
Definition: serverlist.h:23
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Core data traits (aka cached values) and classes.
Backend services of the swift project, like dealing with the network or the simulators.
Definition: actionbind.cpp:7
High level reusable GUI components.
Definition: aboutdialog.cpp:13
GUI related classes.
Free functions in swift::misc.