diff --git a/Sora/Utils/Modules/ModuleManager.swift b/Sora/Utils/Modules/ModuleManager.swift index e8ae65c..5f44c03 100644 --- a/Sora/Utils/Modules/ModuleManager.swift +++ b/Sora/Utils/Modules/ModuleManager.swift @@ -9,6 +9,7 @@ import Foundation class ModuleManager: ObservableObject { @Published var modules: [ScrapingModule] = [] + @Published var selectedModuleChanged = false private let fileManager = FileManager.default private let modulesFileName = "modules.json" @@ -180,6 +181,7 @@ class ModuleManager: ObservableObject { DispatchQueue.main.async { self.modules.append(module) self.saveModules() + self.selectedModuleChanged = true Logger.shared.log("Added module: \(module.metadata.sourceName)") } diff --git a/Sora/Views/SearchView.swift b/Sora/Views/SearchView.swift index fbd31ce..ce2cf7d 100644 --- a/Sora/Views/SearchView.swift +++ b/Sora/Views/SearchView.swift @@ -158,22 +158,43 @@ struct SearchView: View { .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Menu { - ForEach(getModuleLanguageGroups(), id: \.self) { language in - Menu(language) { - ForEach(getModulesForLanguage(language), id: \.id) { module in - Button { - selectedModuleId = module.id.uuidString - } label: { - HStack { - KFImage(URL(string: module.metadata.iconUrl)) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 20, height: 20) - .cornerRadius(4) - Text(module.metadata.sourceName) - if module.id.uuidString == selectedModuleId { - Image(systemName: "checkmark") - .foregroundColor(.accentColor) + if getModuleLanguageGroups().count == 1 { + ForEach(moduleManager.modules, id: \.id) { module in + Button { + selectedModuleId = module.id.uuidString + } label: { + HStack { + KFImage(URL(string: module.metadata.iconUrl)) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 20, height: 20) + .cornerRadius(4) + Text(module.metadata.sourceName) + if module.id.uuidString == selectedModuleId { + Image(systemName: "checkmark") + .foregroundColor(.accentColor) + } + } + } + } + } else { + ForEach(getModuleLanguageGroups(), id: \.self) { language in + Menu(language) { + ForEach(getModulesForLanguage(language), id: \.id) { module in + Button { + selectedModuleId = module.id.uuidString + } label: { + HStack { + KFImage(URL(string: module.metadata.iconUrl)) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 20, height: 20) + .cornerRadius(4) + Text(module.metadata.sourceName) + if module.id.uuidString == selectedModuleId { + Image(systemName: "checkmark") + .foregroundColor(.accentColor) + } } } } @@ -205,6 +226,14 @@ struct SearchView: View { performSearch() } } + .onChange(of: moduleManager.selectedModuleChanged) { _ in + if moduleManager.selectedModuleChanged { + if selectedModuleId == nil && !moduleManager.modules.isEmpty { + selectedModuleId = moduleManager.modules[0].id.uuidString + } + moduleManager.selectedModuleChanged = false + } + } .onChange(of: searchText) { newValue in if newValue.isEmpty { searchItems = [] diff --git a/Sulfur.xcodeproj/project.pbxproj b/Sulfur.xcodeproj/project.pbxproj index 24f4e25..6021fd8 100644 --- a/Sulfur.xcodeproj/project.pbxproj +++ b/Sulfur.xcodeproj/project.pbxproj @@ -302,9 +302,9 @@ 133D7C882D2BE2640075467E /* Modules */ = { isa = PBXGroup; children = ( - 1EF5C3A82DB988D70032BF07 /* CommunityLib.swift */, 13D99CF62D4E73C300250A86 /* ModuleAdditionSettingsView.swift */, 139935652D468C450065CEFF /* ModuleManager.swift */, + 1EF5C3A82DB988D70032BF07 /* CommunityLib.swift */, 133D7C892D2BE2640075467E /* Modules.swift */, ); path = Modules;