mirror of
https://github.com/martinrotter/rssguard.git
synced 2025-02-03 10:47:47 +01:00
Work on better recycle bin + ability to update DB schemas.
This commit is contained in:
parent
f4f278119a
commit
504950f631
@ -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.
|
||||
|
@ -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)
|
||||
);
|
||||
|
@ -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)
|
||||
);
|
||||
|
@ -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)
|
||||
);
|
2
resources/misc/db_update_mysql_0.0.1_0.0.2.sql
Normal file
2
resources/misc/db_update_mysql_0.0.1_0.0.2.sql
Normal file
@ -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);
|
2
resources/misc/db_update_sqlite_0.0.1_0.0.2.sql
Normal file
2
resources/misc/db_update_sqlite_0.0.1_0.0.2.sql
Normal file
@ -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);
|
@ -1,4 +1,20 @@
|
||||
<body>
|
||||
<center><h2>2.0.0.4</h2></center>
|
||||
|
||||
Fixed:
|
||||
<ul>
|
||||
<li>Database is now correctly restored when using SQLite memory databases.</li>
|
||||
</ul>
|
||||
|
||||
Added:
|
||||
<ul>
|
||||
</ul>
|
||||
|
||||
Changed:
|
||||
<ul>
|
||||
</ul>
|
||||
|
||||
<hr/>
|
||||
<center><h2>2.0.0.3</h2></center>
|
||||
|
||||
Fixed:
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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.");
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -86,6 +86,7 @@ class DatabaseFactory : public QObject {
|
||||
// SQLITE stuff.
|
||||
//
|
||||
QString sqliteDatabaseFilePath() const;
|
||||
bool updateDatabaseSchema(const QString &source_db_schema_version);
|
||||
|
||||
//
|
||||
// MySQL stuff.
|
||||
|
Loading…
x
Reference in New Issue
Block a user