swift
setupreader.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 
4 #include "core/setupreader.h"
5 
6 #include <QByteArray>
7 #include <QFile>
8 #include <QPointer>
9 #include <QScopedPointer>
10 #include <QScopedPointerDeleteLater>
11 #include <QStringBuilder>
12 #include <QTimer>
13 #include <QUrl>
14 #include <QtGlobal>
15 
16 #include "config/buildconfig.h"
17 #include "core/application.h"
18 #include "misc/directoryutils.h"
19 #include "misc/fileutils.h"
20 #include "misc/logcategories.h"
21 #include "misc/logmessage.h"
24 #include "misc/network/url.h"
25 #include "misc/statusmessage.h"
26 #include "misc/swiftdirectories.h"
27 #include "misc/verify.h"
28 
29 using namespace swift::config;
30 using namespace swift::misc;
31 using namespace swift::misc::db;
32 using namespace swift::misc::network;
33 using namespace swift::core;
34 using namespace swift::core::data;
35 
36 namespace swift::core
37 {
38  CSetupReader::CSetupReader(QObject *parent) : QObject(parent) {}
39 
41  {
42  CStatusMessageList msgs;
43  msgs = this->readLocalBootstrapFile();
44  m_setupAvailable = msgs.isSuccess();
45  return msgs;
46  }
47 
48  CStatusMessageList CSetupReader::readLocalBootstrapFile()
49  {
50  const QString fileName = CSwiftDirectories::bootstrapResourceFilePath();
51  // TODO Check if file exists or is broken
52 
53  if (fileName.isEmpty()) { return CStatusMessage(this).error(u"No file name for local bootstrap file"); }
54  if (!sApp || sApp->isShuttingDown()) { return CStatusMessage(this).error(u"No sApp, shutting down?"); }
55  const QFile file(fileName);
56  if (!file.exists()) { return CStatusMessage(this).error(u"File '%1' not existing") << fileName; }
57 
58  const QString content(CFileUtils::readFileToString(fileName));
59  if (content.isEmpty()) { return CStatusMessage(this).error(u"File '%1' empty") << fileName; }
60 
61  try
62  {
63  m_setup.convertFromJson(content);
64  return CStatusMessage(this).info(u"Setup loaded from local file '%1'") << fileName;
65  }
66  catch (const CJsonException &ex)
67  {
68  return CStatusMessage::fromJsonException(ex, this,
69  QStringLiteral("Parsing local setup file '%1'").arg(fileName));
70  }
71  }
72 
73  const QStringList &CSetupReader::getLogCategories()
74  {
75  static const QStringList cats({ "swift.setupreader", CLogCategories::webservice(), CLogCategories::startup() });
76  return cats;
77  }
78 
79  CGlobalSetup CSetupReader::getSetup() const { return m_setup; }
80 } // namespace swift::core
SWIFT_CORE_EXPORT swift::core::CApplication * sApp
Single instance of application object.
Definition: application.cpp:71
bool isShuttingDown() const
Is application shutting down?
data::CGlobalSetup getSetup() const
Current setup (reader URLs, DB location, crash server)
Definition: setupreader.cpp:79
static const QStringList & getLogCategories()
Categories.
Definition: setupreader.cpp:73
swift::misc::CStatusMessageList loadSetup()
Load the setup. If the setup is already loaded, the setup is reloaded.
Definition: setupreader.cpp:40
Global settings for readers, debug flags, etc.
Definition: globalsetup.h:31
static QString readFileToString(const QString &fileNameAndPath)
Read file into string.
Definition: fileutils.cpp:68
Thrown when a convertFromJson method encounters an unrecoverable error in JSON data.
Definition: jsonexception.h:24
static const QString & webservice()
Webservice.
static const QString & startup()
Startup of application.
Derived & error(const char16_t(&format)[N])
Set the severity to error, providing a format string.
Derived & info(const char16_t(&format)[N])
Set the severity to info, providing a format string.
Streamable status message, e.g.
static CStatusMessage fromJsonException(const CJsonException &ex, const CLogCategoryList &categories, const QString &prefix)
Object from JSON exception message.
Status messages, e.g. from Core -> GUI.
bool isSuccess() const
All messages are marked as success.
static const QString & bootstrapResourceFilePath()
Bootstrap resource file path.
void convertFromJson(const QJsonObject &json)
Assign from JSON object.
Definition: mixinjson.h:153
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
Free functions in swift::misc.