database id fixes

This commit is contained in:
Joe Fleming
2026-03-08 14:22:39 -06:00
parent d04af8d6dc
commit c768caa025
2 changed files with 114 additions and 43 deletions

37
app.py
View File

@@ -7,7 +7,7 @@ from textual.app import App, ComposeResult
from textual.containers import Container, Horizontal, Vertical
from textual.widgets import Header, Footer, Input, Button, Select, ListView, ListItem, DataTable, Label, Static
from textual.screen import ModalScreen
from typing import List, Optional
from typing import List, Optional, cast
from database import Database, Session
from datetime import datetime
import os
@@ -31,7 +31,8 @@ class MoveCopyDialog(ModalScreen):
def compose(self) -> ComposeResult:
# Get currently selected project from tree to exclude from destination list
current_project_id = self.app.filter_project_id if hasattr(self.app, 'filter_project_id') else None
main_app = cast("SessionMoverApp", self.app)
current_project_id = main_app.filter_project_id if hasattr(main_app, 'filter_project_id') else None
project_options = sorted(
[
@@ -68,7 +69,7 @@ class MoveCopyDialog(ModalScreen):
yield Button("Confirm", variant="primary", id="confirm-btn", disabled=True)
def on_mount(self) -> None:
self.query_one("#dialog").border_title = f"{'Copy' if self.is_copy else 'Move'} Sessions"
self.query_one("#dialog", Container).border_title = f"{'Copy' if self.is_copy else 'Move'} Sessions"
def on_select_changed(self, event):
if event.select.id == "project-select":
@@ -77,12 +78,12 @@ class MoveCopyDialog(ModalScreen):
self.target_workspace = event.value if event.value else None
self.update_preview()
confirm_btn = self.query_one("#confirm-btn")
confirm_btn = self.query_one("#confirm-btn", Button)
confirm_btn.disabled = not (self.target_project is not None)
def update_preview(self):
if not self.target_project:
preview = self.query_one("#sql-preview")
preview = self.query_one("#sql-preview", Static)
preview.update("Select a project to see preview")
return
@@ -111,7 +112,7 @@ class MoveCopyDialog(ModalScreen):
if self.is_copy:
lines.append("\nNote: Copy creates new sessions with all related data.")
self.query_one("#sql-preview").update("\n".join(lines))
self.query_one("#sql-preview", Static).update("\n".join(lines))
def on_button_pressed(self, event: Button.Pressed) -> None:
if event.button.id == "cancel-btn":
@@ -141,13 +142,11 @@ class MoveCopyDialog(ModalScreen):
)
if success:
self.app.notify(f"{'Copied' if self.is_copy else 'Moved'} {len(self.sessions)} session(s) successfully!", severity="information")
self.app.pop_screen()
# Get reference to main app and refresh
app = self.app
if hasattr(app, 'refresh_sessions'):
app.refresh_project_list()
app.refresh_sessions()
main_app = cast("SessionMoverApp", self.app)
main_app.notify(f"{'Copied' if self.is_copy else 'Moved'} {len(self.sessions)} session(s) successfully!", severity="information")
main_app.pop_screen()
main_app.refresh_project_list()
main_app.refresh_sessions()
else:
self.app.notify(f"Operation failed: {sql}", severity="error")
@@ -194,7 +193,7 @@ class DeleteConfirmDialog(ModalScreen):
yield Button("Delete", variant="error", id="confirm-btn")
def on_mount(self) -> None:
self.query_one("#dialog").border_title = "Confirm Delete"
self.query_one("#dialog", Container).border_title = "Confirm Delete"
def on_button_pressed(self, event: Button.Pressed) -> None:
if event.button.id == "cancel-btn":
@@ -470,8 +469,8 @@ class SessionMoverApp(App):
def refresh_sessions(self) -> None:
"""Update the sessions table."""
table = self.query_one("#sessions-table")
table = self.query_one("#sessions-table", DataTable)
# Save cursor position before clearing
cursor_row = table.cursor_row
cursor_column = table.cursor_column
@@ -509,7 +508,7 @@ class SessionMoverApp(App):
# Update selection count
count = len(self.selected_session_ids)
count_widget = self.query_one("#selection-count")
count_widget = self.query_one("#selection-count", Static)
if count > 0:
count_widget.update(f"{count} session(s) selected")
else:
@@ -542,7 +541,7 @@ class SessionMoverApp(App):
self.filter_project_id = proj_id
self.filter_workspace_id = None
status = self.query_one("#current-selection")
status = self.query_one("#current-selection", Static)
if proj:
status.update(f"📁 {proj.worktree}")
@@ -555,7 +554,7 @@ class SessionMoverApp(App):
def action_toggle_selection(self) -> None:
"""Toggle selection of current row."""
table = self.query_one("#sessions-table")
table = self.query_one("#sessions-table", DataTable)
row_key = table.cursor_row
if row_key is not None:
sessions = self.db.get_sessions(