@@ -134,40 +134,38 @@ func (a *ArduinoPlatformUpdater) ListUpgradablePackages(ctx context.Context, _ f
134134}
135135
136136// UpgradePackages implements ServiceUpdater.
137- func (a * ArduinoPlatformUpdater ) UpgradePackages (ctx context.Context , names []string ) ( <- chan update.Event , error ) {
137+ func (a * ArduinoPlatformUpdater ) UpgradePackages (ctx context.Context , names []string , eventCB func ( update.Event )) error {
138138 if ! a .lock .TryLock () {
139- return nil , update .ErrOperationAlreadyInProgress
139+ return update .ErrOperationAlreadyInProgress
140140 }
141- eventsCh := make (chan update.Event , 100 )
142141
143142 downloadProgressCB := func (curr * rpc.DownloadProgress ) {
144143 data := helpers .ArduinoCLIDownloadProgressToString (curr )
145144 slog .Debug ("Download progress" , slog .String ("download_progress" , data ))
146- eventsCh <- update .NewDataEvent (update .UpgradeLineEvent , data )
145+ eventCB ( update .NewDataEvent (update .UpgradeLineEvent , data ) )
147146 }
148147 taskProgressCB := func (msg * rpc.TaskProgress ) {
149148 data := helpers .ArduinoCLITaskProgressToString (msg )
150149 slog .Debug ("Task progress" , slog .String ("task_progress" , data ))
151- eventsCh <- update .NewDataEvent (update .UpgradeLineEvent , data )
150+ eventCB ( update .NewDataEvent (update .UpgradeLineEvent , data ) )
152151 }
153152
154153 go func () {
155154 defer a .lock .Unlock ()
156- defer close (eventsCh )
157155
158- eventsCh <- update .NewDataEvent (update .StartEvent , "Upgrade is starting" )
156+ eventCB ( update .NewDataEvent (update .StartEvent , "Upgrade is starting" ) )
159157
160158 logrus .SetLevel (logrus .ErrorLevel ) // Reduce the log level of arduino-cli
161159 srv := commands .NewArduinoCoreServer ()
162160
163161 if err := setConfig (ctx , srv ); err != nil {
164- eventsCh <- update .NewErrorEvent (fmt .Errorf ("error setting config: %w" , err ))
162+ eventCB ( update .NewErrorEvent (fmt .Errorf ("error setting config: %w" , err ) ))
165163 return
166164 }
167165
168166 var inst * rpc.Instance
169167 if resp , err := srv .Create (ctx , & rpc.CreateRequest {}); err != nil {
170- eventsCh <- update .NewErrorEvent (fmt .Errorf ("error creating arduino-cli instance: %w" , err ))
168+ eventCB ( update .NewErrorEvent (fmt .Errorf ("error creating arduino-cli instance: %w" , err ) ))
171169 return
172170 } else {
173171 inst = resp .GetInstance ()
@@ -183,11 +181,11 @@ func (a *ArduinoPlatformUpdater) UpgradePackages(ctx context.Context, names []st
183181 {
184182 stream , _ := commands .UpdateIndexStreamResponseToCallbackFunction (ctx , downloadProgressCB )
185183 if err := srv .UpdateIndex (& rpc.UpdateIndexRequest {Instance : inst }, stream ); err != nil {
186- eventsCh <- update .NewErrorEvent (fmt .Errorf ("error updating index: %w" , err ))
184+ eventCB ( update .NewErrorEvent (fmt .Errorf ("error updating index: %w" , err ) ))
187185 return
188186 }
189187 if err := srv .Init (& rpc.InitRequest {Instance : inst }, commands .InitStreamResponseToCallbackFunction (ctx , nil )); err != nil {
190- eventsCh <- update .NewErrorEvent (fmt .Errorf ("error initializing instance: %w" , err ))
188+ eventCB ( update .NewErrorEvent (fmt .Errorf ("error initializing instance: %w" , err ) ))
191189 return
192190 }
193191 }
@@ -209,13 +207,13 @@ func (a *ArduinoPlatformUpdater) UpgradePackages(ctx context.Context, names []st
209207 ); err != nil {
210208 var alreadyPresent * cmderrors.PlatformAlreadyAtTheLatestVersionError
211209 if errors .As (err , & alreadyPresent ) {
212- eventsCh <- update .NewDataEvent (update .UpgradeLineEvent , alreadyPresent .Error ())
210+ eventCB ( update .NewDataEvent (update .UpgradeLineEvent , alreadyPresent .Error () ))
213211 return
214212 }
215213
216214 var notFound * cmderrors.PlatformNotFoundError
217215 if ! errors .As (err , & notFound ) {
218- eventsCh <- update .NewErrorEvent (fmt .Errorf ("error upgrading platform: %w" , err ))
216+ eventCB ( update .NewErrorEvent (fmt .Errorf ("error upgrading platform: %w" , err ) ))
219217 return
220218 }
221219 // If the platform is not found, we will try to install it
@@ -232,16 +230,16 @@ func (a *ArduinoPlatformUpdater) UpgradePackages(ctx context.Context, names []st
232230 ),
233231 )
234232 if err != nil {
235- eventsCh <- update .NewErrorEvent (fmt .Errorf ("error installing platform: %w" , err ))
233+ eventCB ( update .NewErrorEvent (fmt .Errorf ("error installing platform: %w" , err ) ))
236234 return
237235 }
238236 } else if respCB ().GetPlatform () == nil {
239- eventsCh <- update .NewErrorEvent (fmt .Errorf ("platform upgrade failed" ))
237+ eventCB ( update .NewErrorEvent (fmt .Errorf ("platform upgrade failed" ) ))
240238 return
241239 }
242240
243241 cbw := orchestrator .NewCallbackWriter (func (line string ) {
244- eventsCh <- update .NewDataEvent (update .UpgradeLineEvent , line )
242+ eventCB ( update .NewDataEvent (update .UpgradeLineEvent , line ) )
245243 })
246244
247245 err := srv .BurnBootloader (
@@ -253,10 +251,10 @@ func (a *ArduinoPlatformUpdater) UpgradePackages(ctx context.Context, names []st
253251 commands .BurnBootloaderToServerStreams (ctx , cbw , cbw ),
254252 )
255253 if err != nil {
256- eventsCh <- update .NewErrorEvent (fmt .Errorf ("error burning bootloader: %w" , err ))
254+ eventCB ( update .NewErrorEvent (fmt .Errorf ("error burning bootloader: %w" , err ) ))
257255 return
258256 }
259257 }()
260258
261- return eventsCh , nil
259+ return nil
262260}
0 commit comments