swift
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 
25 using namespace swift::misc;
26 using namespace swift::misc::simulation;
27 using namespace swift::misc::simulation::fscommon;
28 using namespace swift::misc::simulation::settings;
29 
30 namespace swift::sample
31 {
32  void CSamplesFsCommon::samples(QTextStream &streamOut, QTextStream &streamIn)
33  {
34  const QString fsDir = CSampleUtils::selectDirectory(
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 =
47  fsDir.contains("simobjects", Qt::CaseInsensitive) ? CSimulatorInfo::FSX : CSimulatorInfo::FS9;
48  CMultiSimulatorSettings multiSettings;
49  const CSimulatorSettings originalSettings = multiSettings.getSettings(sim);
50  CSimulatorSettings newSettings(originalSettings);
51  newSettings.setModelDirectory(fsDir);
52  multiSettings.setSettings(newSettings, sim); // set, but do NOT(!) save
53 
54  CAircraftCfgParser parser(sim);
55  streamOut << "start reading, press RETURN" << Qt::endl;
56  QString input = streamIn.readLine();
57  Q_UNUSED(input);
58 
59  streamOut << "reading directly" << Qt::endl;
60  QElapsedTimer time;
61  time.start();
62  streamOut << "reading " << parser.getFirstModelDirectoryOrDefault() << Qt::endl;
63  parser.startLoading();
64  streamOut << "read entries: " << parser.getAircraftCfgEntriesList().size() << " in " << time.restart() << "ms"
65  << Qt::endl;
66 
68  QJsonDocument doc(entriesList.toJson());
69  QByteArray jsonArray(doc.toJson());
70  streamOut << "write JSON array with size " << jsonArray.size() << Qt::endl;
71  QTemporaryFile tempFile;
72  tempFile.open();
73  tempFile.write(jsonArray);
74  tempFile.close();
75  streamOut << "written to " << tempFile.fileName() << " in " << time.restart() << "ms" << Qt::endl;
76 
77  // re-read
78  tempFile.open();
79  jsonArray = tempFile.readAll();
80  doc = QJsonDocument::fromJson(jsonArray);
81  entriesList.clear();
82  entriesList.convertFromJson(doc.object());
83  streamOut << "read JSON array with size " << jsonArray.size() << Qt::endl;
84  streamOut << "read entries from disk: " << entriesList.size() << " in " << time.restart() << "ms" << Qt::endl;
85  tempFile.close();
86 
87  // restore settings: DO NOT SAVE !!!
88  multiSettings.setSettings(originalSettings, sim);
89  }
90 } // 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.
Definition: sampleutils.cpp:13
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.
Definition: simulatorinfo.h:41
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.
Free functions in swift::misc.