diff --git a/TablePro/Extensions/UserDefaults+RecentDatabases.swift b/TablePro/Extensions/UserDefaults+RecentDatabases.swift deleted file mode 100644 index 9eaeeb1a..00000000 --- a/TablePro/Extensions/UserDefaults+RecentDatabases.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// UserDefaults+RecentDatabases.swift -// TablePro -// -// UserDefaults extension for tracking recently accessed databases per connection. -// - -import Foundation - -extension UserDefaults { - private static let recentDatabasesKey = "recentDatabases" - private static let maxRecentCount = 5 - - /// Get recent databases for a specific connection - /// - Parameter connectionId: The connection UUID - /// - Returns: Array of recently accessed database names (max 5, ordered by recency) - func recentDatabases(for connectionId: UUID) -> [String] { - guard let dict = dictionary(forKey: Self.recentDatabasesKey) as? [String: [String]] else { - return [] - } - return dict[connectionId.uuidString] ?? [] - } - - /// Track database access for a connection - /// - Parameters: - /// - database: Database name to track - /// - connectionId: The connection UUID - func trackDatabaseAccess(_ database: String, for connectionId: UUID) { - var dict = (dictionary(forKey: Self.recentDatabasesKey) as? [String: [String]]) ?? [:] - var recent = dict[connectionId.uuidString] ?? [] - - // Remove if already exists (will be added to front) - recent.removeAll { $0 == database } - - // Add to front - recent.insert(database, at: 0) - - // Keep only max count - if recent.count > Self.maxRecentCount { - recent = Array(recent.prefix(Self.maxRecentCount)) - } - - dict[connectionId.uuidString] = recent - set(dict, forKey: Self.recentDatabasesKey) - } - - /// Clear recent databases for a connection - /// - Parameter connectionId: The connection UUID - func clearRecentDatabases(for connectionId: UUID) { - var dict = (dictionary(forKey: Self.recentDatabasesKey) as? [String: [String]]) ?? [:] - dict.removeValue(forKey: connectionId.uuidString) - set(dict, forKey: Self.recentDatabasesKey) - } -} diff --git a/TablePro/ViewModels/DatabaseSwitcherViewModel.swift b/TablePro/ViewModels/DatabaseSwitcherViewModel.swift index 3d87267d..bc8ea7fa 100644 --- a/TablePro/ViewModels/DatabaseSwitcherViewModel.swift +++ b/TablePro/ViewModels/DatabaseSwitcherViewModel.swift @@ -25,7 +25,6 @@ final class DatabaseSwitcherViewModel { // MARK: - Published State var databases: [DatabaseMetadata] = [] - var recentDatabases: [String] = [] var searchText = "" var selectedDatabase: String? var isLoading = false @@ -54,19 +53,6 @@ final class DatabaseSwitcherViewModel { } } - var recentDatabaseMetadata: [DatabaseMetadata] { - recentDatabases.compactMap { dbName in - databases.first { $0.name == dbName } - } - } - - var allDatabases: [DatabaseMetadata] { - // Filter out recent databases from "all" list - filteredDatabases.filter { db in - !recentDatabases.contains(db.name) - } - } - // MARK: - Initialization init( @@ -78,7 +64,6 @@ final class DatabaseSwitcherViewModel { self.currentSchema = currentSchema self.databaseType = databaseType self.mode = PluginManager.shared.supportsSchemaSwitching(for: databaseType) ? .schema : .database - self.recentDatabases = UserDefaults.standard.recentDatabases(for: connectionId) } // MARK: - Public Methods @@ -152,12 +137,6 @@ final class DatabaseSwitcherViewModel { try await driver.createDatabase(name: name, charset: charset, collation: collation) } - /// Track database access - func trackAccess(database: String) { - UserDefaults.standard.trackDatabaseAccess(database, for: connectionId) - recentDatabases = UserDefaults.standard.recentDatabases(for: connectionId) - } - // MARK: - Private Methods private func preselectDatabase() { diff --git a/TablePro/Views/DatabaseSwitcher/DatabaseSwitcherSheet.swift b/TablePro/Views/DatabaseSwitcher/DatabaseSwitcherSheet.swift index da7c11bf..89f4b15d 100644 --- a/TablePro/Views/DatabaseSwitcher/DatabaseSwitcherSheet.swift +++ b/TablePro/Views/DatabaseSwitcher/DatabaseSwitcherSheet.swift @@ -192,36 +192,8 @@ struct DatabaseSwitcherSheet: View { private var databaseList: some View { ScrollViewReader { proxy in List(selection: $viewModel.selectedDatabase) { - // Recent section - if !viewModel.recentDatabaseMetadata.isEmpty { - Section { - ForEach(viewModel.recentDatabaseMetadata) { db in - databaseRow(db) - } - } header: { - Text("RECENT") - .font( - .system(size: ThemeEngine.shared.activeTheme.typography.caption, weight: .semibold) - ) - .foregroundStyle(.secondary) - } - } - - // All databases - Section { - ForEach(viewModel.allDatabases) { db in - databaseRow(db) - } - } header: { - if !viewModel.recentDatabaseMetadata.isEmpty { - Text(isSchemaMode - ? String(localized: "ALL SCHEMAS") - : String(localized: "ALL DATABASES")) - .font( - .system(size: ThemeEngine.shared.activeTheme.typography.caption, weight: .semibold) - ) - .foregroundStyle(.secondary) - } + ForEach(viewModel.filteredDatabases) { db in + databaseRow(db) } } .listStyle(.sidebar) @@ -403,7 +375,7 @@ struct DatabaseSwitcherSheet: View { // MARK: - Actions private func moveSelection(up: Bool) { - let allDbs = viewModel.recentDatabaseMetadata + viewModel.allDatabases + let allDbs = viewModel.filteredDatabases guard !allDbs.isEmpty else { return } // Defer state update to avoid "Publishing changes from within view updates" warning @@ -433,9 +405,6 @@ struct DatabaseSwitcherSheet: View { return } - // Track access - viewModel.trackAccess(database: database) - // Call appropriate callback if viewModel.isSchemaMode, PluginManager.shared.supportsSchemaSwitching(for: databaseType), let onSelectSchema { onSelectSchema(database)