Refactred settings to use settingscache & ini files

This commit is contained in:
marco 2015-08-21 15:40:31 +02:00
parent 9c28cdd1f5
commit c8d59eec5e
29 changed files with 780 additions and 241 deletions

View file

@ -1,5 +1,6 @@
#include "settingscache.h"
#include <QSettings>
#include <QFile>
#if QT_VERSION >= 0x050000
#include <QStandardPaths>
#else
@ -11,7 +12,7 @@ QString SettingsCache::getSettingsPath()
QString file = "";
#ifndef PORTABLE_BUILD
#if QT_VERSION >= 0x050000
#if QT_VERSION >= 0x050000
file = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
#else
file = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
@ -19,17 +20,117 @@ QString SettingsCache::getSettingsPath()
file.append("/settings/");
#endif
return file;
return file;
}
void SettingsCache::translateLegacySettings()
{
//NOTE Please remove this legacy setting translation after 2016-9-1 (+1 year after creation)
//Layouts
QFile layoutFile(getSettingsPath()+"layouts/deckLayout.ini");
if(layoutFile.exists())
if(layoutFile.copy(getSettingsPath()+"layouts.ini"))
layoutFile.remove();
QStringList usedKeys;
QSettings legacySetting;
//Sets
legacySetting.beginGroup("sets");
QStringList setsGroups = legacySetting.childGroups();
for(int i = 0; i < setsGroups.size(); i++){
legacySetting.beginGroup(setsGroups.at(i));
cardDatabase().setEnabled(setsGroups.at(i), legacySetting.value("enabled").toBool());
cardDatabase().setIsKnown(setsGroups.at(i), legacySetting.value("isknown").toBool());
cardDatabase().setSortKey(setsGroups.at(i), legacySetting.value("sortkey").toUInt());
legacySetting.endGroup();
}
QStringList setsKeys = legacySetting.allKeys();
for (int i = 0; i < setsKeys.size(); ++i) {
usedKeys.append("sets/"+setsKeys.at(i));
}
legacySetting.endGroup();
//Servers
legacySetting.beginGroup("server");
servers().setPreviousHostLogin(legacySetting.value("previoushostlogin").toInt());
servers().setPreviousHostList(legacySetting.value("previoushosts").toStringList());
servers().setPrevioushostindex(legacySetting.value("previoushostindex").toInt());
servers().setHostName(legacySetting.value("hostname").toString());
servers().setPort(legacySetting.value("port").toString());
servers().setPlayerName(legacySetting.value("playername").toString());
servers().setPassword(legacySetting.value("password").toString());
servers().setSavePassword(legacySetting.value("save_password").toInt());
servers().setAutoConnect(legacySetting.value("auto_connect").toInt());
usedKeys.append(legacySetting.allKeys());
QStringList allKeysServer = legacySetting.allKeys();
for (int i = 0; i < allKeysServer.size(); ++i) {
usedKeys.append("server/"+allKeysServer.at(i));
}
legacySetting.endGroup();
//Messages
legacySetting.beginGroup("messages");
QStringList allMessages = legacySetting.allKeys();
for (int i = 0; i < allMessages.size(); ++i) {
if(allMessages.at(i) != "count"){
QString temp = allMessages.at(i);
int index = temp.remove("msg").toInt();
messages().setMessageAt(index,legacySetting.value(allMessages.at(i)).toString());
}
}
messages().setCount(legacySetting.value("count").toInt());
QStringList allKeysmessages = legacySetting.allKeys();
for (int i = 0; i < allKeysmessages.size(); ++i) {
usedKeys.append("messages/"+allKeysmessages.at(i));
}
legacySetting.endGroup();
//Game filters
legacySetting.beginGroup("filter_games");
gameFilters().setUnavailableGamesVisible(legacySetting.value("unavailable_games_visible").toBool());
gameFilters().setShowPasswordProtectedGames(legacySetting.value("show_password_protected_games").toBool());
gameFilters().setGameNameFilter(legacySetting.value("game_name_filter").toString());
gameFilters().setMinPlayers(legacySetting.value("min_players").toInt());
gameFilters().setMaxPlayers(legacySetting.value("max_players").toInt());
QStringList allFilters = legacySetting.allKeys();
for (int i = 0; i < allFilters.size(); ++i) {
if(allFilters.at(i).startsWith("game_type")){
gameFilters().setGameTypeEnabled(allFilters.at(i), legacySetting.value(allFilters.at(i)).toBool());
}
}
QStringList allKeysfilter_games = legacySetting.allKeys();
for (int i = 0; i < allKeysfilter_games.size(); ++i) {
usedKeys.append("filter_games/"+allKeysfilter_games.at(i));
}
legacySetting.endGroup();
QStringList allLegacyKeys = legacySetting.allKeys();
for (int i = 0; i < allLegacyKeys.size(); ++i) {
if(usedKeys.contains(allLegacyKeys.at(i)))
continue;
settings->setValue(allLegacyKeys.at(i), legacySetting.value(allLegacyKeys.at(i)));
}
}
SettingsCache::SettingsCache()
{
settings = new QSettings(this);
shortcutsSettings = new ShortcutsSettings(getSettingsPath(),this);
QString settingsPath = getSettingsPath();
settings = new QSettings(settingsPath+"global.ini", QSettings::IniFormat, this);
shortcutsSettings = new ShortcutsSettings(settingsPath,this);
cardDatabaseSettings = new CardDatabaseSettings(settingsPath,this);
serversSettings = new ServersSettings(settingsPath,this);
messageSettings = new MessageSettings(settingsPath,this);
gameFiltersSettings = new GameFiltersSettings(settingsPath, this);
layoutsSettings = new LayoutsSettings(settingsPath, this);
if(!QFile(settingsPath+"global.ini").exists())
translateLegacySettings();
lang = settings->value("personal/lang").toString();
keepalive = settings->value("personal/keepalive", 5).toInt();
deckPath = settings->value("paths/decks").toString();
replaysPath = settings->value("paths/replays").toString();
picsPath = settings->value("paths/pics").toString();
@ -119,17 +220,6 @@ SettingsCache::SettingsCache()
spectatorsCanTalk = settings->value("game/spectatorscantalk", false).toBool();
spectatorsCanSeeEverything = settings->value("game/spectatorscanseeeverything", false).toBool();
clientID = settings->value("personal/clientid", "notset").toString();
QString file = getSettingsPath();
file.append("layouts/deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
deckEditorLayoutState = layout_settings.value("layouts/deckEditor_state").toByteArray();
deckEditorGeometry = layout_settings.value("layouts/deckEditor_geometry").toByteArray();
deckEditorCardSize = layout_settings.value("layouts/deckEditor_CardSize", QSize(250,500)).toSize();
deckEditorFilterSize = layout_settings.value("layouts/deckEditor_FilterSize", QSize(250,250)).toSize();
deckEditorDeckSize = layout_settings.value("layouts/deckEditor_DeckSize", QSize(250,360)).toSize();
}
void SettingsCache::setCardInfoViewMode(const int _viewMode) {
@ -502,56 +592,6 @@ QStringList SettingsCache::getCountries() const
return countries;
}
void SettingsCache::setDeckEditorLayoutState(const QByteArray &value)
{
deckEditorLayoutState = value;
QString file = getSettingsPath();
file.append("layouts/deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_state",value);
}
void SettingsCache::setDeckEditorGeometry(const QByteArray &value)
{
deckEditorGeometry = value;
QString file = getSettingsPath();
file.append("layouts/deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_geometry",value);
}
void SettingsCache::setDeckEditorCardSize(const QSize &value)
{
deckEditorCardSize = value;
QString file = getSettingsPath();
file.append("layouts/deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_CardSize",value);
}
void SettingsCache::setDeckEditorDeckSize(const QSize &value)
{
deckEditorDeckSize = value;
QString file = getSettingsPath();
file.append("layouts/deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_DeckSize",value);
}
void SettingsCache::setDeckEditorFilterSize(const QSize &value)
{
deckEditorFilterSize = value;
QString file = getSettingsPath();
file.append("layouts/deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_FilterSize",value);
}
void SettingsCache::setGameDescription(const QString _gameDescription)
{
gameDescription = _gameDescription;