diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2016-04-10 11:18:40 +0200 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2016-04-10 11:18:40 +0200 |
commit | 217e219b28a913e7825f078c48c268a7210dd7bf (patch) | |
tree | d4b5f8a26b12dec55e7195add5098b5f6f93f7f1 /js | |
parent | 9aea5f3d3eed3f3b29126066e969204bc545821c (diff) |
fix #962
Diffstat (limited to 'js')
-rw-r--r-- | js/service/OPMLParser.js | 25 | ||||
-rw-r--r-- | js/tests/unit/service/OPMLParserSpec.js | 8 |
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); }); |