Initial commit: Debian Manager — управление Debian-серверами
- SSH/SFTP управление без агентов - Пакеты (apt), Docker, файлы, systemd, ufw, cron - Плейбуки, групповые операции, планировщик - Бэкапы, отчёты, Portainer, Proxmox VE, Gitea Deploy - Терминал, Telegram-уведомления, тёмная/светлая тема
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
"""Настройки: Telegram, Gitea."""
|
||||
import flet as ft
|
||||
|
||||
from app.core import notify
|
||||
from app.ui.components import snack
|
||||
|
||||
|
||||
class SettingsPage(ft.Column):
|
||||
def __init__(self, page: ft.Page, go):
|
||||
super().__init__(expand=True, scroll=ft.ScrollMode.AUTO, spacing=12)
|
||||
self._page = page
|
||||
|
||||
cfg = notify.get_config()
|
||||
self.tg_token = ft.TextField(label="Bot token", value=cfg["token"],
|
||||
password=True, width=400)
|
||||
self.tg_chat = ft.TextField(label="Chat ID", value=cfg["chat_id"], width=400)
|
||||
self.tg_enabled = ft.Checkbox(label="Уведомления включены", value=cfg["enabled"])
|
||||
self.tg_alert = ft.Checkbox(label="Алерты мониторинга", value=cfg["on_alert"])
|
||||
self.tg_task = ft.Checkbox(label="Завершение задач", value=cfg["on_task_done"])
|
||||
self.tg_status = ft.Text("", size=12)
|
||||
|
||||
self.controls = [
|
||||
ft.Text("Настройки", size=28, weight=ft.FontWeight.BOLD),
|
||||
ft.Card(content=ft.Container(padding=16, content=ft.Column([
|
||||
ft.Text("Интерфейс", weight=ft.FontWeight.BOLD, size=16),
|
||||
ft.Row([
|
||||
ft.Text("Тема:", size=13),
|
||||
ft.FilledButton(
|
||||
"Сменить тему (тёмная/светлая)",
|
||||
icon=ft.Icons.BRIGHTNESS_6,
|
||||
on_click=self._toggle_theme,
|
||||
),
|
||||
]),
|
||||
], spacing=10))),
|
||||
ft.Card(content=ft.Container(padding=16, content=ft.Column([
|
||||
ft.Text("Telegram-уведомления", weight=ft.FontWeight.BOLD, size=16),
|
||||
ft.Text("Создайте бота через @BotFather, узнайте chat_id через @userinfobot",
|
||||
size=12, color=ft.Colors.GREY_500),
|
||||
self.tg_token,
|
||||
self.tg_chat,
|
||||
self.tg_enabled,
|
||||
self.tg_alert,
|
||||
self.tg_task,
|
||||
ft.Row([
|
||||
ft.FilledButton("Сохранить", icon=ft.Icons.SAVE, on_click=self._save),
|
||||
ft.OutlinedButton("Тест", icon=ft.Icons.SEND, on_click=self._test),
|
||||
]),
|
||||
self.tg_status,
|
||||
], spacing=10))),
|
||||
]
|
||||
|
||||
def _toggle_theme(self, e):
|
||||
from app.db.database import get_session
|
||||
from app.db.models import Setting
|
||||
new = "light" if self._page.theme_mode == ft.ThemeMode.DARK else "dark"
|
||||
self._page.theme_mode = ft.ThemeMode.LIGHT if new == "light" else ft.ThemeMode.DARK
|
||||
with get_session() as s:
|
||||
row = s.get(Setting, "theme") or Setting(key="theme")
|
||||
row.value = new
|
||||
s.add(row)
|
||||
s.commit()
|
||||
self._page.update()
|
||||
|
||||
def _save(self, e):
|
||||
notify.save_config(self.tg_token.value, self.tg_chat.value,
|
||||
self.tg_enabled.value, self.tg_alert.value, self.tg_task.value)
|
||||
snack(self._page, "Настройки сохранены")
|
||||
|
||||
def _test(self, e):
|
||||
self._save(e)
|
||||
async def _t():
|
||||
ok, msg = await notify.test()
|
||||
self.tg_status.value = ("✅ " if ok else "❌ ") + msg
|
||||
self.tg_status.color = ft.Colors.GREEN_300 if ok else ft.Colors.RED_300
|
||||
self._page.update()
|
||||
self._page.run_task(_t)
|
||||
Reference in New Issue
Block a user