summaryrefslogtreecommitdiffstats
path: root/js-old/service/ItemResource.js
diff options
context:
space:
mode:
Diffstat (limited to 'js-old/service/ItemResource.js')
-rw-r--r--js-old/service/ItemResource.js223
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