diff --git a/src/librssguard/core/message.cpp b/src/librssguard/core/message.cpp index a240e0c4d..f60db162e 100644 --- a/src/librssguard/core/message.cpp +++ b/src/librssguard/core/message.cpp @@ -52,8 +52,7 @@ QString Enclosures::encodeEnclosuresToString(const QList& enclosures) enclosures_str.append(enclosure.m_url.toLocal8Bit().toBase64()); } else { - enclosures_str.append(QString(enclosure.m_mimeType.toLocal8Bit().toBase64()) + - ECNLOSURES_INNER_SEPARATOR + + enclosures_str.append(QString(enclosure.m_mimeType.toLocal8Bit().toBase64()) + ECNLOSURES_INNER_SEPARATOR + enclosure.m_url.toLocal8Bit().toBase64()); } } @@ -74,14 +73,14 @@ void Message::sanitize(const Feed* feed, bool fix_future_datetimes) { // Sanitize title. m_title = m_title - // Remove non-breaking spaces. - .replace(QRegularExpression(QString::fromUtf8(QByteArray("[\xE2\x80\xAF]"))), QSL(" ")) + // Remove non-breaking spaces. + .replace(QRegularExpression(QString::fromUtf8(QByteArray("[\xE2\x80\xAF]"))), QSL(" ")) - // Shrink consecutive whitespaces. - .replace(QRegularExpression(QSL("[\\s]{2,}")), QSL(" ")) + // Shrink consecutive whitespaces. + .replace(QRegularExpression(QSL("[\\s]{2,}")), QSL(" ")) - // Remove all newlines and leading white space. - .remove(QRegularExpression(QSL("([\\n\\r])|(^\\s)"))); + // Remove all newlines and leading white space. + .remove(QRegularExpression(QSL("([\\n\\r])|(^\\s)"))); // Check if messages contain relative URLs and if they do, then replace them. if (m_url.startsWith(QL1S("//"))) { @@ -109,7 +108,7 @@ void Message::sanitize(const Feed* feed, bool fix_future_datetimes) { } Message Message::fromSqlRecord(const QSqlRecord& record, bool* result) { - if (record.count() != MSG_DB_HAS_ENCLOSURES + 1) { + if (record.count() != MSG_DB_LABELS + 1) { if (result != nullptr) { *result = false; } @@ -151,24 +150,18 @@ QString Message::generateRawAtomContents(const Message& msg) { "%3" "%4" "%5" - "").arg(msg.m_title, - msg.m_url, - msg.m_created.toUTC().toString(QSL("yyyy-MM-ddThh:mm:ss")), - msg.m_url, - msg.m_contents.toHtmlEscaped(), - msg.m_author); + "") + .arg(msg.m_title, + msg.m_url, + msg.m_created.toUTC().toString(QSL("yyyy-MM-ddThh:mm:ss")), + msg.m_url, + msg.m_contents.toHtmlEscaped(), + msg.m_author); } QDataStream& operator<<(QDataStream& out, const Message& my_obj) { - out << my_obj.m_accountId - << my_obj.m_customHash - << my_obj.m_customId - << my_obj.m_feedId - << my_obj.m_id - << my_obj.m_isImportant - << my_obj.m_isRead - << my_obj.m_isDeleted - << my_obj.m_score; + out << my_obj.m_accountId << my_obj.m_customHash << my_obj.m_customId << my_obj.m_feedId << my_obj.m_id + << my_obj.m_isImportant << my_obj.m_isRead << my_obj.m_isDeleted << my_obj.m_score; return out; } diff --git a/src/librssguard/core/messagesmodelsqllayer.cpp b/src/librssguard/core/messagesmodelsqllayer.cpp index 10f687abf..e4b615532 100644 --- a/src/librssguard/core/messagesmodelsqllayer.cpp +++ b/src/librssguard/core/messagesmodelsqllayer.cpp @@ -7,8 +7,8 @@ #include "miscellaneous/application.h" MessagesModelSqlLayer::MessagesModelSqlLayer() - : m_filter(QSL(DEFAULT_SQL_MESSAGES_FILTER)), m_fieldNames({}), m_orderByNames({}), - m_sortColumns({}), m_numericColumns({}), m_sortOrders({}) { + : m_filter(QSL(DEFAULT_SQL_MESSAGES_FILTER)), m_fieldNames({}), m_orderByNames({}), m_sortColumns({}), + m_numericColumns({}), m_sortOrders({}) { m_db = qApp->database()->driver()->connection(QSL("MessagesModel")); // Used in : SELECT , FROM ....; @@ -33,16 +33,16 @@ MessagesModelSqlLayer::MessagesModelSqlLayer() m_orderByNames[MSG_DB_CUSTOM_HASH_INDEX] = QSL("Messages.custom_hash"); m_orderByNames[MSG_DB_FEED_TITLE_INDEX] = QSL("Feeds.title"); m_orderByNames[MSG_DB_HAS_ENCLOSURES] = QSL("has_enclosures"); + m_orderByNames[MSG_DB_LABELS] = QSL("msg_labels"); m_numericColumns << MSG_DB_ID_INDEX << MSG_DB_READ_INDEX << MSG_DB_DELETED_INDEX << MSG_DB_PDELETED_INDEX - << MSG_DB_IMPORTANT_INDEX << MSG_DB_ACCOUNT_ID_INDEX << MSG_DB_DCREATED_INDEX - << MSG_DB_SCORE_INDEX; + << MSG_DB_IMPORTANT_INDEX << MSG_DB_ACCOUNT_ID_INDEX << MSG_DB_DCREATED_INDEX << MSG_DB_SCORE_INDEX; } void MessagesModelSqlLayer::addSortState(int column, Qt::SortOrder order, bool ignore_multicolumn_sorting) { int existing = m_sortColumns.indexOf(column); - bool is_ctrl_pressed = (QApplication::queryKeyboardModifiers() & - Qt::KeyboardModifier::ControlModifier) == Qt::KeyboardModifier::ControlModifier; + bool is_ctrl_pressed = (QApplication::queryKeyboardModifiers() & Qt::KeyboardModifier::ControlModifier) == + Qt::KeyboardModifier::ControlModifier; if (existing >= 0) { m_sortColumns.removeAt(existing); @@ -85,7 +85,8 @@ bool MessagesModelSqlLayer::isColumnNumeric(int column_id) const { QString MessagesModelSqlLayer::selectStatement() const { return QL1S("SELECT ") + formatFields() + QL1C(' ') + - QL1S("FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = Feeds.account_id " + QL1S("FROM Messages LEFT JOIN Feeds ON Messages.feed = Feeds.custom_id AND Messages.account_id = " + "Feeds.account_id " "WHERE ") + m_filter + orderByClause() + QL1C(';'); } @@ -99,12 +100,10 @@ QString MessagesModelSqlLayer::orderByClause() const { for (int i = 0; i < m_sortColumns.size(); i++) { QString field_name(m_orderByNames[m_sortColumns[i]]); - QString order_sql = isColumnNumeric(m_sortColumns[i]) - ? QSL("%1") - : QSL("LOWER(%1)"); + QString order_sql = isColumnNumeric(m_sortColumns[i]) ? QSL("%1") : QSL("LOWER(%1)"); - //sorts.append(QSL("LENGTH(%1)").arg(order_sql.arg(field_name)) + - // (m_sortOrders[i] == Qt::SortOrder::AscendingOrder ? QSL(" ASC") : QSL(" DESC"))); + // sorts.append(QSL("LENGTH(%1)").arg(order_sql.arg(field_name)) + + // (m_sortOrders[i] == Qt::SortOrder::AscendingOrder ? QSL(" ASC") : QSL(" DESC"))); sorts.append(order_sql.arg(field_name) + (m_sortOrders[i] == Qt::SortOrder::AscendingOrder ? QSL(" ASC") : QSL(" DESC"))); diff --git a/src/librssguard/database/databasedriver.cpp b/src/librssguard/database/databasedriver.cpp index 5ccbe9faf..7c893e22f 100644 --- a/src/librssguard/database/databasedriver.cpp +++ b/src/librssguard/database/databasedriver.cpp @@ -20,9 +20,10 @@ void DatabaseDriver::updateDatabaseSchema(QSqlQuery& query, while (source_db_schema_version != current_version) { const QStringList statements = prepareScript(APP_SQL_PATH, - QSL(APP_DB_UPDATE_FILE_PATTERN).arg(ddlFilePrefix(), - QString::number(source_db_schema_version), - QString::number(source_db_schema_version + 1)), + QSL(APP_DB_UPDATE_FILE_PATTERN) + .arg(ddlFilePrefix(), + QString::number(source_db_schema_version), + QString::number(source_db_schema_version + 1)), database_name); for (const QString& statement : statements) { @@ -32,10 +33,7 @@ void DatabaseDriver::updateDatabaseSchema(QSqlQuery& query, } // Increment the version. - qDebugNN << LOGSEC_DB - << "Updating database schema " - << QUOTE_W_SPACE(source_db_schema_version) - << "->" + qDebugNN << LOGSEC_DB << "Updating database schema " << QUOTE_W_SPACE(source_db_schema_version) << "->" << QUOTE_W_SPACE_DOT(source_db_schema_version + 1); source_db_schema_version++; @@ -46,8 +44,8 @@ void DatabaseDriver::updateDatabaseSchema(QSqlQuery& query, void DatabaseDriver::setSchemaVersion(QSqlQuery& query, int new_schema_version, bool empty_table) { if (!query.prepare(empty_table - ? QSL("INSERT INTO Information VALUES ('schema_version', :schema_version);") - : QSL("UPDATE Information SET inf_value = :schema_version WHERE inf_key = 'schema_version';"))) { + ? QSL("INSERT INTO Information VALUES ('schema_version', :schema_version);") + : QSL("UPDATE Information SET inf_value = :schema_version WHERE inf_key = 'schema_version';"))) { throw ApplicationException(query.lastError().text()); } @@ -73,7 +71,7 @@ QStringList DatabaseDriver::prepareScript(const QString& base_sql_folder, for (int i = 0; i < new_statements.size(); i++) { if (new_statements.at(i).startsWith(QSL(APP_DB_INCLUDE_PLACEHOLDER))) { // We include another file. - QString included_file_name = new_statements.at(i).mid(QSL(APP_DB_INCLUDE_PLACEHOLDER).size() + 1); + QString included_file_name = new_statements.at(i).mid(QSL(APP_DB_INCLUDE_PLACEHOLDER).size() + 1).simplified(); QString included_file = base_sql_folder + QDir::separator() + included_file_name; QString included_sql_script = QString::fromUtf8(IOFactory::readFile(included_file)); diff --git a/src/librssguard/database/databasequeries.cpp b/src/librssguard/database/databasequeries.cpp index 297a87962..402c82916 100644 --- a/src/librssguard/database/databasequeries.cpp +++ b/src/librssguard/database/databasequeries.cpp @@ -37,9 +37,10 @@ QMap DatabaseQueries::messageTableAttributes(bool only_msg_table) "THEN 'true' " "ELSE 'false' " "END AS has_enclosures"); - field_names[18] = QSL("(SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Labels.id IN (SELECT " - "LabelsInMessages.label FROM LabelsInMessages WHERE LabelsInMessages.account_id = " - "Messages.account_id AND LabelsInMessages.message = Messages.custom_id))"); + field_names[MSG_DB_LABELS] = + QSL("(SELECT GROUP_CONCAT(Labels.name) FROM Labels WHERE Labels.id IN (SELECT " + "LabelsInMessages.label FROM LabelsInMessages WHERE LabelsInMessages.account_id = " + "Messages.account_id AND LabelsInMessages.message = Messages.custom_id)) as msg_labels"); return field_names; } diff --git a/src/librssguard/definitions/definitions.h b/src/librssguard/definitions/definitions.h index e3c8d6c51..3371d2ca9 100644 --- a/src/librssguard/definitions/definitions.h +++ b/src/librssguard/definitions/definitions.h @@ -255,6 +255,7 @@ #define MSG_DB_CUSTOM_HASH_INDEX 15 #define MSG_DB_FEED_TITLE_INDEX 16 #define MSG_DB_HAS_ENCLOSURES 17 +#define MSG_DB_LABELS 18 // Indexes of columns as they are DEFINED IN THE TABLE for CATEGORIES. #define CAT_DB_ID_INDEX 0 diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp index b3c2e1093..4e51405bb 100644 --- a/src/librssguard/gui/messagesview.cpp +++ b/src/librssguard/gui/messagesview.cpp @@ -826,6 +826,7 @@ void MessagesView::adjustColumns() { hideColumn(MSG_DB_FEED_CUSTOM_ID_INDEX); hideColumn(MSG_DB_FEED_TITLE_INDEX); hideColumn(MSG_DB_HAS_ENCLOSURES); + hideColumn(MSG_DB_LABELS); } }