swift
Public Member Functions | Protected Member Functions | Private Member Functions | List of all members
swift::core::db::CInfoDataReader Class Reference

Read information about data from Database or shared files such as when updated and number of entries. More...

Inheritance diagram for swift::core::db::CInfoDataReader:
[legend]

Public Member Functions

 CInfoDataReader (QObject *owner, const CDatabaseReaderConfigList &config, swift::misc::db::CDbFlags::DataRetrievalModeFlag mode)
 Constructor.
 
swift::misc::db::CDbInfoList getInfoObjects () const
 Get info list (either shared or from DB) More...
 
int getInfoObjectCount () const
 Get info list size (either shared or from DB) More...
 
bool areAllInfoObjectsRead () const
 All data read? More...
 
void readInfoData ()
 Allow to call directly, special for info objects reader.
 
swift::misc::network::CUrl getInfoObjectsUrl () const
 URL depending on mode, i.e. shared/DB.
 
virtual swift::misc::CStatusMessageList readFromJsonFiles (const QString &dir, swift::misc::network::CEntityFlags::Entity whatToRead, bool overrideNewer)
 Data read from local data.
 
virtual bool readFromJsonFilesInBackground (const QString &dir, swift::misc::network::CEntityFlags::Entity whatToRead, bool overrideNewer)
 Data read from local data.
 
virtual swift::misc::network::CEntityFlags::Entity getSupportedEntities () const
 Supported entities by this reader.
 
virtual QDateTime getCacheTimestamp (swift::misc::network::CEntityFlags::Entity entity) const
 Get cache timestamp. More...
 
