Implement Add Request to create new tab for project

This commit is contained in:
Pavel Baksy 2026-01-14 22:24:03 +01:00
parent bd444ea0e5
commit 8cd7eefdd8
2 changed files with 19 additions and 43 deletions

View File

@ -1,5 +1,5 @@
project('roster',
version: '0.6.1',
version: '0.6.2',
meson_version: '>= 1.0.0',
default_options: [ 'warning_level=2', 'werror=false', ],
)

View File

@ -1082,7 +1082,7 @@ class RosterWindow(Adw.ApplicationWindow):
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=12)
# Check if current tab has a saved request (for pre-filling)
# Check if current tab has a saved request or project (for pre-filling)
current_tab = None
preselect_project_index = 0
prefill_name = ""
@ -1097,7 +1097,13 @@ class RosterWindow(Adw.ApplicationWindow):
preselect_project_index = i
prefill_name = current_tab.name
break
elif current_tab.name and current_tab.name != "New Request":
elif current_tab.project_id:
# Tab associated with a project (e.g., from "Add Request")
for i, p in enumerate(projects):
if p.id == current_tab.project_id:
preselect_project_index = i
break
if current_tab.name and current_tab.name != "New Request":
# Copy tab or named unsaved tab - prefill with tab name
prefill_name = current_tab.name
@ -1261,48 +1267,18 @@ class RosterWindow(Adw.ApplicationWindow):
dialog.present(self)
def _on_add_to_project(self, widget, project):
"""Save current request to specific project."""
request = self._build_request_from_ui()
"""Create a new empty request tab associated with the project."""
# Get default environment for the project
default_env_id = project.environments[0].id if project.environments else None
if not request.url.strip():
self._show_toast("Cannot save: URL is empty")
return
# Create a new tab with project_id set so Save will pre-select this project
self._create_new_tab(
name="New Request",
project_id=project.id,
selected_environment_id=default_env_id
)
dialog = Adw.AlertDialog()
dialog.set_heading(f"Save to {project.name}")
dialog.set_body("Enter a name for this request:")
entry = Gtk.Entry()
entry.set_placeholder_text("Request name")
dialog.set_extra_child(entry)
dialog.add_response("cancel", "Cancel")
dialog.add_response("save", "Save")
dialog.set_response_appearance("save", Adw.ResponseAppearance.SUGGESTED)
def on_response(dlg, response):
if response == "save":
name = entry.get_text().strip()
is_valid, error_msg = self._validate_request_name(name)
if is_valid:
# Check for duplicate name
existing = self.project_manager.find_request_by_name(project.id, name)
if existing:
# Show overwrite confirmation
self._show_overwrite_dialog(project, name, existing.id, request)
else:
# No duplicate, save normally
saved_request = self.project_manager.add_request(project.id, name, request)
self._load_projects()
self._show_toast(f"Saved as '{name}'")
# Clear modified flag on current tab
self._mark_tab_as_saved(saved_request.id, name, request)
else:
self._show_toast(error_msg)
dialog.connect("response", on_response)
dialog.present(self)
self._show_toast(f"New request for '{project.name}'")
def _on_load_request(self, widget, saved_request):
"""Load saved request - smart loading based on current tab state."""