summaryrefslogtreecommitdiffstats
path: root/coffee/controllers/settingscontroller.coffee
blob: ba72bb718a21a99cba97dd51a950335b7e93447f (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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
###
# ownCloud - News app
#
# @author Bernhard Posselt
# Copyright (c) 2012 - Bernhard Posselt <nukeawhale@gmail.com>
#
# This file is licensed under the Affero General Public License version 3 or later.
# See the COPYING-README file
#
###

angular.module('News').factory '_SettingsController', ['Controller', (Controller) ->

	class SettingsController extends Controller

		constructor: (@$scope, @$rootScope, @showAll, @persistence, @folderModel, 
						@feedModel, @opmlParser) ->
			
			@add = false
			@settings = false
			@addingFeed = false
			@addingFolder = false

			@$scope.getFolders = =>
				return @folderModel.getItems()

			@$scope.getShowAll = =>
				return @showAll.showAll

			@$scope.setShowAll = (value) =>
				@showAll.showAll = value
				@persistence.showAll(value)
				@$rootScope.$broadcast('triggerHideRead')

			@$scope.toggleSettings = =>
				@settings = !@settings

			@$scope.toggleAdd = =>
				@add = !@add

			@$scope.addIsShown = =>
				return @add

			@$scope.settingsAreShown = =>
				return @settings

			@$scope.isAddingFeed = =>
				return @addingFeed

			@$scope.isAddingFolder = =>
				return @addingFolder

			@$scope.addFeed = (url, folder) =>
				@$scope.feedEmptyError = false
				@$scope.feedExistsError = false
				@$scope.feedError = false
			
				if url == undefined or url.trim() == ''
					@$scope.feedEmptyError = true
				else 
					url = url.trim()
					for feed in @feedModel.getItems()
						if url == feed.url # FIXME: can we really compare this
							@$scope.feedExistsError = true
				
				if not (@$scope.feedEmptyError or @$scope.feedExistsError)
					if folder == undefined
						folderId = 0
					else
						folderId = folder.id
					@addingFeed = true
					onSuccess = =>
						@$scope.feedUrl = ''
						@addingFeed = false
					onError = =>
						@$scope.feedError = true
						@addingFeed = false
					@persistence.createFeed(url, folderId, onSuccess, onError)


			@$scope.addFolder = (name) =>
				@$scope.folderEmptyError = false
				@$scope.folderExistsError = false
			
				if name == undefined or name.trim() == ''
					@$scope.folderEmptyError = true
				else 
					name = name.trim()
					for folder in @folderModel.getItems()
						if name.toLowerCase() == folder.name.toLowerCase()
							@$scope.folderExistsError = true
				
				if not (@$scope.folderEmptyError or @$scope.folderExistsError)
					@addingFolder = true
					onSuccess = =>
						@$scope.folderName = ''
						@addingFolder = false
					@persistence.createFolder(name, onSuccess)
				
			@$scope.$on 'readFile', (scope, fileContent) =>
				structure = @opmlParser.parseXML(fileContent)
				@parseOPMLStructure(structure)
				

			@$scope.$on 'hidesettings', =>
				@add = false
				@settings = false


		# recursively create folders
		parseOPMLStructure: (structure, folderId=0) ->
			for item in structure.getItems()
				if item.isFolder()
					onSuccess = (data) =>
						console.log data
						folderId = data.folders[0].id
						@parseOPMLStructure(item, folderId)
					@persistence.createFolder(item.getName(), onSuccess)
				else
					# FIXME: handle errors
					onSuccess = ->
					onError = ->
					@persistence.createFeed(item.getUrl(), folderId, onSuccess, onError)


	return SettingsController
]