Feed updating now works.
This commit is contained in:
parent
3e1dcb4ab8
commit
d84aa21ad8
5 changed files with 128 additions and 14 deletions
|
@ -651,7 +651,7 @@ int StandardFeed::updateMessages(const QList<Message> &messages) {
|
|||
|
||||
if (remove_duplicates) {
|
||||
query_update.setForwardOnly(true);
|
||||
query_update.prepare(QSL("UPDATE Messages SET contents = :contents enclosures = :enclosures WHERE id = :id;"));
|
||||
query_update.prepare(QSL("UPDATE Messages SET contents = :contents, enclosures = :enclosures WHERE id = :id;"));
|
||||
}
|
||||
|
||||
if (!database.transaction()) {
|
||||
|
@ -703,7 +703,6 @@ int StandardFeed::updateMessages(const QList<Message> &messages) {
|
|||
query_insert.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
if (query_insert.exec() && query_insert.numRowsAffected() == 1) {
|
||||
setStatus(NewMessages);
|
||||
updated_messages++;
|
||||
}
|
||||
|
||||
|
@ -735,7 +734,6 @@ int StandardFeed::updateMessages(const QList<Message> &messages) {
|
|||
query_insert.bindValue(QSL(":enclosures"), Enclosures::encodeEnclosuresToString(message.m_enclosures));
|
||||
|
||||
if (query_insert.exec() && query_insert.numRowsAffected() == 1) {
|
||||
setStatus(NewMessages);
|
||||
updated_messages++;
|
||||
}
|
||||
|
||||
|
@ -746,6 +744,10 @@ int StandardFeed::updateMessages(const QList<Message> &messages) {
|
|||
}
|
||||
}
|
||||
|
||||
if (updated_messages > 0) {
|
||||
setStatus(NewMessages);
|
||||
}
|
||||
|
||||
if (!database.commit()) {
|
||||
database.rollback();
|
||||
|
||||
|
|
|
@ -347,7 +347,10 @@ QList<Message> TtRssGetHeadlinesResponse::messages() {
|
|||
message.m_isRead = !mapped["unread"].toBool();
|
||||
message.m_isImportant = mapped["marked"].toBool();
|
||||
message.m_contents = mapped["content"].toString();
|
||||
message.m_created = TextFactory::parseDateTime(mapped["updated"].value<qint64>());
|
||||
|
||||
// Multiply by 1000 because Tiny Tiny RSS API does not include miliseconds in Unix
|
||||
// date/time number.
|
||||
message.m_created = TextFactory::parseDateTime(mapped["updated"].value<qint64>() * 1000);
|
||||
message.m_createdFromFeed = true;
|
||||
message.m_customId = mapped["id"].toString();
|
||||
message.m_feedId = mapped["feed_id"].toString();
|
||||
|
|
|
@ -75,11 +75,11 @@ void TtRssFeed::updateCounts(bool including_total_count) {
|
|||
}
|
||||
}
|
||||
|
||||
int TtRssFeed::countOfAllMessages() {
|
||||
int TtRssFeed::countOfAllMessages() const {
|
||||
return m_totalCount;
|
||||
}
|
||||
|
||||
int TtRssFeed::countOfUnreadMessages() {
|
||||
int TtRssFeed::countOfUnreadMessages() const {
|
||||
return m_unreadCount;
|
||||
}
|
||||
|
||||
|
@ -155,7 +155,114 @@ void TtRssFeed::setCustomId(int custom_id) {
|
|||
}
|
||||
|
||||
int TtRssFeed::updateMessages(const QList<Message> &messages) {
|
||||
// TODO: pokračovat tady
|
||||
if (messages.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
int feed_id = customId();
|
||||
int updated_messages = 0;
|
||||
QSqlDatabase database = qApp->database()->connection(metaObject()->className(), DatabaseFactory::FromSettings);
|
||||
int account_id = serviceRoot()->accountId();
|
||||
|
||||
// Prepare queries.
|
||||
QSqlQuery query_insert(database);
|
||||
QSqlQuery query_select(database);
|
||||
QSqlQuery query_update(database);
|
||||
|
||||
query_update.setForwardOnly(true);
|
||||
query_update.prepare("UPDATE Messages "
|
||||
"SET title = :title, is_read = :is_read, is_important = :is_important, url = :url, author = :author, date_created = :date_created, contents = :contents, enclosures = :enclosures "
|
||||
"WHERE id = :id;");
|
||||
|
||||
query_select.setForwardOnly(true);
|
||||
query_select.prepare("SELECT id, date_created FROM Messages "
|
||||
"WHERE account_id = :account_id AND custom_id = :custom_id;");
|
||||
|
||||
// Used to insert new messages.
|
||||
query_insert.setForwardOnly(true);
|
||||
query_insert.prepare("INSERT INTO Messages "
|
||||
"(feed, title, is_read, is_important, url, author, date_created, contents, enclosures, custom_id, account_id) "
|
||||
"VALUES (:feed, :title, :is_read, :is_important, :url, :author, :date_created, :contents, :enclosures, :custom_id, :account_id);");
|
||||
|
||||
if (!database.transaction()) {
|
||||
database.rollback();
|
||||
qDebug("Transaction start for message downloader failed.");
|
||||
return updated_messages;
|
||||
}
|
||||
|
||||
foreach (Message message, messages) {
|
||||
query_select.bindValue(QSL(":account_id"), account_id);
|
||||
query_select.bindValue(QSL(":custom_id"), message.m_customId);
|
||||
|
||||
query_select.exec();
|
||||
|
||||
int id_existing_message = -1;
|
||||
qint64 date_existing_message;
|
||||
|
||||
if (query_select.next()) {
|
||||
id_existing_message = query_select.value(0).toInt();
|
||||
date_existing_message = query_select.value(1).value<qint64>();
|
||||
}
|
||||
|
||||
query_select.finish();
|
||||
|
||||
// Now, check if this message is already in the DB.
|
||||
if (id_existing_message >= 0) {
|
||||
if (message.m_created.toMSecsSinceEpoch() != date_existing_message) {
|
||||
// Message exists, it is changed, update it.
|
||||
query_update.bindValue(QSL(":title"), message.m_title);
|
||||
query_update.bindValue(QSL(":is_read"), (int) message.m_isRead);
|
||||
query_update.bindValue(QSL(":is_important"), (int) message.m_isImportant);
|
||||
query_update.bindValue(QSL(":url"), message.m_url);
|
||||
query_update.bindValue(QSL(":author"), message.m_author);
|
||||
query_update.bindValue(QSL(":date_created"), message.m_created.toMSecsSinceEpoch());
|
||||
query_update.bindValue(QSL(":contents"), message.m_contents);
|
||||
query_update.bindValue(QSL(":enclosures"), Enclosures::encodeEnclosuresToString(message.m_enclosures));
|
||||
query_update.bindValue(QSL(":id"), id_existing_message);
|
||||
|
||||
if (query_update.exec()) {
|
||||
updated_messages++;
|
||||
}
|
||||
|
||||
query_update.finish();
|
||||
|
||||
qDebug("Updating message '%s' in DB.", qPrintable(message.m_title));
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Message with this URL is not fetched in this feed yet.
|
||||
query_insert.bindValue(QSL(":feed"), feed_id);
|
||||
query_insert.bindValue(QSL(":title"), message.m_title);
|
||||
query_insert.bindValue(QSL(":is_read"), (int) message.m_isRead);
|
||||
query_insert.bindValue(QSL(":is_important"), (int) message.m_isImportant);
|
||||
query_insert.bindValue(QSL(":url"), message.m_url);
|
||||
query_insert.bindValue(QSL(":author"), message.m_author);
|
||||
query_insert.bindValue(QSL(":date_created"), message.m_created.toMSecsSinceEpoch());
|
||||
query_insert.bindValue(QSL(":contents"), message.m_contents);
|
||||
query_insert.bindValue(QSL(":enclosures"), Enclosures::encodeEnclosuresToString(message.m_enclosures));
|
||||
query_insert.bindValue(QSL(":custom_id"), message.m_customId);
|
||||
query_insert.bindValue(QSL(":account_id"), account_id);
|
||||
|
||||
if (query_insert.exec() && query_insert.numRowsAffected() == 1) {
|
||||
updated_messages++;
|
||||
}
|
||||
|
||||
query_insert.finish();
|
||||
|
||||
qDebug("Adding new message '%s' to DB.", qPrintable(message.m_title));
|
||||
}
|
||||
}
|
||||
|
||||
if (!database.commit()) {
|
||||
database.rollback();
|
||||
|
||||
qDebug("Transaction commit for message downloader failed.");
|
||||
}
|
||||
else {
|
||||
setStatus(NewMessages);
|
||||
updateCounts(true);
|
||||
serviceRoot()->itemChanged(QList<RootItem*>() << this);
|
||||
}
|
||||
|
||||
return updated_messages;
|
||||
}
|
||||
|
|
|
@ -35,8 +35,8 @@ class TtRssFeed : public Feed {
|
|||
|
||||
void updateCounts(bool including_total_count);
|
||||
|
||||
int countOfAllMessages();
|
||||
int countOfUnreadMessages();
|
||||
int countOfAllMessages() const;
|
||||
int countOfUnreadMessages() const;
|
||||
|
||||
int update();
|
||||
QList<Message> undeletedMessages() const;
|
||||
|
|
|
@ -298,7 +298,8 @@ void TtRssServiceRoot::syncIn() {
|
|||
storeNewFeedTree(new_tree);
|
||||
|
||||
foreach (RootItem *top_level_item, new_tree->childItems()) {
|
||||
appendChild(top_level_item);
|
||||
top_level_item->setParent(NULL);
|
||||
requestItemReassignment(top_level_item, this);
|
||||
}
|
||||
|
||||
updateCounts(true);
|
||||
|
@ -306,10 +307,11 @@ void TtRssServiceRoot::syncIn() {
|
|||
new_tree->clearChildren();
|
||||
new_tree->deleteLater();
|
||||
|
||||
itemChanged(QList<RootItem*>() << this);
|
||||
requestFeedReadFilterReload();
|
||||
QList<RootItem*> all_items = getSubTree();
|
||||
|
||||
itemChanged(all_items);
|
||||
requestReloadMessageList(true);
|
||||
requestItemExpand(getSubTree(), true);
|
||||
requestItemExpand(all_items, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue