github builds - hotfix

This commit is contained in:
rambros 2026-03-06 18:00:41 +05:30
parent a2e57bb158
commit 19750d2862
3 changed files with 49 additions and 9 deletions

View file

@ -10,6 +10,7 @@ import logging
import traceback import traceback
from pathlib import Path from pathlib import Path
from datetime import datetime from datetime import datetime
from typing import Any, Optional, Union, List, Dict, Callable
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -36,7 +37,9 @@ class BackupPane(Container):
.info_pane { width: 1fr; height: auto; } .info_pane { width: 1fr; height: auto; }
.info_pane Label { width: 100%; } .info_pane Label { width: 100%; }
.pane_header { text-style: bold; color: $accent; margin-bottom: 1; } .pane_header { text-style: bold; color: $accent; margin-bottom: 1; }
#bp_lbl_backup { text-style: bold; margin-top: 1; } .pane_status { text-style: bold; margin-top: 1; }
#bp_info_split Rule { height: 100%; margin: 0 2; color: $accent; }
#bp_lbl_backup { display: none; }
BackupPane #bp_actions { height: auto; } BackupPane #bp_actions { height: auto; }
BackupPane #bp_actions Button { width: 100%; margin-bottom: 1; } BackupPane #bp_actions Button { width: 100%; margin-bottom: 1; }
@ -58,12 +61,17 @@ class BackupPane(Container):
yield Label("Discord", classes="pane_header") yield Label("Discord", classes="pane_header")
yield Label("Server: -", id="bp_lbl_server") yield Label("Server: -", id="bp_lbl_server")
yield Label("Source: -", id="bp_lbl_bot") yield Label("Source: -", id="bp_lbl_bot")
yield Label("Status: -", id="bp_lbl_d_status", classes="pane_status")
yield Rule(orientation="vertical", id="bp_vrule")
with Vertical(classes="info_pane", id="bp_target_pane"): with Vertical(classes="info_pane", id="bp_target_pane"):
# Hidden in backup mode yield Label("Target", classes="pane_header")
pass yield Label("Community: -", id="bp_lbl_t_comm")
yield Label("Bot: -", id="bp_lbl_t_bot")
yield Label("Status: -", id="bp_lbl_t_status", classes="pane_status")
yield Rule() yield Label("", id="bp_lbl_backup")
yield Label("Status: -", id="bp_lbl_backup")
with Vertical(id="bp_actions"): with Vertical(id="bp_actions"):
yield Button("Backup Server Profile", id="bp_backup_profile", disabled=True) yield Button("Backup Server Profile", id="bp_backup_profile", disabled=True)
yield Button("Backup Channel Messages", id="bp_backup_msgs", disabled=True, variant="primary") yield Button("Backup Channel Messages", id="bp_backup_msgs", disabled=True, variant="primary")
@ -122,9 +130,16 @@ class BackupPane(Container):
try: try:
self.query_one("#bp_lbl_server", Label).update(f"Server: {server_text}") self.query_one("#bp_lbl_server", Label).update(f"Server: {server_text}")
self.query_one("#bp_lbl_bot", Label).update(f"Source: {bot_text}") self.query_one("#bp_lbl_bot", Label).update(f"Source: {bot_text}")
# Status for Discord side
d_status = "[green][VALID][/green]" if enabled else "[red][INVALID][/red]"
self.query_one("#bp_lbl_d_status", Label).update(f"Status: {d_status}")
# Legacy label for safety if called elsewhere
self.query_one("#bp_lbl_backup", Label).update(f"Status: {backup_text}") self.query_one("#bp_lbl_backup", Label).update(f"Status: {backup_text}")
# Hide target pane in backup # Hide target side in backup mode completely
self.query_one("#bp_vrule").display = False
self.query_one("#bp_target_pane").display = False self.query_one("#bp_target_pane").display = False
for bid in ("#bp_backup_profile", "#bp_backup_msgs", "#bp_backup_sync"): for bid in ("#bp_backup_profile", "#bp_backup_msgs", "#bp_backup_sync"):

View file

@ -11,6 +11,7 @@ from textual.screen import ModalScreen, Screen
import time import time
import logging import logging
import asyncio import asyncio
from typing import Any, Optional, Union, List, Dict, Callable
class UILogHandler(logging.Handler): class UILogHandler(logging.Handler):
"""Custom logging handler to send logs to the Textual UI RichLog.""" """Custom logging handler to send logs to the Textual UI RichLog."""

View file

