diff options
Diffstat (limited to 'js-old/service/ItemResource.js')
-rw-r--r-- | js-old/service/ItemResource.js | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/js-old/service/ItemResource.js b/js-old/service/ItemResource.js new file mode 100644 index 000000000..fcfd2f28d --- /dev/null +++ b/js-old/service/ItemResource.js @@ -0,0 +1,223 @@ +/** + * Nextcloud - News + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Bernhard Posselt <dev@bernhard-posselt.com> + * @copyright Bernhard Posselt 2014 + */ +app.factory('ItemResource', function (Resource, $http, BASE_URL, ITEM_BATCH_SIZE) { + 'use strict'; + + var ItemResource = function ($http, BASE_URL, ITEM_BATCH_SIZE) { + Resource.call(this, $http, BASE_URL); + this.batchSize = ITEM_BATCH_SIZE; + this.clear(); + }; + + ItemResource.prototype = Object.create(Resource.prototype); + + ItemResource.prototype.clear = function () { + this.starredCount = 0; + this.lowestId = 0; + this.highestId = 0; + this.fingerprints = {}; + Resource.prototype.clear.call(this); + }; + + ItemResource.prototype.receive = function (value, channel) { + switch (channel) { + case 'newestItemId': + this.newestItemId = value; + break; + + case 'starred': + this.starredCount = value; + break; + + default: + var self = this; + var importValues = []; + value.forEach(function (item) { + // initialize lowest and highest id + if (self.lowestId === 0) { + self.lowestId = item.id; + } + if (self.highestId === 0) { + self.highestId = item.id; + } + + if (item.id > self.highestId) { + self.highestId = item.id; + } + if (item.id < self.lowestId) { + self.lowestId = item.id; + } + + // filter out duplicates + if (self.fingerprints[item.fingerprint] === undefined) { + self.fingerprints[item.fingerprint] = true; + importValues.push(item); + } + }); + + Resource.prototype.receive.call(this, importValues, channel); + } + }; + + + ItemResource.prototype.getNewestItemId = function () { + return this.newestItemId; + }; + + + ItemResource.prototype.getStarredCount = function () { + return this.starredCount; + }; + + + ItemResource.prototype.star = function (itemId, isStarred) { + if (isStarred === undefined) { + isStarred = true; + } + + var it = this.get(itemId); + var url = this.BASE_URL + + '/items/' + it.feedId + '/' + it.guidHash + '/star'; + + it.starred = isStarred; + + if (isStarred) { + this.starredCount += 1; + } else { + this.starredCount -= 1; + } + + return this.http({ + url: url, + method: 'POST', + data: { + isStarred: isStarred + } + }); + }; + + + ItemResource.prototype.toggleStar = function (itemId) { + if (this.get(itemId).starred) { + this.star(itemId, false); + } else { + this.star(itemId, true); + } + }; + + + ItemResource.prototype.markItemRead = function (itemId, isRead) { + if (isRead === undefined) { + isRead = true; + } + + this.get(itemId).unread = !isRead; + + return this.http({ + url: this.BASE_URL + '/items/' + itemId + '/read', + method: 'POST', + data: { + isRead: isRead + } + }); + }; + + + ItemResource.prototype.markItemsRead = function (itemIds) { + var self = this; + + itemIds.forEach(function (itemId) { + self.get(itemId).unread = false; + }); + + return this.http({ + url: this.BASE_URL + '/items/read/multiple', + method: 'POST', + data: { + itemIds: itemIds + } + }); + }; + + + ItemResource.prototype.markFeedRead = function (feedId, read) { + if (read === undefined) { + read = true; + } + + var items = this.values.filter(function (element) { + return element.feedId === feedId; + }); + + items.forEach(function (item) { + item.unread = !read; + }); + + return this.http.post(this.BASE_URL + '/feeds/' + feedId + '/read', { + highestItemId: this.getNewestItemId() + }); + }; + + + ItemResource.prototype.markRead = function () { + this.values.forEach(function (item) { + item.unread = false; + }); + + return this.http({ + url: this.BASE_URL + '/items/read', + method: 'POST', + data: { + highestItemId: this.getNewestItemId() + } + }); + }; + + + ItemResource.prototype.autoPage = function (type, id, oldestFirst, showAll, search) { + var offset; + + if (oldestFirst) { + offset = this.highestId; + } else { + offset = this.lowestId; + } + + return this.http({ + url: this.BASE_URL + '/items', + method: 'GET', + params: { + type: type, + id: id, + offset: offset, + limit: this.batchSize, + oldestFirst: oldestFirst, + showAll: showAll, + search: search + } + }); + }; + + + ItemResource.prototype.importArticles = function (json) { + return this.http({ + url: this.BASE_URL + '/feeds/import/articles', + method: 'POST', + data: { + json: json + } + }).then(function (response) { + return response.data; + }); + }; + + + return new ItemResource($http, BASE_URL, ITEM_BATCH_SIZE); +});
\ No newline at end of file |