From 013a2ff0e625a4a4fbad054853b091c2b93de957 Mon Sep 17 00:00:00 2001 From: martinrotter Date: Fri, 21 Apr 2017 13:41:51 +0200 Subject: [PATCH] New async msg changes now work when marking whole feed/recycle bin read/unread. ONLY owncloud so far. --- src/services/owncloud/owncloudfeed.cpp | 11 +---- src/services/owncloud/owncloudrecyclebin.cpp | 11 +---- src/services/owncloud/owncloudserviceroot.cpp | 41 ++++++++++--------- src/services/owncloud/owncloudserviceroot.h | 2 + 4 files changed, 28 insertions(+), 37 deletions(-) diff --git a/src/services/owncloud/owncloudfeed.cpp b/src/services/owncloud/owncloudfeed.cpp index 9c742d8f6..fe4471a66 100755 --- a/src/services/owncloud/owncloudfeed.cpp +++ b/src/services/owncloud/owncloudfeed.cpp @@ -89,15 +89,8 @@ bool OwnCloudFeed::removeItself() { } bool OwnCloudFeed::markAsReadUnread(RootItem::ReadStatus status) { - QStringList ids = getParentServiceRoot()->customIDSOfMessagesForItem(this); - QNetworkReply::NetworkError response = serviceRoot()->network()->markMessagesRead(status, ids); - - if (response != QNetworkReply::NoError) { - return false; - } - else { - return getParentServiceRoot()->markFeedsReadUnread(QList() << this, status); - } + serviceRoot()->addMessageStatesToCache(getParentServiceRoot()->customIDSOfMessagesForItem(this), status); + return getParentServiceRoot()->markFeedsReadUnread(QList() << this, status); } bool OwnCloudFeed::cleanMessages(bool clear_only_read) { diff --git a/src/services/owncloud/owncloudrecyclebin.cpp b/src/services/owncloud/owncloudrecyclebin.cpp index 128ceb559..5e9cb715d 100755 --- a/src/services/owncloud/owncloudrecyclebin.cpp +++ b/src/services/owncloud/owncloudrecyclebin.cpp @@ -34,13 +34,6 @@ OwnCloudServiceRoot *OwnCloudRecycleBin::serviceRoot() { } bool OwnCloudRecycleBin::markAsReadUnread(RootItem::ReadStatus status) { - QStringList ids = getParentServiceRoot()->customIDSOfMessagesForItem(this); - QNetworkReply::NetworkError response = serviceRoot()->network()->markMessagesRead(status, ids); - - if (response != QNetworkReply::NoError) { - return false; - } - else { - return RecycleBin::markAsReadUnread(status); - } + serviceRoot()->addMessageStatesToCache(getParentServiceRoot()->customIDSOfMessagesForItem(this), status); + return RecycleBin::markAsReadUnread(status); } diff --git a/src/services/owncloud/owncloudserviceroot.cpp b/src/services/owncloud/owncloudserviceroot.cpp index 3c1867618..182e1496b 100755 --- a/src/services/owncloud/owncloudserviceroot.cpp +++ b/src/services/owncloud/owncloudserviceroot.cpp @@ -113,6 +113,27 @@ OwnCloudNetworkFactory *OwnCloudServiceRoot::network() const { return m_network; } +void OwnCloudServiceRoot::addMessageStatesToCache(const QStringList &ids_of_messages, RootItem::ReadStatus read) { + m_cacheSaveMutex->lock(); + + QStringList &list_act = m_cachedStatesRead[read]; + QStringList &list_other = m_cachedStatesRead[read == RootItem::Read ? RootItem::Unread : RootItem::Read]; + + // Store changes, they will be sent to server later. + list_act.append(ids_of_messages); + + QSet set_act = list_act.toSet(); + QSet set_other = list_other.toSet(); + + // Now, we want to remove all IDS from list_other, which are contained in list. + set_other -= set_act; + + list_act.clear(); list_act.append(set_act.toList()); + list_other.clear(); list_other.append(set_other.toList()); + + m_cacheSaveMutex->unlock(); +} + void OwnCloudServiceRoot::saveAllCachedData() { if (m_cachedStatesRead.isEmpty() && m_cachedStatesImportant.isEmpty()) { // No cached changes. @@ -148,25 +169,7 @@ bool OwnCloudServiceRoot::onBeforeSetMessagesRead(RootItem *selected_item, const RootItem::ReadStatus read) { Q_UNUSED(selected_item) - m_cacheSaveMutex->lock(); - - QStringList &list_act = m_cachedStatesRead[read]; - QStringList &list_other = m_cachedStatesRead[read == RootItem::Read ? RootItem::Unread : RootItem::Read]; - - // Store changes, they will be sent to server later. - list_act.append(customIDsOfMessages(messages)); - - QSet set_act = list_act.toSet(); - QSet set_other = list_other.toSet(); - - // Now, we want to remove all IDS from list_other, which are contained in list. - set_other -= set_act; - - list_act.clear(); list_act.append(set_act.toList()); - list_other.clear(); list_other.append(set_other.toList()); - - m_cacheSaveMutex->unlock(); - + addMessageStatesToCache(customIDsOfMessages(messages), read); return true; } diff --git a/src/services/owncloud/owncloudserviceroot.h b/src/services/owncloud/owncloudserviceroot.h index 56cbed572..a99fb4049 100755 --- a/src/services/owncloud/owncloudserviceroot.h +++ b/src/services/owncloud/owncloudserviceroot.h @@ -48,6 +48,8 @@ class OwnCloudServiceRoot : public ServiceRoot { OwnCloudNetworkFactory *network() const; + void addMessageStatesToCache(const QStringList &ids_of_messages, ReadStatus read); + bool onBeforeSetMessagesRead(RootItem *selected_item, const QList &messages, ReadStatus read); bool onBeforeSwitchMessageImportance(RootItem *selected_item, const QList &changes);