diff --git a/src/blackcore/webreaderflags.cpp b/src/blackcore/webreaderflags.cpp index e9aa30bcd..d87777619 100644 --- a/src/blackcore/webreaderflags.cpp +++ b/src/blackcore/webreaderflags.cpp @@ -7,9 +7,7 @@ * contained in the LICENSE file. */ -//! \cond PRIVATE - -#include "blackcore/webreaderflags.h" +#include "webreaderflags.h" using namespace BlackMisc::Network; @@ -32,6 +30,11 @@ namespace BlackCore f |= ModelReader; } + if (entity.testFlag(CEntityFlags::InfoObjectEntity)) + { + f |= InfoDataReader; + } + if (entity.testFlag(CEntityFlags::BookingEntity)) { f |= VatsimBookingReader; @@ -56,9 +59,7 @@ namespace BlackCore bool CWebReaderFlags::isFromSwiftDb(WebReader reader) { - return reader.testFlag(ModelReader) || reader.testFlag(IcaoDataReader); + return reader.testFlag(ModelReader) || reader.testFlag(IcaoDataReader) || reader.testFlag(InfoDataReader); } } // namespace - -//! \endcond diff --git a/src/blackcore/webreaderflags.h b/src/blackcore/webreaderflags.h index c5bb8edea..46a5dbc82 100644 --- a/src/blackcore/webreaderflags.h +++ b/src/blackcore/webreaderflags.h @@ -35,38 +35,26 @@ namespace BlackCore VatsimMetarReader = 1 << 2, //!< reader for VATSIM metar data IcaoDataReader = 1 << 3, //!< reader for ICAO data ModelReader = 1 << 4, //!< reader for model data such as liveries, models, etc + InfoDataReader = 1 << 5, //!< DB info data (metdata, how many data, when updated) AllVatsimReaders = VatsimBookingReader | VatsimDataReader | VatsimMetarReader, //!< all readers - AllSwiftDbReaders = IcaoDataReader | ModelReader, //!< all swift data + AllSwiftDbReaders = IcaoDataReader | ModelReader | InfoDataReader, //!< all swift data AllReaders = AllSwiftDbReaders | AllVatsimReaders //!< everything }; Q_DECLARE_FLAGS(WebReader, WebReaderFlag) - //! How to read DB data - enum DbReaderHintFlag - { - NoHint = 0, - FromDb = 1 << 1, //!< directly from DB - FromJsonFile = 1 << 2, //!< from the JSON files - FromCache = 1 << 3, //!< try cache first - }; - Q_DECLARE_FLAGS(DbReaderHint, DbReaderHintFlag) - //! Relationship between reader and entity static WebReader entityToReader(BlackMisc::Network::CEntityFlags::Entity entity); - //! Read from swift DB + //! Reads from swift DB? static bool isFromSwiftDb(BlackMisc::Network::CEntityFlags::Entity entity); - //! Read from swift DB + //! Reader for swift DB? static bool isFromSwiftDb(WebReader reader); }; } // namespace Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::WebReaderFlag) Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::WebReader) -Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::DbReaderHintFlag) -Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::DbReaderHint) Q_DECLARE_OPERATORS_FOR_FLAGS(BlackCore::CWebReaderFlags::WebReader) -Q_DECLARE_OPERATORS_FOR_FLAGS(BlackCore::CWebReaderFlags::DbReaderHint) #endif diff --git a/src/blackmisc/network/entityflags.cpp b/src/blackmisc/network/entityflags.cpp index 65f663a60..050d8dc93 100644 --- a/src/blackmisc/network/entityflags.cpp +++ b/src/blackmisc/network/entityflags.cpp @@ -12,6 +12,7 @@ #include #include +#include namespace BlackMisc { @@ -21,18 +22,20 @@ namespace BlackMisc { switch (flag) { - case NoEntity: return "no data"; - case BookingEntity: return "VATSIM bookings"; - case VatsimDataFile: return "VATSIM data file"; case AircraftIcaoEntity: return "Aircraft ICAO"; case AirlineIcaoEntity: return "Airline ICAO"; + case AllEntities: return "All"; + case AllIcaoAndCountries: return "All ICAO + country"; + case AllIcaoEntities: return "All ICAO"; + case BookingEntity: return "VATSIM bookings"; case CountryEntity: return "Country"; case DistributorEntity: return "Distributor"; + case InfoObjectEntity: return "Info objects"; case LiveryEntity: return "Livery"; case ModelEntity: return "Model"; - case AllIcaoEntities: return "All ICAO"; - case AllIcaoAndCountries: return "All ICAO + country"; - case AllEntities: return "All"; + case NoEntity: return "no data"; + case VatsimDataFile: return "VATSIM data file"; + case VatsimStatusFile: return "VATSIM status file"; default: BLACK_VERIFY_X(false, Q_FUNC_INFO, "wrong flags"); return "wrong flags"; @@ -42,18 +45,31 @@ namespace BlackMisc QString CEntityFlags::flagToString(BlackMisc::Network::CEntityFlags::Entity flag) { QStringList list; - if (flag.testFlag(NoEntity)) list << "no data"; - if (flag.testFlag(BookingEntity)) list << "VATSIM bookings"; - if (flag.testFlag(VatsimDataFile)) list << "VATSIM data file"; if (flag.testFlag(AircraftIcaoEntity)) list << "Aircraft ICAO"; if (flag.testFlag(AirlineIcaoEntity)) list << "Airline ICAO"; + if (flag.testFlag(BookingEntity)) list << "VATSIM bookings"; if (flag.testFlag(CountryEntity)) list << "Country"; if (flag.testFlag(DistributorEntity)) list << "Distributor"; + if (flag.testFlag(InfoObjectEntity)) list << "Info objects"; if (flag.testFlag(LiveryEntity)) list << "Livery"; if (flag.testFlag(ModelEntity)) list << "Model"; + if (flag.testFlag(NoEntity)) list << "no data"; + if (flag.testFlag(VatsimDataFile)) list << "VATSIM data file"; + if (flag.testFlag(VatsimStatusFile)) list << "VATSIM status file"; return list.join(','); } + bool CEntityFlags::isSingleEntity(BlackMisc::Network::CEntityFlags::Entity flag) + { + return numberOfEntities(flag) == 1; + } + + int CEntityFlags::numberOfEntities(BlackMisc::Network::CEntityFlags::Entity flag) + { + const int c = std::bitset(flag).count(); + return c; + } + QString CEntityFlags::flagToString(CEntityFlags::ReadState flag) { switch (flag) @@ -84,6 +100,22 @@ namespace BlackMisc } } + CEntityFlags::EntityFlag CEntityFlags::entityToEntityFlag(Entity entity) + { + return static_cast(static_cast(entity)); + } + + CEntityFlags::Entity CEntityFlags::iterateDbEntities(Entity &entities) + { + if (entities == NoEntity || entities == InfoObjectEntity) { return NoEntity; } + if (entities.testFlag(AircraftIcaoEntity)) { entities &= ~AircraftIcaoEntity; return AircraftIcaoEntity; } + if (entities.testFlag(AirlineIcaoEntity)) { entities &= ~AirlineIcaoEntity; return AirlineIcaoEntity; } + if (entities.testFlag(LiveryEntity)) { entities &= ~LiveryEntity; return LiveryEntity; } + if (entities.testFlag(CountryEntity)) { entities &= ~CountryEntity; return CountryEntity; } + if (entities.testFlag(ModelEntity)) { entities &= ~ModelEntity; return ModelEntity; } + return NoEntity; + } + bool CEntityFlags::isWarningOrAbove(CEntityFlags::ReadState state) { CStatusMessage::StatusSeverity s = flagToSeverity(state); @@ -97,6 +129,14 @@ namespace BlackMisc } } + bool CEntityFlags::anySwiftDbEntity(Entity entities) + { + return + entities.testFlag(AircraftIcaoEntity) || entities.testFlag(AirlineIcaoEntity) || + entities.testFlag(CountryEntity) || + entities.testFlag(ModelEntity) || entities.testFlag(LiveryEntity); + } + void CEntityFlags::registerMetadata() { // this is no value class and I register enums here, diff --git a/src/blackmisc/network/entityflags.h b/src/blackmisc/network/entityflags.h index 43fd3aa0f..ee0b8e188 100644 --- a/src/blackmisc/network/entityflags.h +++ b/src/blackmisc/network/entityflags.h @@ -32,22 +32,23 @@ namespace BlackMisc //! Which data to read, requires corresponding readers enum EntityFlag { - NoEntity = 0, //!< no data at all - BookingEntity = 1 << 0, //!< bookings - MetarEntity = 1 << 1, //!< METAR - AircraftIcaoEntity = 1 << 2, //!< ICAO codes for aircraft - AirlineIcaoEntity = 1 << 3, //!< ICAO codes for airlines - CountryEntity = 1 << 4, //!< country codes - DistributorEntity = 1 << 5, //!< distributors - LiveryEntity = 1 << 6, //!< liveries - ModelEntity = 1 << 7, //!< models - VatsimDataFile = 1 << 8, //!< the VATSIM data file (multiple data entities) - VatsimStatusFile = 1 << 9, //!< the VATSIM status file (URLs for data files etc.) - AllEntities = ((1<<10)-1), //!< everything - AllIcaoEntities = AircraftIcaoEntity | AirlineIcaoEntity, //!< all ICAO codes - AllIcaoAndCountries = AircraftIcaoEntity | AirlineIcaoEntity | CountryEntity, //!< all ICAO codes and countries - DistributorLiveryModel = DistributorEntity | LiveryEntity | ModelEntity, //!< Combinded - AllDbEntities = AllIcaoEntities | DistributorLiveryModel, //!< All DB stuff + NoEntity = 0, //!< no data at all + InfoObjectEntity = 1 << 0, //!< info about DB data (kinf of metadata) + AircraftIcaoEntity = 1 << 1, //!< ICAO codes for aircraft + AirlineIcaoEntity = 1 << 2, //!< ICAO codes for airlines + CountryEntity = 1 << 3, //!< country codes + DistributorEntity = 1 << 4, //!< distributors + LiveryEntity = 1 << 5, //!< liveries + ModelEntity = 1 << 6, //!< models + BookingEntity = 1 << 7, //!< bookings + MetarEntity = 1 << 8, //!< METAR + VatsimDataFile = 1 << 9, //!< the VATSIM data file (multiple data entities) + VatsimStatusFile = 1 << 10, //!< the VATSIM status file (URLs for data files etc.) + AllEntities = ((1 << 11) - 1), //!< everything + AllIcaoEntities = AircraftIcaoEntity | AirlineIcaoEntity, //!< all ICAO codes + AllIcaoAndCountries = AircraftIcaoEntity | AirlineIcaoEntity | CountryEntity, //!< all ICAO codes and countries + DistributorLiveryModel = DistributorEntity | LiveryEntity | ModelEntity, //!< Combinded + AllDbEntities = AllIcaoEntities | DistributorLiveryModel | InfoObjectEntity //!< All DB stuff }; Q_DECLARE_FLAGS(Entity, EntityFlag) @@ -66,15 +67,30 @@ namespace BlackMisc //! Convert to string static QString flagToString(BlackMisc::Network::CEntityFlags::Entity flag); + //! Representing single entity? + static bool isSingleEntity(BlackMisc::Network::CEntityFlags::Entity flag); + + //! Represented number of entities + static int numberOfEntities(BlackMisc::Network::CEntityFlags::Entity flag); + //! Convert to string static QString flagToString(ReadState flag); //! Flag to severity static BlackMisc::CStatusMessage::StatusSeverity flagToSeverity(ReadState state); + //! To flag + static EntityFlag entityToEntityFlag(Entity entity); + + //! Return single entity and remove it from entities + static Entity iterateDbEntities(Entity &entities); + //! Read state representing warning or above? static bool isWarningOrAbove(ReadState state); + //! Representing at least one DB entity + static bool anySwiftDbEntity(Entity entities); + //! Register metadata static void registerMetadata(); };