@ -10,6 +10,7 @@ import time
import aiohttp import aiohttp
import traceback import traceback
from pathlib import Path from pathlib import Path
from typing import Any, Optional, Union, List, Dict, Callable
from textual.app import ComposeResult from textual.app import ComposeResult
from textual.containers import Container, Vertical, Horizontal, VerticalScroll from textual.containers import Container, Vertical, Horizontal, VerticalScroll
@ -89,7 +90,9 @@ class ShuttlePane(Container):
.info_pane { width: 1fr; height: auto; } .info_pane { width: 1fr; height: auto; }
.info_pane Label { width: 100%; } .info_pane Label { width: 100%; }
.pane_header { text-style: bold; color: $accent; margin-bottom: 1; } .pane_header { text-style: bold; color: $accent; margin-bottom: 1; }
#sp_lbl_status { text-style: bold; margin-top: 1; } .pane_status { text-style: bold; margin-top: 1; }
#sp_info_split Rule { height: 100%; margin: 0 2; color: $accent; }
#sp_lbl_status { display: none; }
ShuttlePane #sp_actions { height: auto; } ShuttlePane #sp_actions { height: auto; }
ShuttlePane #sp_actions Button { width: 100%; margin-bottom: 1; } ShuttlePane #sp_actions Button { width: 100%; margin-bottom: 1; }
@ -114,14 +117,17 @@ class ShuttlePane(Container):
yield Label("Discord", classes="pane_header") yield Label("Discord", classes="pane_header")
yield Label("Server: [yellow]Loading...[/yellow]", id="sp_lbl_d_server") yield Label("Server: [yellow]Loading...[/yellow]", id="sp_lbl_d_server")
yield Label("Bot: [yellow]Loading...[/yellow]", id="sp_lbl_d_bot") yield Label("Bot: [yellow]Loading...[/yellow]", id="sp_lbl_d_bot")
yield Label("Status: [yellow]Validating...[/yellow]", id="sp_lbl_d_status", classes="pane_status")
yield Rule(orientation="vertical")
with Vertical(classes="info_pane"): with Vertical(classes="info_pane"):
yield Label("Target", id="sp_lbl_t_header", classes="pane_header") yield Label("Target", id="sp_lbl_t_header", classes="pane_header")
yield Label("Community: [yellow]Loading...[/yellow]", id="sp_lbl_t_comm") yield Label("Community: [yellow]Loading...[/yellow]", id="sp_lbl_t_comm")
yield Label("Bot: [yellow]Loading...[/yellow]", id="sp_lbl_t_bot") yield Label("Bot: [yellow]Loading...[/yellow]", id="sp_lbl_t_bot")
yield Label("Status: [yellow]Validating...[/yellow]", id="sp_lbl_t_status", classes="pane_status")
yield Rule() yield Label("", id="sp_lbl_status")
yield Label("Status: [yellow]Validating...[/yellow]", id="sp_lbl_status")
with Vertical(id="sp_actions"): with Vertical(id="sp_actions"):
yield Button("Clone Server Template", id="sp_clone", disabled=True) yield Button("Clone Server Template", id="sp_clone", disabled=True)
yield Button("Sync Server Settings", id="sp_sync", disabled=True) yield Button("Sync Server Settings", id="sp_sync", disabled=True)
@ -174,6 +180,15 @@ class ShuttlePane(Container):
else: else:
self.query_one("#sp_lbl_d_bot", Label).update(f"Bot: {b_disp}") self.query_one("#sp_lbl_d_bot", Label).update(f"Bot: {b_disp}")
# Discord Side Status
if v.get("discord_token") and v.get("discord_server"):
d_status = "[green][VALID][/green]"
elif v.get("discord_timeout"):
d_status = "[red][TIMEOUT][/red]"
else:
d_status = "[red][INVALID][/red]"
self.query_one("#sp_lbl_d_status", Label).update(f"Status: {d_status}")
# Target # Target
plat = "Fluxer" if self.target_platform == "fluxer" else "Stoat" plat = "Fluxer" if self.target_platform == "fluxer" else "Stoat"
t_name = v.get("target_community_name") t_name = v.get("target_community_name")
@ -194,6 +209,15 @@ class ShuttlePane(Container):
self.query_one("#sp_lbl_t_comm", Label).update(f"Community: {c_disp}") self.query_one("#sp_lbl_t_comm", Label).update(f"Community: {c_disp}")
self.query_one("#sp_lbl_t_bot", Label).update(f"Bot: {tb_disp}") self.query_one("#sp_lbl_t_bot", Label).update(f"Bot: {tb_disp}")
# Target Side Status
if v.get("target_token") and v.get("target_community"):
t_status = "[green][VALID][/green]"
elif v.get("target_timeout"):
t_status = "[red][TIMEOUT][/red]"
else:
t_status = "[red][INVALID][/red]"
self.query_one("#sp_lbl_t_status", Label).update(f"Status: {t_status}")
# Status # Status
if not self.tokens_valid: if not self.tokens_valid:
val = "[red][INVALID][/red]" val = "[red][INVALID][/red]"