diff --git a/CMakeLists.txt b/CMakeLists.txt index bbfd83c02..1a0de7e6e 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,8 +71,8 @@ project(rssguard) set(APP_NAME "RSS Guard") set(APP_LOW_NAME "rssguard") -set(APP_VERSION "2.0.0.3") -set(FILE_VERSION "2,0,0,3") +set(APP_VERSION "2.0.0.4") +set(FILE_VERSION "2,0,0,4") set(APP_AUTHOR "Martin Rotter") set(APP_URL "http://bitbucket.org/skunkos/rssguard") set(APP_URL_ISSUES "http://bitbucket.org/skunkos/rssguard/issues") @@ -642,27 +642,17 @@ endif(${USE_QT_5}) # Installation stage. if(WIN32 OR OS2) message(STATUS "[${APP_LOW_NAME}] You will probably install on Windows or OS/2.") - install(TARGETS ${EXE_NAME} - RUNTIME DESTINATION ./) - install(TARGETS ${UPDATER_EXE_NAME} - RUNTIME DESTINATION ./${UPDATER_SUBFOLDER}) + install(TARGETS ${EXE_NAME} RUNTIME DESTINATION ./) # Copy DLLs and other binary files for main installation and updater. if(WIN32 AND NOT ${USE_QT_5}) - install(FILES ${APP_DLLS_QT4_MSVC2010} - DESTINATION ./) - install(FILES ${APP_DLLS_QT4_MSVC2010_IMAGEFORMATS} - DESTINATION ./imageformats) - install(FILES ${APP_DLLS_QT4_MSVC2010_SQLDRIVERS} - DESTINATION ./sqldrivers) - - install(FILES ${APP_DLLS_QT4_MSVC2010} - DESTINATION ./${UPDATER_SUBFOLDER}) + install(FILES ${APP_DLLS_QT4_MSVC2010} DESTINATION ./) + install(FILES ${APP_DLLS_QT4_MSVC2010_IMAGEFORMATS} DESTINATION ./imageformats) + install(FILES ${APP_DLLS_QT4_MSVC2010_SQLDRIVERS} DESTINATION ./sqldrivers) endif(WIN32 AND NOT ${USE_QT_5}) if(BUNDLE_ICON_THEMES) - install(DIRECTORY resources/graphics/icons/mini-kfaenza - DESTINATION ./icons) + install(DIRECTORY resources/graphics/icons/mini-kfaenza DESTINATION ./icons) endif(BUNDLE_ICON_THEMES) install(DIRECTORY resources/skins/base @@ -707,50 +697,30 @@ elseif(APPLE) set(APPLE_PREFIX ${CMAKE_INSTALL_PREFIX}/${EXE_NAME}.app/Contents/Resources) if(BUNDLE_ICON_THEMES) - install(DIRECTORY resources/graphics/icons/mini-kfaenza - DESTINATION ${APPLE_PREFIX}/icons) + install(DIRECTORY resources/graphics/icons/mini-kfaenza DESTINATION ${APPLE_PREFIX}/icons) endif(BUNDLE_ICON_THEMES) - install(DIRECTORY resources/skins - DESTINATION ${APPLE_PREFIX}) - install(DIRECTORY resources/misc - DESTINATION ${APPLE_PREFIX}) - install(FILES resources/graphics/${APP_LOW_NAME}_128.png - DESTINATION ${APPLE_PREFIX} - RENAME ${APP_LOW_NAME}.png) - install(FILES resources/graphics/${APP_LOW_NAME}_plain_128.png - DESTINATION ${APPLE_PREFIX} - RENAME ${APP_LOW_NAME}_plain.png) - install(FILES ${APP_QM} - DESTINATION ${APPLE_PREFIX}/l10n) - install(FILES ${APP_TEXT} - DESTINATION ${APPLE_PREFIX}/information) + install(DIRECTORY resources/skins DESTINATION ${APPLE_PREFIX}) + install(DIRECTORY resources/misc DESTINATION ${APPLE_PREFIX}) + install(FILES resources/graphics/${APP_LOW_NAME}_128.png DESTINATION ${APPLE_PREFIX} RENAME ${APP_LOW_NAME}.png) + install(FILES resources/graphics/${APP_LOW_NAME}_plain_128.png DESTINATION ${APPLE_PREFIX} RENAME ${APP_LOW_NAME}_plain.png) + install(FILES ${APP_QM} DESTINATION ${APPLE_PREFIX}/l10n) + install(FILES ${APP_TEXT} DESTINATION ${APPLE_PREFIX}/information) elseif(UNIX) message(STATUS "[${APP_LOW_NAME}] You will probably install on Linux.") - install(TARGETS ${EXE_NAME} - RUNTIME DESTINATION bin) + install(TARGETS ${EXE_NAME} RUNTIME DESTINATION bin) if(BUNDLE_ICON_THEMES) - install(DIRECTORY resources/graphics/icons/mini-kfaenza - DESTINATION share/${APP_LOW_NAME}/icons) + install(DIRECTORY resources/graphics/icons/mini-kfaenza DESTINATION share/${APP_LOW_NAME}/icons) endif(BUNDLE_ICON_THEMES) - install(DIRECTORY resources/skins/base - DESTINATION share/${APP_LOW_NAME}/skins) - install(DIRECTORY resources/misc - DESTINATION share/${APP_LOW_NAME}) - install(FILES ${CMAKE_BINARY_DIR}/resources/desktop/${APP_LOW_NAME}.desktop - DESTINATION share/applications) - install(FILES resources/graphics/${APP_LOW_NAME}_128.png - DESTINATION share/pixmaps - RENAME ${APP_LOW_NAME}.png) - install(FILES resources/graphics/${APP_LOW_NAME}_plain_128.png - DESTINATION share/rssguard/icons - RENAME ${APP_LOW_NAME}_plain.png) - install(FILES ${APP_QM} - DESTINATION share/${APP_LOW_NAME}/l10n) - install(FILES ${APP_TEXT} - DESTINATION share/${APP_LOW_NAME}/information) + install(DIRECTORY resources/skins/base DESTINATION share/${APP_LOW_NAME}/skins) + install(DIRECTORY resources/misc DESTINATION share/${APP_LOW_NAME}) + install(FILES ${CMAKE_BINARY_DIR}/resources/desktop/${APP_LOW_NAME}.desktop DESTINATION share/applications) + install(FILES resources/graphics/${APP_LOW_NAME}_128.png DESTINATION share/pixmaps RENAME ${APP_LOW_NAME}.png) + install(FILES resources/graphics/${APP_LOW_NAME}_plain_128.png DESTINATION share/rssguard/icons RENAME ${APP_LOW_NAME}_plain.png) + install(FILES ${APP_QM} DESTINATION share/${APP_LOW_NAME}/l10n) + install(FILES ${APP_TEXT} DESTINATION share/${APP_LOW_NAME}/information) endif(WIN32 OR OS2) # Custom target for packaging. diff --git a/resources/misc/db_init_mysql.sql b/resources/misc/db_init_mysql.sql index f2aacc33a..6aa5d9a2c 100644 --- a/resources/misc/db_init_mysql.sql +++ b/resources/misc/db_init_mysql.sql @@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS Information ( inf_value TEXT NOT NULL ); -- ! -INSERT INTO Information VALUES (1, 'schema_version', '0.0.1'); +INSERT INTO Information VALUES (1, 'schema_version', '0.0.2'); -- ! DROP TABLE IF EXISTS Categories; -- ! @@ -68,6 +68,7 @@ CREATE TABLE IF NOT EXISTS Messages ( author TEXT NOT NULL, date_created BIGINT NOT NULL CHECK (date_created != 0), contents TEXT, + is_hidden INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_hidden >= 0 AND is_hidden <= 1), FOREIGN KEY (feed) REFERENCES Feeds (id) ); diff --git a/resources/misc/db_init_sqlite.sql b/resources/misc/db_init_sqlite.sql index 17dc2e1ad..2da7dd33e 100644 --- a/resources/misc/db_init_sqlite.sql +++ b/resources/misc/db_init_sqlite.sql @@ -6,7 +6,7 @@ CREATE TABLE IF NOT EXISTS Information ( inf_value TEXT NOT NULL ); -- ! -INSERT INTO Information VALUES (1, 'schema_version', '0.0.1'); +INSERT INTO Information VALUES (1, 'schema_version', '0.0.2'); -- ! DROP TABLE IF EXISTS Categories; -- ! @@ -62,6 +62,7 @@ CREATE TABLE IF NOT EXISTS Messages ( author TEXT NOT NULL, date_created INTEGER NOT NULL CHECK (date_created != 0), contents TEXT, + is_hidden INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_hidden >= 0 AND is_hidden <= 1), FOREIGN KEY (feed) REFERENCES Feeds (id) ); diff --git a/resources/misc/db_init_sqlite_memory.sql b/resources/misc/db_init_sqlite_memory.sql index ea8e24577..199612258 100644 --- a/resources/misc/db_init_sqlite_memory.sql +++ b/resources/misc/db_init_sqlite_memory.sql @@ -6,7 +6,7 @@ CREATE TABLE IF NOT EXISTS Information ( inf_value TEXT NOT NULL ); -- ! -INSERT INTO Information VALUES (1, 'schema_version', '0.0.1'); +INSERT INTO Information VALUES (1, 'schema_version', '0.0.2'); -- ! DROP TABLE IF EXISTS Categories; -- ! @@ -62,6 +62,7 @@ CREATE TABLE IF NOT EXISTS Messages ( author TEXT NOT NULL, date_created INTEGER NOT NULL CHECK (date_created != 0), contents TEXT, + is_hidden INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_hidden >= 0 AND is_hidden <= 1), FOREIGN KEY (feed) REFERENCES Feeds (id) ); \ No newline at end of file diff --git a/resources/misc/db_update_mysql_0.0.1_0.0.2.sql b/resources/misc/db_update_mysql_0.0.1_0.0.2.sql new file mode 100644 index 000000000..ebad0c55c --- /dev/null +++ b/resources/misc/db_update_mysql_0.0.1_0.0.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE Messages +ADD COLUMN is_pdeleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1); \ No newline at end of file diff --git a/resources/misc/db_update_sqlite_0.0.1_0.0.2.sql b/resources/misc/db_update_sqlite_0.0.1_0.0.2.sql new file mode 100644 index 000000000..ebad0c55c --- /dev/null +++ b/resources/misc/db_update_sqlite_0.0.1_0.0.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE Messages +ADD COLUMN is_pdeleted INTEGER(1) NOT NULL DEFAULT 0 CHECK (is_pdeleted >= 0 AND is_pdeleted <= 1); \ No newline at end of file diff --git a/resources/text/CHANGELOG b/resources/text/CHANGELOG index 5fdd3baae..2011978bf 100644 --- a/resources/text/CHANGELOG +++ b/resources/text/CHANGELOG @@ -1,4 +1,20 @@ +

2.0.0.4

+ +Fixed: + + +Added: + + +Changed: + + +

2.0.0.3

Fixed: diff --git a/src/core/messagesmodel.cpp b/src/core/messagesmodel.cpp index 37faddd28..2f84e5d00 100755 --- a/src/core/messagesmodel.cpp +++ b/src/core/messagesmodel.cpp @@ -145,14 +145,15 @@ void MessagesModel::setupHeaderData() { /*: Tooltip for url of message.*/ tr("Url") << /*: Tooltip for author of message.*/ tr("Author") << /*: Tooltip for creation date of message.*/ tr("Created on") << - /*: Tooltip for contents of message.*/ tr("Contents"); + /*: Tooltip for contents of message.*/ tr("Contents") << + /*: Tooltip for "pdeleted" column in msg list.*/ tr("Permanently deleted"); m_tooltipData << tr("Id of the message.") << tr("Is message read?") << tr("Is message deleted?") << tr("Is message important?") << tr("Id of feed which this message belongs to.") << tr("Title of the message.") << tr("Url of the message.") << tr("Author of the message.") << tr("Creation date of the message.") << - tr("Contents of the message."); + tr("Contents of the message.") << tr("Is message permanently deleted from recycle bin?"); } Qt::ItemFlags MessagesModel::flags(const QModelIndex &index) const { diff --git a/src/definitions/definitions.h.in b/src/definitions/definitions.h.in index cf1abcb89..859bd76ea 100755 --- a/src/definitions/definitions.h.in +++ b/src/definitions/definitions.h.in @@ -91,6 +91,9 @@ #define APP_DB_SQLITE_PATH "data/database/local" #define APP_DB_SQLITE_FILE "database.db" +// Keep this in sync with schema versions declared in SQL initialization code. +#define APP_DB_SCHEMA_VERSION "0.0.2" +#define APP_DB_UPDATE_FILE_PATTERN "data_update_%1_%2_3.sql" #define APP_DB_COMMENT_SPLIT "-- !\n" #define APP_DB_WEB_PATH "data/database/web" @@ -132,6 +135,7 @@ #define MSG_DB_AUTHOR_INDEX 7 #define MSG_DB_DCREATED_INDEX 8 #define MSG_DB_CONTENTS_INDEX 9 +#define MSG_DB_PDELETED_INDEX 10 // Indexes of columns as they are DEFINED IN THE TABLE for CATEGORIES. #define CAT_DB_ID_INDEX 0 diff --git a/src/gui/messagesview.cpp b/src/gui/messagesview.cpp index 08c8323bf..642dd8061 100755 --- a/src/gui/messagesview.cpp +++ b/src/gui/messagesview.cpp @@ -472,6 +472,7 @@ void MessagesView::adjustColumns() { header()->setSectionResizeMode(MSG_DB_AUTHOR_INDEX, QHeaderView::Interactive); header()->setSectionResizeMode(MSG_DB_DCREATED_INDEX, QHeaderView::Interactive); header()->setSectionResizeMode(MSG_DB_CONTENTS_INDEX, QHeaderView::Interactive); + header()->setSectionResizeMode(MSG_DB_PDELETED_INDEX, QHeaderView::Interactive); #else // Setup column resize strategies. header()->setResizeMode(MSG_DB_ID_INDEX, QHeaderView::Interactive); @@ -484,6 +485,7 @@ void MessagesView::adjustColumns() { header()->setResizeMode(MSG_DB_AUTHOR_INDEX, QHeaderView::Interactive); header()->setResizeMode(MSG_DB_DCREATED_INDEX, QHeaderView::Interactive); header()->setResizeMode(MSG_DB_CONTENTS_INDEX, QHeaderView::Interactive); + header()->setResizeMode(MSG_DB_PDELETED_INDEX, QHeaderView::Interactive); #endif // Hide columns. @@ -492,6 +494,7 @@ void MessagesView::adjustColumns() { hideColumn(MSG_DB_FEED_INDEX); hideColumn(MSG_DB_URL_INDEX); hideColumn(MSG_DB_CONTENTS_INDEX); + hideColumn(MSG_DB_PDELETED_INDEX); qDebug("Adjusting column resize modes for MessagesView."); } diff --git a/src/miscellaneous/databasefactory.cpp b/src/miscellaneous/databasefactory.cpp index e11def2f5..bcf011e18 100755 --- a/src/miscellaneous/databasefactory.cpp +++ b/src/miscellaneous/databasefactory.cpp @@ -287,10 +287,23 @@ QSqlDatabase DatabaseFactory::sqliteInitializeFileBasedDatabase(const QString &c else { query_db.next(); + QString installed_db_schema = query_db.value(0).toString(); + + if (!updateDatabaseSchema(installed_db_schema)) { + qFatal("Database schema was not updated from '%s' to '%s' successully.", + qPrintable(installed_db_schema), + qPrintable(APP_DB_SCHEMA_VERSION)); + } + else { + qDebug("Database schema was updated from '%s' to '%s' successully.", + qPrintable(installed_db_schema), + qPrintable(APP_DB_SCHEMA_VERSION)); + } + qDebug("File-based SQLite database connection '%s' to file '%s' seems to be established.", qPrintable(connection_name), qPrintable(QDir::toNativeSeparators(database.databaseName()))); - qDebug("File-based SQLite database has version '%s'.", qPrintable(query_db.value(0).toString())); + qDebug("File-based SQLite database has version '%s'.", qPrintable(installed_db_schema)); } query_db.finish(); @@ -306,6 +319,23 @@ QString DatabaseFactory::sqliteDatabaseFilePath() const { return m_sqliteDatabaseFilePath + QDir::separator() + APP_DB_SQLITE_FILE; } +bool DatabaseFactory::updateDatabaseSchema(const QString &source_db_schema_version) { + switch (m_activeDatabaseDriver) { + case SQLITE: + case SQLITE_MEMORY: + break; + + case MYSQL: + break; + + default: + return false; + } + + // TODO: tady udělat update databázového schématu na novou verzi. + return true; +} + QSqlDatabase DatabaseFactory::connection(const QString &connection_name, DesiredType desired_type) { switch (m_activeDatabaseDriver) { @@ -349,9 +379,7 @@ void DatabaseFactory::sqliteSaveMemoryDatabase() { } void DatabaseFactory::determineDriver() { - QString db_driver = qApp->settings()->value(APP_CFG_DB, - "database_driver", - APP_DB_SQLITE_DRIVER).toString(); + QString db_driver = qApp->settings()->value(APP_CFG_DB, "database_driver", APP_DB_SQLITE_DRIVER).toString(); if (db_driver == APP_DB_MYSQL_DRIVER && QSqlDatabase::isDriverAvailable(APP_DB_SQLITE_DRIVER)) { // User wants to use MySQL and MySQL is actually available. Use it. diff --git a/src/miscellaneous/databasefactory.h b/src/miscellaneous/databasefactory.h index d5bd0b7ed..bdb4cadb9 100755 --- a/src/miscellaneous/databasefactory.h +++ b/src/miscellaneous/databasefactory.h @@ -86,6 +86,7 @@ class DatabaseFactory : public QObject { // SQLITE stuff. // QString sqliteDatabaseFilePath() const; + bool updateDatabaseSchema(const QString &source_db_schema_version); // // MySQL stuff.