f624fee5e0
- SSH/SFTP управление без агентов - Пакеты (apt), Docker, файлы, systemd, ufw, cron - Плейбуки, групповые операции, планировщик - Бэкапы, отчёты, Portainer, Proxmox VE, Gitea Deploy - Терминал, Telegram-уведомления, тёмная/светлая тема
77 lines
3.4 KiB
Python
77 lines
3.4 KiB
Python
"""Настройки: 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)
|