/*! * \copyright Copyright (c) 2015-2018 Governikus GmbH & Co. KG, Germany */ #include "HistorySettings.h" #include #include namespace { SETTINGS_NAME(SETTINGS_GROUP_NAME_CHRONIC, "history") SETTINGS_NAME(SETTINGS_NAME_HISTORY_ITEMS, "items") SETTINGS_NAME(SETTINGS_NAME_HISTORY_ENABLED, "enable") SETTINGS_NAME(SETTINGS_NAME_CHRONIC_SUBJECTNAME, "subjectName") SETTINGS_NAME(SETTINGS_NAME_CHRONIC_SUBJECTURL, "subjectUrl") SETTINGS_NAME(SETTINGS_NAME_CHRONIC_USAGE, "usage") SETTINGS_NAME(SETTINGS_NAME_CHRONIC_DATETIME, "dateTime") SETTINGS_NAME(SETTINGS_NAME_CHRONIC_TOU, "termOfUsage") SETTINGS_NAME(SETTINGS_NAME_CHRONIC_REQUESTED_DATA, "requestedData") } using namespace governikus; Q_DECLARE_LOGGING_CATEGORY(settings) HistorySettings::HistorySettings() : AbstractSettings() , mStore(getStore()) { mStore->beginGroup(SETTINGS_GROUP_NAME_CHRONIC()); } HistorySettings::~HistorySettings() { } void HistorySettings::save() { mStore->sync(); } bool HistorySettings::isEnabled() const { return mStore->value(SETTINGS_NAME_HISTORY_ENABLED(), true).toBool(); } void HistorySettings::setEnabled(bool pEnabled) { if (isEnabled() != pEnabled) { mStore->setValue(SETTINGS_NAME_HISTORY_ENABLED(), pEnabled); Q_EMIT fireEnabledChanged(pEnabled); } } QVector HistorySettings::getHistoryInfos() const { const int itemCount = mStore->beginReadArray(SETTINGS_NAME_HISTORY_ITEMS()); QVector historyInfos; historyInfos.reserve(itemCount); for (int i = 0; i < itemCount; ++i) { mStore->setArrayIndex(i); const QString subjectName = mStore->value(SETTINGS_NAME_CHRONIC_SUBJECTNAME(), QString()).toString(); const QString subjectUrl = mStore->value(SETTINGS_NAME_CHRONIC_SUBJECTURL(), QString()).toString(); const QString usage = mStore->value(SETTINGS_NAME_CHRONIC_USAGE(), QString()).toString(); const QDateTime dateTime = QDateTime::fromString(mStore->value(SETTINGS_NAME_CHRONIC_DATETIME(), QString()).toString(), Qt::ISODate); const QString termsOfUsage = mStore->value(SETTINGS_NAME_CHRONIC_TOU(), QString()).toString(); const QString requestData = mStore->value(SETTINGS_NAME_CHRONIC_REQUESTED_DATA(), QString()).toString(); historyInfos += HistoryInfo(subjectName, subjectUrl, usage, dateTime, termsOfUsage, requestData); } mStore->endArray(); return historyInfos; } void HistorySettings::setHistoryInfos(const QVector& pHistoryInfos) { mStore->beginGroup(SETTINGS_NAME_HISTORY_ITEMS()); mStore->remove(QString()); mStore->endGroup(); mStore->beginWriteArray(SETTINGS_NAME_HISTORY_ITEMS()); for (int i = 0; i < pHistoryInfos.size(); ++i) { const HistoryInfo& item = pHistoryInfos.at(i); mStore->setArrayIndex(i); mStore->setValue(SETTINGS_NAME_CHRONIC_SUBJECTNAME(), item.getSubjectName()); mStore->setValue(SETTINGS_NAME_CHRONIC_SUBJECTURL(), item.getSubjectUrl()); mStore->setValue(SETTINGS_NAME_CHRONIC_USAGE(), item.getPurpose()); mStore->setValue(SETTINGS_NAME_CHRONIC_DATETIME(), item.getDateTime().toString(Qt::ISODate)); mStore->setValue(SETTINGS_NAME_CHRONIC_TOU(), item.getTermOfUsage()); mStore->setValue(SETTINGS_NAME_CHRONIC_REQUESTED_DATA(), item.getRequestedData()); } mStore->endArray(); Q_EMIT fireHistoryInfosChanged(); } void HistorySettings::addHistoryInfo(const HistoryInfo& pHistoryInfo) { if (appIsBackgroundService()) { qCDebug(settings) << "Running as a background service. Ignoring save request for history."; return; } auto historyInfos = getHistoryInfos(); historyInfos.prepend(pHistoryInfo); setHistoryInfos(historyInfos); } int HistorySettings::deleteSettings(const QDateTime& pLatestToKeep) { const auto historyInfos = getHistoryInfos(); QVector remainingItems; for (const auto& item : historyInfos) { if (!pLatestToKeep.isNull() && item.getDateTime() <= pLatestToKeep) { remainingItems += item; } } int numberOfItemsToRemove = historyInfos.size() - remainingItems.size(); setHistoryInfos(remainingItems); return numberOfItemsToRemove; } int HistorySettings::deleteSettings(const TimePeriod& pPeriodToRemove) { QDateTime latestToKeep = QDateTime::currentDateTime(); switch (pPeriodToRemove) { case TimePeriod::PAST_HOUR: latestToKeep = latestToKeep.addSecs(-60 * 60); break; case TimePeriod::PAST_DAY: latestToKeep = latestToKeep.addDays(-1); break; case TimePeriod::PAST_WEEK: latestToKeep = latestToKeep.addDays(-7); break; case TimePeriod::LAST_FOUR_WEEKS: latestToKeep = latestToKeep.addDays(-7 * 4); break; case TimePeriod::ALL_HISTORY: latestToKeep = QDateTime(); break; case TimePeriod::UNKNOWN: return 0; } qCDebug(settings) << "Remove history entries until timestamp:" << latestToKeep; return deleteSettings(latestToKeep); }