-
Notifications
You must be signed in to change notification settings - Fork 55
Как писать код, вносящий изменения в файл конфигурации conf.ini
В файле conf.ini поддерживается версионность. Это значит, что в данном файле, помимо опций, прописывается и версия данного файла. Каждой версии conf.ini соответствует свой набор опций. При старте бинарника MyTetra проверяется версия conf.ini, и если бинарник MyTetra "знает" о более новой версии conf.ini, он "поднимает" версию conf.ini до более новой.
Версия всегда только поднимается (увеличивается). При обновлении до новой версии в файл conf.ini добавляются новые опции в формате имя=значение. Значения в момент обновления устанавливаются по-дефолту. При обновлении версии возможно так же удаление более неиспользуемого параметра, а так же установка значения параметра в нужное значение (очень редко).
Для добавления новой версии в conf.ini, т. е. для прописывания в conf.ini новых опций (и для удаления старых) нужно сделать следующие действия.
- Добавить методы получения и установки новых параметров в AppConf.cpp Например:
// Разрешена ли периодическая синхронизация
bool AppConfig::getEnablePeriodicSyncro(void)
{
return conf->value("enablePeriodicSyncro").toBool();
}
void AppConfig::setEnablePeriodicSyncro(bool state)
{
conf->setValue("enablePeriodicSyncro", state);
}
- Добавить прототипы методов получения и установки новых параметров в AppConf.h
// Разрешена ли периодическая синхронизация
bool getEnablePeriodicSyncro(void);
void setEnablePeriodicSyncro(bool state);
- В методе AppConf::update_version_process() добавить строку с обновлением до новой версии XX
parameterFunctions << &AppConfig::get_parameter_table_33;
- В AppConf.cpp добавить метод get_parameter_table_XX();
QStringList AppConfig::get_parameter_table_33(bool withEndSignature)
{
// Таблица параметров
// Имя, Тип, Значение на случай когда в конфиге параметра прочему-то нет
QStringList table;
// Старые параметры, аналогичные версии 32
table << get_parameter_table_32(false);
table << "enablePeriodicSyncro" << "bool" << "false";
table << "periodicSyncroPeriod" << "int" << "300";
if(withEndSignature)
table << "0" << "0" << "0";
return table;
}
Обратить внимание, что при формировании таблицы за основу берется таблица предыдущей версии. В примере формируется таблица версии 33, за основу берутся старые параметры от версии 32.
- В AppConf.h добавить прототип метод get_parameter_table_XX();
QStringList get_parameter_table_33(bool withEndSignature)