summaryrefslogtreecommitdiffstats
path: root/js/app/services/opmlparser.coffee
blob: a708c03d40a393f97dfa20ca0e7dcbb06014a258 (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
###

ownCloud - News

@author Bernhard Posselt
@copyright 2012 Bernhard Posselt dev@bernhard-posselt.com

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
License as published by the Free Software Foundation; either
version 3 of the License, or any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU AFFERO GENERAL PUBLIC LICENSE for more details.

You should have received a copy of the GNU Affero General Public
License along with this library.  If not, see <http://www.gnu.org/licenses/>.

###

angular.module('News').factory 'OPMLParser', ->
	
	class Feed

		constructor: (@_name, @_url) ->

		getName: ->
			return @_name

		getUrl: ->
			return @_url

		isFolder: ->
			return false


	class Folder

		constructor: (@_name) ->
			@_items = []

		add: (feed) ->
			@_items.push(feed)

		getItems: ->
			return @_items

		getName: ->
			return @_name

		isFolder: ->
			return true


	class OPMLParser

		parseXML: (xml) ->
			$xml = $($.parseXML(xml))
			$root = $xml.find('body')
			structure = new Folder('root')
			@_recursivelyParse($root, structure)
			return structure

		_recursivelyParse: ($xml, structure) ->
			for outline in $xml.children('outline')
				$outline = $(outline)
				if angular.isDefined($outline.attr('xmlUrl'))
					feed = new Feed($outline.attr('text'), $outline.attr('xmlUrl'))
					structure.add(feed)
				else
					title = $outline.attr('text') || $outline.attr('title')
					folder = new Folder(title)
					structure.add(folder)
					@_recursivelyParse($outline, folder)


	return new OPMLParser()