Some changes to feed updatings.
This commit is contained in:
parent
1be6bf3f4a
commit
2c2796f746
5 changed files with 47 additions and 18 deletions
|
@ -5,6 +5,7 @@
|
||||||
#include "core/parsingfactory.h"
|
#include "core/parsingfactory.h"
|
||||||
#include "core/databasefactory.h"
|
#include "core/databasefactory.h"
|
||||||
#include "core/networkfactory.h"
|
#include "core/networkfactory.h"
|
||||||
|
#include "core/textfactory.h"
|
||||||
#include "gui/iconfactory.h"
|
#include "gui/iconfactory.h"
|
||||||
#include "gui/iconthemefactory.h"
|
#include "gui/iconthemefactory.h"
|
||||||
|
|
||||||
|
@ -205,21 +206,36 @@ void FeedsModelStandardFeed::update() {
|
||||||
|
|
||||||
void FeedsModelStandardFeed::updateMessages(const QList<Message> &messages) {
|
void FeedsModelStandardFeed::updateMessages(const QList<Message> &messages) {
|
||||||
int feed_id = id(), message_id;
|
int feed_id = id(), message_id;
|
||||||
|
QDateTime message_creation_date;
|
||||||
QSqlDatabase database = DatabaseFactory::getInstance()->addConnection("FeedsModelStandardFeed");
|
QSqlDatabase database = DatabaseFactory::getInstance()->addConnection("FeedsModelStandardFeed");
|
||||||
|
|
||||||
// Prepare queries.
|
// Prepare queries.
|
||||||
QSqlQuery query_select(database);
|
QSqlQuery query_select(database);
|
||||||
QSqlQuery query_insert(database);
|
QSqlQuery query_insert(database);
|
||||||
|
QSqlQuery query_update(database);
|
||||||
|
|
||||||
|
// Used to check if give feed contains with message with given
|
||||||
|
// title and url.
|
||||||
query_select.setForwardOnly(true);
|
query_select.setForwardOnly(true);
|
||||||
query_select.prepare("SELECT id, feed, date_created FROM Messages "
|
query_select.prepare("SELECT id, feed, date_created FROM Messages "
|
||||||
"WHERE feed = :feed AND title = :title AND url = :url;");
|
"WHERE feed = :feed AND title = :title AND url = :url;");
|
||||||
|
|
||||||
|
// Used to insert new messages.
|
||||||
query_insert.setForwardOnly(true);
|
query_insert.setForwardOnly(true);
|
||||||
query_insert.prepare("INSERT INTO Messages "
|
query_insert.prepare("INSERT INTO Messages "
|
||||||
"(feed, title, url, author, date_created, contents) "
|
"(feed, title, url, author, date_created, contents) "
|
||||||
"VALUES (:feed, :title, :url, :author, :date_created, :contents);");
|
"VALUES (:feed, :title, :url, :author, :date_created, :contents);");
|
||||||
|
|
||||||
|
// Used to update existing messages of given feed.
|
||||||
|
// NOTE: Messages are updated if its creation date
|
||||||
|
// is changed.
|
||||||
|
query_update.setForwardOnly(true);
|
||||||
|
query_update.prepare("UPDATE Messages "
|
||||||
|
"SET title = :title, url = :url, author = :author, "
|
||||||
|
"date_created = :date_created, contents = :contents, "
|
||||||
|
"read = 0, important = 0, deleted = 0 "
|
||||||
|
"WHERE id = :id");
|
||||||
|
|
||||||
if (!database.transaction()) {
|
if (!database.transaction()) {
|
||||||
database.rollback();
|
database.rollback();
|
||||||
|
|
||||||
|
@ -236,6 +252,7 @@ void FeedsModelStandardFeed::updateMessages(const QList<Message> &messages) {
|
||||||
if (query_select.next()) {
|
if (query_select.next()) {
|
||||||
// Message with this title & url probably exists in current feed.
|
// Message with this title & url probably exists in current feed.
|
||||||
message_id = query_select.value(0).toInt();
|
message_id = query_select.value(0).toInt();
|
||||||
|
message_creation_date = TextFactory::parseDateTime(query_select.value(2).toString());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
message_id = -1;
|
message_id = -1;
|
||||||
|
@ -255,15 +272,28 @@ void FeedsModelStandardFeed::updateMessages(const QList<Message> &messages) {
|
||||||
query_insert.exec();
|
query_insert.exec();
|
||||||
query_insert.finish();
|
query_insert.finish();
|
||||||
}
|
}
|
||||||
else {
|
else if (message.m_createdFromFeed &&
|
||||||
// Message is already persistently stored.
|
message_creation_date.isValid() &&
|
||||||
// TODO: Update message if it got updated in the
|
message_creation_date > message.m_created) {
|
||||||
// online feed.
|
qDebug("Message '%s' (id %d) was updated in the feed, updating too.",
|
||||||
if (message.m_createdFromFeed) {
|
qPrintable(message.m_title),
|
||||||
// Creation data of the message was obtained from
|
message_id);
|
||||||
// feed itself.
|
|
||||||
|
|
||||||
}
|
// TODO: Check if this is actually working.
|
||||||
|
|
||||||
|
// Message with given title/url is already persistently
|
||||||
|
// stored in given feed.
|
||||||
|
// Creation data of the message was obtained from
|
||||||
|
// feed itself. We can update this message.
|
||||||
|
query_update.bindValue(":title", message.m_title);
|
||||||
|
query_update.bindValue(":url", message.m_url);
|
||||||
|
query_update.bindValue(":author", message.m_author);
|
||||||
|
query_update.bindValue(":date_created", message.m_created.toString(Qt::ISODate));
|
||||||
|
query_update.bindValue(":contents", message.m_contents);
|
||||||
|
query_update.bindValue(":id", message_id);
|
||||||
|
|
||||||
|
query_update.exec();
|
||||||
|
query_update.finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ QList<Message> ParsingFactory::parseAsATOM10(const QString &data) {
|
||||||
elem_summary = message_item.namedItem("content").toElement().text();
|
elem_summary = message_item.namedItem("content").toElement().text();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now we obtained maximum of informations for title & description.
|
// Now we obtained maximum of information for title & description.
|
||||||
if (elem_title.isEmpty()) {
|
if (elem_title.isEmpty()) {
|
||||||
if (elem_summary.isEmpty()) {
|
if (elem_summary.isEmpty()) {
|
||||||
// BOTH title and description are empty, skip this message.
|
// BOTH title and description are empty, skip this message.
|
||||||
|
@ -100,7 +100,7 @@ QList<Message> ParsingFactory::parseAsRDF(const QString &data) {
|
||||||
QString elem_title = message_item.namedItem("title").toElement().text().simplified();
|
QString elem_title = message_item.namedItem("title").toElement().text().simplified();
|
||||||
QString elem_description = message_item.namedItem("description").toElement().text();
|
QString elem_description = message_item.namedItem("description").toElement().text();
|
||||||
|
|
||||||
// Now we obtained maximum of informations for title & description.
|
// Now we obtained maximum of information for title & description.
|
||||||
if (elem_title.isEmpty()) {
|
if (elem_title.isEmpty()) {
|
||||||
if (elem_description.isEmpty()) {
|
if (elem_description.isEmpty()) {
|
||||||
// BOTH title and description are empty, skip this message.
|
// BOTH title and description are empty, skip this message.
|
||||||
|
@ -168,7 +168,7 @@ QList<Message> ParsingFactory::parseAsRSS20(const QString &data) {
|
||||||
elem_description = message_item.namedItem("encoded").toElement().text();
|
elem_description = message_item.namedItem("encoded").toElement().text();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now we obtained maximum of informations for title & description.
|
// Now we obtained maximum of information for title & description.
|
||||||
if (elem_title.isEmpty()) {
|
if (elem_title.isEmpty()) {
|
||||||
if (elem_description.isEmpty()) {
|
if (elem_description.isEmpty()) {
|
||||||
// BOTH title and description are empty, skip this message.
|
// BOTH title and description are empty, skip this message.
|
||||||
|
|
|
@ -24,6 +24,6 @@ void SilentNetworkAccessManager::onAuthenticationRequired(QNetworkReply *reply,
|
||||||
QAuthenticator *authenticator) {
|
QAuthenticator *authenticator) {
|
||||||
Q_UNUSED(authenticator)
|
Q_UNUSED(authenticator)
|
||||||
|
|
||||||
qDebug("Authentification problems for '%s'.",
|
qDebug("Autorization problems for '%s'.",
|
||||||
qPrintable(reply->url().toString()));
|
qPrintable(reply->url().toString()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,11 +54,11 @@ QString TextFactory::stripTags(QString text) {
|
||||||
QString TextFactory::escapeHtml(const QString &html) {
|
QString TextFactory::escapeHtml(const QString &html) {
|
||||||
QMap<QString, QString> sequences;
|
QMap<QString, QString> sequences;
|
||||||
|
|
||||||
sequences["<"] = "<";
|
sequences["<"] = '<';
|
||||||
sequences[">"] = ">";
|
sequences[">"] = '>';
|
||||||
sequences["&"] = "&";
|
sequences["&"] = '&';
|
||||||
sequences["""] = "\"";
|
sequences["""] = '\"';
|
||||||
sequences[" "] = " ";
|
sequences[" "] = ' ';
|
||||||
sequences["±"] = "±";
|
sequences["±"] = "±";
|
||||||
sequences["×"] = "×";
|
sequences["×"] = "×";
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
#include "core/settings.h"
|
#include "core/settings.h"
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QDomDocument>
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QStyleFactory>
|
#include <QStyleFactory>
|
||||||
#include <QDomDocument>
|
#include <QDomDocument>
|
||||||
|
|
Loading…
Add table
Reference in a new issue