Save.
This commit is contained in:
parent
8ca1b7f3ae
commit
092b862da9
7 changed files with 52 additions and 38 deletions
|
@ -35,7 +35,7 @@ FeedsProxyModel::FeedsProxyModel(FeedsModel* source_model, QObject* parent)
|
||||||
}
|
}
|
||||||
|
|
||||||
FeedsProxyModel::~FeedsProxyModel() {
|
FeedsProxyModel::~FeedsProxyModel() {
|
||||||
qDebug("Destroying FeedsProxyModel instance");
|
qDebugNN << LOGSEC_FEEDMODEL << "Destroying FeedsProxyModel instance";
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndexList FeedsProxyModel::match(const QModelIndex& start, int role, const QVariant& value, int hits, Qt::MatchFlags flags) const {
|
QModelIndexList FeedsProxyModel::match(const QModelIndex& start, int role, const QVariant& value, int hits, Qt::MatchFlags flags) const {
|
||||||
|
@ -62,7 +62,7 @@ QModelIndexList FeedsProxyModel::match(const QModelIndex& start, int role, const
|
||||||
QVariant item_value = m_sourceModel->itemForIndex(mapped_idx)->title();
|
QVariant item_value = m_sourceModel->itemForIndex(mapped_idx)->title();
|
||||||
|
|
||||||
// QVariant based matching.
|
// QVariant based matching.
|
||||||
if (match_type == Qt::MatchExactly) {
|
if (match_type == Qt::MatchFlag::MatchExactly) {
|
||||||
if (value == item_value) {
|
if (value == item_value) {
|
||||||
result.append(idx);
|
result.append(idx);
|
||||||
}
|
}
|
||||||
|
@ -78,9 +78,9 @@ QModelIndexList FeedsProxyModel::match(const QModelIndex& start, int role, const
|
||||||
|
|
||||||
switch (match_type) {
|
switch (match_type) {
|
||||||
#if QT_VERSION >= 0x050F00 // Qt >= 5.15.0
|
#if QT_VERSION >= 0x050F00 // Qt >= 5.15.0
|
||||||
case Qt::MatchRegularExpression:
|
case Qt::MatchFlag::MatchRegularExpression:
|
||||||
#else
|
#else
|
||||||
case Qt::MatchRegExp:
|
case Qt::MatchFlag::MatchRegExp:
|
||||||
#endif
|
#endif
|
||||||
if (QRegularExpression(entered_text,
|
if (QRegularExpression(entered_text,
|
||||||
QRegularExpression::PatternOption::CaseInsensitiveOption |
|
QRegularExpression::PatternOption::CaseInsensitiveOption |
|
||||||
|
@ -90,7 +90,7 @@ QModelIndexList FeedsProxyModel::match(const QModelIndex& start, int role, const
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::MatchWildcard:
|
case Qt::MatchFlag::MatchWildcard:
|
||||||
if (QRegularExpression(RegexFactory::wildcardToRegularExpression(entered_text),
|
if (QRegularExpression(RegexFactory::wildcardToRegularExpression(entered_text),
|
||||||
QRegularExpression::PatternOption::CaseInsensitiveOption |
|
QRegularExpression::PatternOption::CaseInsensitiveOption |
|
||||||
QRegularExpression::PatternOption::UseUnicodePropertiesOption).match(item_text).hasMatch()) {
|
QRegularExpression::PatternOption::UseUnicodePropertiesOption).match(item_text).hasMatch()) {
|
||||||
|
@ -99,28 +99,28 @@ QModelIndexList FeedsProxyModel::match(const QModelIndex& start, int role, const
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::MatchStartsWith:
|
case Qt::MatchFlag::MatchStartsWith:
|
||||||
if (item_text.startsWith(entered_text, cs)) {
|
if (item_text.startsWith(entered_text, cs)) {
|
||||||
result.append(idx);
|
result.append(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::MatchEndsWith:
|
case Qt::MatchFlag::MatchEndsWith:
|
||||||
if (item_text.endsWith(entered_text, cs)) {
|
if (item_text.endsWith(entered_text, cs)) {
|
||||||
result.append(idx);
|
result.append(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::MatchFixedString:
|
case Qt::MatchFlag::MatchFixedString:
|
||||||
if (item_text.compare(entered_text, cs) == 0) {
|
if (item_text.compare(entered_text, cs) == 0) {
|
||||||
result.append(idx);
|
result.append(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::MatchContains:
|
case Qt::MatchFlag::MatchContains:
|
||||||
default:
|
default:
|
||||||
if (item_text.contains(entered_text, cs)) {
|
if (item_text.contains(entered_text, cs)) {
|
||||||
result.append(idx);
|
result.append(idx);
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "miscellaneous/textfactory.h"
|
#include "miscellaneous/textfactory.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
#include <QSqlDatabase>
|
#include <QSqlDatabase>
|
||||||
#include <QSqlError>
|
#include <QSqlError>
|
||||||
#include <QSqlQuery>
|
#include <QSqlQuery>
|
||||||
|
@ -146,7 +147,10 @@ void MessageObject::setMessage(Message* message) {
|
||||||
|
|
||||||
bool MessageObject::isDuplicateWithAttribute(int attribute_check) const {
|
bool MessageObject::isDuplicateWithAttribute(int attribute_check) const {
|
||||||
if (attribute_check <= 0) {
|
if (attribute_check <= 0) {
|
||||||
qCritical("Bad DuplicationAttributeCheck value '%d' was passed from JS filter script.", attribute_check);
|
qCriticalNN << LOGSEC_MESSAGEMODEL
|
||||||
|
<< "Bad DuplicationAttributeCheck value '"
|
||||||
|
<< attribute_check
|
||||||
|
<< "' was passed from JS filter script.";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,13 +202,18 @@ bool MessageObject::isDuplicateWithAttribute(int attribute_check) const {
|
||||||
if (q.exec() && q.next()) {
|
if (q.exec() && q.next()) {
|
||||||
if (q.record().value(0).toInt() > 0) {
|
if (q.record().value(0).toInt() > 0) {
|
||||||
// Whoops, we have the "same" message in database.
|
// Whoops, we have the "same" message in database.
|
||||||
qDebug("Message '%s' was identified as duplicate by filter script.", qPrintable(title()));
|
qDebugNN << LOGSEC_MESSAGEMODEL
|
||||||
|
<< "Message '"
|
||||||
|
<< title()
|
||||||
|
<< "' was identified as duplicate by filter script.";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (q.lastError().isValid()) {
|
else if (q.lastError().isValid()) {
|
||||||
qWarning("Error when checking for duplicate messages via filtering system, error: '%s'.",
|
qWarningNN << LOGSEC_MESSAGEMODEL
|
||||||
qPrintable(q.lastError().text()));
|
<< "Error when checking for duplicate messages via filtering system, error: '"
|
||||||
|
<< q.lastError().text()
|
||||||
|
<< "'.";
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -27,20 +27,19 @@ FilteringAction MessageFilter::filterMessage(QJSEngine* engine) {
|
||||||
// of DuplicationAttributeCheck enumeration (see file core/message.h).
|
// of DuplicationAttributeCheck enumeration (see file core/message.h).
|
||||||
//
|
//
|
||||||
// Example filtering script might look like this:
|
// Example filtering script might look like this:
|
||||||
|
//
|
||||||
|
// function helper() {
|
||||||
|
// if (msg.title.includes("A")) {
|
||||||
|
// msg.isImportant = true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return 1;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// function filterMessage() {
|
||||||
|
// return helper();
|
||||||
|
// }
|
||||||
|
|
||||||
/*
|
|
||||||
function helper() {
|
|
||||||
if (msg.title.includes("A")) {
|
|
||||||
msg.isImportant = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function filterMessage() {
|
|
||||||
return helper();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
QJSValue filter_func = engine->evaluate(m_script);
|
QJSValue filter_func = engine->evaluate(m_script);
|
||||||
|
|
||||||
if (filter_func.isError()) {
|
if (filter_func.isError()) {
|
||||||
|
|
|
@ -27,7 +27,7 @@ MessagesModel::MessagesModel(QObject* parent)
|
||||||
}
|
}
|
||||||
|
|
||||||
MessagesModel::~MessagesModel() {
|
MessagesModel::~MessagesModel() {
|
||||||
qDebug("Destroying MessagesModel instance.");
|
qDebugNN << LOGSEC_MESSAGEMODEL << "Destroying MessagesModel instance.";
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesModel::setupIcons() {
|
void MessagesModel::setupIcons() {
|
||||||
|
@ -37,8 +37,7 @@ void MessagesModel::setupIcons() {
|
||||||
m_enclosuresIcon = qApp->icons()->fromTheme(QSL("mail-attachment"));
|
m_enclosuresIcon = qApp->icons()->fromTheme(QSL("mail-attachment"));
|
||||||
}
|
}
|
||||||
|
|
||||||
MessagesModelCache* MessagesModel::cache() const
|
MessagesModelCache* MessagesModel::cache() const {
|
||||||
{
|
|
||||||
return m_cache;
|
return m_cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,8 +46,8 @@ void MessagesModel::repopulate() {
|
||||||
setQuery(selectStatement(), m_db);
|
setQuery(selectStatement(), m_db);
|
||||||
|
|
||||||
if (lastError().isValid()) {
|
if (lastError().isValid()) {
|
||||||
qCritical() << "Error when setting new msg view query:" << lastError().text();
|
qCriticalNN << LOGSEC_MESSAGEMODEL << "Error when setting new msg view query: '" << lastError().text() << "'.";
|
||||||
qCritical() << "Used SQL select statement:" << selectStatement();
|
qCriticalNN << LOGSEC_MESSAGEMODEL << "Used SQL select statement: '" << selectStatement() << "'.";
|
||||||
}
|
}
|
||||||
|
|
||||||
while (canFetchMore()) {
|
while (canFetchMore()) {
|
||||||
|
@ -94,10 +93,12 @@ void MessagesModel::loadMessages(RootItem* item) {
|
||||||
else {
|
else {
|
||||||
if (!item->getParentServiceRoot()->loadMessagesForItem(item, this)) {
|
if (!item->getParentServiceRoot()->loadMessagesForItem(item, this)) {
|
||||||
setFilter(QSL(DEFAULT_SQL_MESSAGES_FILTER));
|
setFilter(QSL(DEFAULT_SQL_MESSAGES_FILTER));
|
||||||
qWarning("Loading of messages from item '%s' failed.", qPrintable(item->title()));
|
qCriticalNN << LOGSEC_MESSAGEMODEL
|
||||||
|
<< "Loading of messages from item '"
|
||||||
|
<< item->title() << "' failed.";
|
||||||
qApp->showGuiMessage(tr("Loading of messages from item '%1' failed.").arg(item->title()),
|
qApp->showGuiMessage(tr("Loading of messages from item '%1' failed.").arg(item->title()),
|
||||||
tr("Loading of messages failed, maybe messages could not be downloaded."),
|
tr("Loading of messages failed, maybe messages could not be downloaded."),
|
||||||
QSystemTrayIcon::Critical,
|
QSystemTrayIcon::MessageIcon::Critical,
|
||||||
qApp->mainFormWidget(),
|
qApp->mainFormWidget(),
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
|
@ -135,7 +136,7 @@ int MessagesModel::messageId(int row_index) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
RootItem::Importance MessagesModel::messageImportance(int row_index) const {
|
RootItem::Importance MessagesModel::messageImportance(int row_index) const {
|
||||||
return (RootItem::Importance) data(row_index, MSG_DB_IMPORTANT_INDEX, Qt::EditRole).toInt();
|
return RootItem::Importance(data(row_index, MSG_DB_IMPORTANT_INDEX, Qt::EditRole).toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
RootItem* MessagesModel::loadedItem() const {
|
RootItem* MessagesModel::loadedItem() const {
|
||||||
|
@ -414,7 +415,7 @@ bool MessagesModel::switchMessageImportance(int row_index) {
|
||||||
|
|
||||||
if (!working_change) {
|
if (!working_change) {
|
||||||
// If rewriting in the model failed, then cancel all actions.
|
// If rewriting in the model failed, then cancel all actions.
|
||||||
qDebug("Setting of new data to the model failed for message importance change.");
|
qDebugNN << LOGSEC_MESSAGEMODEL << "Setting of new data to the model failed for message importance change.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ void MessagesModelSqlLayer::addSortState(int column, Qt::SortOrder order) {
|
||||||
m_sortOrders.removeAt(existing);
|
m_sortOrders.removeAt(existing);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_sortColumns.size() > MAX_MULTICOLUMN_SORT_STATES) {
|
if (m_sortColumns.size() >= MAX_MULTICOLUMN_SORT_STATES) {
|
||||||
// We support only limited number of sort states
|
// We support only limited number of sort states
|
||||||
// due to DB performance.
|
// due to DB performance.
|
||||||
m_sortColumns.removeAt(0);
|
m_sortColumns.removeAt(0);
|
||||||
|
@ -73,7 +73,10 @@ void MessagesModelSqlLayer::addSortState(int column, Qt::SortOrder order) {
|
||||||
m_sortOrders.prepend(order);
|
m_sortOrders.prepend(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug("Added sort state, select statement is now:\n'%s'", qPrintable(selectStatement()));
|
qDebugNN << LOGSEC_MESSAGEMODEL
|
||||||
|
<< "Added sort state, select statement is now:\n'"
|
||||||
|
<< selectStatement()
|
||||||
|
<< "'";
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesModelSqlLayer::setFilter(const QString& filter) {
|
void MessagesModelSqlLayer::setFilter(const QString& filter) {
|
||||||
|
|
|
@ -26,7 +26,7 @@ MessagesProxyModel::MessagesProxyModel(MessagesModel* source_model, QObject* par
|
||||||
}
|
}
|
||||||
|
|
||||||
MessagesProxyModel::~MessagesProxyModel() {
|
MessagesProxyModel::~MessagesProxyModel() {
|
||||||
qDebug("Destroying MessagesProxyModel instance.");
|
qDebugNN << LOGSEC_MESSAGEMODEL << "Destroying MessagesProxyModel instance.";
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex MessagesProxyModel::getNextPreviousUnreadItemIndex(int default_row) {
|
QModelIndex MessagesProxyModel::getNextPreviousUnreadItemIndex(int default_row) {
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#ifndef DEFINITIONS_H
|
#ifndef DEFINITIONS_H
|
||||||
#define DEFINITIONS_H
|
#define DEFINITIONS_H
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
|
|
||||||
#define SERVICE_CODE_STD_RSS "std-rss"
|
#define SERVICE_CODE_STD_RSS "std-rss"
|
||||||
|
@ -84,6 +85,7 @@
|
||||||
|
|
||||||
#define LOGSEC_FEEDMODEL "feed-model: "
|
#define LOGSEC_FEEDMODEL "feed-model: "
|
||||||
#define LOGSEC_FEEDDOWNLOADER "feed-downloader: "
|
#define LOGSEC_FEEDDOWNLOADER "feed-downloader: "
|
||||||
|
#define LOGSEC_MESSAGEMODEL "message-model: "
|
||||||
|
|
||||||
#define MAX_ZOOM_FACTOR 5.0f
|
#define MAX_ZOOM_FACTOR 5.0f
|
||||||
#define MIN_ZOOM_FACTOR 0.25f
|
#define MIN_ZOOM_FACTOR 0.25f
|
||||||
|
|
Loading…
Add table
Reference in a new issue