diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-05-30 22:19:26 +0200 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-05-30 22:19:26 +0200 |
commit | 35d0d8750e579c40a05f46c0e29cafce9123ae60 (patch) | |
tree | 03a2641ca8fed4baa7682cc5c87ddc47b7b99df8 /js/service | |
parent | e9a2c6bac0dceeffb86e9fb50802af945555d565 (diff) |
more additions
Diffstat (limited to 'js/service')
-rw-r--r-- | js/service/FeedResource.js | 106 | ||||
-rw-r--r-- | js/service/FolderResource.js | 84 |
2 files changed, 186 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); diff --git a/js/service/FolderResource.js b/js/service/FolderResource.js index 1ea48e0bb..2e67fa690 100644 --- a/js/service/FolderResource.js +++ b/js/service/FolderResource.js @@ -14,8 +14,92 @@ app.factory('FolderResource', (Resource, $http, BASE_URL) => { constructor ($http, BASE_URL) { super($http, BASE_URL, 'name'); + this.deleted = null; } + + delete (folderName) { + let folder = this.get(folderName); + this.deleted = folder; + + super.delete(folderName); + + return this.http.delete(`${this.BASE_URL}/folders/${folder.id}`); + } + + + toggleOpen (folderName) { + let folder = this.get(folderName); + folder.opened = !folder.opened; + + return this.http({ + url: `${this.BASE_URL}/folders/${folder.id}/open`, + method: 'POST', + data: { + folderId: folder.id, + open: folder.opened + } + }); + } + + + rename (folderName, toFolderName) { + toFolderName = toFolderName.toUpperCase(); + let folder = this.get(folderName); + + // still do http request if folder exists but dont change the name + // to have one point of failure + if (!this.get(toFolderName)) { + folder.name = toFolderName; + + delete this.hashMap[folderName]; + this.hashMap[toFolderName] = folder; + } + + return this.http({ + url: `${this.BASE_URL}/folders/${folder.id}/rename`, + method: 'POST', + data: { + folderName: toFolderName + } + }); + } + + + create (folderName) { + folderName = folderName.toUpperCase(); + + // still do http request if folder exists but dont change the name + // to have one point of failure + if (!this.get(folderName)) { + let folder = { + name: folderName + }; + + this.add(folder); + } + + return this.http({ + url: `${this.BASE_URL}/folders`, + method: 'POST', + data: { + folderName: folderName + } + }); + } + + + undoDelete () { + if (this.deleted) { + this.add(this.deleted); + + return this.http.post( + `${this.BASE_URL}/folders/${this.deleted.id}/restore` + ); + } + } + + } return new FolderResource($http, BASE_URL); |