diff --git a/samples/blackmisc/samplesjson.cpp b/samples/blackmisc/samplesjson.cpp index e9a0b6f02..c24f16b29 100644 --- a/samples/blackmisc/samplesjson.cpp +++ b/samples/blackmisc/samplesjson.cpp @@ -84,9 +84,18 @@ namespace BlackMiscTest stations.clear(); stations.convertFromJson(json); qDebug() << stations; - + qDebug() << "------- Enter -----"; cin.readLine(); + + // testing escaping special characters + CUser specialCharacters("123456", "With quote \"", "With double quote\"\"", "foobar"); + json = specialCharacters.toJson(); + doc.setObject(json); + qDebug() << doc.toJson(QJsonDocument::Indented); + qDebug() << "------- Enter ---------------------------------"; + cin.readLine(); + return 0; } diff --git a/samples/blacksim/main.cpp b/samples/blacksim/main.cpp index 47c73cc31..a0dbe5810 100644 --- a/samples/blacksim/main.cpp +++ b/samples/blacksim/main.cpp @@ -1,7 +1,11 @@ -/* Copyright (C) 2013 VATSIM Community / authors - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* Copyright (C) 2014 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ #include "blacksim/blacksimfreefunctions.h" #include "blackmisc/blackmiscfreefunctions.h" @@ -12,40 +16,49 @@ #include #include #include +#include /*! * Samples */ int main(int argc, char *argv[]) { + Q_UNUSED(argc); + Q_UNUSED(argv); + QTextStream streamIn(stdin); + QTextStream streamOut(stdout); BlackMisc::registerMetadata(); BlackSim::registerMetadata(); - qDebug() << "Run samples:"; - qDebug() << "1 .. FS common"; - qDebug() << "2 .. FSX"; - qDebug() << "3 .. Mappings"; - qDebug() << "x .. exit"; + streamOut << "Run samples:" << endl; + streamOut << "1 .. FS common" << endl; + streamOut << "2 .. FSX" << endl; + streamOut << "3 .. Mappings" << endl; + streamOut << "x .. exit" << endl; QString i = streamIn.readLine().toLower().trimmed(); + QTime t; + t.start(); if (i.startsWith("1")) { - BlackSimTest::CSamplesFsCommon::samples(); + BlackSimTest::CSamplesFsCommon::samples(streamOut, streamIn); } else if (i.startsWith("2")) { - BlackSimTest::CSamplesFsx::samples(); + BlackSimTest::CSamplesFsx::samples(streamOut); } else if (i.startsWith("3")) { - BlackSimTest::CSamplesModelMapping::samples(); + BlackSimTest::CSamplesModelMapping::samples(streamOut); } else if (i.startsWith("x")) { return 0; } - QCoreApplication a(argc, argv); - return a.exec(); + streamOut << "time elapsed: " << t.elapsed() << "ms" << endl; + streamOut << "press key to exit" << endl; + streamIn.readLine(); + return 0; } diff --git a/samples/blacksim/samplesfscommon.cpp b/samples/blacksim/samplesfscommon.cpp index da90cb074..c4be423b1 100644 --- a/samples/blacksim/samplesfscommon.cpp +++ b/samples/blacksim/samplesfscommon.cpp @@ -1,7 +1,11 @@ -/* Copyright (C) 2013 VATSIM Community / contributors - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* Copyright (C) 2014 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ #include "samplesfscommon.h" #include "blacksim/fscommon/aircraftcfgentrieslist.h" @@ -9,7 +13,11 @@ #include #include +#include #include +#include + +using namespace BlackSim::FsCommon; namespace BlackSimTest { @@ -17,11 +25,10 @@ namespace BlackSimTest /* * Samples */ - int CSamplesFsCommon::samples() + int CSamplesFsCommon::samples(QTextStream &streamOut, QTextStream &streamIn) { - QTextStream streamIn(stdin); - QTextStream streamOut(stdout); - QString fsxDir = "P:/FlightSimulatorX (MSI)/SimObjects"; + // QString fsxDir = "P:/FlightSimulatorX (MSI)/SimObjects"; + QString fsxDir = "P:/Temp/SimObjects"; streamOut << "Enter FSX directory:" << endl; streamOut << fsxDir << '\r'; streamOut.flush(); @@ -31,25 +38,49 @@ namespace BlackSimTest input = streamIn.readLine(); if (!input.startsWith("b")) { - qDebug() << "reading directly"; - BlackSim::FsCommon::CAircraftCfgEntriesList entriesList(fsxDir); + streamOut << "reading directly" << endl; + CAircraftCfgEntriesList entriesList(fsxDir); if (entriesList.existsDir()) { + QTime time; + time.start(); streamOut << "reading " << entriesList.getRootDirectory() << endl; entriesList.read(); - streamOut << "read entries: " << entriesList.size() << endl; - // streamOut << entriesList << endl; + streamOut << "read entries: " << entriesList.size() << " in " << time.restart() << "ms" << endl; + + QJsonDocument doc(entriesList.toJson()); + QByteArray jsonArray(doc.toJson()); + streamOut << "write JSON array with size " << jsonArray.size() << endl; + QTemporaryFile tempFile; + tempFile.open(); + tempFile.write(jsonArray); + tempFile.close(); + streamOut << "written to " << tempFile.fileName() << " in " << time.restart() << "ms" << endl; + + // re-read + tempFile.open(); + jsonArray = tempFile.readAll(); + doc = QJsonDocument::fromJson(jsonArray); + entriesList.clear(); + entriesList.convertFromJson(doc.object()); + streamOut << "read JSON array with size " << jsonArray.size() << endl; + streamOut << "read entries from disk: " << entriesList.size() << " in " << time.restart() << "ms" << endl; + tempFile.close(); } } else { - qDebug() << "reading in background"; + streamOut << "reading in background" << endl; QFuture f = BlackSim::FsCommon::CAircraftIndexer::readInBackground(fsxDir); + int i = 0; do { - streamOut << "."; - streamOut.flush(); - QCoreApplication::processEvents(QEventLoop::AllEvents, 1000 * 3); + if (i % 20 == 0) + { + streamOut << "."; + streamOut.flush(); + } + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000 * 5); } while (!f.isFinished()); streamOut << endl << f.result() << " entries" << endl; diff --git a/samples/blacksim/samplesfscommon.h b/samples/blacksim/samplesfscommon.h index 1b6163e84..c047e4936 100644 --- a/samples/blacksim/samplesfscommon.h +++ b/samples/blacksim/samplesfscommon.h @@ -1,23 +1,27 @@ -/* Copyright (C) 2013 VATSIM Community / contributors - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* Copyright (C) 2014 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file #ifndef BLACKSIMTEST_SAMPLESFSCOMMON_H #define BLACKSIMTEST_SAMPLESFSCOMMON_H +#include + namespace BlackSimTest { - /*! - * \brief Samples for FsCommon classes - */ + //! Samples for FsCommon classes class CSamplesFsCommon { public: - /*! - * \brief Run the samples - */ - static int samples(); + //! Run the samples + static int samples(QTextStream &streamOut, QTextStream &streamIn); }; } // namespace diff --git a/samples/blacksim/samplesfsx.cpp b/samples/blacksim/samplesfsx.cpp index 67227e94b..2931700b9 100644 --- a/samples/blacksim/samplesfsx.cpp +++ b/samples/blacksim/samplesfsx.cpp @@ -1,7 +1,11 @@ -/* Copyright (C) 2013 VATSIM Community / contributors - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* Copyright (C) 2014 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ #include "samplesfsx.h" #include "blacksim/blacksimfreefunctions.h" @@ -16,12 +20,12 @@ namespace BlackSimTest /* * Samples */ - int CSamplesFsx::samples() + int CSamplesFsx::samples(QTextStream &streamOut) { BlackSim::registerMetadata(); - qDebug() << CSimConnectUtilities::simConnectExceptionToString(CSimConnectUtilities::SIMCONNECT_EXCEPTION_ALREADY_SUBSCRIBED); - qDebug() << CSimConnectUtilities::simConnectExceptionToString(CSimConnectUtilities::SIMCONNECT_EXCEPTION_ILLEGAL_OPERATION); - qDebug() << CSimConnectUtilities::simConnectSurfaceTypeToString(CSimConnectUtilities::Bituminus); + streamOut << CSimConnectUtilities::simConnectExceptionToString(CSimConnectUtilities::SIMCONNECT_EXCEPTION_ALREADY_SUBSCRIBED) << endl; + streamOut << CSimConnectUtilities::simConnectExceptionToString(CSimConnectUtilities::SIMCONNECT_EXCEPTION_ILLEGAL_OPERATION) << endl; + streamOut << CSimConnectUtilities::simConnectSurfaceTypeToString(CSimConnectUtilities::Bituminus) << endl; return 0; } diff --git a/samples/blacksim/samplesfsx.h b/samples/blacksim/samplesfsx.h index 600642d7f..00adc2879 100644 --- a/samples/blacksim/samplesfsx.h +++ b/samples/blacksim/samplesfsx.h @@ -1,23 +1,27 @@ -/* Copyright (C) 2013 VATSIM Community / contributors - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* Copyright (C) 2014 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file #ifndef BLACKSIMTEST_SAMPLESFSX_H #define BLACKSIMTEST_SAMPLESFSX_H +#include + namespace BlackSimTest { - /*! - * \brief Samples for FSX classes - */ + //! Samples for FSX classes class CSamplesFsx { public: - /*! - * \brief Run the samples - */ - static int samples(); + //! Run the samples + static int samples(QTextStream &streamOut); }; } // namespace diff --git a/samples/blacksim/samplesmodelmapping.cpp b/samples/blacksim/samplesmodelmapping.cpp index 6009f62af..a6c5e1a88 100644 --- a/samples/blacksim/samplesmodelmapping.cpp +++ b/samples/blacksim/samplesmodelmapping.cpp @@ -1,7 +1,11 @@ -/* Copyright (C) 2013 VATSIM Community / contributors - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* Copyright (C) 2014 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ #include "samplesmodelmapping.h" #include "blackmisc/blackmiscfreefunctions.h" @@ -18,7 +22,7 @@ namespace BlackSimTest /* * Samples */ - int CSamplesModelMapping::samples() + int CSamplesModelMapping::samples(QTextStream &streamOut) { BlackMisc::registerMetadata(); BlackSim::registerMetadata(); @@ -26,10 +30,10 @@ namespace BlackSimTest CVPilotModelMappings cvm; cvm.addDirectory(CVPilotModelMappings::standardMappingsDirectory()); bool s = cvm.load(); - qDebug() << "loaded:" << s << "size:" << cvm.size(); + streamOut << "loaded:" << s << "size:" << cvm.size() << endl; BlackMisc::Aviation::CAircraftIcao icao("C172"); - qDebug() << cvm.findByIcaoWildcard(icao); + streamOut << cvm.findByIcaoWildcard(icao) << endl; return 0; } diff --git a/samples/blacksim/samplesmodelmapping.h b/samples/blacksim/samplesmodelmapping.h index 177d4e899..f7d0784fd 100644 --- a/samples/blacksim/samplesmodelmapping.h +++ b/samples/blacksim/samplesmodelmapping.h @@ -1,23 +1,27 @@ -/* Copyright (C) 2013 VATSIM Community / contributors - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* Copyright (C) 2014 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file #ifndef BLACKSIMTEST_SAMPLESMODELMAPPING_H #define BLACKSIMTEST_SAMPLESMODELMAPPING_H +#include + namespace BlackSimTest { - /*! - * \brief Samples for model mapping classes - */ + //! Samples for model mapping classes class CSamplesModelMapping { public: - /*! - * \brief Run the samples - */ - static int samples(); + //! Run the samples + static int samples(QTextStream &streamOut); }; } // namespace diff --git a/src/blacksim/fscommon/aircraftcfgentries.cpp b/src/blacksim/fscommon/aircraftcfgentries.cpp index 2515d78d4..189aa4c6c 100644 --- a/src/blacksim/fscommon/aircraftcfgentries.cpp +++ b/src/blacksim/fscommon/aircraftcfgentries.cpp @@ -98,5 +98,5 @@ namespace BlackSim } } - } + } // namespace } // namespace diff --git a/src/blacksim/fscommon/aircraftcfgentries.h b/src/blacksim/fscommon/aircraftcfgentries.h index 2fef65c11..f85534660 100644 --- a/src/blacksim/fscommon/aircraftcfgentries.h +++ b/src/blacksim/fscommon/aircraftcfgentries.h @@ -49,7 +49,7 @@ namespace BlackSim * \param atcModel * \param atcParkingCode */ - CAircraftCfgEntries(const QString &filePath, qint32 index, const QString &title, const QString &atcType, const QString &atcModel, const QString &atcParkingCode); + CAircraftCfgEntries(const QString &filePath, int index, const QString &title, const QString &atcType, const QString &atcModel, const QString &atcParkingCode); //! Filepath QString getFilePath() const { return this->m_filePath; } @@ -58,7 +58,7 @@ namespace BlackSim QString getTitle() const { return this->m_title; } //! Index - qint32 getIndex() const { return this->m_index; } + int getIndex() const { return this->m_index; } //! ATC model QString getAtcModel() const { return this->m_atcModel; } @@ -76,7 +76,7 @@ namespace BlackSim void setTitle(const QString &title) { this->m_title = title; } //! Index - void setIndex(const qint32 index) { this->m_index = index; } + void setIndex(int index) { this->m_index = index; } //! ATC model void setAtcModel(const QString &atcModel) { this->m_atcModel = atcModel; } @@ -99,7 +99,7 @@ namespace BlackSim private: BLACK_ENABLE_TUPLE_CONVERSION(CAircraftCfgEntries) - qint32 m_index; //!< current index in given config + int m_index; //!< current index in given config QString m_filePath; //!< file path of aircraft.cfg QString m_title; //!< Title in aircraft.cfg QString m_atcType; //!< ATC type diff --git a/src/blacksim/fscommon/aircraftcfgentrieslist.cpp b/src/blacksim/fscommon/aircraftcfgentrieslist.cpp index ecf6c9ac5..8a97b2b1b 100644 --- a/src/blacksim/fscommon/aircraftcfgentrieslist.cpp +++ b/src/blacksim/fscommon/aircraftcfgentrieslist.cpp @@ -28,22 +28,31 @@ namespace BlackSim /* * Model for title */ - bool CAircraftCfgEntriesList::containsModeWithTitle(const QString &title, Qt::CaseSensitivity caseSensitivity) + bool CAircraftCfgEntriesList::containsModelWithTitle(const QString &title, Qt::CaseSensitivity caseSensitivity) { return this->containsBy([ = ](const CAircraftCfgEntries & entries) -> bool { return title.compare(entries.getTitle(), caseSensitivity) == 0; }); } + /* + * Models for title + */ + CAircraftCfgEntriesList CAircraftCfgEntriesList::findByTitle(const QString &title, Qt::CaseSensitivity caseSensitivity) + { + return this->findBy([ = ](const CAircraftCfgEntries & entries) -> bool + { return title.compare(entries.getTitle(), caseSensitivity) == 0; }); + } + /* * Read all entrities in given directory */ - qint32 CAircraftCfgEntriesList::read(const QString &directory) + int CAircraftCfgEntriesList::read(const QString &directory) { // set directory with name filters, get aircraft.cfg and sub directories QDir dir(directory, "aircraft.cfg", QDir::Name, QDir::Files | QDir::AllDirs); if (!dir.exists()) return 0; // can happen if there are shortcuts or linked dirs not available - qint32 counter = 0; + int counter = 0; QString currentDir = dir.absolutePath(); // Dirs last is crucial,since I will break recursion on "aircraft.cfg" level diff --git a/src/blacksim/fscommon/aircraftcfgentrieslist.h b/src/blacksim/fscommon/aircraftcfgentrieslist.h index 7059a51f2..bda4c75fe 100644 --- a/src/blacksim/fscommon/aircraftcfgentrieslist.h +++ b/src/blacksim/fscommon/aircraftcfgentrieslist.h @@ -28,12 +28,6 @@ namespace BlackSim //! Utility, providing FSX aircraft.cfg entries class CAircraftCfgEntriesList : public BlackMisc::CSequence { - private: - QString m_rootDirectory; //!< root directory reading aircraft.cfg files - bool m_readForDirectory; //!< valid read for given directory - - //! Read all entries in one directory - qint32 read(const QString &directory); public: @@ -41,7 +35,7 @@ namespace BlackSim CAircraftCfgEntriesList(const QString &rootDirectory = "") : m_rootDirectory(rootDirectory), m_readForDirectory(false) {} //! Read all aircraft.cfg files starting from root directory - qint32 read() + int read() { if (this->m_readForDirectory) return this->size(); @@ -75,7 +69,10 @@ namespace BlackSim QString getRootDirectory() const { return this->m_rootDirectory; } //! Contains model with title? - bool containsModeWithTitle(const QString &title, Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive); + bool containsModelWithTitle(const QString &title, Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive); + + //! Find by title + CAircraftCfgEntriesList findByTitle(const QString &title, Qt::CaseSensitivity caseSensitivity); //! \copydoc CValueObject::toQVariant virtual QVariant toQVariant() const override { return QVariant::fromValue(*this); } @@ -92,9 +89,17 @@ namespace BlackSim //! Register metadata static void registerMetadata(); + + private: + QString m_rootDirectory; //!< root directory reading aircraft.cfg files + bool m_readForDirectory; //!< valid read for given directory + + //! Read all entries in one directory + int read(const QString &directory); + }; - } -} + } // namespace +} // namespace Q_DECLARE_METATYPE(BlackSim::FsCommon::CAircraftCfgEntriesList) Q_DECLARE_METATYPE(BlackMisc::CCollection) diff --git a/src/blacksim/fscommon/aircraftindexer.h b/src/blacksim/fscommon/aircraftindexer.h index 159d068d3..cf3da7a47 100644 --- a/src/blacksim/fscommon/aircraftindexer.h +++ b/src/blacksim/fscommon/aircraftindexer.h @@ -1,3 +1,14 @@ +/* Copyright (C) 2013 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + #ifndef BLACKSIM_FSCOMMON_AIRCRAFTINDEXER_H #define BLACKSIM_FSCOMMON_AIRCRAFTINDEXER_H @@ -9,19 +20,13 @@ namespace BlackSim { namespace FsCommon { - /*! - * \brief Indexer for all modelsThe CAircraftIndexer class - */ + //! Indexer for all models + //! \sa CAircraftCfgEntries + //! \sa CAircraftCfgEntriesList class CAircraftIndexer : QObject { Q_OBJECT - private: - //! Constructor - CAircraftIndexer(QObject *parent = nullptr); - - CAircraftCfgEntriesList m_entries; //!< all entries - signals: //! Number of entries read void entriesRead(int number); @@ -40,7 +45,12 @@ namespace BlackSim //! Read in background static QFuture readInBackground(const QString directory = ""); + private: + //! Constructor + CAircraftIndexer(QObject *parent = nullptr); + + CAircraftCfgEntriesList m_entries; //!< all entries }; - } -} + } // namespace +} // namespace #endif // guard diff --git a/src/blacksim/fscommon/vpilotmodelmappings.h b/src/blacksim/fscommon/vpilotmodelmappings.h index dea0d8b50..4583d3717 100644 --- a/src/blacksim/fscommon/vpilotmodelmappings.h +++ b/src/blacksim/fscommon/vpilotmodelmappings.h @@ -19,9 +19,7 @@ namespace BlackSim { namespace FsCommon { - /*! - * Model mappings - */ + //! Model mappings class CVPilotModelMappings : public ISimulatorModelMappings { public: