summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2016-04-10 11:18:40 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2016-04-10 11:18:40 +0200
commit217e219b28a913e7825f078c48c268a7210dd7bf (patch)
treed4b5f8a26b12dec55e7195add5098b5f6f93f7f1
parent9aea5f3d3eed3f3b29126066e969204bc545821c (diff)
fix #962
-rw-r--r--js/service/OPMLParser.js25
-rw-r--r--js/tests/unit/service/OPMLParserSpec.js8
2 files changed, 29 insertions, 4 deletions
diff --git a/js/service/OPMLParser.js b/js/service/OPMLParser.js
index 2b5c3e397..80ddb8a30 100644
--- a/js/service/OPMLParser.js
+++ b/js/service/OPMLParser.js
@@ -22,7 +22,7 @@ app.service('OPMLParser', function () {
feeds: []
};
- // feed
+ // feed
} else {
return {
type: 'feed',
@@ -35,7 +35,7 @@ app.service('OPMLParser', function () {
// there is only one level, so feeds in a folder in a folder should be
// attached to the root folder
var recursivelyParse = function (level, root, firstLevel) {
- for (var i=0; i<level.length; i+=1) {
+ for (var i = 0; i < level.length; i += 1) {
var outline = $(level[i]);
var entry = parseOutline(outline);
@@ -66,7 +66,26 @@ app.service('OPMLParser', function () {
'folders': []
};
- return recursivelyParse(firstLevel, root, true);
+ var parsedResult = recursivelyParse(firstLevel, root, true);
+
+ // merge folders with duplicate names
+ var folders = {};
+ parsedResult.folders.forEach(function (folder) {
+ if (folders[folder.name] === undefined) {
+ folders[folder.name] = folder;
+ } else {
+ folders[folder.name].feeds = folders[folder.name]
+ .feeds.concat(folder.feeds);
+ }
+ });
+
+ return {
+ 'feeds': parsedResult.feeds,
+ 'folders': Object.keys(folders).map(function (key) {
+ return folders[key];
+ })
+ };
+
};
}); \ No newline at end of file
diff --git a/js/tests/unit/service/OPMLParserSpec.js b/js/tests/unit/service/OPMLParserSpec.js
index 8d0b47343..2b8878b86 100644
--- a/js/tests/unit/service/OPMLParserSpec.js
+++ b/js/tests/unit/service/OPMLParserSpec.js
@@ -40,6 +40,12 @@ describe('OPMLParser', function () {
title='a-flat' \
xmlUrl='http://a-flat.posterous.com/rss.xml'/> \
</outline> \
+ \<outline text='Nomadism'> \
+ <outline \
+ htmlUrl='http://google.com' \
+ title='google' \
+ xmlUrl='http://google.com/rss.xml'/> \
+ </outline> \
<outline title='Elezea' text='Elezee' \
xmlUrl='http://feeds.feedburner.com/elezea'/> \
</body> \
@@ -57,7 +63,7 @@ describe('OPMLParser', function () {
expect(result.folders.length).toBe(2);
expect(result.feeds.length).toBe(2);
expect(result.folders[0].feeds.length).toBe(3);
- expect(result.folders[1].feeds.length).toBe(1);
+ expect(result.folders[1].feeds.length).toBe(2);
});