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
|
/**
* ownCloud - News
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Bernhard Posselt <dev@bernhard-posselt.com>
* @copyright Bernhard Posselt 2014
*/
app.run(($rootScope, $location, $http, $q, $interval, Loading, ItemResource,
FeedResource, FolderResource, SettingsResource, Publisher, BASE_URL,
FEED_TYPE, REFRESH_RATE) => {
'use strict';
// show Loading screen
Loading.setLoading('global', true);
// listen to keys in returned queries to automatically distribute the
// incoming values to models
Publisher.subscribe(ItemResource).toChannels('items', 'newestItemId',
'starred');
Publisher.subscribe(FolderResource).toChannels('folders');
Publisher.subscribe(FeedResource).toChannels('feeds');
Publisher.subscribe(SettingsResource).toChannels('settings');
// load feeds, settings and last read feed
let settingsDeferred = $q.defer();
$http.get(`${BASE_URL}/settings`).success((data) => {
Publisher.publishAll(data);
settingsDeferred.resolve();
});
let activeFeedDeferred = $q.defer();
let path = $location.path();
$http.get(`${BASE_URL}/feeds/active`).success((data) => {
let url;
switch (data.activeFeed.type) {
case FEED_TYPE.FEED:
url = `/items/feeds/${data.activeFeed.id}`;
break;
case FEED_TYPE.FOLDER:
url = `/items/folders/${data.activeFeed.id}`;
break;
case FEED_TYPE.STARRED:
url = '/items/starred';
break;
default:
url = '/items';
}
// only redirect if url is empty or faulty
if (!/^\/items(\/(starred|feeds\/\d+|folders\/\d+))?\/?$/.test(path)) {
$location.path(url);
}
activeFeedDeferred.resolve();
});
let folderDeferred = $q.defer();
$http.get(`${BASE_URL}/folders`).success((data) => {
Publisher.publishAll(data);
folderDeferred.resolve();
});
let feedDeferred = $q.defer();
$http.get(`${BASE_URL}/feeds`).success((data) => {
Publisher.publishAll(data);
feedDeferred.resolve();
});
// disable loading if all initial requests finished
$q.all(
[
settingsDeferred.promise,
activeFeedDeferred.promise,
feedDeferred.promise,
folderDeferred.promise
]
)
.then(() => {
Loading.setLoading('global', false);
});
// refresh feeds and folders
$interval(() => {
$http.get(`${BASE_URL}/feeds`);
$http.get(`${BASE_URL}/folders`);
}, REFRESH_RATE * 1000);
$rootScope.$on('$routeChangeStart', () => {
Loading.setLoading('content', true);
});
$rootScope.$on('$routeChangeSuccess', () => {
Loading.setLoading('content', false);
});
// in case of wrong id etc show all items
$rootScope.$on('$routeChangeError', () => {
$location.path('/items');
});
});
|