Fixed #107.
This commit is contained in:
parent
e2645f7f63
commit
14a74bc028
9 changed files with 126 additions and 25 deletions
|
@ -1,8 +1,8 @@
|
||||||
DROP DATABASE IF EXISTS rssguard;
|
DROP DATABASE IF EXISTS ##;
|
||||||
-- !
|
-- !
|
||||||
CREATE DATABASE IF NOT EXISTS rssguard CHARACTER SET utf8 COLLATE utf8_general_ci;
|
CREATE DATABASE IF NOT EXISTS ## CHARACTER SET utf8 COLLATE utf8_general_ci;
|
||||||
-- !
|
-- !
|
||||||
USE rssguard;
|
USE ##;
|
||||||
-- !
|
-- !
|
||||||
DROP TABLE IF EXISTS Information;
|
DROP TABLE IF EXISTS Information;
|
||||||
-- !
|
-- !
|
||||||
|
|
|
@ -8,6 +8,7 @@ Fixed:
|
||||||
|
|
||||||
Added:
|
Added:
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>User now can specify MySQL target database by name. (issue #107)</li>
|
||||||
<li>Automatic detection of feeds on websites. User loads website and can add feeds via custom web browser toolbar button. (issue #47)</li>
|
<li>Automatic detection of feeds on websites. User loads website and can add feeds via custom web browser toolbar button. (issue #47)</li>
|
||||||
<li>Better format for logged messages. Logging to file is possible via "rssguard 2> log.txt" command.</li>
|
<li>Better format for logged messages. Logging to file is possible via "rssguard 2> log.txt" command.</li>
|
||||||
<li>Full support for podcasts (issue #81). Supports RSS 2.0 podcasts and ATOM 1.0 podcasts. In ATOM, RSS Guard is able to fetch multiple podcasts per message. Podcasts are displayed as additional URL addresses in message preview panel.</li>
|
<li>Full support for podcasts (issue #81). Supports RSS 2.0 podcasts and ATOM 1.0 podcasts. In ATOM, RSS Guard is able to fetch multiple podcasts per message. Podcasts are displayed as additional URL addresses in message preview panel.</li>
|
||||||
|
|
|
@ -123,6 +123,7 @@ FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_ui(new Ui::Form
|
||||||
connect(m_ui->m_txtMysqlUsername->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlUsernameChanged(QString)));
|
connect(m_ui->m_txtMysqlUsername->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlUsernameChanged(QString)));
|
||||||
connect(m_ui->m_txtMysqlHostname->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlHostnameChanged(QString)));
|
connect(m_ui->m_txtMysqlHostname->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlHostnameChanged(QString)));
|
||||||
connect(m_ui->m_txtMysqlPassword->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlPasswordChanged(QString)));
|
connect(m_ui->m_txtMysqlPassword->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlPasswordChanged(QString)));
|
||||||
|
connect(m_ui->m_txtMysqlDatabase->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlDatabaseChanged(QString)));
|
||||||
connect(m_ui->m_btnMysqlTestSetup, SIGNAL(clicked()), this, SLOT(mysqlTestConnection()));
|
connect(m_ui->m_btnMysqlTestSetup, SIGNAL(clicked()), this, SLOT(mysqlTestConnection()));
|
||||||
connect(m_ui->m_spinMysqlPort, SIGNAL(editingFinished()), this, SLOT(onMysqlDataStorageEdited()));
|
connect(m_ui->m_spinMysqlPort, SIGNAL(editingFinished()), this, SLOT(onMysqlDataStorageEdited()));
|
||||||
connect(m_ui->m_txtMysqlHostname->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(onMysqlDataStorageEdited()));
|
connect(m_ui->m_txtMysqlHostname->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(onMysqlDataStorageEdited()));
|
||||||
|
@ -484,6 +485,7 @@ void FormSettings::loadDataStorage() {
|
||||||
onMysqlHostnameChanged(QString());
|
onMysqlHostnameChanged(QString());
|
||||||
onMysqlUsernameChanged(QString());
|
onMysqlUsernameChanged(QString());
|
||||||
onMysqlPasswordChanged(QString());
|
onMysqlPasswordChanged(QString());
|
||||||
|
onMysqlDatabaseChanged(QString());
|
||||||
|
|
||||||
// Load MySQL.
|
// Load MySQL.
|
||||||
m_ui->m_cmbDatabaseDriver->addItem(tr("MySQL/MariaDB (dedicated database)"), APP_DB_MYSQL_DRIVER);
|
m_ui->m_cmbDatabaseDriver->addItem(tr("MySQL/MariaDB (dedicated database)"), APP_DB_MYSQL_DRIVER);
|
||||||
|
@ -492,10 +494,12 @@ void FormSettings::loadDataStorage() {
|
||||||
m_ui->m_txtMysqlHostname->lineEdit()->setPlaceholderText(tr("Hostname of your MySQL server"));
|
m_ui->m_txtMysqlHostname->lineEdit()->setPlaceholderText(tr("Hostname of your MySQL server"));
|
||||||
m_ui->m_txtMysqlUsername->lineEdit()->setPlaceholderText(tr("Username to login with"));
|
m_ui->m_txtMysqlUsername->lineEdit()->setPlaceholderText(tr("Username to login with"));
|
||||||
m_ui->m_txtMysqlPassword->lineEdit()->setPlaceholderText(tr("Password for your username"));
|
m_ui->m_txtMysqlPassword->lineEdit()->setPlaceholderText(tr("Password for your username"));
|
||||||
|
m_ui->m_txtMysqlDatabase->lineEdit()->setPlaceholderText(tr("Working database which you have full access to."));
|
||||||
|
|
||||||
m_ui->m_txtMysqlHostname->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLHostname)).toString());
|
m_ui->m_txtMysqlHostname->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLHostname)).toString());
|
||||||
m_ui->m_txtMysqlUsername->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLUsername)).toString());
|
m_ui->m_txtMysqlUsername->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLUsername)).toString());
|
||||||
m_ui->m_txtMysqlPassword->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLPassword)).toString());
|
m_ui->m_txtMysqlPassword->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLPassword)).toString());
|
||||||
|
m_ui->m_txtMysqlDatabase->lineEdit()->setText(settings->value(GROUP(Database), SETTING(Database::MySQLDatabase)).toString());
|
||||||
m_ui->m_spinMysqlPort->setValue(settings->value(GROUP(Database), SETTING(Database::MySQLPort)).toInt());
|
m_ui->m_spinMysqlPort->setValue(settings->value(GROUP(Database), SETTING(Database::MySQLPort)).toInt());
|
||||||
|
|
||||||
m_ui->m_checkMysqlShowPassword->setChecked(false);
|
m_ui->m_checkMysqlShowPassword->setChecked(false);
|
||||||
|
@ -531,6 +535,7 @@ void FormSettings::saveDataStorage() {
|
||||||
settings->setValue(GROUP(Database), Database::MySQLHostname, m_ui->m_txtMysqlHostname->lineEdit()->text());
|
settings->setValue(GROUP(Database), Database::MySQLHostname, m_ui->m_txtMysqlHostname->lineEdit()->text());
|
||||||
settings->setValue(GROUP(Database), Database::MySQLUsername, m_ui->m_txtMysqlUsername->lineEdit()->text());
|
settings->setValue(GROUP(Database), Database::MySQLUsername, m_ui->m_txtMysqlUsername->lineEdit()->text());
|
||||||
settings->setValue(GROUP(Database), Database::MySQLPassword, m_ui->m_txtMysqlPassword->lineEdit()->text());
|
settings->setValue(GROUP(Database), Database::MySQLPassword, m_ui->m_txtMysqlPassword->lineEdit()->text());
|
||||||
|
settings->setValue(GROUP(Database), Database::MySQLDatabase, m_ui->m_txtMysqlDatabase->lineEdit()->text());
|
||||||
settings->setValue(GROUP(Database), Database::MySQLPort, m_ui->m_spinMysqlPort->value());
|
settings->setValue(GROUP(Database), Database::MySQLPort, m_ui->m_spinMysqlPort->value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -545,10 +550,12 @@ void FormSettings::saveDataStorage() {
|
||||||
void FormSettings::mysqlTestConnection() {
|
void FormSettings::mysqlTestConnection() {
|
||||||
DatabaseFactory::MySQLError error_code = qApp->database()->mysqlTestConnection(m_ui->m_txtMysqlHostname->lineEdit()->text(),
|
DatabaseFactory::MySQLError error_code = qApp->database()->mysqlTestConnection(m_ui->m_txtMysqlHostname->lineEdit()->text(),
|
||||||
m_ui->m_spinMysqlPort->value(),
|
m_ui->m_spinMysqlPort->value(),
|
||||||
|
m_ui->m_txtMysqlDatabase->lineEdit()->text(),
|
||||||
m_ui->m_txtMysqlUsername->lineEdit()->text(),
|
m_ui->m_txtMysqlUsername->lineEdit()->text(),
|
||||||
m_ui->m_txtMysqlPassword->lineEdit()->text());
|
m_ui->m_txtMysqlPassword->lineEdit()->text());
|
||||||
QString interpretation = qApp->database()->mysqlInterpretErrorCode(error_code);
|
QString interpretation = qApp->database()->mysqlInterpretErrorCode(error_code);
|
||||||
|
|
||||||
|
|
||||||
switch (error_code) {
|
switch (error_code) {
|
||||||
case DatabaseFactory::MySQLOk:
|
case DatabaseFactory::MySQLOk:
|
||||||
m_ui->m_lblMysqlTestResult->setStatus(WidgetWithStatus::Ok, interpretation, interpretation);
|
m_ui->m_lblMysqlTestResult->setStatus(WidgetWithStatus::Ok, interpretation, interpretation);
|
||||||
|
@ -587,6 +594,15 @@ void FormSettings::onMysqlPasswordChanged(const QString &new_password) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FormSettings::onMysqlDatabaseChanged(const QString &new_database) {
|
||||||
|
if (new_database.isEmpty()) {
|
||||||
|
m_ui->m_txtMysqlDatabase->setStatus(LineEditWithStatus::Warning, tr("Working database is empty."));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_ui->m_txtMysqlDatabase->setStatus(LineEditWithStatus::Ok, tr("Working database is ok."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FormSettings::onMysqlDataStorageEdited() {
|
void FormSettings::onMysqlDataStorageEdited() {
|
||||||
m_initialSettings.m_dataStorageDataChanged = true;
|
m_initialSettings.m_dataStorageDataChanged = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,7 @@ class FormSettings : public QDialog {
|
||||||
void onMysqlHostnameChanged(const QString &new_hostname);
|
void onMysqlHostnameChanged(const QString &new_hostname);
|
||||||
void onMysqlUsernameChanged(const QString &new_username);
|
void onMysqlUsernameChanged(const QString &new_username);
|
||||||
void onMysqlPasswordChanged(const QString &new_password);
|
void onMysqlPasswordChanged(const QString &new_password);
|
||||||
|
void onMysqlDatabaseChanged(const QString &new_database);
|
||||||
void onMysqlDataStorageEdited();
|
void onMysqlDataStorageEdited();
|
||||||
void selectSqlBackend(int index);
|
void selectSqlBackend(int index);
|
||||||
void switchMysqlPasswordVisiblity(bool visible);
|
void switchMysqlPasswordVisiblity(bool visible);
|
||||||
|
|
|
@ -290,7 +290,7 @@ Authors of this application are NOT responsible for lost data.</string>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Username</string>
|
<string>Username</string>
|
||||||
|
@ -300,10 +300,10 @@ Authors of this application are NOT responsible for lost data.</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="LineEditWithStatus" name="m_txtMysqlUsername" native="true"/>
|
<widget class="LineEditWithStatus" name="m_txtMysqlUsername" native="true"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_5">
|
<widget class="QLabel" name="label_5">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Password</string>
|
<string>Password</string>
|
||||||
|
@ -313,10 +313,10 @@ Authors of this application are NOT responsible for lost data.</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="LineEditWithStatus" name="m_txtMysqlPassword" native="true"/>
|
<widget class="LineEditWithStatus" name="m_txtMysqlPassword" native="true"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="5" column="1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_11">
|
<layout class="QHBoxLayout" name="horizontalLayout_11">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="m_btnMysqlTestSetup">
|
<widget class="QPushButton" name="m_btnMysqlTestSetup">
|
||||||
|
@ -343,7 +343,7 @@ Authors of this application are NOT responsible for lost data.</string>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0" colspan="2">
|
<item row="6" column="0" colspan="2">
|
||||||
<widget class="QLabel" name="m_lblMysqlInfo">
|
<widget class="QLabel" name="m_lblMysqlInfo">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Note that speed of used MySQL server and latency of used connection medium HEAVILY influences the final performance of this application. Using slow database connections leads to bad performance when browsing feeds or messages.
|
<string>Note that speed of used MySQL server and latency of used connection medium HEAVILY influences the final performance of this application. Using slow database connections leads to bad performance when browsing feeds or messages.
|
||||||
|
@ -361,7 +361,7 @@ MySQL backend will automatically use database with name "rssguard". Do
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="4" column="1">
|
||||||
<widget class="QCheckBox" name="m_checkMysqlShowPassword">
|
<widget class="QCheckBox" name="m_checkMysqlShowPassword">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Show password</string>
|
<string>&Show password</string>
|
||||||
|
@ -371,6 +371,16 @@ MySQL backend will automatically use database with name "rssguard". Do
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="LineEditWithStatus" name="m_txtMysqlDatabase" native="true"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_11">
|
||||||
|
<property name="text">
|
||||||
|
<string>Working database</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -404,8 +414,8 @@ MySQL backend will automatically use database with name "rssguard". Do
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>740</width>
|
<width>100</width>
|
||||||
<height>448</height>
|
<height>30</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
|
@ -481,9 +491,9 @@ MySQL backend will automatically use database with name "rssguard". Do
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>208</width>
|
<width>208</width>
|
||||||
<height>238</height>
|
<height>238</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
@ -1428,6 +1438,65 @@ MySQL backend will automatically use database with name "rssguard". Do
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>m_cmbDatabaseDriver</tabstop>
|
||||||
|
<tabstop>m_spinMysqlPort</tabstop>
|
||||||
|
<tabstop>m_checkMysqlShowPassword</tabstop>
|
||||||
|
<tabstop>m_btnMysqlTestSetup</tabstop>
|
||||||
|
<tabstop>m_listSettings</tabstop>
|
||||||
|
<tabstop>m_checkSqliteUseInMemoryDatabase</tabstop>
|
||||||
|
<tabstop>m_checkAutostart</tabstop>
|
||||||
|
<tabstop>m_checkRemoveTrolltechJunk</tabstop>
|
||||||
|
<tabstop>m_checkForUpdatesOnStart</tabstop>
|
||||||
|
<tabstop>m_scrollShortcuts</tabstop>
|
||||||
|
<tabstop>m_tabUi</tabstop>
|
||||||
|
<tabstop>m_scrollIconSkins</tabstop>
|
||||||
|
<tabstop>m_cmbIconTheme</tabstop>
|
||||||
|
<tabstop>m_treeSkins</tabstop>
|
||||||
|
<tabstop>m_radioTrayOff</tabstop>
|
||||||
|
<tabstop>m_checkHideWhenMinimized</tabstop>
|
||||||
|
<tabstop>m_checkHidden</tabstop>
|
||||||
|
<tabstop>m_radioTrayOn</tabstop>
|
||||||
|
<tabstop>m_checkNewTabDoubleClick</tabstop>
|
||||||
|
<tabstop>m_hideTabBarIfOneTabVisible</tabstop>
|
||||||
|
<tabstop>m_checkCloseTabsDoubleClick</tabstop>
|
||||||
|
<tabstop>m_checkCloseTabsMiddleClick</tabstop>
|
||||||
|
<tabstop>m_cmbToolbarButtonStyle</tabstop>
|
||||||
|
<tabstop>m_cmbSelectToolBar</tabstop>
|
||||||
|
<tabstop>m_treeLanguages</tabstop>
|
||||||
|
<tabstop>m_tabBrowserProxy</tabstop>
|
||||||
|
<tabstop>m_checkQueueTabs</tabstop>
|
||||||
|
<tabstop>m_checkEnableJavascript</tabstop>
|
||||||
|
<tabstop>m_checkEnablePlugins</tabstop>
|
||||||
|
<tabstop>m_checkAutoLoadImages</tabstop>
|
||||||
|
<tabstop>m_checkMouseGestures</tabstop>
|
||||||
|
<tabstop>m_grpCustomExternalBrowser</tabstop>
|
||||||
|
<tabstop>m_txtExternalBrowserExecutable</tabstop>
|
||||||
|
<tabstop>m_btnExternalBrowserExecutable</tabstop>
|
||||||
|
<tabstop>m_txtExternalBrowserArguments</tabstop>
|
||||||
|
<tabstop>m_cmbExternalBrowserPreset</tabstop>
|
||||||
|
<tabstop>m_cmbProxyType</tabstop>
|
||||||
|
<tabstop>m_txtProxyHost</tabstop>
|
||||||
|
<tabstop>m_spinProxyPort</tabstop>
|
||||||
|
<tabstop>m_txtProxyUsername</tabstop>
|
||||||
|
<tabstop>m_txtProxyPassword</tabstop>
|
||||||
|
<tabstop>m_checkShowPassword</tabstop>
|
||||||
|
<tabstop>m_tabFeedsMessages</tabstop>
|
||||||
|
<tabstop>m_checkUpdateAllFeedsOnStartup</tabstop>
|
||||||
|
<tabstop>m_checkAutoUpdate</tabstop>
|
||||||
|
<tabstop>m_spinAutoUpdateInterval</tabstop>
|
||||||
|
<tabstop>m_spinFeedUpdateTimeout</tabstop>
|
||||||
|
<tabstop>m_cmbCountsFeedList</tabstop>
|
||||||
|
<tabstop>m_checkRemoveReadMessagesOnExit</tabstop>
|
||||||
|
<tabstop>m_checkKeppMessagesInTheMiddle</tabstop>
|
||||||
|
<tabstop>m_checkMessagesDateTimeFormat</tabstop>
|
||||||
|
<tabstop>m_cmbMessagesDateTimeFormat</tabstop>
|
||||||
|
<tabstop>m_checkRemoveDuplicateMessages</tabstop>
|
||||||
|
<tabstop>m_rbDownloadsAskEachFile</tabstop>
|
||||||
|
<tabstop>m_rbDownloadsSaveAllIntoDirectory</tabstop>
|
||||||
|
<tabstop>m_txtDownloadsTargetDirectory</tabstop>
|
||||||
|
<tabstop>m_btnDownloadsTargetDirectory</tabstop>
|
||||||
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections>
|
||||||
<connection>
|
<connection>
|
||||||
|
|
|
@ -38,7 +38,7 @@ DatabaseFactory::DatabaseFactory(QObject *parent)
|
||||||
DatabaseFactory::~DatabaseFactory() {
|
DatabaseFactory::~DatabaseFactory() {
|
||||||
}
|
}
|
||||||
|
|
||||||
DatabaseFactory::MySQLError DatabaseFactory::mysqlTestConnection(const QString &hostname, int port,
|
DatabaseFactory::MySQLError DatabaseFactory::mysqlTestConnection(const QString &hostname, int port, const QString &w_database,
|
||||||
const QString &username, const QString &password) {
|
const QString &username, const QString &password) {
|
||||||
QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, APP_DB_MYSQL_TEST);
|
QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, APP_DB_MYSQL_TEST);
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ DatabaseFactory::MySQLError DatabaseFactory::mysqlTestConnection(const QString &
|
||||||
database.setPort(port);
|
database.setPort(port);
|
||||||
database.setUserName(username);
|
database.setUserName(username);
|
||||||
database.setPassword(password);
|
database.setPassword(password);
|
||||||
|
database.setDatabaseName(w_database);
|
||||||
|
|
||||||
if (database.open()) {
|
if (database.open()) {
|
||||||
// Connection succeeded, clean up the mess and return OK status.
|
// Connection succeeded, clean up the mess and return OK status.
|
||||||
|
@ -65,6 +66,9 @@ QString DatabaseFactory::mysqlInterpretErrorCode(MySQLError error_code) {
|
||||||
case MySQLOk:
|
case MySQLOk:
|
||||||
return tr("MySQL server works as expected.");
|
return tr("MySQL server works as expected.");
|
||||||
|
|
||||||
|
case MySQLUnknownDatabase:
|
||||||
|
return tr("Selected database does not exist (yet).");
|
||||||
|
|
||||||
case MySQLCantConnect:
|
case MySQLCantConnect:
|
||||||
case MySQLConnectionError:
|
case MySQLConnectionError:
|
||||||
case MySQLUnknownHost:
|
case MySQLUnknownHost:
|
||||||
|
@ -498,7 +502,7 @@ QSqlDatabase DatabaseFactory::mysqlConnection(const QString &connection_name) {
|
||||||
database.setPort(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLPort)).toInt());
|
database.setPort(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLPort)).toInt());
|
||||||
database.setUserName(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLUsername)).toString());
|
database.setUserName(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLUsername)).toString());
|
||||||
database.setPassword(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLPassword)).toString());
|
database.setPassword(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLPassword)).toString());
|
||||||
database.setDatabaseName(APP_LOW_NAME);
|
database.setDatabaseName(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLDatabase)).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!database.isOpen() && !database.open()) {
|
if (!database.isOpen() && !database.open()) {
|
||||||
|
@ -518,6 +522,7 @@ QSqlDatabase DatabaseFactory::mysqlConnection(const QString &connection_name) {
|
||||||
QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString &connection_name) {
|
QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString &connection_name) {
|
||||||
// Folders are created. Create new QSQLDatabase object.
|
// Folders are created. Create new QSQLDatabase object.
|
||||||
QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, connection_name);
|
QSqlDatabase database = QSqlDatabase::addDatabase(APP_DB_MYSQL_DRIVER, connection_name);
|
||||||
|
QString database_name = qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLDatabase)).toString();
|
||||||
|
|
||||||
database.setHostName(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLHostname)).toString());
|
database.setHostName(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLHostname)).toString());
|
||||||
database.setPort(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLPort)).toInt());
|
database.setPort(qApp->settings()->value(GROUP(Database), SETTING(Database::MySQLPort)).toInt());
|
||||||
|
@ -532,7 +537,7 @@ QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString &connection_
|
||||||
QSqlQuery query_db(database);
|
QSqlQuery query_db(database);
|
||||||
query_db.setForwardOnly(true);
|
query_db.setForwardOnly(true);
|
||||||
|
|
||||||
if (!query_db.exec("USE rssguard") || !query_db.exec("SELECT inf_value FROM Information WHERE inf_key = 'schema_version'")) {
|
if (!query_db.exec(QString("USE %1").arg(database_name)) || !query_db.exec("SELECT inf_value FROM Information WHERE inf_key = 'schema_version'")) {
|
||||||
// If no "rssguard" database exists or schema version is wrong, then initialize it.
|
// If no "rssguard" database exists or schema version is wrong, then initialize it.
|
||||||
qWarning("Error occurred. MySQL database is not initialized. Initializing now.");
|
qWarning("Error occurred. MySQL database is not initialized. Initializing now.");
|
||||||
|
|
||||||
|
@ -548,8 +553,9 @@ QSqlDatabase DatabaseFactory::mysqlInitializeDatabase(const QString &connection_
|
||||||
QStringList statements = QString(file_init.readAll()).split(APP_DB_COMMENT_SPLIT, QString::SkipEmptyParts);
|
QStringList statements = QString(file_init.readAll()).split(APP_DB_COMMENT_SPLIT, QString::SkipEmptyParts);
|
||||||
database.transaction();
|
database.transaction();
|
||||||
|
|
||||||
foreach(const QString &statement, statements) {
|
foreach(QString statement, statements) {
|
||||||
query_db.exec(statement);
|
// Assign real database name and run the query.
|
||||||
|
query_db.exec(statement.replace("##", database_name));
|
||||||
|
|
||||||
if (query_db.lastError().isValid()) {
|
if (query_db.lastError().isValid()) {
|
||||||
qFatal("MySQL database initialization failed. Initialization script '%s' is not correct. Error : '%s'.",
|
qFatal("MySQL database initialization failed. Initialization script '%s' is not correct. Error : '%s'.",
|
||||||
|
|
|
@ -42,11 +42,12 @@ class DatabaseFactory : public QObject {
|
||||||
|
|
||||||
// Describes possible MySQL-specific errors.
|
// Describes possible MySQL-specific errors.
|
||||||
enum MySQLError {
|
enum MySQLError {
|
||||||
MySQLOk = 0,
|
MySQLOk = 0,
|
||||||
MySQLAccessDenied = 1045,
|
MySQLAccessDenied = 1045,
|
||||||
MySQLConnectionError = 2002,
|
MySQLUnknownDatabase = 1049,
|
||||||
MySQLCantConnect = 2003,
|
MySQLConnectionError = 2002,
|
||||||
MySQLUnknownHost = 2005
|
MySQLCantConnect = 2003,
|
||||||
|
MySQLUnknownHost = 2005
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -95,7 +96,8 @@ class DatabaseFactory : public QObject {
|
||||||
// Tests if database connection with given data
|
// Tests if database connection with given data
|
||||||
// can be established and returns 0 if it can.
|
// can be established and returns 0 if it can.
|
||||||
// Otherwise returns MySQL-specific error code.
|
// Otherwise returns MySQL-specific error code.
|
||||||
MySQLError mysqlTestConnection(const QString &hostname, int port, const QString &username, const QString &password);
|
MySQLError mysqlTestConnection(const QString &hostname, int port, const QString &w_database,
|
||||||
|
const QString &username, const QString &password);
|
||||||
|
|
||||||
// Interprets MySQL error code.
|
// Interprets MySQL error code.
|
||||||
QString mysqlInterpretErrorCode(MySQLError error_code);
|
QString mysqlInterpretErrorCode(MySQLError error_code);
|
||||||
|
|
|
@ -199,6 +199,9 @@ DVALUE(char*) Database::MySQLUsernameDef = "";
|
||||||
DKEY Database::MySQLPassword = "mysql_password";
|
DKEY Database::MySQLPassword = "mysql_password";
|
||||||
DVALUE(char*) Database::MySQLPasswordDef = "";
|
DVALUE(char*) Database::MySQLPasswordDef = "";
|
||||||
|
|
||||||
|
DKEY Database::MySQLDatabase = "mysql_database";
|
||||||
|
DVALUE(char*) Database::MySQLDatabaseDef = APP_LOW_NAME;
|
||||||
|
|
||||||
DKEY Database::MySQLPort = "mysql_port";
|
DKEY Database::MySQLPort = "mysql_port";
|
||||||
DVALUE(int) Database::MySQLPortDef = APP_DB_MYSQL_PORT;
|
DVALUE(int) Database::MySQLPortDef = APP_DB_MYSQL_PORT;
|
||||||
|
|
||||||
|
|
|
@ -221,6 +221,9 @@ namespace Database {
|
||||||
KEY MySQLPort;
|
KEY MySQLPort;
|
||||||
VALUE(int) MySQLPortDef;
|
VALUE(int) MySQLPortDef;
|
||||||
|
|
||||||
|
KEY MySQLDatabase;
|
||||||
|
VALUE(char*) MySQLDatabaseDef;
|
||||||
|
|
||||||
KEY ActiveDriver;
|
KEY ActiveDriver;
|
||||||
VALUE(char*) ActiveDriverDef;
|
VALUE(char*) ActiveDriverDef;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue