mirror of
https://github.com/martinrotter/rssguard.git
synced 2025-02-02 18:36:49 +01:00
more work!
This commit is contained in:
parent
58cf78b7f0
commit
b4b095b980
@ -4,10 +4,12 @@
|
||||
<file>sql/db_update_mysql_1_2.sql</file>
|
||||
<file>sql/db_update_mysql_2_3.sql</file>
|
||||
<file>sql/db_update_mysql_3_4.sql</file>
|
||||
<file>sql/db_update_mysql_4_5.sql</file>
|
||||
|
||||
<file>sql/db_init_sqlite.sql</file>
|
||||
<file>sql/db_update_sqlite_1_2.sql</file>
|
||||
<file>sql/db_update_sqlite_2_3.sql</file>
|
||||
<file>sql/db_update_sqlite_3_4.sql</file>
|
||||
<file>sql/db_update_sqlite_4_5.sql</file>
|
||||
</qresource>
|
||||
</RCC>
|
@ -69,7 +69,7 @@ CREATE TABLE Messages (
|
||||
account_id INTEGER NOT NULL,
|
||||
custom_id TEXT,
|
||||
custom_hash TEXT,
|
||||
Labels TEXT NOT NULL DEFAULT "." /* Holds list of assigned labels. */
|
||||
labels TEXT NOT NULL DEFAULT "." /* Holds list of assigned label IDs. */
|
||||
|
||||
FOREIGN KEY (account_id) REFERENCES Accounts (id) ON DELETE CASCADE
|
||||
);
|
||||
|
@ -1,8 +1,17 @@
|
||||
USE ##;
|
||||
-- !
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
/* Add "labels" column. */
|
||||
ALTER TABLE Messages ADD labels TEXT NOT NULL DEFAULT ".";
|
||||
-- !
|
||||
!! db_update_sqlite_4_5.sql
|
||||
/* Copy label IDs to Messages table. */
|
||||
UPDATE Messages SET labels = (
|
||||
SELECT
|
||||
IF(
|
||||
GROUP_CONCAT(LabelsInMessages.label) IS NOT NULL,
|
||||
CONCAT(".",REPLACE(GROUP_CONCAT(LabelsInMessages.label), ",", "."), "."),
|
||||
".")
|
||||
FROM LabelsInMessages
|
||||
WHERE Messages.custom_id = LabelsInMessages.message);
|
||||
-- !
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
-- !
|
||||
/* Remove LabelsInMessages table. */
|
||||
DROP TABLE IF EXISTS LabelsInMessages;
|
@ -1,4 +1,15 @@
|
||||
/* Add "labels" column. */
|
||||
ALTER TABLE Messages ADD labels TEXT NOT NULL DEFAULT ".";
|
||||
-- !
|
||||
/* Copy label IDs to Messages table. */
|
||||
|
||||
|
||||
/* Remove LabelsInMessages table. */
|
||||
UPDATE Messages SET labels = (
|
||||
SELECT
|
||||
IIF(
|
||||
GROUP_CONCAT(LabelsInMessages.label) IS NOT NULL,
|
||||
"." || GROUP_CONCAT(LabelsInMessages.label, ".") || ".",
|
||||
".")
|
||||
FROM LabelsInMessages
|
||||
WHERE Messages.custom_id = LabelsInMessages.message);
|
||||
-- !
|
||||
/* Remove LabelsInMessages table. */
|
||||
DROP TABLE IF EXISTS LabelsInMessages;
|
@ -111,10 +111,10 @@ bool DatabaseQueries::assignLabelToMessage(const QSqlDatabase& db, Label* label,
|
||||
|
||||
QSqlQuery q(db);
|
||||
|
||||
// TODO: ověřit.
|
||||
q.setForwardOnly(true);
|
||||
// TODO: pro mysql, kde operátor concatenate || není
|
||||
q.prepare(QSL("UPDATE Messages "
|
||||
"SET Messages.labels = Messages.labels || :label "
|
||||
"SET labels = Messages.labels || :label "
|
||||
"WHERE Messages.custom_id = :message AND account_id = :account_id;"));
|
||||
q.bindValue(QSL(":label"), QSL("%1.").arg(label->customId()));
|
||||
q.bindValue(QSL(":message"), msg.m_customId.isEmpty() ? QString::number(msg.m_id) : msg.m_customId);
|
||||
@ -1463,12 +1463,12 @@ QPair<int, int> DatabaseQueries::updateMessages(const QSqlDatabase& db,
|
||||
|
||||
// Adjust labels tweaked by filters.
|
||||
for (Label* assigned_by_filter : message.m_assignedLabelsByFilter) {
|
||||
assigned_by_filter->assignToMessage(message);
|
||||
assigned_by_filter->assignToMessage(message, false);
|
||||
lbls_changed = true;
|
||||
}
|
||||
|
||||
for (Label* removed_by_filter : message.m_deassignedLabelsByFilter) {
|
||||
removed_by_filter->deassignFromMessage(message);
|
||||
removed_by_filter->deassignFromMessage(message, false);
|
||||
lbls_changed = true;
|
||||
}
|
||||
|
||||
|
@ -213,7 +213,7 @@
|
||||
#define APP_DB_SQLITE_FILE "database.db"
|
||||
|
||||
// Keep this in sync with schema versions declared in SQL initialization code.
|
||||
#define APP_DB_SCHEMA_VERSION "4"
|
||||
#define APP_DB_SCHEMA_VERSION "5"
|
||||
#define APP_DB_UPDATE_FILE_PATTERN "db_update_%1_%2_%3.sql"
|
||||
#define APP_DB_COMMENT_SPLIT "-- !\n"
|
||||
#define APP_DB_INCLUDE_PLACEHOLDER "!!"
|
||||
|
@ -105,23 +105,27 @@ QIcon Label::generateIcon(const QColor& color) {
|
||||
return pxm;
|
||||
}
|
||||
|
||||
void Label::assignToMessage(const Message& msg) {
|
||||
void Label::assignToMessage(const Message& msg, bool reload_model) {
|
||||
QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
|
||||
|
||||
if (getParentServiceRoot()->onBeforeLabelMessageAssignmentChanged({this}, {msg}, true)) {
|
||||
DatabaseQueries::assignLabelToMessage(database, this, msg);
|
||||
|
||||
getParentServiceRoot()->onAfterLabelMessageAssignmentChanged({this}, {msg}, true);
|
||||
if (reload_model) {
|
||||
getParentServiceRoot()->onAfterLabelMessageAssignmentChanged({this}, {msg}, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Label::deassignFromMessage(const Message& msg) {
|
||||
void Label::deassignFromMessage(const Message& msg, bool reload_model) {
|
||||
QSqlDatabase database = qApp->database()->driver()->threadSafeConnection(metaObject()->className());
|
||||
|
||||
if (getParentServiceRoot()->onBeforeLabelMessageAssignmentChanged({this}, {msg}, false)) {
|
||||
DatabaseQueries::deassignLabelFromMessage(database, this, msg);
|
||||
|
||||
getParentServiceRoot()->onAfterLabelMessageAssignmentChanged({this}, {msg}, false);
|
||||
if (reload_model) {
|
||||
getParentServiceRoot()->onAfterLabelMessageAssignmentChanged({this}, {msg}, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,10 +8,10 @@
|
||||
#include <QColor>
|
||||
|
||||
class RSSGUARD_DLLSPEC Label : public RootItem {
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
|
||||
// Added for message filtering with labels.
|
||||
Q_PROPERTY(QColor color READ color)
|
||||
// Added for message filtering with labels.
|
||||
Q_PROPERTY(QColor color READ color)
|
||||
|
||||
public:
|
||||
explicit Label(const QString& name, const QColor& color, RootItem* parent_item = nullptr);
|
||||
@ -38,8 +38,8 @@ class RSSGUARD_DLLSPEC Label : public RootItem {
|
||||
static QIcon generateIcon(const QColor& color);
|
||||
|
||||
public slots:
|
||||
void assignToMessage(const Message& msg);
|
||||
void deassignFromMessage(const Message& msg);
|
||||
void assignToMessage(const Message& msg, bool reload_model = true);
|
||||
void deassignFromMessage(const Message& msg, bool reload_model = true);
|
||||
|
||||
private:
|
||||
QColor m_color;
|
||||
|
Loading…
x
Reference in New Issue
Block a user