display default entries separate

This commit is contained in:
Georges-Antoine Assi
2026-04-04 14:49:37 -04:00
parent ef35ecaea9
commit cb96c861a6
24 changed files with 158 additions and 91 deletions

View File

@@ -1,6 +1,11 @@
from fastapi import HTTPException, Request, status
from pydantic import BaseModel
from config.config_manager import (
DEFAULT_EXCLUDED_DIRS,
DEFAULT_EXCLUDED_EXTENSIONS,
DEFAULT_EXCLUDED_FILES,
)
from config.config_manager import config_manager as cm
from decorators.auth import protected_route
from endpoints.responses.config import ConfigResponse
@@ -43,6 +48,9 @@ def get_config(request: Request) -> ConfigResponse:
EXCLUDED_MULTI_FILES=cfg.EXCLUDED_MULTI_FILES,
EXCLUDED_MULTI_PARTS_EXT=cfg.EXCLUDED_MULTI_PARTS_EXT,
EXCLUDED_MULTI_PARTS_FILES=cfg.EXCLUDED_MULTI_PARTS_FILES,
DEFAULT_EXCLUDED_DIRS=list(DEFAULT_EXCLUDED_DIRS),
DEFAULT_EXCLUDED_FILES=list(DEFAULT_EXCLUDED_FILES),
DEFAULT_EXCLUDED_EXTENSIONS=list(DEFAULT_EXCLUDED_EXTENSIONS),
PLATFORMS_BINDING=cfg.PLATFORMS_BINDING,
PLATFORMS_VERSIONS=cfg.PLATFORMS_VERSIONS,
SKIP_HASH_CALCULATION=cfg.SKIP_HASH_CALCULATION,

View File

@@ -12,6 +12,9 @@ class ConfigResponse(TypedDict):
EXCLUDED_MULTI_FILES: list[str]
EXCLUDED_MULTI_PARTS_EXT: list[str]
EXCLUDED_MULTI_PARTS_FILES: list[str]
DEFAULT_EXCLUDED_DIRS: list[str]
DEFAULT_EXCLUDED_FILES: list[str]
DEFAULT_EXCLUDED_EXTENSIONS: list[str]
PLATFORMS_BINDING: dict[str, str]
PLATFORMS_VERSIONS: dict[str, str]
SKIP_HASH_CALCULATION: bool

View File

@@ -102,7 +102,6 @@ export type { RomSSMetadata } from './models/RomSSMetadata';
export type { RomUserData } from './models/RomUserData';
export type { RomUserSchema } from './models/RomUserSchema';
export type { RomUserStatus } from './models/RomUserStatus';
export type { RomUserUpdatePayload } from './models/RomUserUpdatePayload';
export type { RoomsResponse } from './models/RoomsResponse';
export type { SaveSchema } from './models/SaveSchema';
export type { SaveSummarySchema } from './models/SaveSummarySchema';

View File

