|
@@ -3,7 +3,7 @@
|
3
|
3
|
import RNCalendarEvents from 'react-native-calendar-events';
|
4
|
4
|
|
5
|
5
|
import { APP_WILL_MOUNT } from '../app';
|
6
|
|
-import { ADD_KNOWN_DOMAINS } from '../base/known-domains';
|
|
6
|
+import { ADD_KNOWN_DOMAINS, addKnownDomains } from '../base/known-domains';
|
7
|
7
|
import { MiddlewareRegistry } from '../base/redux';
|
8
|
8
|
import { APP_LINK_SCHEME, parseURIString } from '../base/util';
|
9
|
9
|
import { APP_STATE_CHANGED } from '../mobile/background';
|
|
@@ -31,24 +31,58 @@ const MAX_LIST_LENGTH = 10;
|
31
|
31
|
|
32
|
32
|
CALENDAR_ENABLED
|
33
|
33
|
&& MiddlewareRegistry.register(store => next => action => {
|
34
|
|
- const result = next(action);
|
35
|
|
-
|
36
|
34
|
switch (action.type) {
|
37
|
|
- case ADD_KNOWN_DOMAINS:
|
38
|
|
- case APP_WILL_MOUNT:
|
39
|
|
- _fetchCalendarEntries(store, false, false);
|
40
|
|
- break;
|
|
35
|
+ case ADD_KNOWN_DOMAINS: {
|
|
36
|
+ // XXX Fetch new calendar entries only when an actual domain has
|
|
37
|
+ // become known.
|
|
38
|
+ const { getState } = store;
|
|
39
|
+ const oldValue = getState()['features/base/known-domains'];
|
|
40
|
+ const result = next(action);
|
|
41
|
+ const newValue = getState()['features/base/known-domains'];
|
|
42
|
+
|
|
43
|
+ oldValue === newValue || _fetchCalendarEntries(store, false, false);
|
|
44
|
+
|
|
45
|
+ return result;
|
|
46
|
+ }
|
|
47
|
+
|
|
48
|
+ case APP_STATE_CHANGED: {
|
|
49
|
+ const result = next(action);
|
41
|
50
|
|
42
|
|
- case APP_STATE_CHANGED:
|
43
|
51
|
_maybeClearAccessStatus(store, action);
|
44
|
|
- break;
|
45
|
52
|
|
46
|
|
- case REFRESH_CALENDAR:
|
|
53
|
+ return result;
|
|
54
|
+ }
|
|
55
|
+
|
|
56
|
+ case APP_WILL_MOUNT: {
|
|
57
|
+ // For legacy purposes, we've allowed the deserialization of
|
|
58
|
+ // knownDomains and now we're to translate it to base/known-domains.
|
|
59
|
+ const state = store.getState()['features/calendar-sync'];
|
|
60
|
+
|
|
61
|
+ if (state) {
|
|
62
|
+ const { knownDomains } = state;
|
|
63
|
+
|
|
64
|
+ Array.isArray(knownDomains)
|
|
65
|
+ && knownDomains.length
|
|
66
|
+ && store.dispatch(addKnownDomains(knownDomains));
|
|
67
|
+ }
|
|
68
|
+
|
|
69
|
+ const result = next(action);
|
|
70
|
+
|
|
71
|
+ _fetchCalendarEntries(store, false, false);
|
|
72
|
+
|
|
73
|
+ return result;
|
|
74
|
+ }
|
|
75
|
+
|
|
76
|
+ case REFRESH_CALENDAR: {
|
|
77
|
+ const result = next(action);
|
|
78
|
+
|
47
|
79
|
_fetchCalendarEntries(store, true, action.forcePermission);
|
48
|
|
- break;
|
|
80
|
+
|
|
81
|
+ return result;
|
|
82
|
+ }
|
49
|
83
|
}
|
50
|
84
|
|
51
|
|
- return result;
|
|
85
|
+ return next(action);
|
52
|
86
|
});
|
53
|
87
|
|
54
|
88
|
/**
|
|
@@ -122,9 +156,7 @@ function _fetchCalendarEntries(
|
122
|
156
|
logger.warn('Calendar access not granted.');
|
123
|
157
|
}
|
124
|
158
|
})
|
125
|
|
- .catch(reason => {
|
126
|
|
- logger.error('Error accessing calendar.', reason);
|
127
|
|
- });
|
|
159
|
+ .catch(reason => logger.error('Error accessing calendar.', reason));
|
128
|
160
|
}
|
129
|
161
|
|
130
|
162
|
/**
|