summaryrefslogtreecommitdiffstats
path: root/js/service/FeedResource.js
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-05-30 22:19:26 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-05-30 22:19:26 +0200
commit35d0d8750e579c40a05f46c0e29cafce9123ae60 (patch)
tree03a2641ca8fed4baa7682cc5c87ddc47b7b99df8 /js/service/FeedResource.js
parente9a2c6bac0dceeffb86e9fb50802af945555d565 (diff)
more additions
Diffstat (limited to 'js/service/FeedResource.js')
-rw-r--r--js/service/FeedResource.js106
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);