summaryrefslogtreecommitdiffstats
path: root/js/service
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-09-14 04:17:32 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-09-14 04:17:32 +0200
commit242fdbf9fcc39795fe5567eadcb55c6709b303c5 (patch)
tree6c85a9836080997bf223341e11eecdac3c51ac1e /js/service
parent721ae0b8bbde9716ed9073439805fd6497abf508 (diff)
add import articles
Diffstat (limited to 'js/service')
-rw-r--r--js/service/ItemResource.js11
-rw-r--r--js/service/OPMLImporter.js86
2 files changed, 97 insertions, 0 deletions
diff --git a/js/service/ItemResource.js b/js/service/ItemResource.js
index 432b2c8c7..df4f1b545 100644
--- a/js/service/ItemResource.js
+++ b/js/service/ItemResource.js
@@ -198,5 +198,16 @@ app.factory('ItemResource', function (Resource, $http, BASE_URL,
};
+ ItemResource.prototype.importArticles = function (json) {
+ return this.http({
+ url: this.BASE_URL + '/feeds/import/articles',
+ method: 'POST',
+ data: {
+ json: json
+ }
+ });
+ };
+
+
return new ItemResource($http, BASE_URL, ITEM_BATCH_SIZE);
}); \ No newline at end of file
diff --git a/js/service/OPMLImporter.js b/js/service/OPMLImporter.js
new file mode 100644
index 000000000..2edb7921b
--- /dev/null
+++ b/js/service/OPMLImporter.js
@@ -0,0 +1,86 @@
+/**
+ * ownCloud - 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.service('OPMLImporter', function (FeedResource, FolderResource, $q) {
+ 'use strict';
+ var startFeedJob = function (queue) {
+ var deferred = $q.defer();
+
+ if (queue.lenght > 0) {
+ var feed = queue.pop();
+ var url = feed.url;
+ var title = feed.title;
+ var folderId = 0;
+ var folderName = feed.folderName;
+
+ if (folderName !== undefined &&
+ FeedResource.get(folderName) !== undefined) {
+ folderId = FeedResource.get(feed.folderName).id;
+ }
+
+ // make sure to not add already existing feeds
+ if (url !== undefined && FeedResource.get(url) === undefined) {
+ FeedResource.create(url, folderId, title)
+ .finally(function () {
+ startFeedJob(queue);
+ });
+ }
+ } else {
+ deferred.resolve();
+ }
+
+ return deferred.promise;
+ };
+
+ this.importFolders = function (content) {
+ // assumption: folders are fast to create and we dont need a queue for
+ // them
+ var feedQueue = [];
+ var folderPromises = [];
+ content.folders.forEach(function (folder) {
+ if (folder.name !== undefined) {
+ // skip already created folders
+ if (FolderResource.get(folder.name) !== undefined) {
+ folderPromises.push(FolderResource.create(folder.name));
+ }
+
+ folder.feeds.forEach(function (feed) {
+ feed.folderName = folder.name;
+ feedQueue.push(feed);
+ });
+ }
+ });
+ feedQueue = feedQueue.concat(content.feeds);
+
+ var deferred = $q.defer();
+
+ $q.all(folderPromises).finally(function () {
+ deferred.resolve(feedQueue);
+ });
+
+ return deferred.promise;
+ };
+
+ this.importFeedQueue = function (feedQueue, jobSize) {
+ // queue feeds to prevent server slowdown
+ var deferred = $q.defer();
+
+ var jobPromises = [];
+ for (var i=0; i<jobSize; i+=1) {
+ jobPromises.push(startFeedJob(feedQueue));
+ }
+
+ $q.all(jobPromises).then(function () {
+ deferred.resolve();
+ });
+
+ return deferred.promise;
+ };
+
+}); \ No newline at end of file