Compare commits

...

2 Commits

Author SHA1 Message Date
Josh Hawkins
92a0dad2c2
Catch json decode exception (#19323)
* Catch json decode exception when semantic search stats file is corrupted

* clear stats file if corrupted
2025-07-29 13:38:13 -05:00
Nicolas Mowen
4f4c8a4fb9
Center camera in layout when only one camera is filtered (#19319) 2025-07-29 09:15:37 -05:00
2 changed files with 11 additions and 2 deletions

View File

@ -7,6 +7,7 @@ import multiprocessing as mp
import os import os
import signal import signal
import threading import threading
from json.decoder import JSONDecodeError
from types import FrameType from types import FrameType
from typing import Any, Optional, Union from typing import Any, Optional, Union
@ -73,13 +74,21 @@ class EmbeddingsContext:
self.requestor = EmbeddingsRequestor() self.requestor = EmbeddingsRequestor()
# load stats from disk # load stats from disk
stats_file = os.path.join(CONFIG_DIR, ".search_stats.json")
try: try:
with open(os.path.join(CONFIG_DIR, ".search_stats.json"), "r") as f: with open(stats_file, "r") as f:
data = json.loads(f.read()) data = json.loads(f.read())
self.thumb_stats.from_dict(data["thumb_stats"]) self.thumb_stats.from_dict(data["thumb_stats"])
self.desc_stats.from_dict(data["desc_stats"]) self.desc_stats.from_dict(data["desc_stats"])
except FileNotFoundError: except FileNotFoundError:
pass pass
except JSONDecodeError:
logger.warning("Failed to decode semantic search stats, clearing file")
try:
with open(stats_file, "w") as f:
f.write("")
except OSError as e:
logger.error(f"Failed to clear corrupted stats file: {e}")
def stop(self): def stop(self):
"""Write the stats to disk as JSON on exit.""" """Write the stats to disk as JSON on exit."""

View File

@ -657,7 +657,7 @@ export function RecordingView({
containerRef={mainLayoutRef} containerRef={mainLayoutRef}
/> />
</div> </div>
{isDesktop && ( {isDesktop && allCameras.length > 1 && (
<div <div
ref={previewRowRef} ref={previewRowRef}
className={cn( className={cn(