blob: 9644ee3dd32ab6f41711ad3375c591016b67731c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
/**
* 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, Publisher,
$q) {
'use strict';
var startFeedJob = function (queue) {
var deferred = $q.defer();
if (queue.length > 0) {
var feed = queue.pop();
var url = feed.url;
var title = feed.title;
var folderId = 0;
var folderName = feed.folderName;
if (folderName !== undefined &&
FolderResource.get(folderName) !== undefined) {
var folder = FolderResource.get(folderName);
folder.opened = true;
folderId = folder.id;
}
// make sure to not add already existing feeds
if (url !== undefined && FeedResource.get(url) === undefined) {
FeedResource.create(url, folderId, title)
.then(function (data) {
Publisher.publishAll(data);
})
.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) {
var promise = FolderResource.create(folder.name)
.then(function (data) {
Publisher.publishAll(data);
});
folderPromises.push(promise);
}
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;
};
});
|