@@ -206,9 +206,17 @@ class ModuleManager: ObservableObject {
206206 }
207207
208208 func refreshModules( ) async {
209- for (index, module) in modules. enumerated ( ) {
209+ let modulesCopy = modules
210+ var updatedModules : [ ( Int , ScrapingModule ) ] = [ ]
211+
212+ for (index, module) in modulesCopy. enumerated ( ) {
210213 do {
211- let ( metadataData, _) = try await URLSession . custom. data ( from: URL ( string: module. metadataUrl) !)
214+ guard let metadataUrl = URL ( string: module. metadataUrl) else {
215+ Logger . shared. log ( " Invalid metadata URL for module: \( module. metadata. sourceName) " , type: " Error " )
216+ continue
217+ }
218+
219+ let ( metadataData, _) = try await URLSession . custom. data ( from: metadataUrl)
212220 let newMetadata = try JSONDecoder ( ) . decode ( ModuleMetadata . self, from: metadataData)
213221
214222 if newMetadata. version != module. metadata. version {
@@ -232,14 +240,22 @@ class ModuleManager: ObservableObject {
232240 isActive: module. isActive
233241 )
234242
235- self . modules [ index] = updatedModule
236- self . saveModules ( )
237-
238- Logger . shared. log ( " Updated module: \( module. metadata. sourceName) to version \( newMetadata. version) " )
243+ updatedModules. append ( ( index, updatedModule) )
244+ Logger . shared. log ( " Prepared update for module: \( module. metadata. sourceName) to version \( newMetadata. version) " )
239245 }
240246 } catch {
241247 Logger . shared. log ( " Failed to refresh module: \( module. metadata. sourceName) - \( error. localizedDescription) " )
242248 }
243249 }
250+
251+ if !updatedModules. isEmpty {
252+ for (index, updatedModule) in updatedModules {
253+ if index < modules. count {
254+ modules [ index] = updatedModule
255+ }
256+ }
257+ saveModules ( )
258+ Logger . shared. log ( " Successfully updated \( updatedModules. count) modules " )
259+ }
244260 }
245261}
0 commit comments