11#include <QStringBuilder>
14using namespace swift::misc::db;
15using namespace swift::misc::network;
16using namespace swift::misc::physical_quantities;
24 CDbFlags::DataRetrievalMode retrievalFlags,
const CTime &cacheLifetime)
25 : m_entities(entities), m_retrievalMode(retrievalFlags), m_cacheLifetime(cacheLifetime)
30 QString CDatabaseReaderConfig::convertToQString(
bool i18n)
const
36 CEntityFlags::Entity CDatabaseReaderConfig::getEntities()
const
38 return static_cast<CEntityFlags::Entity
>(m_entities);
41 bool CDatabaseReaderConfig::supportsEntities(CEntityFlags::Entity entities)
const
43 const int myEntities =
static_cast<int>(this->getEntities());
44 const int testEnties =
static_cast<int>(entities);
45 const int common = myEntities & testEnties;
46 return (common == testEnties) || (common == myEntities);
49 CDbFlags::DataRetrievalMode CDatabaseReaderConfig::getRetrievalMode()
const
51 return static_cast<CDbFlags::DataRetrievalMode
>(m_retrievalMode);
54 void CDatabaseReaderConfig::markAsDbDown()
56 CDbFlags::DataRetrievalMode m = this->getRetrievalMode();
58 m_retrievalMode =
static_cast<int>(m);
61 void CDatabaseReaderConfig::setCacheLifetime(
const CTime &time) { m_cacheLifetime = time; }
63 bool CDatabaseReaderConfig::possiblyReadsFromSwiftDb()
const
76 bool CDatabaseReaderConfig::needsSharedInfoFile()
const
90 bool CDatabaseReaderConfig::possiblyWritesToSwiftDb()
const
103 bool CDatabaseReaderConfig::possiblyReadsFromCache()
const
105 if (!this->isValid())
117 :
CSequence<CDatabaseReaderConfig>(other)
120 CDatabaseReaderConfig
121 CDatabaseReaderConfigList::findFirstOrDefaultForEntity(
const CEntityFlags::Entity entities)
const
125 for (
const CDatabaseReaderConfig &config : *
this)
129 if (config.getEntities().testFlag(testFlag))
136 if (config.getEntities() == entities)
145 void CDatabaseReaderConfigList::markAsDbDown()
147 for (CDatabaseReaderConfig &config : *
this)
149 config.markAsDbDown();
153 void CDatabaseReaderConfigList::setCacheLifetimes(
const CTime &time)
155 for (CDatabaseReaderConfig &config : *
this)
157 config.setCacheLifetime(time);
161 bool CDatabaseReaderConfigList::possiblyReadsFromSwiftDb()
const
163 return std::ranges::any_of(
164 *
this, [](
const CDatabaseReaderConfig &config) {
return config.possiblyReadsFromSwiftDb(); });
167 bool CDatabaseReaderConfigList::possiblyWritesToSwiftDb()
const
169 return std::ranges::any_of(
170 *
this, [](
const CDatabaseReaderConfig &config) {
return config.possiblyWritesToSwiftDb(); });
173 bool CDatabaseReaderConfigList::needsSharedInfoObjects(CEntityFlags::Entity entities)
const
175 return std::ranges::any_of(*
this, [&](
const CDatabaseReaderConfig &config) {
176 return config.supportsEntities(entities) && config.needsSharedInfoFile();
180 bool CDatabaseReaderConfigList::needsSharedInfoFile(CEntityFlags::Entity entities)
const
182 return std::ranges::any_of(*
this, [&](
const CDatabaseReaderConfig &config) {
183 return config.supportsEntities(entities) && config.needsSharedInfoFile();
187 bool CDatabaseReaderConfigList::needsSharedInfoObjectsIfCachesEmpty(CEntityFlags::Entity entities,
188 CEntityFlags::Entity cachedEntities)
const
190 return std::ranges::any_of(*
this, [&entities, &cachedEntities](
const CDatabaseReaderConfig &config) {
191 if (!config.supportsEntities(entities))
return false;
192 if (!config.needsSharedInfoFile())
return false;
195 const CEntityFlags::Entity configEntities = config.getEntities();
196 const CEntityFlags::Entity configEntitiesNotCached = configEntities & ~cachedEntities;
201 CEntityFlags::Entity CDatabaseReaderConfigList::getEntitesCachedOrReadFromDB()
const
204 for (
const CDatabaseReaderConfig &config : *
this)
206 if (config.possiblyReadsFromSwiftDb() || config.possiblyReadsFromCache())
208 entities |= config.getEntities();
214 CDatabaseReaderConfigList CDatabaseReaderConfigList::forMappingTool()
219 CDatabaseReaderConfigList l;
232 CDatabaseReaderConfigList CDatabaseReaderConfigList::forPilotClient()
236 CDbFlags::DataRetrievalMode retrievalFlagsWriting = retrievalFlags;
239 CDatabaseReaderConfigList l;
252 CDatabaseReaderConfigList CDatabaseReaderConfigList::forLauncher()
256 CDatabaseReaderConfigList l;
269 CDatabaseReaderConfigList CDatabaseReaderConfigList::allDirectDbAccess()
273 CDatabaseReaderConfigList l;
CDatabaseReaderConfig()=default
Default constructor.
Generic sequential container with value semantics.
static DataRetrievalMode adjustWhenDbIsDown(DataRetrievalMode mode)
Adjust flag as we already know DB is down.
@ CacheThenShared
Cache where possible, otherwise shared.
@ DbReading
directly from DB
@ Ignore
ignore this entity
@ SharedInfoOnly
shared info file only
@ CacheThenDb
Cache where possible, otherwise DB.
@ CacheAndSharedInfo
Cached data plus shared info file.
static QString flagToString(DataRetrievalModeFlag flag)
Convert to string.
static bool isSingleEntity(CEntityFlags::Entity flag)
Representing single entity?
static EntityFlag entityToEntityFlag(Entity entity)
To flag (when explicit conversion is needed).
EntityFlag
Which data to read, requires corresponding readers.
@ AircraftCategoryEntity
aircraft category entities
@ CountryEntity
country codes
@ AirlineIcaoEntity
ICAO codes for airlines.
@ AircraftIcaoEntity
ICAO codes for aircraft.
@ DistributorEntity
distributors
static bool anySwiftDbEntity(Entity entities)
Representing at least one DB entity.
static QString entitiesToString(CEntityFlags::Entity entities, const QString &separator=", ")
Entities to string list.
static CTimeUnit min()
Minute.
Classes interacting with the swift database (aka "datastore").
Free functions in swift::misc.
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.