virtual int getCacheCount (swift::misc::network::CEntityFlags::Entity entity) const
 Cache`s number of entities. More...
 
virtual swift::misc::network::CEntityFlags::Entity getEntitiesWithCacheCount () const
 Entities already having data in cache. More...
 
virtual swift::misc::network::CEntityFlags::Entity getEntitiesWithCacheTimestampNewerThan (const QDateTime &threshold) const
 Entities already having data in cache (based on timestamp assumption) More...
 
virtual void synchronizeCaches (swift::misc::network::CEntityFlags::Entity entities)
 Admit caches for given entities.
 
virtual void admitCaches (swift::misc::network::CEntityFlags::Entity entities)
 Admit caches for given entities.
 
- Public Member Functions inherited from swift::core::db::CDatabaseReader
void readInBackgroundThread (swift::misc::network::CEntityFlags::Entity entities, const QDateTime &newerThan)
 Start reading in own thread. More...
 
swift::misc::network::CEntityFlags::Entity triggerLoadingDirectlyFromDb (swift::misc::network::CEntityFlags::Entity entities, const QDateTime &newerThan)
 Start loading from DB in own thread. More...
 
swift::misc::network::CEntityFlags::Entity triggerLoadingDirectlyFromSharedFiles (swift::misc::network::CEntityFlags::Entity entities, bool checkCacheTsUpfront)
 Start loading from shared files in own thread. More...
 
bool hasReceivedOkReply () const
 Has received Ok response from server at least once? More...
 
bool hasReceivedOkReply (QString &message) const
 Has received Ok response from server? A message why connect failed can be obtained. More...
 
bool hasReceivedFirstReply () const
 Has received 1st reply? More...
 
QString getSupportedEntitiesAsString () const
 Supported entities as string.
 
swift::misc::network::CEntityFlags::Entity maskBySupportedEntities (swift::misc::network::CEntityFlags::Entity entities) const
 Mask by supported entities.
 
bool supportsAnyOfEntities (swift::misc::network::CEntityFlags::Entity entities) const
 Is any of the given entities supported here by this reader.
 
bool hasCacheTimestampNewerThan (swift::misc::network::CEntityFlags::Entity entity, const QDateTime &threshold) const
 Has entity a valid and newer timestamp.
 
bool hasDbInfoObjects () const
 DB info objects available?
 
bool hasSharedInfoObjects () const
 Shared info objects available?
 
bool hasSharedFileHeader (const swift::misc::network::CEntityFlags::Entity entity) const
 Header of shared file read (for single entity)?
 
bool hasSharedFileHeaders (const swift::misc::network::CEntityFlags::Entity entities) const
 Headers of shared file read (for single entity)?
 
QDateTime getLatestEntityTimestampFromDbInfoObjects (swift::misc::network::CEntityFlags::Entity entity) const
 Obtain latest object timestamp from DB info objects. More...
 
QDateTime getLatestEntityTimestampFromSharedInfoObjects (swift::misc::network::CEntityFlags::Entity entity) const
 Obtain latest object timestamp from shared info objects. More...
 
QDateTime getLatestSharedFileHeaderTimestamp (swift::misc::network::CEntityFlags::Entity entity) const
 Header timestamp (last-modified) for shared file. More...
 
bool isSharedHeaderNewerThanCacheTimestamp (swift::misc::network::CEntityFlags::Entity entity) const
 Is the file timestamp newer than cache timestamp? More...
 
bool isSharedInfoObjectNewerThanCacheTimestamp (swift::misc::network::CEntityFlags::Entity entity) const
 Is the shared info timestamp newer than cache timestamp?
 
swift::misc::network::CEntityFlags::Entity getEntitesWithNewerHeaderTimestamp (swift::misc::network::CEntityFlags::Entity entities) const
 Those entities where the timestamp of the header is newer than the cache timestamp.
 
swift::misc::network::CEntityFlags::Entity getEntitesWithNewerSharedInfoObject (swift::misc::network::CEntityFlags::Entity entities) const
 Those entities where the timestamp of a shared info object is newer than the cache timestamp.
 
const QString & getStatusMessage () const
 Status message (error message)
 
void setSeverityNoWorkingUrl (swift::misc::CStatusMessage::StatusSeverity s)
 Severity used for log messages in case of no URLs.
 
swift::misc::CStatusMessageList initFromLocalResourceFiles (bool inBackground)
 Init from local resource file. More...
 
swift::misc::CStatusMessageList initFromLocalResourceFiles (swift::misc::network::CEntityFlags::Entity entities, bool inBackground)
 Init from local resource file. More...
 
- Public Member Functions inherited from swift::core::CThreadedReader
virtual ~CThreadedReader ()
 Destructor.
 
QDateTime getUpdateTimestamp () const
 Thread safe, get update timestamp. More...
 
void setUpdateTimestamp (const QDateTime &updateTimestamp=QDateTime::currentDateTimeUtc())
 Thread safe, set update timestamp. More...
 
bool updatedWithinLastMs (qint64 timeLastMs)
 Was setup read within last xx milliseconds. More...
 
bool isMarkedAsFailed () const
 Is marked as read failed. More...
 
void setMarkedAsFailed (bool failed)
 Set marker for read failed. More...
 
swift::misc::network::CUrlLogList getReadLog () const
 Get the read log. More...
 
void startReader ()
 Starts the reader. More...
 
void pauseReader ()
 Pauses the reader. More...
 
void markAsUsedInUnitTest ()
 Used in unit test. More...
 
bool hasPendingUrls () const
 Has pending URLs? More...
 
swift::misc::network::CUrlLogList getUrlLogList () const
 Get the URL log list. More...
 
int getNetworkReplyProgress () const
 Progress 0..100. More...
 
QPair< qint64, qint64 > getNetworkReplyBytes () const
 Max./current bytes.
 
- Public Member Functions inherited from swift::misc::CContinuousWorker
 CContinuousWorker (QObject *owner, const QString &name)
 Constructor. More...
 
void start (QThread::Priority priority=QThread::InheritPriority)
 Starts a thread and moves the worker into it.
 
void quit () noexcept final
 Stops the thread the next time around its event loop. The thread and the worker will then be deleted. More...
 
void quitAndWait () noexcept final
 Calls quit() and blocks until the thread is finished. More...
 
bool isEnabled () const
 Enabled (running)? More...
 
void setEnabled (bool enabled)
 Enabled (running)? More...
 
void startUpdating (int updateTimeSecs)
 Start updating (start/stop timer) More...
 
const QString & getName ()
 Name of the worker.
 
const QObject * owner () const
 Owner of the worker.
 
- Public Member Functions inherited from swift::misc::CWorkerBase
template<typename T , typename F >
void then (T *context, F functor)
 Connects to a functor or method which will be called when the task is finished. More...
 
template<typename F >
void then (F functor)
 Connects to a functor which will be called when the task is finished. More...
 
bool isFinished () const
 Returns true if the task has finished. More...
 
template<typename F >
void doIfFinished (F functor) const
 Executes some code (in the caller's thread) if the task has finished. More...
 
template<typename F >
void doIfNotFinished (F functor) const
 Executes some code (in the caller's thread) if the task has not finished. More...
 
template<typename F1 , typename F2 >
void doIfFinishedElse (F1 ifFunctor, F2 elseFunctor) const
 Executes some code (in the caller's thread) if the task has finished and some different code if it has not finished. More...
 
void waitForFinished () noexcept
 Blocks until the task is finished. More...
 
void abandon () noexcept
 Notify the task that its result is no longer needed, so it can finish early. More...
 
void abandonAndWait () noexcept
 Convenience to call abandon() followed by waitForFinished().
 

Protected Member Functions

virtual void invalidateCaches (swift::misc::network::CEntityFlags::Entity entities)
 Invalidate the caches for given entities.
 
virtual bool hasChangedUrl (swift::misc::network::CEntityFlags::Entity entity, swift::misc::network::CUrl &oldUrlInfo, swift::misc::network::CUrl &newUrlInfo) const
 Changed URL, means the cache values have been read from elsewhere. More...
 
virtual swift::misc::network::CUrl getDbServiceBaseUrl () const
 Get the service URL, individual for each reader.
 
- Protected Member Functions inherited from swift::core::db::CDatabaseReader
 CDatabaseReader (QObject *owner, const CDatabaseReaderConfigList &config, const QString &name)
 Constructor.
 
CDatabaseReader::JsonDatastoreResponse setStatusAndTransformReplyIntoDatastoreResponse (QNetworkReply *nwReply)
 Check if terminated or error, otherwise split into array of objects.
 
swift::misc::db::CDbInfoList getDbInfoObjects () const
 DB Info list (latest data timestamps from DB web service) More...
 
swift::misc::db::CDbInfoList getSharedInfoObjects () const
 Shared info list (latest data timestamps from DB web service) More...
 
CDatabaseReaderConfig getConfigForEntity (swift::misc::network::CEntityFlags::Entity entity) const
 Config for given entity.
 
swift::misc::network::CEntityFlags::Entity emitReadSignalPerSingleCachedEntity (swift::misc::network::CEntityFlags::Entity cachedEntities, bool onlyIfHasData)
 Split into single entity and send dataRead signal.
 
void emitAndLogDataRead (swift::misc::network::CEntityFlags::Entity entity, int number, const JsonDatastoreResponse &res)
 Emit signal and log when data have been read.
 
void logNoWorkingUrl (swift::misc::network::CEntityFlags::Entity entity)
 Log if no working URL exists, using m_noWorkingUrlSeverity.
 
swift::misc::network::CUrl getBaseUrl (swift::misc::db::CDbFlags::DataRetrievalModeFlag mode) const
 Base URL for mode (either a shared or DB URL)
 
void startReadFromBackendInBackgroundThread (swift::misc::network::CEntityFlags::Entity entities, swift::misc::db::CDbFlags::DataRetrievalModeFlag mode, const QDateTime &newerThan=QDateTime())
 Start reading in own thread (without config/caching) More...
 
void receivedSharedFileHeader (QNetworkReply *nwReplyPtr)
 Received a reply of a header for a shared file.
 
void receivedSharedFileHeaderNonClosing (QNetworkReply *nwReplyPtr)
 Received a reply of a header for a shared file.
 
JsonDatastoreResponse transformReplyIntoDatastoreResponse (QNetworkReply *nwReply) const
 Check if terminated or error, otherwise split into array of objects.
 
HeaderResponse transformReplyIntoHeaderResponse (QNetworkReply *nwReply) const
 Check if terminated or error, otherwise set header information.
 
bool setHeaderInfoPart (HeaderResponse &headerResponse, QNetworkReply *nwReply) const
 Set the header part.
 
void setReplyStatus (QNetworkReply::NetworkError status, const QString &message="")
 Feedback about connection status. More...
 
void setReplyStatus (QNetworkReply *nwReply)
 Feedback about connection status. More...
 
bool overrideCacheFromFile (bool overrideNewerOnly, const QFileInfo &fileInfo, swift::misc::network::CEntityFlags::Entity entity, swift::misc::CStatusMessageList &msgs) const
 Override cache from file. More...
 
void logParseMessage (const QString &entity, int size, int msElapsed, const JsonDatastoreResponse &response) const
 Parsing info message.
 
virtual void networkReplyProgress (int logId, qint64 current, qint64 max, const QUrl &url)
 Network request progress.
 
virtual void cacheHasChanged (swift::misc::network::CEntityFlags::Entity entities)
 Cache for given entity has changed.
 
- Protected Member Functions inherited from swift::core::CThreadedReader
 CThreadedReader (QObject *owner, const QString &name)
 Constructor.
 
qint64 lastModifiedMsSinceEpoch (QNetworkReply *nwReply) const
 When was reply last modified, -1 if N/A.
 
void threadAssertCheck () const
 Make sure everthing runs correctly in own thread.
 
bool didContentChange (const QString &content, int startPosition=-1)
 Stores new content hash and returns if content changed (based on hash value. More...
 
void setInitialAndPeriodicTime (int initialTime, int periodicTime)
 Set initial and periodic times.
 
virtual void doWorkImpl ()
 This method does the actual work in the derived class.
 
bool doWorkCheck () const
 Still enabled etc.? More...
 
QNetworkReply * getFromNetworkAndLog (const swift::misc::network::CUrl &url, const swift::misc::CSlot< void(QNetworkReply *)> &callback)
 Get request from network, and log with m_urlReadLog. More...
 
void logNetworkReplyReceived (QNetworkReply *reply)
 Network reply received, mark in m_urlReadLog. More...
 
- Protected Member Functions inherited from swift::misc::CContinuousWorker
virtual void initialize ()
 Called when the thread is started.
 
virtual void cleanup ()
 Called when the thread is finished.
 
virtual void beforeQuit () noexcept
 Called before quit is called. More...
 
virtual unsigned long waitTimeoutMs () const
 Wait time for quitAndWait, 0 means not waiting.
 
void stopUpdateTimer ()
 Safely stop update time.
 
- Protected Member Functions inherited from swift::misc::CWorkerBase
 CWorkerBase ()
 Constructor.
 
 ~CWorkerBase ()
 Destructor.
 
bool isAbandoned () const
 For the task to check whether it can finish early. More...
 
bool hasStarted () const
 True if the worker has started.
 
void setStarted ()
 Mark the task as started.
 
void setFinished ()
 Mark the task as finished.
 

Private Member Functions

virtual void read (swift::misc::network::CEntityFlags::Entity entities, swift::misc::db::CDbFlags::DataRetrievalModeFlag mode, const QDateTime &newerThan)
 Read / re-read data file. More...
 

Additional Inherited Members

- Signals inherited from swift::core::db::CDatabaseReader
void swiftDbDataRead (bool success)
 DB have been read.
 
void dataRead (swift::misc::network::CEntityFlags::Entity entities, swift::misc::network::CEntityFlags::ReadState state, int number, const QUrl &url)
 Combined read signal. More...
 
void sharedFileHeaderRead (swift::misc::network::CEntityFlags::Entity entity, const QString &fileName, bool success)
 Header of shared file read.
 
void databaseReaderMessages (const swift::misc::CStatusMessageList &messages)
 Database reader messages. More...
 
void entityDownloadProgress (swift::misc::network::CEntityFlags::Entity entity, int logId, int progress, qint64 current, qint64 max, const QUrl &url)
 Download progress for an entity.
 
- Signals inherited from swift::misc::CWorkerBase
void aboutToStart ()
 Emitted when the task is about to start.
 
void finished ()
 Emitted when the task is finished. More...
 
- Static Public Member Functions inherited from swift::core::db::CDatabaseReader
static const QStringList & getLogCategories ()
 Log categories.
 
- Static Public Member Functions inherited from swift::core::CThreadedReader
static const QStringList & getLogCategories ()
 Log categories.
 
- Static Public Member Functions inherited from swift::misc::CWorkerBase
static const QStringList & getLogCategories ()
 Log categories.
 
static const QSet< CWorkerBase * > & allWorkers ()
 All workers currently existing.
 
- Static Protected Member Functions inherited from swift::core::db::CDatabaseReader
static const swift::misc::network::CUrlgetDbUrl ()
 DB base URL.
 
static QString fileNameForMode (swift::misc::network::CEntityFlags::Entity entity, swift::misc::db::CDbFlags::DataRetrievalModeFlag mode)
 File name for given mode, either php service or shared file name.
 
static const QString & parameterLatestTimestamp ()
 Name of latest timestamp.
 
static QString dateTimeToDbLatestTs (const QDateTime &ts)
 A newer than value understood by swift DB. More...
 
static QString queryLatestTimestamp (const QDateTime &ts)
 Latest timestamp query for DB.
 
static bool isChangedUrl (const swift::misc::network::CUrl &oldUrl, const swift::misc::network::CUrl &currentUrl)
 Has URL been changed? Means we load from a different server.
 
- Static Protected Member Functions inherited from swift::core::CThreadedReader
static void logInconsistentData (const swift::misc::CStatusMessage &msg, const char *funcInfo=nullptr)
 Use this to log inconsistent data. More...
 
- Protected Attributes inherited from swift::core::db::CDatabaseReader
CDatabaseReaderConfigList m_config
 DB reder configuration.
 
QString m_statusMessage
 Returned status message from watchdog.
 
bool m_1stReplyReceived = false
 Successful connection? Does not mean data / authorizations are correct.
 
QReadWriteLock m_statusLock
 Lock.
 
QNetworkReply::NetworkError m_1stReplyStatus = QNetworkReply::UnknownServerError
 Successful connection?
 
QMap< swift::misc::network::CEntityFlags::Entity, HeaderResponsem_sharedFileResponses
 file responses of the shared files
 
swift::misc::CStatusMessage::StatusSeverity m_severityNoWorkingUrl
 severity of message if there is no working URL More...
 
- Protected Attributes inherited from swift::core::CThreadedReader
QReadWriteLock m_lock
 lock which can be used from the derived classes More...
 
std::atomic_int m_networkReplyProgress
 Progress percentage 0...100.
 
std::atomic_llong m_networkReplyCurrent
 current bytes
 
std::atomic_llong m_networkReplyNax
 max bytes
 
- Protected Attributes inherited from swift::misc::CContinuousWorker
QTimer m_updateTimer { this }
 timer which can be used by implementing classes
 

Detailed Description

Read information about data from Database or shared files such as when updated and number of entries.

See also
swift::misc::db::CDbInfo

Definition at line 22 of file infodatareader.h.

Member Function Documentation

◆ areAllInfoObjectsRead()

bool swift::core::db::CInfoDataReader::areAllInfoObjectsRead ( ) const

All data read?

Remarks
This function is thread safe.

Definition at line 43 of file infodatareader.cpp.

◆ getCacheCount()

int swift::core::db::CInfoDataReader::getCacheCount ( swift::misc::network::CEntityFlags::Entity  entity) const
virtual

Cache`s number of entities.

