workiing
This commit is contained in:
parent
a10cc039f1
commit
085df4cd4d
@ -52,8 +52,7 @@ QString Enclosures::encodeEnclosuresToString(const QList<Enclosure>& 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) {
|
||||
"<updated>%3</updated>"
|
||||
"<id>%4</id>"
|
||||
"<summary type=\"html\">%5</summary>"
|
||||
"</entry>").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);
|
||||
"</entry>")
|
||||
.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;
|
||||
}
|
||||
|
@ -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 <x>: SELECT <x1>, <x2> 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")));
|
||||
|
@ -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));
|
||||
|
@ -37,9 +37,10 @@ QMap<int, QString> 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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user