swift
Loading...
Searching...
No Matches
samplesfscommon.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (C) 2014 swift Project Community / Contributors
2// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3
6
7#include "samplesfscommon.h"
8
9#include <QByteArray>
10#include <QDir>
11#include <QElapsedTimer>
12#include <QJsonDocument>
13#include <QString>
14#include <QTemporaryFile>
15#include <QTextStream>
16#include <QtGlobal>
17
18#include "sampleutils.h"
19
24
25using namespace swift::misc;
26using namespace swift::misc::simulation;
27using namespace swift::misc::simulation::fscommon;
28using namespace swift::misc::simulation::settings;
29
30namespace swift::sample
31{
33 {
35 { "C:/Program Files (x86)/Microsoft Games/Microsoft Flight Simulator X/SimObjects",
36 "C:/Flight Simulator 9/Aircraft" },
37 streamOut, streamIn);
38
39 const QDir dir(fsDir);
40 if (!dir.exists())
41 {
42 streamOut << "Directory does not exist:" << dir.absolutePath();
43 return;
44 }
45
46 const CSimulatorInfo sim = CSimulatorInfo::MSFS;
47 CMultiSimulatorSettings multiSettings;
48 const CSimulatorSettings originalSettings = multiSettings.getSettings(sim);
49 CSimulatorSettings newSettings(originalSettings);
50 newSettings.setModelDirectory(fsDir);
51 multiSettings.setSettings(newSettings, sim); // set, but do NOT(!) save
52
53 CAircraftCfgParser parser(sim);
54 streamOut << "start reading, press RETURN" << Qt::endl;
55 QString input = streamIn.readLine();
56 Q_UNUSED(input);
57
58 streamOut << "reading directly" << Qt::endl;
59 QElapsedTimer time;
60 time.start();
61 streamOut << "reading " << parser.getFirstModelDirectoryOrDefault() << Qt::endl;
62 parser.startLoading();
63 streamOut << "read entries: " << parser.getAircraftCfgEntriesList().size() << " in " << time.restart() << "ms"
64 << Qt::endl;
65
67 QJsonDocument doc(entriesList.toJson());
68 QByteArray jsonArray(doc.toJson());
69 streamOut << "write JSON array with size " << jsonArray.size() << Qt::endl;
70 QTemporaryFile tempFile;
71 bool res = tempFile.open();
72 SWIFT_VERIFY_X(res, Q_FUNC_INFO, "Failed to open file");
73 tempFile.write(jsonArray);
74 tempFile.close();
75 streamOut << "written to " << tempFile.fileName() << " in " << time.restart() << "ms" << Qt::endl;
76
77 // re-read
78 res = tempFile.open();
79 SWIFT_VERIFY_X(res, Q_FUNC_INFO, "Failed to open file");
80 jsonArray = tempFile.readAll();
81 doc = QJsonDocument::fromJson(jsonArray);
82 entriesList.clear();
83 entriesList.convertFromJson(doc.object());
84 streamOut << "read JSON array with size " << jsonArray.size() << Qt::endl;
85 streamOut << "read entries from disk: " << entriesList.size() << " in " << time.restart() << "ms" << Qt::endl;
86 tempFile.close();
87
88 // restore settings: DO NOT SAVE !!!
89 multiSettings.setSettings(originalSettings, sim);
90 }
91} // namespace swift::sample
QJsonObject toJson() const
Cast to JSON object.
void convertFromJson(const QJsonObject &json)
Assign from JSON object.
static QString selectDirectory(const QStringList &directoryOptions, QTextStream &streamOut, QTextStream &streamIn)
Select directory among given ones.
size_type size() const
Returns number of elements in the sequence.
Definition sequence.h:273
void clear()
Removes all elements in the sequence.
Definition sequence.h:288
Simple hardcoded info about the corresponding simulator.
void startLoading(LoadMode mode=InBackgroundWithCache, const ModelConsolidationCallback &modelConsolidation={}, const QStringList &modelDirectories={})
Start the loading process from disk. Optional DB models can be passed and used for data consolidation...
QString getFirstModelDirectoryOrDefault() const
First directory, can be used when only 1 directory is expected.
Utility, parsing the aircraft.cfg files.
const CAircraftCfgEntriesList & getAircraftCfgEntriesList() const
Get parsed aircraft cfg entries list.
CStatusMessage setSettings(const CSimulatorSettings &settings, const CSimulatorInfo &simulator)
Set settings per simulator.
CSimulatorSettings getSettings(const CSimulatorInfo &simulator) const
Settings per simulator.
Settings for simulator Driver independent parts (such as directories), also used in model loaders.
void setModelDirectory(const QString &modelDirectory)
Set single model directory.
static void samples(QTextStream &streamOut, QTextStream &streamIn)
Run the samples.
Free functions in swift::misc.
qsizetype size() const const
qint64 restart()
virtual void close() override
QByteArray readAll()
qint64 write(const QByteArray &data)
QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error)
QJsonObject object() const const
QByteArray toJson(QJsonDocument::JsonFormat format) const const
QTextStream & endl(QTextStream &stream)
virtual QString fileName() const const override
QString readLine(qint64 maxlen)
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.
Definition verify.h:26