Skip to content

Как писать код, вносящий изменения в файл конфигурации conf.ini

Xintrea edited this page Dec 13, 2016 · 2 revisions

В файле 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)