summaryrefslogtreecommitdiffstats
path: root/js/service/OPMLParser.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/service/OPMLParser.js')
-rw-r--r--js/service/OPMLParser.js25
1 files changed, 22 insertions, 3 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