Added watchdog support

This commit is contained in:
Ignacio Serantes
2026-03-28 07:13:16 +01:00
parent 096cee6ca3
commit d4f3732aa4
7 changed files with 661 additions and 92 deletions

View File

@@ -35,8 +35,8 @@ from PySide6.QtCore import (
from PySide6.QtGui import QImage, QImageReader, QImageIOHandler
from constants import (
APP_CONFIG, CACHE_PATH, CACHE_MAX_SIZE, CONFIG_DIR, DISK_CACHE_MAX_BYTES,
HAVE_BAGHEERASEARCH_LIB, IMAGE_EXTENSIONS,
APP_CONFIG, CACHE_PATH, CACHE_MAX_SIZE, CACHE_MAX_RAM_BYTES, CONFIG_DIR,
DISK_CACHE_MAX_BYTES, HAVE_BAGHEERASEARCH_LIB, IMAGE_EXTENSIONS,
SCANNER_SETTINGS_DEFAULTS, SEARCH_CMD, THUMBNAIL_SIZES,
UITexts
)
@@ -646,12 +646,10 @@ class ThumbnailCache(QObject):
def _ensure_cache_limit(self):
"""Enforces cache size limit by evicting oldest entries.
Must be called with a write lock held."""
# Safety limit: 512MB for thumbnails in RAM to prevent system freeze
MAX_RAM_BYTES = 512 * 1024 * 1024
while len(self._thumbnail_cache) > 0 and (
len(self._thumbnail_cache) >= CACHE_MAX_SIZE or
self._cache_bytes_size > MAX_RAM_BYTES):
self._cache_bytes_size > CACHE_MAX_RAM_BYTES):
oldest_path = next(iter(self._thumbnail_cache))
cached_sizes = self._thumbnail_cache.pop(oldest_path)
for img, _ in cached_sizes.values():
@@ -1752,6 +1750,10 @@ class ImageScanner(QThread):
batch.append(r.result)
self.count += 1
images_loaded += 1
# Emit progress every time an image is loaded
if len(self.all_files) > 0:
percent = int((self.count / len(self.all_files)) * 100)
self.progress_percent.emit(percent)
# Clean up runnables
runnables.clear()
@@ -1796,12 +1798,11 @@ class ImageScanner(QThread):
"scan_batch_size"]))
return
if self.count % 10 == 0: # Update progress less frequently
self.progress_msg.emit(
UITexts.LOADING_SCAN.format(self.count, len(self.all_files)))
if len(self.all_files) > 0:
percent = int((self.count / len(self.all_files)) * 100)
self.progress_percent.emit(percent)
# Emit progress message less frequently, e.g., every 50 images or at batch
# end
if self.count % 50 == 0 or images_loaded >= to_load:
self.progress_msg.emit(UITexts.LOADING_SCAN.format(
self.count, len(self.all_files)))
self.index = len(self.all_files)
if batch: