improved cache logic
This commit is contained in:
@@ -11,21 +11,21 @@
|
||||
"channel": 2,
|
||||
"name": "Gelato",
|
||||
"on": true,
|
||||
"level_db": -6.25,
|
||||
"level_db": -0.25,
|
||||
"pan": 0
|
||||
},
|
||||
"3": {
|
||||
"channel": 3,
|
||||
"name": "Talkback",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"4": {
|
||||
"channel": 4,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"5": {
|
||||
@@ -46,91 +46,91 @@
|
||||
"channel": 7,
|
||||
"name": "Basso",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"8": {
|
||||
"channel": 8,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"9": {
|
||||
"channel": 9,
|
||||
"name": "Kick",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"10": {
|
||||
"channel": 10,
|
||||
"name": "Snare",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"11": {
|
||||
"channel": 11,
|
||||
"name": "Tom 1",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"12": {
|
||||
"channel": 12,
|
||||
"name": "Tom 2",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"13": {
|
||||
"channel": 13,
|
||||
"name": "Tom3",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"14": {
|
||||
"channel": 14,
|
||||
"name": "Pan SX",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"15": {
|
||||
"channel": 15,
|
||||
"name": "Pan dx",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"16": {
|
||||
"channel": 16,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"17": {
|
||||
"channel": 17,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"18": {
|
||||
"channel": 18,
|
||||
"name": "Archetto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"19": {
|
||||
"channel": 19,
|
||||
"name": "Vox 5",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"20": {
|
||||
@@ -144,14 +144,14 @@
|
||||
"channel": 21,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"22": {
|
||||
"channel": 22,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"23": {
|
||||
@@ -179,7 +179,7 @@
|
||||
"channel": 26,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"27": {
|
||||
@@ -193,35 +193,35 @@
|
||||
"channel": 28,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"29": {
|
||||
"channel": 29,
|
||||
"name": "Pad",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"30": {
|
||||
"channel": 30,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"31": {
|
||||
"channel": 31,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"32": {
|
||||
"channel": 32,
|
||||
"name": "Sconosciuto",
|
||||
"on": false,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"33": {
|
||||
@@ -242,42 +242,42 @@
|
||||
"channel": 35,
|
||||
"name": "ch35",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"36": {
|
||||
"channel": 36,
|
||||
"name": "ch36",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"37": {
|
||||
"channel": 37,
|
||||
"name": "ch37",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"38": {
|
||||
"channel": 38,
|
||||
"name": "ch38",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"39": {
|
||||
"channel": 39,
|
||||
"name": "ch39",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
},
|
||||
"40": {
|
||||
"channel": 40,
|
||||
"name": "ch40",
|
||||
"on": true,
|
||||
"level_db": -Infinity,
|
||||
"level_db": null,
|
||||
"pan": 0
|
||||
}
|
||||
},
|
||||
@@ -286,7 +286,7 @@
|
||||
"mix": 1,
|
||||
"name": "Sinistro",
|
||||
"on": true,
|
||||
"level_db": -Infinity
|
||||
"level_db": null
|
||||
},
|
||||
"2": {
|
||||
"mix": 2,
|
||||
@@ -310,7 +310,7 @@
|
||||
"mix": 5,
|
||||
"name": "batteria",
|
||||
"on": true,
|
||||
"level_db": 1.35
|
||||
"level_db": 1.1
|
||||
},
|
||||
"6": {
|
||||
"mix": 6,
|
||||
@@ -403,5 +403,5 @@
|
||||
"level_db": 6.0
|
||||
}
|
||||
},
|
||||
"timestamp": 1761592356.5132928
|
||||
"timestamp": 1761592662.917339
|
||||
}
|
||||
Binary file not shown.
@@ -63,7 +63,7 @@ class TF5MixerController:
|
||||
|
||||
except socket.error as e:
|
||||
print(f'Errore di connessione dopo {max_retries} tentativi: {e}')
|
||||
self._disconnect() # Forza riconnessione al prossimo tentativo
|
||||
self._disconnect()
|
||||
|
||||
if attempt < max_retries - 1:
|
||||
time.sleep(0.1)
|
||||
@@ -98,13 +98,30 @@ class TF5MixerController:
|
||||
return {"channels": {}, "mixes": {}, "timestamp": 0}
|
||||
|
||||
def _save_cache(self):
|
||||
"""Salva la cache nel file."""
|
||||
"""Salva la cache nel file, convertendo -inf in null."""
|
||||
try:
|
||||
# Crea una copia della cache per la serializzazione
|
||||
cache_to_save = self._prepare_cache_for_json(self._cache)
|
||||
|
||||
with open(CACHE_FILE, 'w', encoding='utf-8') as f:
|
||||
json.dump(self._cache, f, indent=2, ensure_ascii=False)
|
||||
json.dump(cache_to_save, f, indent=2, ensure_ascii=False)
|
||||
except Exception as e:
|
||||
print(f"⚠️ Errore nel salvataggio della cache: {e}")
|
||||
|
||||
def _prepare_cache_for_json(self, obj):
|
||||
"""Converte ricorsivamente -inf in null per la serializzazione JSON."""
|
||||
if isinstance(obj, dict):
|
||||
return {k: self._prepare_cache_for_json(v) for k, v in obj.items()}
|
||||
elif isinstance(obj, list):
|
||||
return [self._prepare_cache_for_json(item) for item in obj]
|
||||
elif isinstance(obj, float):
|
||||
# Converti -inf in null per JSON
|
||||
if obj == float('-inf'):
|
||||
return None
|
||||
return obj
|
||||
else:
|
||||
return obj
|
||||
|
||||
def _is_cache_valid(self) -> bool:
|
||||
"""Verifica se la cache è ancora valida."""
|
||||
if not self._cache.get("channels"):
|
||||
@@ -112,6 +129,12 @@ class TF5MixerController:
|
||||
cache_age = time.time() - self._cache.get("timestamp", 0)
|
||||
return cache_age < CACHE_DURATION
|
||||
|
||||
def _normalize_level_from_cache(self, level_value):
|
||||
"""Normalizza il valore del livello dalla cache (gestisce None come -inf)."""
|
||||
if level_value is None:
|
||||
return float('-inf')
|
||||
return level_value
|
||||
|
||||
def _update_channel_cache(self, channel: int):
|
||||
"""Aggiorna la cache per un singolo canale leggendo dal mixer.
|
||||
|
||||
@@ -555,10 +578,16 @@ class TF5MixerController:
|
||||
if not force_refresh and self._is_cache_valid():
|
||||
cached_data = self._cache.get("channels", {}).get(str(channel))
|
||||
if cached_data:
|
||||
# Normalizza level_db (None -> -inf)
|
||||
level_db = self._normalize_level_from_cache(cached_data.get("level_db"))
|
||||
return {
|
||||
"status": "success",
|
||||
"source": "cache",
|
||||
**cached_data
|
||||
"channel": cached_data["channel"],
|
||||
"name": cached_data["name"],
|
||||
"on": cached_data["on"],
|
||||
"level_db": level_db,
|
||||
"pan": cached_data.get("pan")
|
||||
}
|
||||
|
||||
# Altrimenti leggi dal mixer
|
||||
@@ -613,10 +642,15 @@ class TF5MixerController:
|
||||
if not force_refresh and self._is_cache_valid():
|
||||
cached_data = self._cache.get("mixes", {}).get(str(mix_number))
|
||||
if cached_data:
|
||||
# Normalizza level_db (None -> -inf)
|
||||
level_db = self._normalize_level_from_cache(cached_data.get("level_db"))
|
||||
return {
|
||||
"status": "success",
|
||||
"source": "cache",
|
||||
**cached_data
|
||||
"mix": cached_data["mix"],
|
||||
"name": cached_data["name"],
|
||||
"on": cached_data["on"],
|
||||
"level_db": level_db
|
||||
}
|
||||
|
||||
# Altrimenti leggi dal mixer
|
||||
@@ -664,11 +698,13 @@ class TF5MixerController:
|
||||
|
||||
for ch_str, info in self._cache.get("channels", {}).items():
|
||||
if search_lower in info.get("name", "").lower():
|
||||
# Normalizza level_db quando restituisci i risultati
|
||||
level_db = self._normalize_level_from_cache(info.get("level_db"))
|
||||
found_channels.append({
|
||||
"channel": info["channel"],
|
||||
"name": info["name"],
|
||||
"on": info["on"],
|
||||
"level_db": info["level_db"]
|
||||
"level_db": level_db
|
||||
})
|
||||
|
||||
# Ordina per numero canale
|
||||
@@ -701,11 +737,13 @@ class TF5MixerController:
|
||||
|
||||
for mix_str, info in self._cache.get("mixes", {}).items():
|
||||
if search_lower in info.get("name", "").lower():
|
||||
# Normalizza level_db quando restituisci i risultati
|
||||
level_db = self._normalize_level_from_cache(info.get("level_db"))
|
||||
found_mixes.append({
|
||||
"mix": info["mix"],
|
||||
"name": info["name"],
|
||||
"on": info["on"],
|
||||
"level_db": info["level_db"]
|
||||
"level_db": level_db
|
||||
})
|
||||
|
||||
# Ordina per numero mix
|
||||
@@ -781,5 +819,4 @@ class TF5MixerController:
|
||||
"mixes": mixes,
|
||||
"cache_age_seconds": int(cache_age),
|
||||
"message": f"Riepilogo di {len(mixes)} mix (cache: {int(cache_age)}s fa)"
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user