From 8da06ad5d3c5fae6ab55ac1d6e94897732c14f79 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 7 Feb 2014 21:39:59 +0100 Subject: [PATCH] Another progress in MySQL. --- resources/misc/db_init_mysql.sql | 90 ++++++++++++++++++++++++++++++++ src/core/databasefactory.cpp | 1 + src/core/defs.h.in | 3 +- src/gui/feedmessageviewer.cpp | 7 +-- src/gui/formsettings.cpp | 72 ++++++++++++++----------- src/gui/formsettings.h | 3 ++ src/gui/formsettings.ui | 23 +++++--- 7 files changed, 158 insertions(+), 41 deletions(-) create mode 100644 resources/misc/db_init_mysql.sql diff --git a/resources/misc/db_init_mysql.sql b/resources/misc/db_init_mysql.sql new file mode 100644 index 000000000..7c8785963 --- /dev/null +++ b/resources/misc/db_init_mysql.sql @@ -0,0 +1,90 @@ +DROP DATABASE IF EXISTS rssguard; +-- ! +CREATE DATABASE IF NOT EXISTS rssguard CHARACTER SET utf8 COLLATE utf8_general_ci; +-- ! +USE rssguard; +-- ! +DROP TABLE IF EXISTS Information; +-- ! +CREATE TABLE IF NOT EXISTS Information ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, + inf_key TEXT NOT NULL, + inf_value TEXT NOT NULL +); +-- ! +INSERT INTO Information VALUES (1, 'schema_version', '0.0.1'); +-- ! +DROP TABLE IF EXISTS Categories; +-- ! +CREATE TABLE IF NOT EXISTS Categories ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, + parent_id INTEGER NOT NULL, + title VARCHAR(100) NOT NULL UNIQUE CHECK (title != ''), + description TEXT, + date_created BIGINT NOT NULL CHECK (date_created != 0), + icon BLOB, + type INTEGER NOT NULL +); +-- ! +DROP TABLE IF EXISTS Feeds; +-- ! +CREATE TABLE IF NOT EXISTS Feeds ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, + title TEXT NOT NULL CHECK (title != ''), + description TEXT, + date_created BIGINT NOT NULL CHECK (date_created != 0), + icon BLOB, + category INTEGER NOT NULL CHECK (category >= -1), + encoding TEXT NOT NULL CHECK (encoding != ''), + url VARCHAR(100) NOT NULL UNIQUE CHECK (url != ''), + protected INTEGER(1) NOT NULL CHECK (protected >= 0 AND protected <= 1), + username TEXT, + password TEXT, + update_type INTEGER(1) NOT NULL CHECK (update_type >= 0), + update_interval INTEGER NOT NULL DEFAULT 15 CHECK (update_interval >= 5), + type INTEGER NOT NULL CHECK (type >= 0) +); +-- ! +DROP TABLE IF EXISTS FeedsData; +-- ! +CREATE TABLE IF NOT EXISTS FeedsData ( + feed_id INTEGER NOT NULL, + feed_key VARCHAR(100) NOT NULL, + feed_value TEXT, + + PRIMARY KEY (feed_id, feed_key), + FOREIGN KEY (feed_id) REFERENCES Feeds (id) +); +-- ! +DROP TABLE IF EXISTS Messages; +-- ! +CREATE TABLE IF NOT EXISTS Messages ( + id INTEGER AUTO_INCREMENT PRIMARY KEY, + is_read INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_read >= 0 AND is_read <= 1), + is_deleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_deleted >= 0 AND is_deleted <= 1), + is_important INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_important >= 0 AND is_important <= 1), + feed INTEGER NOT NULL, + title TEXT NOT NULL CHECK (title != ''), + url TEXT, + author TEXT, + date_created BIGINT NOT NULL CHECK (date_created != 0), + contents TEXT, + + FOREIGN KEY (feed) REFERENCES Feeds (id) +); +-- ! +INSERT INTO Categories (id, parent_id, title, description, date_created, type, icon) VALUES (1, -1, 'Linux', 'Collections of GNU/Linux-related feeds.', 1388678961000, 0, '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'); +-- ! +INSERT INTO Categories (id, parent_id, title, description, date_created, type, icon) VALUES (2, -1, 'RSS Guard', 'News and updates on RSS Guard.', 1388678961000, 0, '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'); +-- ! +INSERT INTO Feeds (title, description, date_created, category, encoding, url, protected, update_type, type) VALUES ('Linux Today', 'Linux Today - Linux News on Internet Time.', 1388678961000, 1, 'UTF-8', 'http://feeds.feedburner.com/linuxtoday/linux?format=xml', 0, 0, 1); +-- ! +INSERT INTO Feeds (title, description, date_created, category, encoding, url, protected, update_type, type) VALUES ('LinuxInsider', 'LinuxInsider: Linux News & Information from Around the World.', 1388678961000, 1, 'UTF-8', 'http://www.linuxinsider.com/perl/syndication/rssfull.pl', 0, 0, 2); +-- ! +INSERT INTO Feeds (title, description, date_created, category, encoding, url, protected, update_type, type) VALUES ('LXer: Linux News', 'The world is talking about GNU/Linux and Free/Open Source Software.', 1388678961000, 1, 'UTF-8', 'http://lxer.com/module/newswire/headlines.rss', 0, 0, 2); +-- ! +INSERT INTO Feeds (title, description, date_created, category, encoding, url, protected, update_type, update_interval, type) VALUES ('Recent Commits', 'Recent commits for RSS Guard project.', 1388678961000, 2, 'UTF-8', 'https://github.com/martinrotter/rssguard/commits/master.atom', 0, 2, 30, 3); +-- ! +INSERT INTO Feeds (title, description, date_created, category, encoding, url, protected, update_type, update_interval, type) VALUES ('Releases', 'Releases for RSS Guard.', 1388678961000, 2, 'UTF-8', 'https://github.com/martinrotter/rssguard/releases.atom', 0, 2, 30, 3); +-- ! +INSERT INTO Feeds (title, description, date_created, category, encoding, url, protected, update_type, update_interval, type) VALUES ('Author''s Activity', 'RSS Guard author public activity overview.', 1388678961000, 2, 'UTF-8', 'https://github.com/martinrotter.atom', 0, 2, 30, 3); \ No newline at end of file diff --git a/src/core/databasefactory.cpp b/src/core/databasefactory.cpp index e57c995c0..8e280e2f2 100644 --- a/src/core/databasefactory.cpp +++ b/src/core/databasefactory.cpp @@ -498,6 +498,7 @@ bool DatabaseFactory::vacuumDatabase() { break; } + case MYSQL: default: return false; } diff --git a/src/core/defs.h.in b/src/core/defs.h.in index ed003c90b..e85637783 100755 --- a/src/core/defs.h.in +++ b/src/core/defs.h.in @@ -30,7 +30,7 @@ #define MAX_ZOOM_FACTOR 10.0 #define ICON_SIZE_SETTINGS 16 #define NO_PARENT_CATEGORY -1 -#define TRAY_ICON_BUBBLE_TIMEOUT 15000 +#define TRAY_ICON_BUBBLE_TIMEOUT 20000 #define KEY_MESSAGES_VIEW "messages_view_column_" #define CLOSE_LOCK_TIMEOUT 3000 #define DOWNLOAD_TIMEOUT 5000 @@ -42,6 +42,7 @@ #define AUTO_UPDATE_INTERVAL 60000 #define STARTUP_UPDATE_DELAY 1500 +#define APP_DB_MYSQL_PORT 3306 #define APP_DB_DRIVER_SQLITE "QSQLITE" #define APP_DB_DRIVER_MYSQL "QMYSQL" #define APP_DB_INIT_MYSQL "db_init_mysql.sql" diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp index be912f02f..4b20402b5 100644 --- a/src/gui/feedmessageviewer.cpp +++ b/src/gui/feedmessageviewer.cpp @@ -328,14 +328,15 @@ void FeedMessageViewer::vacuumDatabase() { else { if (is_tray_activated) { SystemTrayIcon::instance()->showMessage(tr("Database was not defragmented"), - tr("Database was not defragmented, try again later."), - QSystemTrayIcon::Warning); + tr("Database was not defragmented. This database backend does not support it or it cannot be defragmented now."), + QSystemTrayIcon::Warning, + TRAY_ICON_BUBBLE_TIMEOUT); } else { MessageBox::show(this, QMessageBox::Warning, tr("Database was not defragmented"), - tr("Database was not defragmented, try again later.")); + tr("Database was not defragmented. This database backend does not support it or it cannot be defragmented now.")); } } diff --git a/src/gui/formsettings.cpp b/src/gui/formsettings.cpp index d36d8ab42..e4c3fe12c 100755 --- a/src/gui/formsettings.cpp +++ b/src/gui/formsettings.cpp @@ -98,6 +98,7 @@ FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_ui(new Ui::Form // Load all settings. loadGeneral(); + loadDataStorage(); loadShortcuts(); loadInterface(); loadProxy(); @@ -249,6 +250,7 @@ void FormSettings::saveSettings() { // Save all settings. saveGeneral(); + saveDataStorage(); saveShortcuts(); saveInterface(); saveProxy(); @@ -421,24 +423,8 @@ void FormSettings::saveShortcuts() { DynamicShortcuts::save(FormMain::instance()->allActions()); } -void FormSettings::loadGeneral() { - // Load auto-start status. - SystemFactory::AutoStartStatus autostart_status = SystemFactory::instance()->getAutoStartStatus(); - switch (autostart_status) { - case SystemFactory::Enabled: - m_ui->m_checkAutostart->setChecked(true); - break; - case SystemFactory::Disabled: - m_ui->m_checkAutostart->setChecked(false); - break; - default: - m_ui->m_checkAutostart->setEnabled(false); - m_ui->m_checkAutostart->setText(m_ui->m_checkAutostart->text() + - tr(" (not supported on this platform)")); - break; - } - - // Load SQLITE. +void FormSettings::loadDataStorage() { + // Load SQLite. m_ui->m_cmbDatabaseDriver->addItem("SQLite", APP_DB_DRIVER_SQLITE); // Load in-memory database status. @@ -448,7 +434,10 @@ void FormSettings::loadGeneral() { // Load MySQL. m_ui->m_cmbDatabaseDriver->addItem("MySQL", APP_DB_DRIVER_MYSQL); - // TODO: nacist username, password atp. + m_ui->m_txtMysqlHostname->lineEdit()->setText(Settings::instance()->value(APP_CFG_DB, "mysql_hostname").toString()); + m_ui->m_txtMysqlUsername->lineEdit()->setText(Settings::instance()->value(APP_CFG_DB, "mysql_username").toString()); + m_ui->m_txtMysqlPassword->lineEdit()->setText(Settings::instance()->value(APP_CFG_DB, "mysql_password").toString()); + m_ui->m_spinMysqlPort->setValue(Settings::instance()->value(APP_CFG_DB, "mysql_port", APP_DB_MYSQL_PORT).toInt()); } // TODO: nacist podle nastaveni @@ -457,16 +446,7 @@ void FormSettings::loadGeneral() { APP_DB_DRIVER_SQLITE).toString())); } -void FormSettings::saveGeneral() { - // If auto-start feature is available and user wants - // to turn it on, then turn it on. - if (m_ui->m_checkAutostart->isChecked()) { - SystemFactory::instance()->setAutoStartStatus(SystemFactory::Enabled); - } - else { - SystemFactory::instance()->setAutoStartStatus(SystemFactory::Disabled); - } - +void FormSettings::saveDataStorage() { // Setup in-memory database status. bool original_inmemory = Settings::instance()->value(APP_CFG_DB, "use_in_memory_db", false).toBool(); bool new_inmemory = m_ui->m_checkSqliteUseInMemoryDatabase->isChecked(); @@ -484,7 +464,10 @@ void FormSettings::saveGeneral() { if (QSqlDatabase::isDriverAvailable(APP_DB_DRIVER_MYSQL)) { // Save MySQL. - // TODO: ulozit username, password atp. + Settings::instance()->setValue(APP_CFG_DB, "mysql_hostname", m_ui->m_txtMysqlHostname->lineEdit()->text()); + Settings::instance()->setValue(APP_CFG_DB, "mysql_username", m_ui->m_txtMysqlUsername->lineEdit()->text()); + Settings::instance()->setValue(APP_CFG_DB, "mysql_password", m_ui->m_txtMysqlPassword->lineEdit()->text()); + Settings::instance()->setValue(APP_CFG_DB, "mysql_port", m_ui->m_spinMysqlPort->value()); } Settings::instance()->setValue(APP_CFG_DB, "database_driver", selected_db_driver); @@ -494,6 +477,35 @@ void FormSettings::saveGeneral() { } } +void FormSettings::loadGeneral() { + // Load auto-start status. + SystemFactory::AutoStartStatus autostart_status = SystemFactory::instance()->getAutoStartStatus(); + switch (autostart_status) { + case SystemFactory::Enabled: + m_ui->m_checkAutostart->setChecked(true); + break; + case SystemFactory::Disabled: + m_ui->m_checkAutostart->setChecked(false); + break; + default: + m_ui->m_checkAutostart->setEnabled(false); + m_ui->m_checkAutostart->setText(m_ui->m_checkAutostart->text() + + tr(" (not supported on this platform)")); + break; + } +} + +void FormSettings::saveGeneral() { + // If auto-start feature is available and user wants + // to turn it on, then turn it on. + if (m_ui->m_checkAutostart->isChecked()) { + SystemFactory::instance()->setAutoStartStatus(SystemFactory::Enabled); + } + else { + SystemFactory::instance()->setAutoStartStatus(SystemFactory::Disabled); + } +} + void FormSettings::loadInterface() { Settings *settings = Settings::instance(); diff --git a/src/gui/formsettings.h b/src/gui/formsettings.h index a6043961f..c6d37a5d8 100644 --- a/src/gui/formsettings.h +++ b/src/gui/formsettings.h @@ -52,6 +52,9 @@ class FormSettings : public QDialog { void loadGeneral(); void saveGeneral(); + void loadDataStorage(); + void saveDataStorage(); + void loadLanguage(); void saveLanguage(); diff --git a/src/gui/formsettings.ui b/src/gui/formsettings.ui index 3c89d6fee..1213e3589 100644 --- a/src/gui/formsettings.ui +++ b/src/gui/formsettings.ui @@ -148,7 +148,7 @@ - 0 + 1 @@ -226,7 +226,7 @@ Authors of this application are NOT responsible for lost data. - + @@ -236,13 +236,22 @@ Authors of this application are NOT responsible for lost data. - + 100 0 + + 1 + + + 65536 + + + 3306 + @@ -255,7 +264,7 @@ Authors of this application are NOT responsible for lost data. - + @@ -265,7 +274,7 @@ Authors of this application are NOT responsible for lost data. - + @@ -300,8 +309,8 @@ Authors of this application are NOT responsible for lost data. 0 0 - 564 - 363 + 100 + 30