Remarks
this only works if the cache is admitted, DB caches are read deferred
Fixme:
bit of a hack to use web data services here

Implements swift::core::db::CDatabaseReader.

Definition at line 84 of file infodatareader.cpp.

◆ getCacheTimestamp()

QDateTime swift::core::db::CInfoDataReader::getCacheTimestamp ( swift::misc::network::CEntityFlags::Entity  entity) const
virtual

Get cache timestamp.

Fixme:
bit of a hack to use web data services here

Implements swift::core::db::CDatabaseReader.

Definition at line 66 of file infodatareader.cpp.

◆ getEntitiesWithCacheCount()

CEntityFlags::Entity swift::core::db::CInfoDataReader::getEntitiesWithCacheCount ( ) const
virtual

Entities already having data in cache.

Remarks
this only works if the cache is admitted, DB caches are read deferred

Implements swift::core::db::CDatabaseReader.

Definition at line 102 of file infodatareader.cpp.

◆ getEntitiesWithCacheTimestampNewerThan()

CEntityFlags::Entity swift::core::db::CInfoDataReader::getEntitiesWithCacheTimestampNewerThan ( const QDateTime &  threshold) const
virtual

Entities already having data in cache (based on timestamp assumption)

Remarks
unlike getEntitiesWithCacheCount() this even works when the cache is not yet admitted

