diff options
Diffstat (limited to 'js/service/FeedResource.js')
-rw-r--r-- | js/service/FeedResource.js | 106 |
1 files changed, 102 insertions, 4 deletions
diff --git a/js/service/FeedResource.js b/js/service/FeedResource.js index ab5aec9b4..9759724ac 100644 --- a/js/service/FeedResource.js +++ b/js/service/FeedResource.js @@ -17,12 +17,15 @@ app.factory('FeedResource', (Resource, $http, BASE_URL) => { this.ids = {}; this.unreadCount = 0; this.folderUnreadCount = {}; + this.folderIds = {}; + this.deleted = null; } receive (data) { super.receive(data); this.updateUnreadCache(); + this.updateFolderCache(); } @@ -43,6 +46,17 @@ app.factory('FeedResource', (Resource, $http, BASE_URL) => { } + updateFolderCache () { + this.folderIds = {}; + + for (let feed of this.values) { + this.folderIds[feed.folderId] = + this.folderIds[feed.folderId] || []; + this.folderIds[feed.folderId].push(feed); + } + } + + add (value) { super.add(value); if (value.id !== undefined) { @@ -51,10 +65,17 @@ app.factory('FeedResource', (Resource, $http, BASE_URL) => { } - delete (id) { - let feed = this.get(id); + delete (url) { + let feed = this.get(url); + this.deleted = feed; delete this.ids[feed.id]; - super.delete(id); + + super.delete(url); + + this.updateUnreadCache(); + this.updateFolderCache(); + + return this.http.delete(`${this.BASE_URL}/feeds/${feed.id}`); } @@ -114,12 +135,89 @@ app.factory('FeedResource', (Resource, $http, BASE_URL) => { getByFolderId (folderId) { - return this.values.filter(v => v.folderId === folderId); + return this.folderIds[folderId] || []; } + getById (feedId) { return this.ids[feedId]; } + + + rename (url, name) { + let feed = this.get(url); + feed.title = name; + + return this.http({ + method: 'POST', + url: `${this.BASE_URL}/feeds/${feed.id}/rename`, + data: { + feedTitle: name + } + }); + } + + + move (url, folderId) { + let feed = this.get(url); + feed.folderId = folderId; + + this.updateFolderCache(); + + return this.http({ + method: 'POST', + url: `${this.BASE_URL}/feeds/${feed.id}/move`, + data: { + parentFolderId: folderId + } + }); + + } + + + create (url, folderId, title=null) { + if (title) { + title = title.toUpperCase(); + } + + let feed = { + url: url, + folderId: folderId, + title: title + }; + + if (!this.get(url)) { + this.add(feed); + } + + this.updateFolderCache(); + + return this.http({ + method: 'POST', + url: `${this.BASE_URL}/feeds`, + data: { + url: url, + parentFolderId: folderId, + title: title + } + }); + } + + + undoDelete () { + if (this.deleted) { + this.add(this.deleted); + + return this.http.post( + `${this.BASE_URL}/feeds/${this.deleted.id}/restore` + ); + } + + this.updateFolderCache(); + this.updateUnreadCache(); + } + + } return new FeedResource($http, BASE_URL); |