diff --git a/internal/tui/archive_browser.go b/internal/tui/archive_browser.go index 321adfc..4988426 100755 --- a/internal/tui/archive_browser.go +++ b/internal/tui/archive_browser.go @@ -201,6 +201,12 @@ func (m ArchiveBrowserModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { if len(m.archives) > 0 && m.cursor < len(m.archives) { selected := m.archives[m.cursor] + // Handle diagnose mode - go directly to diagnosis view + if m.mode == "diagnose" { + diagnoseView := NewDiagnoseView(m.config, m.logger, m.parent, m.ctx, selected) + return diagnoseView, diagnoseView.Init() + } + // Validate selection based on mode if m.mode == "restore-cluster" && !selected.Format.IsClusterBackup() { m.message = errorStyle.Render("❌ Please select a cluster backup (.tar.gz)") @@ -250,6 +256,8 @@ func (m ArchiveBrowserModel) View() string { title = "📦 Select Archive to Restore (Single Database)" } else if m.mode == "restore-cluster" { title = "📦 Select Archive to Restore (Cluster)" + } else if m.mode == "diagnose" { + title = "🔍 Select Archive to Diagnose" } s.WriteString(titleStyle.Render(title)) diff --git a/internal/tui/menu.go b/internal/tui/menu.go index 8e3ce95..8853534 100755 --- a/internal/tui/menu.go +++ b/internal/tui/menu.go @@ -92,6 +92,7 @@ func NewMenuModel(cfg *config.Config, log logger.Logger) *MenuModel { "────────────────────────────────", "Restore Single Database", "Restore Cluster Backup", + "Diagnose Backup File", "List & Manage Backups", "────────────────────────────────", "View Active Operations", @@ -163,19 +164,21 @@ func (m *MenuModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.handleRestoreSingle() case 5: // Restore Cluster Backup return m.handleRestoreCluster() - case 6: // List & Manage Backups + case 6: // Diagnose Backup File + return m.handleDiagnoseBackup() + case 7: // List & Manage Backups return m.handleBackupManager() - case 8: // View Active Operations + case 9: // View Active Operations return m.handleViewOperations() - case 9: // Show Operation History + case 10: // Show Operation History return m.handleOperationHistory() - case 10: // Database Status + case 11: // Database Status return m.handleStatus() - case 11: // Settings + case 12: // Settings return m.handleSettings() - case 12: // Clear History + case 13: // Clear History m.message = "🗑️ History cleared" - case 13: // Quit + case 14: // Quit if m.cancel != nil { m.cancel() } @@ -244,21 +247,23 @@ func (m *MenuModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m.handleRestoreSingle() case 5: // Restore Cluster Backup return m.handleRestoreCluster() - case 6: // List & Manage Backups + case 6: // Diagnose Backup File + return m.handleDiagnoseBackup() + case 7: // List & Manage Backups return m.handleBackupManager() - case 7: // Separator + case 8: // Separator // Do nothing - case 8: // View Active Operations + case 9: // View Active Operations return m.handleViewOperations() - case 9: // Show Operation History + case 10: // Show Operation History return m.handleOperationHistory() - case 10: // Database Status + case 11: // Database Status return m.handleStatus() - case 11: // Settings + case 12: // Settings return m.handleSettings() - case 12: // Clear History + case 13: // Clear History m.message = "🗑️ History cleared" - case 13: // Quit + case 14: // Quit if m.cancel != nil { m.cancel() } @@ -407,6 +412,12 @@ func (m *MenuModel) handleBackupManager() (tea.Model, tea.Cmd) { return manager, manager.Init() } +// handleDiagnoseBackup opens archive browser for diagnosis +func (m *MenuModel) handleDiagnoseBackup() (tea.Model, tea.Cmd) { + browser := NewArchiveBrowser(m.config, m.logger, m, m.ctx, "diagnose") + return browser, browser.Init() +} + func (m *MenuModel) applyDatabaseSelection() { if m == nil || len(m.dbTypes) == 0 { return