Implement enum support in CachedSettingValue

Enums are stored as strings, that improves configuration file
readability and maintainability. String values are obtained via
QMetaEnum, and since with Qt 5.5 QMetaEnum::fromType() includes a
static_assert, this has to be a safe method.
This commit is contained in:
Eugene Shalygin
2017-07-05 12:19:58 +02:00
parent 8e6df572a8
commit a22d2f0139
5 changed files with 71 additions and 49 deletions

View File

@@ -28,15 +28,9 @@
#include "torrentfileguard.h"
#include <QMetaEnum>
#include "settingsstorage.h"
#include "settingvalue.h"
#include "utils/fs.h"
namespace
{
const QLatin1String KEY_AUTO_DELETE_ENABLED ("Core/AutoDeleteAddedTorrentFile");
}
FileGuard::FileGuard(const QString &path)
: m_path {path}
, m_remove {true}
@@ -79,18 +73,17 @@ void TorrentFileGuard::markAsAddedToSession()
TorrentFileGuard::AutoDeleteMode TorrentFileGuard::autoDeleteMode()
{
QMetaEnum meta {modeMetaEnum()};
return static_cast<AutoDeleteMode>(meta.keyToValue(SettingsStorage::instance()->loadValue(
KEY_AUTO_DELETE_ENABLED, meta.valueToKey(Never)).toByteArray()));
return autoDeleteModeSetting();
}
void TorrentFileGuard::setAutoDeleteMode(TorrentFileGuard::AutoDeleteMode mode)
{
QMetaEnum meta {modeMetaEnum()};
SettingsStorage::instance()->storeValue(KEY_AUTO_DELETE_ENABLED, meta.valueToKey(mode));
autoDeleteModeSetting() = mode;
}
QMetaEnum TorrentFileGuard::modeMetaEnum()
CachedSettingValue<TorrentFileGuard::AutoDeleteMode> &TorrentFileGuard::autoDeleteModeSetting()
{
return QMetaEnum::fromType<AutoDeleteMode>();
static CachedSettingValue<AutoDeleteMode> setting("Core/AutoDeleteAddedTorrentFile", AutoDeleteMode::Never);
return setting;
}