From bf0f0d477806908e7533e7ca8a10d55e7f4c22e5 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Mon, 9 Jun 2025 22:11:52 -0400 Subject: [PATCH 1/3] Add fallback for homepage when library is empty --- frontend/src/components/Home/EmptyHome.vue | 13 +++++++++++++ frontend/src/locales/de_DE/emptyStates.json | 5 ++++- frontend/src/locales/en_GB/emptyStates.json | 5 ++++- frontend/src/locales/en_US/emptyStates.json | 5 ++++- frontend/src/locales/es_ES/emptyStates.json | 5 ++++- frontend/src/locales/fr_FR/emptyStates.json | 5 ++++- frontend/src/locales/it_IT/emptyStates.json | 5 ++++- frontend/src/locales/ja_JP/emptyStates.json | 5 ++++- frontend/src/locales/ko_KR/emptyStates.json | 5 ++++- frontend/src/locales/pt_BR/emptyStates.json | 5 ++++- frontend/src/locales/ro_RO/emptyStates.json | 5 ++++- frontend/src/locales/ru_RU/emptyStates.json | 5 ++++- frontend/src/locales/zh_CN/emptyStates.json | 5 ++++- frontend/src/views/Home.vue | 11 +++++++++++ 14 files changed, 72 insertions(+), 12 deletions(-) create mode 100644 frontend/src/components/Home/EmptyHome.vue diff --git a/frontend/src/components/Home/EmptyHome.vue b/frontend/src/components/Home/EmptyHome.vue new file mode 100644 index 000000000..621b0a213 --- /dev/null +++ b/frontend/src/components/Home/EmptyHome.vue @@ -0,0 +1,13 @@ + + + diff --git a/frontend/src/locales/de_DE/emptyStates.json b/frontend/src/locales/de_DE/emptyStates.json index 76934db23..7d348cb61 100644 --- a/frontend/src/locales/de_DE/emptyStates.json +++ b/frontend/src/locales/de_DE/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "Die Seite, die Sie suchen, existiert nicht", "404-title": "Seite nicht gefunden", "search-for-games": "Suche nach Spielen auf allen Plattformen", - "manual-match": "Suche nach Spielen bei allen Metadatenanbietern" + "manual-match": "Suche nach Spielen bei allen Metadatenanbietern", + "home-headline": "Keine Spiele in Ihrer Bibliothek", + "home-title": "Führen Sie einen Schnellscan durch, um Spiele auf Ihrem System automatisch zu erkennen", + "home-text": "Bereit zum Spielen?" } diff --git a/frontend/src/locales/en_GB/emptyStates.json b/frontend/src/locales/en_GB/emptyStates.json index 88eb6c740..e5c53998a 100644 --- a/frontend/src/locales/en_GB/emptyStates.json +++ b/frontend/src/locales/en_GB/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "The page you are looking for does not exist", "404-title": "Page not found", "search-for-games": "Search for games across all platforms", - "manual-match": "Search for games across all metadata providers" + "manual-match": "Search for games across all metadata providers", + "home-headline": "No games in your library", + "home-title": "Run a quick scan to automatically detect games on your system", + "home-text": "Ready to play?" } diff --git a/frontend/src/locales/en_US/emptyStates.json b/frontend/src/locales/en_US/emptyStates.json index 88eb6c740..e5c53998a 100644 --- a/frontend/src/locales/en_US/emptyStates.json +++ b/frontend/src/locales/en_US/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "The page you are looking for does not exist", "404-title": "Page not found", "search-for-games": "Search for games across all platforms", - "manual-match": "Search for games across all metadata providers" + "manual-match": "Search for games across all metadata providers", + "home-headline": "No games in your library", + "home-title": "Run a quick scan to automatically detect games on your system", + "home-text": "Ready to play?" } diff --git a/frontend/src/locales/es_ES/emptyStates.json b/frontend/src/locales/es_ES/emptyStates.json index 39183c954..3b74d60ba 100644 --- a/frontend/src/locales/es_ES/emptyStates.json +++ b/frontend/src/locales/es_ES/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "La página que buscas no existe", "404-title": "Página no encontrada", "search-for-games": "Busca juegos en todas las plataformas", - "manual-match": "Busca juegos en todos los proveedores de metadatos" + "manual-match": "Busca juegos en todos los proveedores de metadatos", + "home-headline": "No hay juegos en tu biblioteca", + "home-title": "Ejecuta un escaneo rápido para detectar juegos en tu sistema automáticamente", + "home-text": "¿Listo para jugar?" } diff --git a/frontend/src/locales/fr_FR/emptyStates.json b/frontend/src/locales/fr_FR/emptyStates.json index 19ec51e72..4abe4cbaf 100644 --- a/frontend/src/locales/fr_FR/emptyStates.json +++ b/frontend/src/locales/fr_FR/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "La page que vous recherchez n'existe pas", "404-title": "Page introuvable", "search-for-games": "Recherchez des jeux sur toutes les plateformes", - "manual-match": "Recherchez des jeux auprès de tous les fournisseurs de métadonnées" + "manual-match": "Recherchez des jeux auprès de tous les fournisseurs de métadonnées", + "home-headline": "Aucun jeu dans votre bibliothèque", + "home-title": "Effectuez une analyse rapide pour détecter automatiquement les jeux sur votre système", + "home-text": "Prêt à jouer ?" } diff --git a/frontend/src/locales/it_IT/emptyStates.json b/frontend/src/locales/it_IT/emptyStates.json index 82d165ad4..cc37a359c 100644 --- a/frontend/src/locales/it_IT/emptyStates.json +++ b/frontend/src/locales/it_IT/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "La pagina che stai cercando non esiste", "404-title": "Pagina non trovata", "search-for-games": "Cerca giochi su tutte le piattaforme", - "manual-match": "Cerca giochi su tutti i fornitori di metadati" + "manual-match": "Cerca giochi su tutti i fornitori di metadati", + "home-headline": "Nessun gioco nella tua libreria", + "home-title": "Esegui una scansione rapida per rilevare automaticamente i giochi sul tuo sistema", + "home-text": "Pronto a giocare?" } diff --git a/frontend/src/locales/ja_JP/emptyStates.json b/frontend/src/locales/ja_JP/emptyStates.json index 7c3448665..373e237ea 100644 --- a/frontend/src/locales/ja_JP/emptyStates.json +++ b/frontend/src/locales/ja_JP/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "表示しようとしたページは見つかりませんでした", "404-title": "ページが見つかりませんでした", "search-for-games": "全てのプラットフォームから検索", - "manual-match": "全てのメタデータプロバイダーから検索" + "manual-match": "全てのメタデータプロバイダーから検索", + "home-headline": "ライブラリにゲームがありません", + "home-title": "システム上のゲームを自動的に検出するためにクイックスキャンを実行します", + "home-text": "プレイする準備はできましたか?" } diff --git a/frontend/src/locales/ko_KR/emptyStates.json b/frontend/src/locales/ko_KR/emptyStates.json index bbccec6be..8fd3f06c8 100644 --- a/frontend/src/locales/ko_KR/emptyStates.json +++ b/frontend/src/locales/ko_KR/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "찾으려고 하는 페이지가 존재하지 않습니다", "404-title": "페이지 찾을 수 없음", "search-for-games": "모든 기종에서 게임 찾기", - "manual-match": "모든 메타데이터 제공업체에서 게임 찾기" + "manual-match": "모든 메타데이터 제공업체에서 게임 찾기", + "home-headline": "라이브러리에 게임이 없습니다", + "home-title": "시스템에서 게임을 자동으로 감지하기 위해 빠른 스캔을 실행하세요", + "home-text": "게임을 할 준비가 되셨나요?" } diff --git a/frontend/src/locales/pt_BR/emptyStates.json b/frontend/src/locales/pt_BR/emptyStates.json index c7aeceb22..0e5bd9b76 100644 --- a/frontend/src/locales/pt_BR/emptyStates.json +++ b/frontend/src/locales/pt_BR/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "A página que você está procurando não existe", "404-title": "Página não encontrada", "search-for-games": "Pesquisar jogos em todas as plataformas", - "manual-match": "Pesquisar jogos em todos os provedores de metadados" + "manual-match": "Pesquisar jogos em todos os provedores de metadados", + "home-headline": "Nenhum jogo na sua biblioteca", + "home-title": "Execute uma varredura rápida para detectar jogos no seu sistema automaticamente", + "home-text": "Pronto para jogar?" } diff --git a/frontend/src/locales/ro_RO/emptyStates.json b/frontend/src/locales/ro_RO/emptyStates.json index 5db78aafe..67c39105e 100644 --- a/frontend/src/locales/ro_RO/emptyStates.json +++ b/frontend/src/locales/ro_RO/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "Pagina pe care o căutați nu există", "404-title": "Pagină negăsită", "search-for-games": "Căutați jocuri pe toate platformele", - "manual-match": "Căutați jocuri la toți furnizorii de metadate" + "manual-match": "Căutați jocuri la toți furnizorii de metadate", + "home-headline": "Nu există jocuri în biblioteca dvs.", + "home-title": "Rulați o scanare rapidă pentru a detecta automat jocurile de pe sistemul dvs.", + "home-text": "Sunteți gata de joacă?" } diff --git a/frontend/src/locales/ru_RU/emptyStates.json b/frontend/src/locales/ru_RU/emptyStates.json index 9042aa7fd..65b4124ab 100644 --- a/frontend/src/locales/ru_RU/emptyStates.json +++ b/frontend/src/locales/ru_RU/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "Страница, которую вы ищете, не существует", "404-title": "Страница не найдена", "search-for-games": "Искать игры на всех платформах", - "manual-match": "Искать игры у всех поставщиков метаданных" + "manual-match": "Искать игры у всех поставщиков метаданных", + "home-headline": "В вашей библиотеке нет игр", + "home-title": "Запустите быструю проверку, чтобы автоматически обнаружить игры на вашей системе", + "home-text": "Готовы играть?" } diff --git a/frontend/src/locales/zh_CN/emptyStates.json b/frontend/src/locales/zh_CN/emptyStates.json index 9db633e59..512f37aeb 100644 --- a/frontend/src/locales/zh_CN/emptyStates.json +++ b/frontend/src/locales/zh_CN/emptyStates.json @@ -2,5 +2,8 @@ "404-subtitle": "找不到页面", "404-title": "页面未找到", "search-for-games": "搜索游戏", - "manual-match": "在所有元数据提供商中搜索游戏" + "manual-match": "在所有元数据提供商中搜索游戏", + "home-headline": "您的库中没有游戏", + "home-title": "运行快速扫描以自动检测系统上的游戏", + "home-text": "准备好游戏了吗?" } diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index 9b82036e6..ee2c27031 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -5,6 +5,7 @@ import Platforms from "@/components/Home/Platforms.vue"; import RecentSkeletonLoader from "@/components/Home/RecentSkeletonLoader.vue"; import RecentAdded from "@/components/Home/RecentAdded.vue"; import ContinuePlaying from "@/components/Home/ContinuePlaying.vue"; +import EmptyHome from "@/components/Home/EmptyHome.vue"; import romApi from "@/services/api/rom"; import storeCollections from "@/stores/collections"; import storePlatforms from "@/stores/platforms"; @@ -106,4 +107,14 @@ onMounted(async () => { class="ma-2" v-if="virtualCollections.length > 0 && showVirtualCollections" /> + From 7dfedc93a7271041f0a377362c82f6caf245834d Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Mon, 9 Jun 2025 22:49:06 -0400 Subject: [PATCH 2/3] squeeze the homepage a bit more and refactor --- frontend/src/components/Home/Collections.vue | 4 +- .../src/components/Home/ContinuePlaying.vue | 4 +- frontend/src/components/Home/Platforms.vue | 4 +- frontend/src/components/Home/RecentAdded.vue | 4 +- .../components/Home/VirtualCollections.vue | 4 +- frontend/src/views/Home.vue | 168 +++++++++--------- 6 files changed, 97 insertions(+), 91 deletions(-) diff --git a/frontend/src/components/Home/Collections.vue b/frontend/src/components/Home/Collections.vue index 52805dbbc..392f9b24d 100644 --- a/frontend/src/components/Home/Collections.vue +++ b/frontend/src/components/Home/Collections.vue @@ -53,14 +53,14 @@ function onHover(emitData: { isHovering: boolean; id: number }) { :class="{ 'flex-nowrap overflow-x-auto': !gridCollections, }" - class="pa-1" + class="py-1" no-gutters style="overflow-y: hidden" > { :class="{ 'flex-nowrap overflow-x-auto': !gridVirtualCollections, }" - class="pa-1" + class="py-1" no-gutters style="overflow-y: hidden" > @@ -84,7 +84,7 @@ onBeforeUnmount(() => { visibleCollections, )" :key="collection.name" - class="pa-1 my-4" + class="pa-1" :cols="views[0]['size-cols']" :sm="views[0]['size-sm']" :md="views[0]['size-md']" diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index ee2c27031..ea88a4aa7 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -1,4 +1,7 @@ From 391d2856e90cfaa04ac84f8b0fd46ebc4784f184 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Mon, 9 Jun 2025 23:43:57 -0400 Subject: [PATCH 3/3] Add support for doom and acpc --- frontend/src/utils/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/src/utils/index.ts b/frontend/src/utils/index.ts index ae4fbd8dc..9bccfc02c 100644 --- a/frontend/src/utils/index.ts +++ b/frontend/src/utils/index.ts @@ -337,6 +337,7 @@ export function languageToEmoji(language: string) { */ const _EJS_CORES_MAP = { "3do": ["opera"], + acpc: ["cap32", "crocods"], amiga: ["puae"], "amiga-cd32": ["puae"], arcade: [ @@ -359,6 +360,7 @@ const _EJS_CORES_MAP = { c128: ["vice_x128"], "commmodore-128": ["vice_x128"], colecovision: ["gearcoleco"], + doom: ["prboom"], jaguar: ["virtualjaguar"], lynx: ["handy"], "atari-lynx-mkii": ["handy"], @@ -413,6 +415,7 @@ const _EJS_CORES_MAP = { wonderswan: ["mednafen_wswan"], swancrystal: ["mednafen_wswan"], "wonderswan-color": ["mednafen_wswan"], + "zx-spectrum": ["fuse"], } as const; export type EJSPlatformSlug = keyof typeof _EJS_CORES_MAP;