@@ -16,6 +16,7 @@ struct System: State {
1616 let running : Bool
1717 let enabled : Bool
1818 let initializedPlugins : [ Plugin ]
19+ let waitingPlugins : [ Plugin ]
1920
2021 struct UpdateSettingsAction : Action {
2122 let settings : Settings
@@ -25,7 +26,8 @@ struct System: State {
2526 settings: settings,
2627 running: state. running,
2728 enabled: state. enabled,
28- initializedPlugins: state. initializedPlugins)
29+ initializedPlugins: state. initializedPlugins,
30+ waitingPlugins: state. waitingPlugins)
2931 return result
3032 }
3133 }
@@ -34,11 +36,29 @@ struct System: State {
3436 let running : Bool
3537
3638 func reduce( state: System ) -> System {
39+ var desiredRunning = running
40+
41+ if desiredRunning == true && state. waitingPlugins. count > 0 {
42+ desiredRunning = false
43+ }
44+
3745 return System ( configuration: state. configuration,
3846 settings: state. settings,
39- running: running ,
47+ running: desiredRunning ,
4048 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)
4262 }
4363 }
4464
@@ -50,7 +70,8 @@ struct System: State {
5070 settings: state. settings,
5171 running: state. running,
5272 enabled: enabled,
53- initializedPlugins: state. initializedPlugins)
73+ initializedPlugins: state. initializedPlugins,
74+ waitingPlugins: state. waitingPlugins)
5475 }
5576 }
5677
@@ -62,7 +83,8 @@ struct System: State {
6283 settings: state. settings,
6384 running: state. running,
6485 enabled: state. enabled,
65- initializedPlugins: state. initializedPlugins)
86+ initializedPlugins: state. initializedPlugins,
87+ waitingPlugins: state. waitingPlugins)
6688 }
6789 }
6890
@@ -79,7 +101,8 @@ struct System: State {
79101 settings: settings,
80102 running: state. running,
81103 enabled: state. enabled,
82- initializedPlugins: state. initializedPlugins)
104+ initializedPlugins: state. initializedPlugins,
105+ waitingPlugins: state. waitingPlugins)
83106 }
84107 }
85108
@@ -97,7 +120,64 @@ struct System: State {
97120 settings: state. settings,
98121 running: state. running,
99122 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)
101181 }
102182 }
103183}
@@ -171,7 +251,14 @@ extension System {
171251 settings = Settings ( writeKey: configuration. values. writeKey, apiHost: HTTPClient . getDefaultAPIHost ( ) )
172252 }
173253 }
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+ )
175262 }
176263}
177264
0 commit comments