From 019b286b8e997bea3fb6a0555c91c565ca2d684f Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Thu, 9 May 2013 14:03:37 +0200 Subject: Fix a bug that would mark the items on the right side as read regardless of feed or folder id --- CHANGELOG | 2 ++ .../businesslayer/feedbusinesslayer.coffee | 5 +++-- .../businesslayer/folderbusinesslayer.coffee | 8 ++++++-- js/public/app.js | 22 ++++++++++++---------- .../businesslayer/feedbusinesslayerSpec.coffee | 18 ++++++++++++------ .../businesslayer/folderbusinesslayerSpec.coffee | 22 ++++++++++++++++++++-- .../subsriptionsbusinesslayerSpec.coffee | 5 +++++ 7 files changed, 60 insertions(+), 22 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index abf6c4d3f..a291b1e54 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,8 @@ ownCloud-news (0.99) * Make only one http request for reading all items and all items of a folder * Fix bug that would prevent marking a feed as read when its created and no other feeds are there * Fix bug that would prevent readding of a feed when a folder containing the feed was deleted +* Also send newest item id in the api when creating a feed +* Fix a bug that would mark the items on the right side as read regardless of feed or folder id ownCloud-news (0.98) diff --git a/js/app/services/businesslayer/feedbusinesslayer.coffee b/js/app/services/businesslayer/feedbusinesslayer.coffee index b2eb4f293..8dc1c126a 100644 --- a/js/app/services/businesslayer/feedbusinesslayer.coffee +++ b/js/app/services/businesslayer/feedbusinesslayer.coffee @@ -70,9 +70,10 @@ FeedModel, NewLoading, _ExistsError, Utils, $rootScope, UndoQueue, NewestItem)-> if angular.isDefined(feed) and newestItemId != 0 feed.unreadCount = 0 - @_persistence.setFeedRead(feedId, newestItemId) for item in @_itemModel.getAll() - item.setRead() + if item.feedId == feed.id + item.setRead() + @_persistence.setFeedRead(feedId, newestItemId) getNumberOfFeeds: -> diff --git a/js/app/services/businesslayer/folderbusinesslayer.coffee b/js/app/services/businesslayer/folderbusinesslayer.coffee index 57f932a77..39c307c96 100644 --- a/js/app/services/businesslayer/folderbusinesslayer.coffee +++ b/js/app/services/businesslayer/folderbusinesslayer.coffee @@ -89,8 +89,12 @@ NewestItem, FeedModel) -> if newestItemId != 0 and angular.isDefined(folder) for feed in @_feedBusinessLayer.getFeedsOfFolder(folderId) feed.unreadCount = 0 - for item in @_itemModel.getAll() - item.setRead() + + # also set items in feeds as read + for item in @_itemModel.getAll() + if item.feedId == feed.id + item.setRead() + @_persistence.setFolderRead(folderId, newestItemId) diff --git a/js/public/app.js b/js/public/app.js index a5d11958b..8329f90f6 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -860,20 +860,20 @@ License along with this library. If not, see . }; FeedBusinessLayer.prototype.markRead = function(feedId) { - var feed, item, newestItemId, _i, _len, _ref, _results; + var feed, item, newestItemId, _i, _len, _ref; feed = this._feedModel.getById(feedId); newestItemId = this._newestItem.getId(); if (angular.isDefined(feed) && newestItemId !== 0) { feed.unreadCount = 0; - this._persistence.setFeedRead(feedId, newestItemId); _ref = this._itemModel.getAll(); - _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { item = _ref[_i]; - _results.push(item.setRead()); + if (item.feedId === feed.id) { + item.setRead(); + } } - return _results; + return this._persistence.setFeedRead(feedId, newestItemId); } }; @@ -1139,11 +1139,13 @@ License along with this library. If not, see . for (_i = 0, _len = _ref.length; _i < _len; _i++) { feed = _ref[_i]; feed.unreadCount = 0; - } - _ref1 = this._itemModel.getAll(); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - item = _ref1[_j]; - item.setRead(); + _ref1 = this._itemModel.getAll(); + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + item = _ref1[_j]; + if (item.feedId === feed.id) { + item.setRead(); + } + } } return this._persistence.setFolderRead(folderId, newestItemId); } diff --git a/js/tests/services/businesslayer/feedbusinesslayerSpec.coffee b/js/tests/services/businesslayer/feedbusinesslayerSpec.coffee index a41426922..42cab53b1 100644 --- a/js/tests/services/businesslayer/feedbusinesslayerSpec.coffee +++ b/js/tests/services/businesslayer/feedbusinesslayerSpec.coffee @@ -94,6 +94,7 @@ describe 'FeedBusinessLayer', -> it 'should not mark feed read when no highest item id', => + @FeedModel.add({id: 5, unreadCount:2, folderId: 2, url: 'a1'}) @persistence.setFeedRead = jasmine.createSpy('setFeedRead') @FeedBusinessLayer.markRead(5) expect(@persistence.setFeedRead).not.toHaveBeenCalled() @@ -103,17 +104,22 @@ describe 'FeedBusinessLayer', -> @NewestItem.handle(25) @ActiveFeed.handle({type: @FeedType.Feed, id: 5}) @persistence.setFeedRead = jasmine.createSpy('setFeedRead') + @FeedModel.add({id: 5, unreadCount:2, folderId: 2, url: 'a1'}) - @ItemModel.add({id: 6, feedId: 5, guidHash: 'a1'}) - @ItemModel.add({id: 3, feedId: 5, guidHash: 'a2'}) - @ItemModel.add({id: 2, feedId: 5, guidHash: 'a3'}) + + item1 = {id: 3, feedId: 5, guidHash: 'a3', status: 0} + @ItemModel.add(item1) + item1.setUnread() + item2 = {id: 2, feedId: 3, guidHash: 'a3', status: 0} + @ItemModel.add(item2) + item2.setUnread() + @FeedBusinessLayer.markRead(5) expect(@persistence.setFeedRead).toHaveBeenCalledWith(5, 25) expect(@FeedModel.getById(5).unreadCount).toBe(0) - expect(@ItemModel.getById(6).isRead()).toBeTruthy() - expect(@ItemModel.getById(3).isRead()).toBeTruthy() - expect(@ItemModel.getById(2).isRead()).toBeTruthy() + expect(item1.isRead()).toBe(true) + expect(item2.isRead()).toBe(false) it 'should get the correct unread count for subscribtions', => diff --git a/js/tests/services/businesslayer/folderbusinesslayerSpec.coffee b/js/tests/services/businesslayer/folderbusinesslayerSpec.coffee index 4d23d5b8d..c0ea2aedb 100644 --- a/js/tests/services/businesslayer/folderbusinesslayerSpec.coffee +++ b/js/tests/services/businesslayer/folderbusinesslayerSpec.coffee @@ -40,7 +40,7 @@ describe 'FolderBusinessLayer', -> beforeEach inject (@FolderBusinessLayer, @FolderModel, @FeedModel, @ShowAll, @ActiveFeed, @FeedType, @_ExistsError, @$timeout, - @NewestItem) => + @NewestItem, @ItemModel) => @ShowAll.setShowAll(false) @ActiveFeed.handle({type: @FeedType.Feed, id:0}) @@ -88,9 +88,17 @@ describe 'FolderBusinessLayer', -> it 'should mark folder as read', => @NewestItem.handle(25) - @FolderModel.add({id: 3, opened: false, name: 'ho'}) @persistence.setFolderRead = jasmine.createSpy('setFeedRead') + + item1 = {id: 3, feedId: 5, guidHash: 'a3', status: 0} + @ItemModel.add(item1) + item1.setUnread() + item2 = {id: 2, feedId: 3, guidHash: 'a3', status: 0} + @ItemModel.add(item2) + item2.setUnread() + + @FolderModel.add({id: 3, opened: false, name: 'ho'}) @FeedModel.add({id: 3, unreadCount:134, folderId: 3, url: 'a1'}) @FeedModel.add({id: 5, unreadCount:2, folderId: 2, url: 'a2'}) @FeedModel.add({id: 1, unreadCount:12, folderId: 3, url: 'a3'}) @@ -101,9 +109,19 @@ describe 'FolderBusinessLayer', -> expect(@FeedModel.getById(1).unreadCount).toBe(0) expect(@FeedModel.getById(5).unreadCount).toBe(2) + expect(item1.isRead()).toBe(false) + expect(item2.isRead()).toBe(true) + expect(@persistence.setFolderRead).toHaveBeenCalledWith(3, 25) + it 'should not mark folder read when no highest item id', => + @FolderModel.add({id: 5, opened: false, name: 'ho'}) + @persistence.setFolderRead = jasmine.createSpy('setFolderRead') + @FolderBusinessLayer.markRead(5) + expect(@persistence.setFolderRead).not.toHaveBeenCalled() + + it 'should get the correct unread count', => @FeedModel.add({id: 5, unreadCount:2, folderId: 2, url: 'a1'}) @FeedModel.add({id: 6, unreadCount:3, folderId: 3, url: 'a2'}) diff --git a/js/tests/services/businesslayer/subsriptionsbusinesslayerSpec.coffee b/js/tests/services/businesslayer/subsriptionsbusinesslayerSpec.coffee index 9e3437b3c..26698ae3c 100644 --- a/js/tests/services/businesslayer/subsriptionsbusinesslayerSpec.coffee +++ b/js/tests/services/businesslayer/subsriptionsbusinesslayerSpec.coffee @@ -83,6 +83,11 @@ describe 'SubscriptionsBusinessLayer', -> expect(@persistence.setAllRead).toHaveBeenCalledWith(25) + it 'should not mark all read when no highest item id', => + @persistence.setAllRead = jasmine.createSpy('setAllRead') + @SubscriptionsBusinessLayer.markRead() + expect(@persistence.setAllRead).not.toHaveBeenCalled() + it 'should get the correct unread count', => @FeedModel.add({id: 3, unreadCount: 132, url: 'hoho'}) @FeedModel.add({id: 4, unreadCount: 12, url: 'hohod'}) -- cgit v1.2.3