diff --git a/backend/config/config_manager.py b/backend/config/config_manager.py index a98bd14e2..690dc3ec8 100644 --- a/backend/config/config_manager.py +++ b/backend/config/config_manager.py @@ -28,6 +28,34 @@ from logger.logger import log ROMM_USER_CONFIG_PATH: Final = f"{ROMM_BASE_PATH}/config" ROMM_USER_CONFIG_FILE: Final = f"{ROMM_USER_CONFIG_PATH}/config.yml" SQLITE_DB_BASE_PATH: Final = f"{ROMM_BASE_PATH}/database" +DEFAULT_EXCLUDED_EXTENSIONS: Final = [ + "db", + "ini", + "tmp", + "bak", + "lock", + "log", + "cache", + "crdownload", +] +DEFAULT_EXCLUDED_FILES: Final = [ + ".DS_Store", + ".localized", + ".Trashes", + ".stfolder", + "@SynoResource", +] +DEFAULT_EXCLUDED_DIRS: Final = [ + "@eaDir", + "__MACOSX", + "$RECYCLE.BIN", + ".Trash-*", + ".stfolder", + ".Spotlight-V100", + ".fseventsd", + ".DocumentRevisions-V100", + "System Volume Information", +] class EjsControlsButton(TypedDict): @@ -194,27 +222,39 @@ class ConfigManager: self.config = Config( CONFIG_FILE_MOUNTED=self._config_file_mounted, CONFIG_FILE_WRITABLE=self._config_file_writable, - EXCLUDED_PLATFORMS=pydash.get(self._raw_config, "exclude.platforms", []), + EXCLUDED_PLATFORMS=pydash.get( + self._raw_config, "exclude.platforms", DEFAULT_EXCLUDED_DIRS + ), EXCLUDED_SINGLE_EXT=[ e.lower() for e in pydash.get( - self._raw_config, "exclude.roms.single_file.extensions", [] + self._raw_config, + "exclude.roms.single_file.extensions", + DEFAULT_EXCLUDED_EXTENSIONS, ) ], EXCLUDED_SINGLE_FILES=pydash.get( - self._raw_config, "exclude.roms.single_file.names", [] + self._raw_config, + "exclude.roms.single_file.names", + DEFAULT_EXCLUDED_FILES, ), EXCLUDED_MULTI_FILES=pydash.get( - self._raw_config, "exclude.roms.multi_file.names", [] + self._raw_config, + "exclude.roms.multi_file.names", + DEFAULT_EXCLUDED_DIRS, ), EXCLUDED_MULTI_PARTS_EXT=[ e.lower() for e in pydash.get( - self._raw_config, "exclude.roms.multi_file.parts.extensions", [] + self._raw_config, + "exclude.roms.multi_file.parts.extensions", + DEFAULT_EXCLUDED_EXTENSIONS, ) ], EXCLUDED_MULTI_PARTS_FILES=pydash.get( - self._raw_config, "exclude.roms.multi_file.parts.names", [] + self._raw_config, + "exclude.roms.multi_file.parts.names", + DEFAULT_EXCLUDED_FILES, ), PLATFORMS_BINDING=pydash.get(self._raw_config, "system.platforms", {}), PLATFORMS_VERSIONS=pydash.get(self._raw_config, "system.versions", {}), diff --git a/backend/tests/config/test_config_loader.py b/backend/tests/config/test_config_loader.py index 44bf9f163..c1792858a 100644 --- a/backend/tests/config/test_config_loader.py +++ b/backend/tests/config/test_config_loader.py @@ -1,7 +1,12 @@ import os from pathlib import Path -from config.config_manager import ConfigManager +from config.config_manager import ( + DEFAULT_EXCLUDED_DIRS, + DEFAULT_EXCLUDED_EXTENSIONS, + DEFAULT_EXCLUDED_FILES, + ConfigManager, +) def test_config_loader(): @@ -58,12 +63,16 @@ def test_empty_config_loader(): ) ) - assert loader.config.EXCLUDED_PLATFORMS == [] - assert loader.config.EXCLUDED_SINGLE_EXT == [] - assert loader.config.EXCLUDED_SINGLE_FILES == [] - assert loader.config.EXCLUDED_MULTI_FILES == [] - assert loader.config.EXCLUDED_MULTI_PARTS_EXT == [] - assert loader.config.EXCLUDED_MULTI_PARTS_FILES == [] + assert loader.config.EXCLUDED_PLATFORMS == DEFAULT_EXCLUDED_DIRS + assert loader.config.EXCLUDED_SINGLE_EXT == [ + e.lower() for e in DEFAULT_EXCLUDED_EXTENSIONS + ] + assert loader.config.EXCLUDED_SINGLE_FILES == DEFAULT_EXCLUDED_FILES + assert loader.config.EXCLUDED_MULTI_FILES == DEFAULT_EXCLUDED_DIRS + assert loader.config.EXCLUDED_MULTI_PARTS_EXT == [ + e.lower() for e in DEFAULT_EXCLUDED_EXTENSIONS + ] + assert loader.config.EXCLUDED_MULTI_PARTS_FILES == DEFAULT_EXCLUDED_FILES assert loader.config.PLATFORMS_BINDING == {} assert loader.config.PLATFORMS_VERSIONS == {} assert loader.config.ROMS_FOLDER_NAME == "roms" diff --git a/backend/tests/endpoints/test_config.py b/backend/tests/endpoints/test_config.py index 4a892f34e..64361367f 100644 --- a/backend/tests/endpoints/test_config.py +++ b/backend/tests/endpoints/test_config.py @@ -3,6 +3,12 @@ from fastapi import status from fastapi.testclient import TestClient from main import app +from config.config_manager import ( + DEFAULT_EXCLUDED_DIRS, + DEFAULT_EXCLUDED_EXTENSIONS, + DEFAULT_EXCLUDED_FILES, +) + @pytest.fixture def client(): @@ -15,11 +21,15 @@ def test_config(client): assert response.status_code == status.HTTP_200_OK config = response.json() - assert config.get("EXCLUDED_PLATFORMS") == [] - assert config.get("EXCLUDED_SINGLE_EXT") == [] - assert config.get("EXCLUDED_SINGLE_FILES") == [] - assert config.get("EXCLUDED_MULTI_FILES") == [] - assert config.get("EXCLUDED_MULTI_PARTS_EXT") == [] - assert config.get("EXCLUDED_MULTI_PARTS_FILES") == [] + assert config.get("EXCLUDED_PLATFORMS") == DEFAULT_EXCLUDED_DIRS + assert config.get("EXCLUDED_SINGLE_EXT") == [ + e.lower() for e in DEFAULT_EXCLUDED_EXTENSIONS + ] + assert config.get("EXCLUDED_SINGLE_FILES") == DEFAULT_EXCLUDED_FILES + assert config.get("EXCLUDED_MULTI_FILES") == DEFAULT_EXCLUDED_DIRS + assert config.get("EXCLUDED_MULTI_PARTS_EXT") == [ + e.lower() for e in DEFAULT_EXCLUDED_EXTENSIONS + ] + assert config.get("EXCLUDED_MULTI_PARTS_FILES") == DEFAULT_EXCLUDED_FILES assert config.get("PLATFORMS_BINDING") == {} assert not config.get("SKIP_HASH_CALCULATION")