move some configs from vnote.ini to session.ini

VNote now will first check vnote.ini from the executable folder.
This commit is contained in:
Le Tan 2017-10-07 16:37:13 +08:00
parent ace96c7ce2
commit 01acd03a71
3 changed files with 220 additions and 75 deletions

View File

@ -138,13 +138,13 @@ double_click_close_tab=true
; Whether put folder and note panel in one vertical column ; Whether put folder and note panel in one vertical column
enable_compact_mode=false enable_compact_mode=false
; Whether enable tools dock widget
tools_dock_checked=true
[web] [web]
; Location and configuration for Mathjax ; Location and configuration for Mathjax
mathjax_javascript=https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML mathjax_javascript=https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML
[session]
tools_dock_checked=true
[predefined_colors] [predefined_colors]
1\name=White 1\name=White
1\rgb=EEEEEE 1\rgb=EEEEEE

View File

@ -8,52 +8,60 @@
#include <QtDebug> #include <QtDebug>
#include <QTextEdit> #include <QTextEdit>
#include <QStandardPaths> #include <QStandardPaths>
#include <QCoreApplication>
#include "utils/vutils.h" #include "utils/vutils.h"
#include "vstyleparser.h" #include "vstyleparser.h"
const QString VConfigManager::orgName = QString("vnote"); const QString VConfigManager::orgName = QString("vnote");
const QString VConfigManager::appName = QString("vnote"); const QString VConfigManager::appName = QString("vnote");
const QString VConfigManager::c_version = QString("1.9"); const QString VConfigManager::c_version = QString("1.9");
const QString VConfigManager::c_obsoleteDirConfigFile = QString(".vnote.json"); const QString VConfigManager::c_obsoleteDirConfigFile = QString(".vnote.json");
const QString VConfigManager::c_dirConfigFile = QString("_vnote.json"); const QString VConfigManager::c_dirConfigFile = QString("_vnote.json");
const QString VConfigManager::defaultConfigFilePath = QString(":/resources/vnote.ini");
const QString VConfigManager::c_defaultConfigFilePath = QString(":/resources/vnote.ini");
const QString VConfigManager::c_defaultConfigFile = QString("vnote.ini");
const QString VConfigManager::c_sessionConfigFile = QString("session.ini");
const QString VConfigManager::c_styleConfigFolder = QString("styles"); const QString VConfigManager::c_styleConfigFolder = QString("styles");
const QString VConfigManager::c_codeBlockStyleConfigFolder = QString("codeblock_styles"); const QString VConfigManager::c_codeBlockStyleConfigFolder = QString("codeblock_styles");
const QString VConfigManager::c_defaultCssFile = QString(":/resources/styles/default.css"); const QString VConfigManager::c_defaultCssFile = QString(":/resources/styles/default.css");
const QString VConfigManager::c_defaultCodeBlockCssFile = QString(":/utils/highlightjs/styles/vnote.css"); const QString VConfigManager::c_defaultCodeBlockCssFile = QString(":/utils/highlightjs/styles/vnote.css");
const QString VConfigManager::c_defaultMdhlFile = QString(":/resources/styles/default.mdhl"); const QString VConfigManager::c_defaultMdhlFile = QString(":/resources/styles/default.mdhl");
const QString VConfigManager::c_solarizedDarkMdhlFile = QString(":/resources/styles/solarized-dark.mdhl"); const QString VConfigManager::c_solarizedDarkMdhlFile = QString(":/resources/styles/solarized-dark.mdhl");
const QString VConfigManager::c_solarizedLightMdhlFile = QString(":/resources/styles/solarized-light.mdhl"); const QString VConfigManager::c_solarizedLightMdhlFile = QString(":/resources/styles/solarized-light.mdhl");
const QString VConfigManager::c_warningTextStyle = QString("color: red; font: bold"); const QString VConfigManager::c_warningTextStyle = QString("color: red; font: bold");
const QString VConfigManager::c_dataTextStyle = QString("font: bold"); const QString VConfigManager::c_dataTextStyle = QString("font: bold");
const QString VConfigManager::c_dangerBtnStyle = QString("QPushButton {color: #fff; border-color: #d43f3a; background-color: #d9534f;}" const QString VConfigManager::c_dangerBtnStyle = QString("QPushButton {color: #fff; border-color: #d43f3a; background-color: #d9534f;}"
"QPushButton::hover {color: #fff; border-color: #ac2925; background-color: #c9302c;}"); "QPushButton::hover {color: #fff; border-color: #ac2925; background-color: #c9302c;}");
const QString VConfigManager::c_vnoteNotebookFolderName = QString("vnote_notebooks"); const QString VConfigManager::c_vnoteNotebookFolderName = QString("vnote_notebooks");
VConfigManager::VConfigManager(QObject *p_parent) VConfigManager::VConfigManager(QObject *p_parent)
: QObject(p_parent), userSettings(NULL), defaultSettings(NULL) : QObject(p_parent),
userSettings(NULL),
defaultSettings(NULL),
m_sessionSettings(NULL)
{ {
} }
void VConfigManager::migrateIniFile()
{
const QString originalFolder = "tamlok";
const QString newFolder = orgName;
QString configFolder = getConfigFolder();
QDir dir(configFolder);
dir.cdUp();
dir.rename(originalFolder, newFolder);
userSettings->sync();
}
void VConfigManager::initialize() void VConfigManager::initialize()
{ {
Q_ASSERT(!userSettings && !defaultSettings); initSettings();
userSettings = new QSettings(QSettings::IniFormat, QSettings::UserScope,
orgName, appName, this);
defaultSettings = new QSettings(defaultConfigFilePath, QSettings::IniFormat, this);
migrateIniFile();
// Override the default css styles on start up. // Override the default css styles on start up.
outputDefaultCssStyle(); outputDefaultCssStyle();
@ -68,7 +76,6 @@ void VConfigManager::initialize()
m_templateCss = getConfigFromSettings("global", "template_css").toString(); m_templateCss = getConfigFromSettings("global", "template_css").toString();
m_templateCodeBlockCss = getConfigFromSettings("global", "template_code_block_css").toString(); m_templateCodeBlockCss = getConfigFromSettings("global", "template_code_block_css").toString();
m_templateCodeBlockCssUrl = getConfigFromSettings("global", "template_code_block_css_url").toString(); m_templateCodeBlockCssUrl = getConfigFromSettings("global", "template_code_block_css_url").toString();
curNotebookIndex = getConfigFromSettings("global", "current_notebook").toInt();
markdownExtensions = hoedown_extensions(HOEDOWN_EXT_TABLES | HOEDOWN_EXT_FENCED_CODE | markdownExtensions = hoedown_extensions(HOEDOWN_EXT_TABLES | HOEDOWN_EXT_FENCED_CODE |
HOEDOWN_EXT_HIGHLIGHT | HOEDOWN_EXT_AUTOLINK | HOEDOWN_EXT_HIGHLIGHT | HOEDOWN_EXT_AUTOLINK |
@ -91,11 +98,7 @@ void VConfigManager::initialize()
curRenderBackgroundColor = getConfigFromSettings("global", curRenderBackgroundColor = getConfigFromSettings("global",
"current_render_background_color").toString(); "current_render_background_color").toString();
m_toolsDockChecked = getConfigFromSettings("session", "tools_dock_checked").toBool(); m_toolsDockChecked = getConfigFromSettings("global", "tools_dock_checked").toBool();
m_mainWindowGeometry = getConfigFromSettings("session", "main_window_geometry").toByteArray();
m_mainWindowState = getConfigFromSettings("session", "main_window_state").toByteArray();
m_mainSplitterState = getConfigFromSettings("session", "main_splitter_state").toByteArray();
m_naviSplitterState = getConfigFromSettings("session", "navi_splitter_state").toByteArray();
m_findCaseSensitive = getConfigFromSettings("global", m_findCaseSensitive = getConfigFromSettings("global",
"find_case_sensitive").toBool(); "find_case_sensitive").toBool();
@ -231,6 +234,55 @@ void VConfigManager::initialize()
m_enableCompactMode = getConfigFromSettings("global", m_enableCompactMode = getConfigFromSettings("global",
"enable_compact_mode").toBool(); "enable_compact_mode").toBool();
initFromSessionSettings();
}
void VConfigManager::initSettings()
{
Q_ASSERT(!userSettings && !defaultSettings && !m_sessionSettings);
// vnote.ini.
// First try to read vnote.ini from the directory of the executable.
QString userIniPath = QDir(QCoreApplication::applicationDirPath()).filePath(c_defaultConfigFile);
if (QFileInfo::exists(userIniPath)) {
userSettings = new QSettings(userIniPath,
QSettings::IniFormat,
this);
} else {
userSettings = new QSettings(QSettings::IniFormat,
QSettings::UserScope,
orgName,
appName,
this);
}
qDebug() << "use user config" << userSettings->fileName();
// Default vnote.ini from resource file.
defaultSettings = new QSettings(c_defaultConfigFilePath, QSettings::IniFormat, this);
// session.ini.
m_sessionSettings = new QSettings(QDir(getConfigFolder()).filePath(c_sessionConfigFile),
QSettings::IniFormat,
this);
}
void VConfigManager::initFromSessionSettings()
{
curNotebookIndex = getConfigFromSessionSettings("global", "current_notebook").toInt();
m_mainWindowGeometry = getConfigFromSessionSettings("geometry",
"main_window_geometry").toByteArray();
m_mainWindowState = getConfigFromSessionSettings("geometry",
"main_window_state").toByteArray();
m_mainSplitterState = getConfigFromSessionSettings("geometry",
"main_splitter_state").toByteArray();
m_naviSplitterState = getConfigFromSessionSettings("geometry",
"navi_splitter_state").toByteArray();
} }
void VConfigManager::readPredefinedColorsFromSettings() void VConfigManager::readPredefinedColorsFromSettings()
@ -249,49 +301,70 @@ void VConfigManager::readPredefinedColorsFromSettings()
<< "pre-defined colors from [predefined_colors] section"; << "pre-defined colors from [predefined_colors] section";
} }
void VConfigManager::readNotebookFromSettings(QVector<VNotebook *> &p_notebooks, QObject *parent) void VConfigManager::readNotebookFromSettings(QSettings *p_settings,
QVector<VNotebook *> &p_notebooks,
QObject *parent)
{ {
Q_ASSERT(p_notebooks.isEmpty()); Q_ASSERT(p_notebooks.isEmpty());
int size = userSettings->beginReadArray("notebooks"); int size = p_settings->beginReadArray("notebooks");
for (int i = 0; i < size; ++i) { for (int i = 0; i < size; ++i) {
userSettings->setArrayIndex(i); p_settings->setArrayIndex(i);
QString name = userSettings->value("name").toString(); QString name = p_settings->value("name").toString();
QString path = userSettings->value("path").toString(); QString path = p_settings->value("path").toString();
VNotebook *notebook = new VNotebook(name, path, parent); VNotebook *notebook = new VNotebook(name, path, parent);
notebook->readConfigNotebook(); notebook->readConfigNotebook();
p_notebooks.append(notebook); p_notebooks.append(notebook);
} }
userSettings->endArray();
p_settings->endArray();
qDebug() << "read" << p_notebooks.size() qDebug() << "read" << p_notebooks.size()
<< "notebook items from [notebooks] section"; << "notebook items from [notebooks] section";
} }
void VConfigManager::writeNotebookToSettings(const QVector<VNotebook *> &p_notebooks) void VConfigManager::writeNotebookToSettings(QSettings *p_settings,
const QVector<VNotebook *> &p_notebooks)
{ {
// Clear it first // Clear it first
userSettings->beginGroup("notebooks"); p_settings->beginGroup("notebooks");
userSettings->remove(""); p_settings->remove("");
userSettings->endGroup(); p_settings->endGroup();
userSettings->beginWriteArray("notebooks"); p_settings->beginWriteArray("notebooks");
for (int i = 0; i < p_notebooks.size(); ++i) { for (int i = 0; i < p_notebooks.size(); ++i) {
userSettings->setArrayIndex(i); p_settings->setArrayIndex(i);
const VNotebook &notebook = *p_notebooks[i]; const VNotebook &notebook = *p_notebooks[i];
userSettings->setValue("name", notebook.getName()); p_settings->setValue("name", notebook.getName());
userSettings->setValue("path", notebook.getPath()); p_settings->setValue("path", notebook.getPath());
} }
userSettings->endArray();
p_settings->endArray();
qDebug() << "write" << p_notebooks.size() qDebug() << "write" << p_notebooks.size()
<< "notebook items in [notebooks] section"; << "notebook items in [notebooks] section";
} }
static QVariant getConfigFromSettingsBySectionKey(const QSettings *p_settings,
const QString &p_section,
const QString &p_key)
{
QString fullKey = p_section + "/" + p_key;
return p_settings->value(fullKey);
}
static void setConfigToSettingsBySectionKey(QSettings *p_settings,
const QString &p_section,
const QString &p_key,
const QVariant &p_value)
{
QString fullKey = p_section + "/" + p_key;
return p_settings->setValue(fullKey, p_value);
}
QVariant VConfigManager::getConfigFromSettings(const QString &section, const QString &key) const QVariant VConfigManager::getConfigFromSettings(const QString &section, const QString &key) const
{ {
QString fullKey = section + "/" + key;
// First, look up the user-scoped config file // First, look up the user-scoped config file
QVariant value = userSettings->value(fullKey); QVariant value = getConfigFromSettingsBySectionKey(userSettings, section, key);
if (!value.isNull()) { if (!value.isNull()) {
qDebug() << "user config:" << fullKey << value.toString(); qDebug() << "user config:" << (section + "/" + key) << value.toString();
return value; return value;
} }
@ -302,18 +375,14 @@ QVariant VConfigManager::getConfigFromSettings(const QString &section, const QSt
void VConfigManager::setConfigToSettings(const QString &section, const QString &key, const QVariant &value) void VConfigManager::setConfigToSettings(const QString &section, const QString &key, const QVariant &value)
{ {
// Set the user-scoped config file // Set the user-scoped config file
QString fullKey = section + "/" + key; setConfigToSettingsBySectionKey(userSettings, section, key, value);
userSettings->setValue(fullKey, value); qDebug() << "set user config:" << (section + "/" + key) << value.toString();
qDebug() << "set user config:" << fullKey << value.toString();
} }
QVariant VConfigManager::getDefaultConfig(const QString &p_section, const QString &p_key) const QVariant VConfigManager::getDefaultConfig(const QString &p_section, const QString &p_key) const
{ {
QString fullKey = p_section + "/" + p_key; QVariant value = getConfigFromSettingsBySectionKey(defaultSettings, p_section, p_key);
qDebug() << "default config:" << (p_section + "/" + p_key) << value.toString();
QVariant value = defaultSettings->value(fullKey);
qDebug() << "default config:" << fullKey << value.toString();
return value; return value;
} }
@ -325,6 +394,24 @@ QVariant VConfigManager::resetDefaultConfig(const QString &p_section, const QStr
return defaultValue; return defaultValue;
} }
QVariant VConfigManager::getConfigFromSessionSettings(const QString &p_section,
const QString &p_key) const
{
return getConfigFromSettingsBySectionKey(m_sessionSettings,
p_section,
p_key);
}
void VConfigManager::setConfigToSessionSettings(const QString &p_section,
const QString &p_key,
const QVariant &p_value)
{
setConfigToSettingsBySectionKey(m_sessionSettings,
p_section,
p_key,
p_value);
}
QString VConfigManager::fetchDirConfigFilePath(const QString &p_path) QString VConfigManager::fetchDirConfigFilePath(const QString &p_path)
{ {
QDir dir(p_path); QDir dir(p_path);

View File

@ -106,7 +106,10 @@ public:
int getCurNotebookIndex() const; int getCurNotebookIndex() const;
void setCurNotebookIndex(int index); void setCurNotebookIndex(int index);
void getNotebooks(QVector<VNotebook *> &p_notebooks, QObject *parent); // Read [notebooks] section from settings into @p_notebooks.
void getNotebooks(QVector<VNotebook *> &p_notebooks, QObject *p_parent);
// Write @p_notebooks to [notebooks] section into settings.
void setNotebooks(const QVector<VNotebook *> &p_notebooks); void setNotebooks(const QVector<VNotebook *> &p_notebooks);
hoedown_extensions getMarkdownExtensions() const; hoedown_extensions getMarkdownExtensions() const;
@ -323,7 +326,10 @@ public:
QVector<QString> getEditorStyles() const; QVector<QString> getEditorStyles() const;
private: private:
// Look up a config from user and default settings.
QVariant getConfigFromSettings(const QString &section, const QString &key) const; QVariant getConfigFromSettings(const QString &section, const QString &key) const;
// Set a config to user settings.
void setConfigToSettings(const QString &section, const QString &key, const QVariant &value); void setConfigToSettings(const QString &section, const QString &key, const QVariant &value);
// Get default config from vnote.ini. // Get default config from vnote.ini.
@ -332,8 +338,29 @@ private:
// Reset user config to default config and return the default config value. // Reset user config to default config and return the default config value.
QVariant resetDefaultConfig(const QString &p_section, const QString &p_key); QVariant resetDefaultConfig(const QString &p_section, const QString &p_key);
void readNotebookFromSettings(QVector<VNotebook *> &p_notebooks, QObject *parent); // Look up a config from session settings.
void writeNotebookToSettings(const QVector<VNotebook *> &p_notebooks); QVariant getConfigFromSessionSettings(const QString &p_section, const QString &p_key) const;
// Set a config to session settings.
void setConfigToSessionSettings(const QString &p_section,
const QString &p_key,
const QVariant &p_value);
// Init defaultSettings, userSettings, and m_sessionSettings.
void initSettings();
// Init from m_sessionSettings.
void initFromSessionSettings();
// Read [notebooks] section from @p_settings.
void readNotebookFromSettings(QSettings *p_settings,
QVector<VNotebook *> &p_notebooks,
QObject *parent);
// Write to [notebooks] section to @p_settings.
void writeNotebookToSettings(QSettings *p_settings,
const QVector<VNotebook *> &p_notebooks);
void readPredefinedColorsFromSettings(); void readPredefinedColorsFromSettings();
// 1. Update styles common in HTML and Markdown; // 1. Update styles common in HTML and Markdown;
@ -342,10 +369,6 @@ private:
void updateMarkdownEditStyle(); void updateMarkdownEditStyle();
// Migrate ini file from tamlok/vnote.ini to vnote/vnote.ini.
// This is for the change of org name.
void migrateIniFile();
// Output pre-defined CSS styles to style folder. // Output pre-defined CSS styles to style folder.
bool outputDefaultCssStyle() const; bool outputDefaultCssStyle() const;
@ -399,6 +422,8 @@ private:
QString m_templateCodeBlockCssUrl; QString m_templateCodeBlockCssUrl;
QString m_editorStyle; QString m_editorStyle;
// Index of current notebook.
int curNotebookIndex; int curNotebookIndex;
// Markdown Converter // Markdown Converter
@ -617,15 +642,25 @@ private:
// The name of the config file in each directory. // The name of the config file in each directory.
static const QString c_dirConfigFile; static const QString c_dirConfigFile;
// The name of the default configuration file // The path of the default configuration file
static const QString defaultConfigFilePath; static const QString c_defaultConfigFilePath;
// The name of the config file.
static const QString c_defaultConfigFile;
// The name of the config file for session information.
static const QString c_sessionConfigFile;
// QSettings for the user configuration // QSettings for the user configuration
QSettings *userSettings; QSettings *userSettings;
// Qsettings for @defaultConfigFileName // Qsettings for @c_defaultConfigFilePath.
QSettings *defaultSettings; QSettings *defaultSettings;
// QSettings for the session configuration, such as notebooks,
// geometry, last opened files.
QSettings *m_sessionSettings;
// The folder name of style files. // The folder name of style files.
static const QString c_styleConfigFolder; static const QString c_styleConfigFolder;
@ -693,18 +728,35 @@ inline void VConfigManager::setCurNotebookIndex(int index)
if (index == curNotebookIndex) { if (index == curNotebookIndex) {
return; return;
} }
curNotebookIndex = index; curNotebookIndex = index;
setConfigToSettings("global", "current_notebook", index); setConfigToSessionSettings("global", "current_notebook", index);
} }
inline void VConfigManager::getNotebooks(QVector<VNotebook *> &p_notebooks, QObject *parent) inline void VConfigManager::getNotebooks(QVector<VNotebook *> &p_notebooks,
QObject *p_parent)
{ {
readNotebookFromSettings(p_notebooks, parent); // We used to store it in vnote.ini. For now, we store it in session.ini.
readNotebookFromSettings(m_sessionSettings, p_notebooks, p_parent);
// Migration.
if (p_notebooks.isEmpty()) {
readNotebookFromSettings(userSettings, p_notebooks, p_parent);
if (!p_notebooks.isEmpty()) {
// Clear and save it in another place.
userSettings->beginGroup("notebooks");
userSettings->remove("");
userSettings->endGroup();
writeNotebookToSettings(m_sessionSettings, p_notebooks);
}
}
} }
inline void VConfigManager::setNotebooks(const QVector<VNotebook *> &p_notebooks) inline void VConfigManager::setNotebooks(const QVector<VNotebook *> &p_notebooks)
{ {
writeNotebookToSettings(p_notebooks); writeNotebookToSettings(m_sessionSettings, p_notebooks);
} }
inline hoedown_extensions VConfigManager::getMarkdownExtensions() const inline hoedown_extensions VConfigManager::getMarkdownExtensions() const
@ -872,7 +924,7 @@ inline bool VConfigManager::getToolsDockChecked() const
inline void VConfigManager::setToolsDockChecked(bool p_checked) inline void VConfigManager::setToolsDockChecked(bool p_checked)
{ {
m_toolsDockChecked = p_checked; m_toolsDockChecked = p_checked;
setConfigToSettings("session", "tools_dock_checked", setConfigToSettings("global", "tools_dock_checked",
m_toolsDockChecked); m_toolsDockChecked);
} }
@ -884,7 +936,8 @@ inline const QByteArray& VConfigManager::getMainWindowGeometry() const
inline void VConfigManager::setMainWindowGeometry(const QByteArray &p_geometry) inline void VConfigManager::setMainWindowGeometry(const QByteArray &p_geometry)
{ {
m_mainWindowGeometry = p_geometry; m_mainWindowGeometry = p_geometry;
setConfigToSettings("session", "main_window_geometry", setConfigToSessionSettings("geometry",
"main_window_geometry",
m_mainWindowGeometry); m_mainWindowGeometry);
} }
@ -896,7 +949,8 @@ inline const QByteArray& VConfigManager::getMainWindowState() const
inline void VConfigManager::setMainWindowState(const QByteArray &p_state) inline void VConfigManager::setMainWindowState(const QByteArray &p_state)
{ {
m_mainWindowState = p_state; m_mainWindowState = p_state;
setConfigToSettings("session", "main_window_state", setConfigToSessionSettings("geometry",
"main_window_state",
m_mainWindowState); m_mainWindowState);
} }
@ -908,7 +962,9 @@ inline const QByteArray& VConfigManager::getMainSplitterState() const
inline void VConfigManager::setMainSplitterState(const QByteArray &p_state) inline void VConfigManager::setMainSplitterState(const QByteArray &p_state)
{ {
m_mainSplitterState = p_state; m_mainSplitterState = p_state;
setConfigToSettings("session", "main_splitter_state", m_mainSplitterState); setConfigToSessionSettings("geometry",
"main_splitter_state",
m_mainSplitterState);
} }
inline const QByteArray& VConfigManager::getNaviSplitterState() const inline const QByteArray& VConfigManager::getNaviSplitterState() const
@ -919,7 +975,9 @@ inline const QByteArray& VConfigManager::getNaviSplitterState() const
inline void VConfigManager::setNaviSplitterState(const QByteArray &p_state) inline void VConfigManager::setNaviSplitterState(const QByteArray &p_state)
{ {
m_naviSplitterState = p_state; m_naviSplitterState = p_state;
setConfigToSettings("session", "navi_splitter_state", m_naviSplitterState); setConfigToSessionSettings("geometry",
"navi_splitter_state",
m_naviSplitterState);
} }
inline bool VConfigManager::getFindCaseSensitive() const inline bool VConfigManager::getFindCaseSensitive() const