@@ -13,6 +13,9 @@ export type ConfigResponse = {
EXCLUDED_MULTI_FILES: Array<string>;
EXCLUDED_MULTI_PARTS_EXT: Array<string>;
EXCLUDED_MULTI_PARTS_FILES: Array<string>;
DEFAULT_EXCLUDED_DIRS: Array<string>;
DEFAULT_EXCLUDED_FILES: Array<string>;
DEFAULT_EXCLUDED_EXTENSIONS: Array<string>;
PLATFORMS_BINDING: Record<string, string>;
PLATFORMS_VERSIONS: Record<string, string>;
SKIP_HASH_CALCULATION: boolean;

View File

@@ -1,20 +0,0 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { RomUserData } from './RomUserData';
export type RomUserUpdatePayload = {
/**
* Partial rom user data to update. Only provided fields will be updated.
*/
data?: RomUserData;
/**
* Set last played timestamp to now.
*/
update_last_played?: boolean;
/**
* Clear the last played timestamp.
*/
remove_last_played?: boolean;
};

View File

@@ -29,61 +29,73 @@ const HEADERS = [
{ title: "", align: "end", key: "actions", sortable: false },
] as const;
const exclusions = computed<Row[]>(() => {
const defs = [
{
set: config.value.EXCLUDED_PLATFORMS || [],
title: t("common.platform"),
icon: "mdi-gamepad-variant-outline",
type: "EXCLUDED_PLATFORMS",
description: t("settings.exclusions-platforms-desc"),
},
{
set: config.value.EXCLUDED_SINGLE_FILES || [],
title: t("settings.excluded-single-rom-files"),
icon: "mdi-file-remove-outline",
type: "EXCLUDED_SINGLE_FILES",
description: t("settings.exclusions-single-files-desc"),
},
{
set: config.value.EXCLUDED_SINGLE_EXT || [],
title: t("settings.excluded-single-rom-extensions"),
icon: "mdi-file-code-outline",
type: "EXCLUDED_SINGLE_EXT",
description: t("settings.exclusions-single-ext-desc"),
},
{
set: config.value.EXCLUDED_MULTI_FILES || [],
title: t("settings.excluded-multi-rom-files"),
icon: "mdi-file-multiple-outline",
type: "EXCLUDED_MULTI_FILES",
description: t("settings.exclusions-multi-files-desc"),
},
{
set: config.value.EXCLUDED_MULTI_PARTS_FILES || [],
title: t("settings.excluded-multi-rom-parts-files"),
icon: "mdi-folder-multiple-outline",
type: "EXCLUDED_MULTI_PARTS_FILES",
description: t("settings.exclusions-multi-parts-files-desc"),
},
{
set: config.value.EXCLUDED_MULTI_PARTS_EXT || [],
title: t("settings.excluded-multi-rom-parts-extensions"),
icon: "mdi-file-cog-outline",
type: "EXCLUDED_MULTI_PARTS_EXT",
description: t("settings.exclusions-multi-parts-ext-desc"),
},
];
const DEFAULT_LIST_MAP: Record<
string,
| "DEFAULT_EXCLUDED_DIRS"
| "DEFAULT_EXCLUDED_FILES"
| "DEFAULT_EXCLUDED_EXTENSIONS"
> = {
EXCLUDED_PLATFORMS: "DEFAULT_EXCLUDED_DIRS",
EXCLUDED_SINGLE_FILES: "DEFAULT_EXCLUDED_FILES",
EXCLUDED_SINGLE_EXT: "DEFAULT_EXCLUDED_EXTENSIONS",
EXCLUDED_MULTI_FILES: "DEFAULT_EXCLUDED_DIRS",
EXCLUDED_MULTI_PARTS_FILES: "DEFAULT_EXCLUDED_FILES",
EXCLUDED_MULTI_PARTS_EXT: "DEFAULT_EXCLUDED_EXTENSIONS",
};
const EXCLUSION_DEFS = [
{
key: "EXCLUDED_PLATFORMS" as const,
title: () => t("common.platform"),
icon: "mdi-gamepad-variant-outline",
},
{
key: "EXCLUDED_SINGLE_FILES" as const,
title: () => t("settings.excluded-single-rom-files"),
icon: "mdi-file-remove-outline",
},
{
key: "EXCLUDED_SINGLE_EXT" as const,
title: () => t("settings.excluded-single-rom-extensions"),
icon: "mdi-file-code-outline",
},
{
key: "EXCLUDED_MULTI_FILES" as const,
title: () => t("settings.excluded-multi-rom-files"),
icon: "mdi-file-multiple-outline",
},
{
key: "EXCLUDED_MULTI_PARTS_FILES" as const,
title: () => t("settings.excluded-multi-rom-parts-files"),
icon: "mdi-folder-multiple-outline",
},
{
key: "EXCLUDED_MULTI_PARTS_EXT" as const,
title: () => t("settings.excluded-multi-rom-parts-extensions"),
icon: "mdi-file-cog-outline",
},
];
function isDefault(type: string, value: string): boolean {
const defaultKey = DEFAULT_LIST_MAP[type];
if (!defaultKey) return false;
const defaults = config.value[defaultKey] || [];
return defaults.includes(value);
}
const exclusions = computed<Row[]>(() => {
const result: Row[] = [];
for (const def of defs) {
for (const v of def.set) {
result.push({
type: def.type,
title: def.title,
icon: def.icon,
value: v,
});
for (const def of EXCLUSION_DEFS) {
const set = config.value[def.key] || [];
for (const v of set) {
if (!isDefault(def.key, v)) {
result.push({
type: def.key,
title: def.title(),
icon: def.icon,
value: v,
});
}
}
}
return result.sort(
@@ -91,6 +103,24 @@ const exclusions = computed<Row[]>(() => {
);
});
const defaultExclusions = computed<Row[]>(() => {
const seen = new Map<string, Row>();
for (const def of EXCLUSION_DEFS) {
const set = config.value[def.key] || [];
for (const v of set) {
if (isDefault(def.key, v) && !seen.has(v)) {
seen.set(v, {
type: def.key,
title: def.title(),
icon: def.icon,
value: v,
});
}
}
}
return [...seen.values()].sort((a, b) => a.value.localeCompare(b.value));
});
function removeExclusion(exclusionValue: string, exclusionType: string) {
if (configStore.isExclusionType(exclusionType)) {
configApi.deleteExclusion({
@@ -214,5 +244,29 @@ function removeExclusion(exclusionValue: string, exclusionType: string) {
</template>
</v-data-table-virtual>
</template>
<div v-if="defaultExclusions.length > 0" class="mt-6">
<div class="text-subtitle-2 text-romm-gray mb-2">
{{ t("settings.exclusions-defaults") }}
</div>
<v-row dense>
<v-col
v-for="item in defaultExclusions"
:key="item.value"
cols="12"
sm="6"
lg="3"
>
<div class="d-flex align-center">
<v-icon :icon="item.icon" size="20" class="mr-2 opacity-50" />
<div>
<div class="text-body-2 opacity-70">{{ item.value }}</div>
<div class="text-caption opacity-50">{{ item.title }}</div>
</div>
</div>
</v-col>
</v-row>
</div>
<CreateExclusionDialog />
</template>

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Имена на файлове за изключване при сканиране на ROM-ове с множество файлове",
"exclusions-multi-parts-ext-desc": "Файлови разширения за изключване при сканиране на многочастни ROM-ове",
"exclusions-multi-parts-files-desc": "Имена на файлове за изключване при сканиране на многочастни ROM-ове",
"exclusions-none": "Няма конфигурирани изключения",
"exclusions-defaults": "Изключения по подразбиране",
"exclusions-none": "Няма конфигурирани потребителски изключения",
"exclusions-platforms-desc": "Платформи за изключване от сканирането",
"exclusions-single-ext-desc": "Файлови разширения за изключване при сканиране на единични ROM-ове",
"exclusions-single-files-desc": "Имена на файлове за изключване при сканиране на единични ROM-ове",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Názvy souborů k vyloučení ze skenování vícesouborových ROM",
"exclusions-multi-parts-ext-desc": "Přípony souborů k vyloučení ze skenování vícedílných ROM",
"exclusions-multi-parts-files-desc": "Názvy souborů k vyloučení ze skenování vícedílných ROM",
"exclusions-none": "Nejsou nakonfigurovány žádné výjimky",
"exclusions-defaults": "Výchozí výjimky",
"exclusions-none": "Nejsou nakonfigurovány žádné vlastní výjimky",
"exclusions-platforms-desc": "Platformy k vyloučení ze skenování",
"exclusions-single-ext-desc": "Přípony souborů k vyloučení ze skenování jednoduchých ROM",
"exclusions-single-files-desc": "Názvy souborů k vyloučení ze skenování jednoduchých ROM",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Dateinamen vom Scannen mehrteiliger ROMs ausschließen",
"exclusions-multi-parts-ext-desc": "Dateierweiterungen vom Scannen mehrteiliger ROM-Parts ausschließen",
"exclusions-multi-parts-files-desc": "Dateinamen vom Scannen mehrteiliger ROM-Parts ausschließen",
"exclusions-none": "Keine Ausschlüsse konfiguriert",
"exclusions-defaults": "Standardausschlüsse",
"exclusions-none": "Keine benutzerdefinierten Ausschlüsse konfiguriert",
"exclusions-platforms-desc": "Plattformen vom Scannen ausschließen",
"exclusions-single-ext-desc": "Dateierweiterungen vom Scannen einzelner ROMs ausschließen",
"exclusions-single-files-desc": "Dateinamen vom Scannen einzelner ROMs ausschließen",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "File names to exclude from multi-file ROM scanning",
"exclusions-multi-parts-ext-desc": "File extensions to exclude from multi-part ROM scanning",
"exclusions-multi-parts-files-desc": "File names to exclude from multi-part ROM scanning",
"exclusions-none": "No exclusions configured",
"exclusions-defaults": "Default exclusions",
"exclusions-none": "No custom exclusions configured",
"exclusions-platforms-desc": "Platforms to exclude from scanning",
"exclusions-single-ext-desc": "File extensions to exclude from single ROM scanning",
"exclusions-single-files-desc": "File names to exclude from single ROM scanning",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "File names to exclude from multi-file ROM scanning",
"exclusions-multi-parts-ext-desc": "File extensions to exclude from multi-part ROM scanning",
"exclusions-multi-parts-files-desc": "File names to exclude from multi-part ROM scanning",
"exclusions-none": "No exclusions configured",
"exclusions-defaults": "Default exclusions",
"exclusions-none": "No custom exclusions configured",
"exclusions-platforms-desc": "Platforms to exclude from scanning",
"exclusions-single-ext-desc": "File extensions to exclude from single ROM scanning",
"exclusions-single-files-desc": "File names to exclude from single ROM scanning",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Nombres de archivo a excluir del escaneo de ROM multi-archivo",
"exclusions-multi-parts-ext-desc": "Extensiones de archivo a excluir del escaneo de ROM multi-parte",
"exclusions-multi-parts-files-desc": "Nombres de archivo a excluir del escaneo de ROM multi-parte",
"exclusions-none": "No hay exclusiones configuradas",
"exclusions-defaults": "Exclusiones predeterminadas",
"exclusions-none": "No hay exclusiones personalizadas configuradas",
"exclusions-platforms-desc": "Plataformas a excluir del escaneo",
"exclusions-single-ext-desc": "Extensiones de archivo a excluir del escaneo de ROM individuales",
"exclusions-single-files-desc": "Nombres de archivo a excluir del escaneo de ROM individuales",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Noms de fichiers à exclure de l'analyse des ROM multi-fichiers",
"exclusions-multi-parts-ext-desc": "Extensions de fichiers à exclure de l'analyse des ROM multi-parties",
"exclusions-multi-parts-files-desc": "Noms de fichiers à exclure de l'analyse des ROM multi-parties",
"exclusions-none": "Aucune exclusion configurée",
"exclusions-defaults": "Exclusions par défaut",
"exclusions-none": "Aucune exclusion personnalisée configurée",
"exclusions-platforms-desc": "Plateformes à exclure de l'analyse",
"exclusions-single-ext-desc": "Extensions de fichiers à exclure de l'analyse des ROM simples",
"exclusions-single-files-desc": "Noms de fichiers à exclure de l'analyse des ROM simples",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Fájlnevek kizárása a többfájlos ROM szkennelésből",
"exclusions-multi-parts-ext-desc": "Fájlkiterjesztések kizárása a többrészes ROM szkennelésből",
"exclusions-multi-parts-files-desc": "Fájlnevek kizárása a többrészes ROM szkennelésből",
"exclusions-none": "Nincs konfigurált kizárás",
"exclusions-defaults": "Alapértelmezett kizárások",
"exclusions-none": "Nincs konfigurált egyéni kizárás",
"exclusions-platforms-desc": "Platformok kizárása a szkennelésből",
"exclusions-single-ext-desc": "Fájlkiterjesztések kizárása az egyszeres ROM szkennelésből",
"exclusions-single-files-desc": "Fájlnevek kizárása az egyszeres ROM szkennelésből",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Nomi di file da escludere dalla scansione ROM multi-file",
"exclusions-multi-parts-ext-desc": "Estensioni di file da escludere dalla scansione ROM multi-parte",
"exclusions-multi-parts-files-desc": "Nomi di file da escludere dalla scansione ROM multi-parte",
"exclusions-none": "Nessuna esclusione configurata",
"exclusions-defaults": "Esclusioni predefinite",
"exclusions-none": "Nessuna esclusione personalizzata configurata",
"exclusions-platforms-desc": "Piattaforme da escludere dalla scansione",
"exclusions-single-ext-desc": "Estensioni di file da escludere dalla scansione ROM singole",
"exclusions-single-files-desc": "Nomi di file da escludere dalla scansione ROM singole",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "マルチファイルROMスキャンから除外するファイル名",
"exclusions-multi-parts-ext-desc": "マルチパートROMスキャンから除外するファイル拡張子",
"exclusions-multi-parts-files-desc": "マルチパートROMスキャンから除外するファイル名",
"exclusions-none": "除外設定がありません",
"exclusions-defaults": "デフォルトの除外設定",
"exclusions-none": "カスタム除外設定がありません",
"exclusions-platforms-desc": "スキャンから除外するプラットフォーム",
"exclusions-single-ext-desc": "単一ROMスキャンから除外するファイル拡張子",
"exclusions-single-files-desc": "単一ROMスキャンから除外するファイル名",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "다중 파일 ROM 스캔에서 제외할 파일 이름",
"exclusions-multi-parts-ext-desc": "다중 파트 ROM 스캔에서 제외할 파일 확장자",
"exclusions-multi-parts-files-desc": "다중 파트 ROM 스캔에서 제외할 파일 이름",
"exclusions-none": "구성된 제외 항목 없음",
"exclusions-defaults": "기본 제외 항목",
"exclusions-none": "구성된 사용자 지정 제외 항목 없음",
"exclusions-platforms-desc": "스캔에서 제외할 플랫폼",
"exclusions-single-ext-desc": "단일 ROM 스캔에서 제외할 파일 확장자",
"exclusions-single-files-desc": "단일 ROM 스캔에서 제외할 파일 이름",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Nazwy plików do wykluczenia ze skanowania wieloplikowych ROM",
"exclusions-multi-parts-ext-desc": "Rozszerzenia plików do wykluczenia ze skanowania wieloczęściowych ROM",
"exclusions-multi-parts-files-desc": "Nazwy plików do wykluczenia ze skanowania wieloczęściowych ROM",
"exclusions-none": "Nie skonfigurowano wykluczeń",
"exclusions-defaults": "Domyślne wykluczenia",
"exclusions-none": "Nie skonfigurowano własnych wykluczeń",
"exclusions-platforms-desc": "Platformy do wykluczenia ze skanowania",
"exclusions-single-ext-desc": "Rozszerzenia plików do wykluczenia ze skanowania pojedynczych ROM",
"exclusions-single-files-desc": "Nazwy plików do wykluczenia ze skanowania pojedynczych ROM",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Nomes de arquivo a excluir da varredura de ROM multi-arquivo",
"exclusions-multi-parts-ext-desc": "Extensões de arquivo a excluir da varredura de ROM multi-parte",
"exclusions-multi-parts-files-desc": "Nomes de arquivo a excluir da varredura de ROM multi-parte",
"exclusions-none": "Nenhuma exclusão configurada",
"exclusions-defaults": "Exclusões padrão",
"exclusions-none": "Nenhuma exclusão personalizada configurada",
"exclusions-platforms-desc": "Plataformas a excluir da varredura",
"exclusions-single-ext-desc": "Extensões de arquivo a excluir da varredura de ROM individuais",
"exclusions-single-files-desc": "Nomes de arquivo a excluir da varredura de ROM individuais",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Nume de fișiere de exclus din scanarea ROM-urilor multi-fișier",
"exclusions-multi-parts-ext-desc": "Extensii de fișiere de exclus din scanarea ROM-urilor multi-parte",
"exclusions-multi-parts-files-desc": "Nume de fișiere de exclus din scanarea ROM-urilor multi-parte",
"exclusions-none": "Nicio excludere configurată",
"exclusions-defaults": "Excluderi implicite",
"exclusions-none": "Nicio excludere personalizată configurată",
"exclusions-platforms-desc": "Platforme de exclus din scanare",
"exclusions-single-ext-desc": "Extensii de fișiere de exclus din scanarea ROM-urilor simple",
"exclusions-single-files-desc": "Nume de fișiere de exclus din scanarea ROM-urilor simple",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "Имена файлов для исключения из сканирования многофайловых ROM",
"exclusions-multi-parts-ext-desc": "Расширения файлов для исключения из сканирования многочастевых ROM",
"exclusions-multi-parts-files-desc": "Имена файлов для исключения из сканирования многочастевых ROM",
"exclusions-none": "Исключения не настроены",
"exclusions-defaults": "Исключения по умолчанию",
"exclusions-none": "Пользовательские исключения не настроены",
"exclusions-platforms-desc": "Платформы для исключения из сканирования",
"exclusions-single-ext-desc": "Расширения файлов для исключения из сканирования одиночных ROM",
"exclusions-single-files-desc": "Имена файлов для исключения из сканирования одиночных ROM",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "要从多文件 ROM 扫描中排除的文件名",
"exclusions-multi-parts-ext-desc": "要从多部分 ROM 扫描中排除的文件扩展名",
"exclusions-multi-parts-files-desc": "要从多部分 ROM 扫描中排除的文件名",
"exclusions-none": "未配置排除项",
"exclusions-defaults": "默认排除项",
"exclusions-none": "未配置自定义排除项",
"exclusions-platforms-desc": "要从扫描中排除的平台",
"exclusions-single-ext-desc": "要从单个 ROM 扫描中排除的文件扩展名",
"exclusions-single-files-desc": "要从单个 ROM 扫描中排除的文件名",

View File

@@ -67,7 +67,8 @@
"exclusions-multi-files-desc": "要從多檔案 ROM 掃描中排除的檔案名稱",
"exclusions-multi-parts-ext-desc": "要從多部分 ROM 掃描中排除的副檔名",
"exclusions-multi-parts-files-desc": "要從多部分 ROM 掃描中排除的檔案名稱",
"exclusions-none": "未配置排除項",
"exclusions-defaults": "預設排除項",
"exclusions-none": "未配置自訂排除項",
"exclusions-platforms-desc": "要從掃描中排除的平台",
"exclusions-single-ext-desc": "要從單個 ROM 掃描中排除的副檔名",
"exclusions-single-files-desc": "要從單個 ROM 掃描中排除的檔案名稱",

View File

@@ -20,6 +20,9 @@ const defaultConfig = {
EXCLUDED_MULTI_FILES: [],
EXCLUDED_MULTI_PARTS_EXT: [],
EXCLUDED_MULTI_PARTS_FILES: [],
DEFAULT_EXCLUDED_DIRS: [],
DEFAULT_EXCLUDED_FILES: [],
DEFAULT_EXCLUDED_EXTENSIONS: [],
PLATFORMS_BINDING: {},
PLATFORMS_VERSIONS: {},
SKIP_HASH_CALCULATION: false,