mainconfig.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "mainconfig.h"
  2. #include <QJsonObject>
  3. #include <QDebug>
  4. #include "configmgr.h"
  5. #include "coreconfig.h"
  6. #include "editorconfig.h"
  7. #include "widgetconfig.h"
  8. using namespace vnotex;
  9. bool MainConfig::s_versionChanged = false;
  10. MainConfig::MainConfig(ConfigMgr *p_mgr)
  11. : IConfig(p_mgr, nullptr),
  12. m_coreConfig(new CoreConfig(p_mgr, this)),
  13. m_editorConfig(new EditorConfig(p_mgr, this)),
  14. m_widgetConfig(new WidgetConfig(p_mgr, this))
  15. {
  16. }
  17. MainConfig::~MainConfig()
  18. {
  19. }
  20. void MainConfig::init()
  21. {
  22. auto mgr = getMgr();
  23. auto appSettings = mgr->getSettings(ConfigMgr::Source::App);
  24. auto userSettings = mgr->getSettings(ConfigMgr::Source::User);
  25. const auto &appJobj = appSettings->getJson();
  26. const auto &userJobj = userSettings->getJson();
  27. loadMetadata(appJobj, userJobj);
  28. m_coreConfig->init(appJobj, userJobj);
  29. m_editorConfig->init(appJobj, userJobj);
  30. m_widgetConfig->init(appJobj, userJobj);
  31. if (isVersionChanged()) {
  32. doVersionSpecificOverride();
  33. // Update user config.
  34. writeToSettings();
  35. }
  36. }
  37. void MainConfig::loadMetadata(const QJsonObject &p_app, const QJsonObject &p_user)
  38. {
  39. const auto appObj = p_app.value(QStringLiteral("metadata")).toObject();
  40. const auto userObj = p_user.value(QStringLiteral("metadata")).toObject();
  41. m_version = appObj.value(QStringLiteral("version")).toString();
  42. m_userVersion = userObj.value(QStringLiteral("version")).toString();
  43. s_versionChanged = m_version != m_userVersion;
  44. qDebug() << "version" << m_version << "user version" << m_userVersion;
  45. }
  46. QJsonObject MainConfig::saveMetaData() const
  47. {
  48. QJsonObject metaObj;
  49. metaObj[QStringLiteral("version")] = m_version;
  50. return metaObj;
  51. }
  52. bool MainConfig::isVersionChanged()
  53. {
  54. return s_versionChanged;
  55. }
  56. CoreConfig &MainConfig::getCoreConfig()
  57. {
  58. return *m_coreConfig;
  59. }
  60. EditorConfig &MainConfig::getEditorConfig()
  61. {
  62. return *m_editorConfig;
  63. }
  64. WidgetConfig &MainConfig::getWidgetConfig()
  65. {
  66. return *m_widgetConfig;
  67. }
  68. void MainConfig::writeToSettings() const
  69. {
  70. getMgr()->writeUserSettings(toJson());
  71. }
  72. QJsonObject MainConfig::toJson() const
  73. {
  74. QJsonObject obj;
  75. obj[QStringLiteral("metadata")] = saveMetaData();
  76. obj[m_coreConfig->getSessionName()] = m_coreConfig->toJson();
  77. obj[m_editorConfig->getSessionName()] = m_editorConfig->toJson();
  78. obj[m_widgetConfig->getSessionName()] = m_widgetConfig->toJson();
  79. return obj;
  80. }
  81. const QString &MainConfig::getVersion() const
  82. {
  83. return m_version;
  84. }
  85. QString MainConfig::getVersion(const QJsonObject &p_jobj)
  86. {
  87. const auto metadataObj = p_jobj.value(QStringLiteral("metadata")).toObject();
  88. return metadataObj.value(QStringLiteral("version")).toString();
  89. }
  90. void MainConfig::doVersionSpecificOverride()
  91. {
  92. // In a new version, we may want to change one value by force.
  93. }