From 8cc94bcd99f57703c5e5a5d476c8e75274ed5250 Mon Sep 17 00:00:00 2001 From: nkoexe Date: Mon, 7 Oct 2024 14:58:40 +0200 Subject: [PATCH] config trigger system, seasonal themes trigger --- sostituzioni/control/configurazione.py | 30 ++++++++++++++++++- .../database/configurazione.json.template | 10 +++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/sostituzioni/control/configurazione.py b/sostituzioni/control/configurazione.py index ce6499e..7adafe2 100644 --- a/sostituzioni/control/configurazione.py +++ b/sostituzioni/control/configurazione.py @@ -103,6 +103,7 @@ def __init__( titolo = dati.get("titolo", "") descrizione = dati.get("descrizione", "") sezione = dati.get("sezione", "") + trigger = dati.get("trigger", None) disabilitato = dati.get("disabilitato", False) nascosto = dati.get("nascosto", False) tipo = dati.get("tipo", "") @@ -113,6 +114,7 @@ def __init__( titolo = "" descrizione = "" sezione = parent.sezione + trigger = parent.trigger disabilitato = dati.get("disabilitato", False) nascosto = dati.get("nascosto", False) tipo = parent.tipo_valori @@ -124,6 +126,7 @@ def __init__( self.titolo: str = titolo self.descrizione: str = descrizione self.sezione: str = sezione + self.trigger: str | None = trigger self.disabilitato: bool = disabilitato self.nascosto: bool = nascosto self.tipo: str = tipo @@ -203,6 +206,7 @@ def aggiorna(self, template): self.titolo = template.titolo self.descrizione = template.descrizione self.sezione = template.sezione + self.trigger = template.trigger self.disabilitato = template.disabilitato self.nascosto = template.nascosto self.tipo = template.tipo @@ -505,6 +509,7 @@ def esporta(self): "titolo": self.titolo, "descrizione": self.descrizione, "sezione": self.sezione, + "trigger": self.trigger, "disabilitato": self.disabilitato, "nascosto": self.nascosto, "tipo": self.tipo, @@ -581,6 +586,7 @@ def esporta(self): class Configurazione: @beartype def __init__(self): + self.trigger = set() self.aggiornamento_disponibile = False self.extra_themes = [] self.shell_commands = {} @@ -746,6 +752,24 @@ def check_update(self): return self.aggiornamento_disponibile + @beartype + def esegui_trigger(self): + if "reboot" in self.trigger: + # decidere come gestire il reboot, per ora lasciare il trigger e segnalare il frontend + pass + + if "display" in self.trigger: + # aggiorna il display fisico + self.trigger.remove("display") + + if "seasonalthemes" in self.trigger: + from sostituzioni.control.cron import update_seasonal_themes + + update_seasonal_themes() + self.trigger.remove("seasonalthemes") + + return True + def __repr__(self): return "Configurazione Sistema" @@ -795,11 +819,15 @@ def set( logger.warning(f"Setter: id {id_opzione} non riconosciuto.") return False - res = self.opzioni.get(id_opzione).set(dati, force) + opzione = self.opzioni.get(id_opzione) + self.trigger.add(opzione.trigger) + res = opzione.set(dati, force) if salva: self.esporta() + self.esegui_trigger() + return res @beartype diff --git a/sostituzioni/database/configurazione.json.template b/sostituzioni/database/configurazione.json.template index 46f299c..8793c2d 100644 --- a/sostituzioni/database/configurazione.json.template +++ b/sostituzioni/database/configurazione.json.template @@ -62,6 +62,7 @@ "titolo": "Temi Stagionali", "descrizione": "Abilita l'uso di temi stagionali in certi momenti dell'anno. Fiocchi a Natale, ragnatele ad Halloween...", "sezione": "sistema", + "trigger": "seasonalthemes", "disabilitato": false, "nascosto": false, "tipo": "booleano", @@ -72,6 +73,7 @@ "titolo": "Stato del sistema", "descrizione": "Utilizzare la modalità \"In Produzione\" per l'utilizzo regolare. Utilizzare modalità \"In Manutenzione\" per il debug del sistema.", "sezione": "sistema", + "trigger": "reboot", "disabilitato": false, "nascosto": false, "tipo": "selezione", @@ -187,6 +189,7 @@ "titolo": "Gestore Single Sign-On", "descrizione": "Scelta se utilizzare account Google oppure Microsoft per eseguire l'accesso al sistema.", "sezione": "login", + "trigger": "reboot", "disabilitato": false, "nascosto": false, "tipo": "selezione", @@ -256,6 +259,7 @@ "titolo": "Durata della sessione", "descrizione": "Minuti di inattività dopo i quali bisognerà eseguire nuovamente il login. Impostare a -1 per disabilitare il logout automatico.", "sezione": "login", + "trigger": "reboot", "disabilitato": false, "nascosto": false, "tipo": "numero", @@ -346,6 +350,7 @@ "titolo": "Errore nessuna sostituzione", "descrizione": "Testo che verrà mostrato quando non ci sono sostituzioni future e la lista è vuota.", "sezione": "visualizzazionefisica", + "trigger": "display", "disabilitato": false, "nascosto": false, "tipo": "testo", @@ -357,6 +362,7 @@ "titolo": "Numero di Giorni da Visualizzare", "descrizione": "Visualizza le sostituzioni per il numero di giorni futuri specificato, incluso il giorno corrente. Ad esempio, impostando a 3, se il giorno corrente è lunedì verranno mostrate le sostituzioni fino a mercoledì incluso. Viene considerato giorno lavorativo un qualsiasi giorno che abbia una sostituzione. Imposta a -1 per disabilitare il limite e mostrare tutte le sostituzioni future.", "sezione": "visualizzazionefisica", + "trigger": "display", "disabilitato": false, "nascosto": false, "tipo": "numero_unita", @@ -377,6 +383,7 @@ "titolo": "Codici di autorizzazione", "descrizione": "Il display dovrà inviare uno di questi codici per poter stabilire un collegamento.", "sezione": "visualizzazionefisica", + "trigger": "display", "disabilitato": false, "nascosto": false, "tipo": "lista", @@ -392,6 +399,7 @@ "titolo": "Mostra Codice QR", "descrizione": "Mostra un codice QR sul display che porta alla versione online della pagina.", "sezione": "visualizzazionefisica", + "trigger": "display", "disabilitato": false, "nascosto": false, "tipo": "booleano", @@ -402,6 +410,7 @@ "titolo": "Intervallo di scorrimento eventi", "descrizione": "Imposta il tempo, in secondi, dopo il quale la lista degli eventi passa automaticamente alla pagina successiva.", "sezione": "visualizzazionefisica", + "trigger": "display", "disabilitato": false, "nascosto": false, "tipo": "numero", @@ -416,6 +425,7 @@ "titolo": "Intervallo di scorrimento sostituzioni", "descrizione": "Imposta il tempo, in secondi, dopo il quale la lista delle sostituzioni passa automaticamente alla pagina successiva.", "sezione": "visualizzazionefisica", + "trigger": "display", "disabilitato": false, "nascosto": false, "tipo": "numero",