@@ -16,6 +16,7 @@ struct System: State {
16
16
let running : Bool
17
17
let enabled : Bool
18
18
let initializedPlugins : [ Plugin ]
19
+ let waitingPlugins : [ Plugin ]
19
20
20
21
struct UpdateSettingsAction : Action {
21
22
let settings : Settings
@@ -25,7 +26,8 @@ struct System: State {
25
26
settings: settings,
26
27
running: state. running,
27
28
enabled: state. enabled,
28
- initializedPlugins: state. initializedPlugins)
29
+ initializedPlugins: state. initializedPlugins,
30
+ waitingPlugins: state. waitingPlugins)
29
31
return result
30
32
}
31
33
}
@@ -34,11 +36,29 @@ struct System: State {
34
36
let running : Bool
35
37
36
38
func reduce( state: System ) -> System {
39
+ var desiredRunning = running
40
+
41
+ if desiredRunning == true && state. waitingPlugins. count > 0 {
42
+ desiredRunning = false
43
+ }
44
+
37
45
return System ( configuration: state. configuration,
38
46
settings: state. settings,
39
- running: running ,
47
+ running: desiredRunning ,
40
48
enabled: state. enabled,
41
- initializedPlugins: state. initializedPlugins)
49
+ initializedPlugins: state. initializedPlugins,
50
+ waitingPlugins: state. waitingPlugins)
51
+ }
52
+ }
53
+
54
+ struct ForceRunningAction : Action {
55
+ func reduce( state: System ) -> System {
56
+ return System ( configuration: state. configuration,
57
+ settings: state. settings,
58
+ running: true ,
59
+ enabled: state. enabled,
60
+ initializedPlugins: state. initializedPlugins,
61
+ waitingPlugins: state. waitingPlugins)
42
62
}
43
63
}
44
64
@@ -50,7 +70,8 @@ struct System: State {
50
70
settings: state. settings,
51
71
running: state. running,
52
72
enabled: enabled,
53
- initializedPlugins: state. initializedPlugins)
73
+ initializedPlugins: state. initializedPlugins,
74
+ waitingPlugins: state. waitingPlugins)
54
75
}
55
76
}
56
77
@@ -62,7 +83,8 @@ struct System: State {
62
83
settings: state. settings,
63
84
running: state. running,
64
85
enabled: state. enabled,
65
- initializedPlugins: state. initializedPlugins)
86
+ initializedPlugins: state. initializedPlugins,
87
+ waitingPlugins: state. waitingPlugins)
66
88
}
67
89
}
68
90
@@ -79,7 +101,8 @@ struct System: State {
79
101
settings: settings,
80
102
running: state. running,
81
103
enabled: state. enabled,
82
- initializedPlugins: state. initializedPlugins)
104
+ initializedPlugins: state. initializedPlugins,
105
+ waitingPlugins: state. waitingPlugins)
83
106
}
84
107
}
85
108
@@ -97,7 +120,64 @@ struct System: State {
97
120
settings: state. settings,
98
121
running: state. running,
99
122
enabled: state. enabled,
100
- initializedPlugins: initializedPlugins)
123
+ initializedPlugins: initializedPlugins,
124
+ waitingPlugins: state. waitingPlugins)
125
+ }
126
+ }
127
+
128
+ struct AddWaitingPlugin : Action {
129
+ let plugin : Plugin
130
+
131
+ func reduce( state: System ) -> System {
132
+ var waitingPlugins = state. waitingPlugins
133
+ if !waitingPlugins. contains ( where: { p in
134
+ return plugin === p
135
+ } ) {
136
+ waitingPlugins. append ( plugin)
137
+ }
138
+ return System ( configuration: state. configuration,
139
+ settings: state. settings,
140
+ running: state. running,
141
+ enabled: state. enabled,
142
+ initializedPlugins: state. initializedPlugins,
143
+ waitingPlugins: waitingPlugins)
144
+ }
145
+ }
146
+
147
+ /*struct RemoveWaitingPlugin: Action {
148
+ let plugin: Plugin
149
+
150
+ func reduce(state: System) -> System {
151
+ var waitingPlugins = state.waitingPlugins
152
+ waitingPlugins.removeAll { p in
153
+ return plugin === p
154
+ }
155
+ return System(configuration: state.configuration,
156
+ settings: state.settings,
157
+ running: state.running,
158
+ enabled: state.enabled,
159
+ initializedPlugins: state.initializedPlugins,
160
+ waitingPlugins: waitingPlugins)
161
+ }
162
+ }*/
163
+ struct RemoveWaitingPlugin : Action {
164
+ let plugin : Plugin
165
+
166
+ func reduce( state: System ) -> System {
167
+ var waitingPlugins = state. waitingPlugins
168
+ let countBefore = waitingPlugins. count
169
+ waitingPlugins. removeAll { p in
170
+ return plugin === p
171
+ }
172
+ let countAfter = waitingPlugins. count
173
+ print ( " RemoveWaitingPlugin: \( countBefore) -> \( countAfter) " )
174
+
175
+ return System ( configuration: state. configuration,
176
+ settings: state. settings,
177
+ running: state. running,
178
+ enabled: state. enabled,
179
+ initializedPlugins: state. initializedPlugins,
180
+ waitingPlugins: waitingPlugins)
101
181
}
102
182
}
103
183
}
@@ -171,7 +251,14 @@ extension System {
171
251
settings = Settings ( writeKey: configuration. values. writeKey, apiHost: HTTPClient . getDefaultAPIHost ( ) )
172
252
}
173
253
}
174
- return System ( configuration: configuration, settings: settings, running: false , enabled: true , initializedPlugins: [ Plugin] ( ) )
254
+ return System (
255
+ configuration: configuration,
256
+ settings: settings,
257
+ running: false ,
258
+ enabled: true ,
259
+ initializedPlugins: [ Plugin] ( ) ,
260
+ waitingPlugins: [ WaitingPlugin] ( )
261
+ )
175
262
}
176
263
}
177
264
0 commit comments