summaryrefslogtreecommitdiffstats
path: root/js/service
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
parente9a2c6bac0dceeffb86e9fb50802af945555d565 (diff)
more additions
Diffstat (limited to 'js/service')
-rw-r--r--js/service/FeedResource.js106
-rw-r--r--js/service/FolderResource.js84
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);