Very initial preparations for MySQL support.

This commit is contained in:
Martin Rotter 2014-02-07 11:49:24 +01:00
parent b806e440e1
commit 005e6c18a4
4 changed files with 255 additions and 91 deletions

View File

@ -30,6 +30,7 @@
#define MAX_ZOOM_FACTOR 10.0
#define ICON_SIZE_SETTINGS 16
#define DATABASE_DRIVER "QSQLITE"
#define DATABASE_DRIVER_MYSQL "QMYSQL"
#define NO_PARENT_CATEGORY -1
#define TRAY_ICON_BUBBLE_TIMEOUT 15000
#define KEY_MESSAGES_VIEW "messages_view_column_"

View File

@ -62,7 +62,7 @@ QSettings::Status Settings::setupSettings() {
QWebSettings::setIconDatabasePath(web_path);
qDebug("Initializing settings in '%s' (portable way).",
qPrintable(QDir::toNativeSeparators(app_path)));
qPrintable(QDir::toNativeSeparators(app_path_file)));
}
else {
// Portable settings are NOT available, store them in

View File

@ -438,8 +438,23 @@ void FormSettings::loadGeneral() {
break;
}
// Load SQLITE.
m_ui->m_cmbDatabaseDriver->addItem("SQLite", DATABASE_DRIVER);
// Load in-memory database status.
m_ui->m_cmbUseInMemoryDatabase->setChecked(Settings::instance()->value(APP_CFG_GEN, "use_in_memory_db", false).toBool());
m_ui->m_cmbSqliteUseInMemoryDatabase->setChecked(Settings::instance()->value(APP_CFG_GEN, "use_in_memory_db", false).toBool());
if (QSqlDatabase::isDriverAvailable(DATABASE_DRIVER_MYSQL)) {
// Load MySQL.
m_ui->m_cmbDatabaseDriver->addItem("MySQL", DATABASE_DRIVER_MYSQL);
// TODO: nacist username, password atp.
}
// TODO: nacist podle nastaveni
m_ui->m_cmbDatabaseDriver->setCurrentIndex(m_ui->m_cmbDatabaseDriver->findData(Settings::instance()->value(APP_CFG_GEN,
"database_driver",
DATABASE_DRIVER).toString()));
}
void FormSettings::saveGeneral() {
@ -454,13 +469,29 @@ void FormSettings::saveGeneral() {
// Setup in-memory database status.
bool original_inmemory = Settings::instance()->value(APP_CFG_GEN, "use_in_memory_db", false).toBool();
bool new_inmemory = m_ui->m_cmbUseInMemoryDatabase->isChecked();
bool new_inmemory = m_ui->m_cmbSqliteUseInMemoryDatabase->isChecked();
if (original_inmemory != new_inmemory) {
m_changedDataTexts.append(tr("in-memory database switched"));
}
// Save data storage settings.
QString original_db_driver = Settings::instance()->value(APP_CFG_GEN, "database_driver", DATABASE_DRIVER).toString();
QString selected_db_driver = m_ui->m_cmbDatabaseDriver->itemData(m_ui->m_cmbDatabaseDriver->currentIndex()).toString();
// Save SQLite.
Settings::instance()->setValue(APP_CFG_GEN, "use_in_memory_db", new_inmemory);
if (QSqlDatabase::isDriverAvailable(DATABASE_DRIVER_MYSQL)) {
// Save MySQL.
// TODO: ulozit username, password atp.
}
Settings::instance()->setValue(APP_CFG_GEN, "database_driver", selected_db_driver);
if (original_db_driver != selected_db_driver) {
m_changedDataTexts.append(tr("data storage backend changed"));
}
}
void FormSettings::loadInterface() {

View File

@ -14,13 +14,74 @@
<string>Settings</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QListWidget" name="m_listSettings">
<property name="minimumSize">
<size>
<width>220</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<height>16777215</height>
</size>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
<property name="alternatingRowColors">
<bool>false</bool>
</property>
<property name="movement">
<enum>QListView::Static</enum>
</property>
<property name="selectionRectVisible">
<bool>false</bool>
</property>
<property name="currentRow">
<number>0</number>
</property>
<item>
<property name="text">
<string>General</string>
</property>
</item>
<item>
<property name="text">
<string>Keyboard shortcuts</string>
</property>
</item>
<item>
<property name="text">
<string>User interface</string>
</property>
</item>
<item>
<property name="text">
<string>Language</string>
</property>
</item>
<item>
<property name="text">
<string>Web browser &amp; proxy</string>
</property>
</item>
<item>
<property name="text">
<string>Feeds &amp; messages</string>
</property>
</item>
</widget>
</item>
<item row="0" column="1">
<widget class="QStackedWidget" name="m_stackedSettings">
<property name="currentIndex">
<number>5</number>
<number>0</number>
</property>
<widget class="QWidget" name="m_pageGeneral">
<layout class="QFormLayout" name="formLayout_5">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
@ -33,24 +94,59 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<item>
<widget class="QCheckBox" name="m_checkAutostart">
<property name="text">
<string>Launch RSS Guard on operating system startup</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="m_cmbUseInMemoryDatabase">
<property name="text">
<string>Use in-memory database as the working database</string>
<item>
<widget class="QGroupBox" name="m_gbDataStorage">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Usage of in-memory working database has several advantages and pitfalls. Make sure that you are familiar with these before you turn this feature on. Advantages:
<property name="title">
<string>Data storage</string>
</property>
<layout class="QFormLayout" name="formLayout_14">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="1" column="0">
<widget class="QLabel" name="m_lblDatabaseDriver">
<property name="text">
<string>Database driver</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="m_cmbDatabaseDriver"/>
</item>
<item row="3" column="0" colspan="2">
<widget class="QStackedWidget" name="m_stackedDatabaseDriver">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="m_pageSqlite">
<layout class="QFormLayout" name="formLayout_15">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="m_cmbSqliteUseInMemoryDatabase">
<property name="text">
<string>Use in-memory database as the working database</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLabel" name="m_lblSqliteInMemoryWarnings">
<property name="text">
<string>Usage of in-memory working database has several advantages and pitfalls. Make sure that you are familiar with these before you turn this feature on. Advantages:
&lt;ul&gt;
&lt;li&gt;higher speed for feed/message manipulations (especially with thousands of messages displayed),&lt;/li&gt;
&lt;li&gt;whole database stored in RAM, thus your hard drive can rest more.&lt;/li&gt;
@ -61,16 +157,91 @@ Disadvantages:
&lt;li&gt;application startup and shutdown can take little longer (max. 2 seconds).&lt;/li&gt;
&lt;/ul&gt;
Authors of this application are NOT responsible for lost data.</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="indent">
<number>20</number>
</property>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="indent">
<number>20</number>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="m_pageMysql">
<layout class="QFormLayout" name="formLayout_16">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Hostname</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="LineEditWithStatus" name="widget_2" native="true"/>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>Port</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Username</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="LineEditWithStatus" name="widget" native="true"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Password</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="LineEditWithStatus" name="widget_3" native="true"/>
</item>
</layout>
</widget>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="m_lblDataStorageWarning">
<property name="text">
<string>WARNING: Note that switching to another data storage type will NOT preserve your data from currently active data storage.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
@ -102,8 +273,8 @@ Authors of this application are NOT responsible for lost data.</string>
<rect>
<x>0</x>
<y>0</y>
<width>100</width>
<height>30</height>
<width>564</width>
<height>363</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
@ -180,8 +351,8 @@ Authors of this application are NOT responsible for lost data.</string>
<rect>
<x>0</x>
<y>0</y>
<width>167</width>
<height>219</height>
<width>558</width>
<height>337</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
@ -839,67 +1010,6 @@ Authors of this application are NOT responsible for lost data.</string>
</widget>
</widget>
</item>
<item row="0" column="0">
<widget class="QListWidget" name="m_listSettings">
<property name="minimumSize">
<size>
<width>220</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<height>16777215</height>
</size>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
<property name="alternatingRowColors">
<bool>false</bool>
</property>
<property name="movement">
<enum>QListView::Static</enum>
</property>
<property name="selectionRectVisible">
<bool>false</bool>
</property>
<property name="currentRow">
<number>0</number>
</property>
<item>
<property name="text">
<string>General</string>
</property>
</item>
<item>
<property name="text">
<string>Keyboard shortcuts</string>
</property>
</item>
<item>
<property name="text">
<string>User interface</string>
</property>
</item>
<item>
<property name="text">
<string>Language</string>
</property>
</item>
<item>
<property name="text">
<string>Web browser &amp; proxy</string>
</property>
</item>
<item>
<property name="text">
<string>Feeds &amp; messages</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QDialogButtonBox" name="m_buttonBox">
<property name="orientation">
@ -919,6 +1029,12 @@ Authors of this application are NOT responsible for lost data.</string>
<header>dynamicshortcutswidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>LineEditWithStatus</class>
<extends>QWidget</extends>
<header>lineeditwithstatus.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections>
@ -1002,5 +1118,21 @@ Authors of this application are NOT responsible for lost data.</string>
</hint>
</hints>
</connection>
<connection>
<sender>m_cmbDatabaseDriver</sender>
<signal>currentIndexChanged(int)</signal>
<receiver>m_stackedDatabaseDriver</receiver>
<slot>setCurrentIndex(int)</slot>
<hints>
<hint type="sourcelabel">
<x>558</x>
<y>96</y>
</hint>
<hint type="destinationlabel">
<x>516</x>
<y>215</y>
</hint>
</hints>
</connection>
</connections>
</ui>