From 5835a6ef8f5d95046110d2c2e9ccf517617fa8bf Mon Sep 17 00:00:00 2001 From: cranci1 <100066266+cranci1@users.noreply.github.com> Date: Mon, 14 Jul 2025 11:07:32 +0200 Subject: [PATCH] Hopefully a crash fix ModuleManger updates cant edit the array it's reading --- Sora/Utlis & Misc/Modules/ModuleManager.swift | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/Sora/Utlis & Misc/Modules/ModuleManager.swift b/Sora/Utlis & Misc/Modules/ModuleManager.swift index 2617739..68271f1 100644 --- a/Sora/Utlis & Misc/Modules/ModuleManager.swift +++ b/Sora/Utlis & Misc/Modules/ModuleManager.swift @@ -206,9 +206,17 @@ class ModuleManager: ObservableObject { } func refreshModules() async { - for (index, module) in modules.enumerated() { + let modulesCopy = modules + var updatedModules: [(Int, ScrapingModule)] = [] + + for (index, module) in modulesCopy.enumerated() { do { - let (metadataData, _) = try await URLSession.custom.data(from: URL(string: module.metadataUrl)!) + guard let metadataUrl = URL(string: module.metadataUrl) else { + Logger.shared.log("Invalid metadata URL for module: \(module.metadata.sourceName)", type: "Error") + continue + } + + let (metadataData, _) = try await URLSession.custom.data(from: metadataUrl) let newMetadata = try JSONDecoder().decode(ModuleMetadata.self, from: metadataData) if newMetadata.version != module.metadata.version { @@ -232,14 +240,22 @@ class ModuleManager: ObservableObject { isActive: module.isActive ) - self.modules[index] = updatedModule - self.saveModules() - - Logger.shared.log("Updated module: \(module.metadata.sourceName) to version \(newMetadata.version)") + updatedModules.append((index, updatedModule)) + Logger.shared.log("Prepared update for module: \(module.metadata.sourceName) to version \(newMetadata.version)") } } catch { Logger.shared.log("Failed to refresh module: \(module.metadata.sourceName) - \(error.localizedDescription)") } } + + if !updatedModules.isEmpty { + for (index, updatedModule) in updatedModules { + if index < modules.count { + modules[index] = updatedModule + } + } + saveModules() + Logger.shared.log("Successfully updated \(updatedModules.count) modules") + } } }