Implements swift::core::db::CDatabaseReader.

Definition at line 108 of file infodatareader.cpp.

◆ getInfoObjectCount()

int swift::core::db::CInfoDataReader::getInfoObjectCount ( ) const

Get info list size (either shared or from DB)

Remarks
This function is thread safe.

Definition at line 37 of file infodatareader.cpp.

◆ getInfoObjects()

CDbInfoList swift::core::db::CInfoDataReader::getInfoObjects ( ) const

Get info list (either shared or from DB)

Remarks
This function is thread safe.

Definition at line 31 of file infodatareader.cpp.

◆ hasChangedUrl()

bool swift::core::db::CInfoDataReader::hasChangedUrl ( swift::misc::network::CEntityFlags::Entity  entity,
swift::misc::network::CUrl oldUrlInfo,
swift::misc::network::CUrl newUrlInfo 
) const
protectedvirtual

Changed URL, means the cache values have been read from elsewhere.

Remarks
testing based on swift::misc::db::CDbFlags::DbReading

Implements swift::core::db::CDatabaseReader.

Definition at line 115 of file infodatareader.cpp.

◆ read()

void swift::core::db::CInfoDataReader::read ( swift::misc::network::CEntityFlags::Entity  entities,
swift::misc::db::CDbFlags::DataRetrievalModeFlag  mode,
const QDateTime &  newerThan 
)
privatevirtual

Read / re-read data file.

Implements swift::core::db::CDatabaseReader.

Definition at line 200 of file infodatareader.cpp.


The documentation for this class was generated from the following files: