diff --git a/apps/frontend/src/i18n/locales/en.ts b/apps/frontend/src/i18n/locales/en.ts index f308713..018e53e 100644 --- a/apps/frontend/src/i18n/locales/en.ts +++ b/apps/frontend/src/i18n/locales/en.ts @@ -200,17 +200,19 @@ export default { batocera: { title: 'Batocera Store', subtitle: 'Our catalog, straight on your retro box.', - lead: 'ttg-store is a small catalog client for Batocera, the plug-and-play retro gaming distribution. It pulls our games into the box\'s ROM folders together with box art and EmulationStation metadata, and can be re-run any time from the Ports menu to pick up new releases. Python 3 standard library only — nothing to install alongside it.', + lead: 'ttg-batocera-store puts our catalog on Batocera, the plug-and-play retro gaming distribution. It pulls our games into the box\'s ROM folders together with box art and EmulationStation metadata, and can be re-run any time from the Ports menu to pick up new releases. Python 3 standard library only — nothing to install alongside it.', repo: 'Git repository', docs: 'Documentation', batoceraProject: 'Batocera project', installTitle: 'Install', - installDesc: 'Run this over SSH on the Batocera box. It installs the client, writes a default config, creates the Ports entry and runs the first sync.', + installDesc: 'Run this over SSH on the Batocera box. It installs the client, writes the config, creates the Ports entry and runs the first sync.', installNote: 'Then restart EmulationStation so the games show up:', useTitle: 'Use it', useDesc: 'On the device: Ports ▸ "Teletype Games Store". Over SSH the client has a small CLI:', platformsTitle: 'What it installs', platformsDesc: 'A catalog platform is installable when its release asset boots directly on a Batocera system. Other platforms ship web and desktop builds instead, so they are not mapped.', + engineTitle: 'Run your own store', + engineDesc: 'Nothing here is specific to us. Our store is just a config file on top of warp-engine-batocera-store, an open engine that works with any WarpEngine-based site: point it at your own catalog, give it a name and a ROM subfolder of its own, and your games land on a Batocera box the same way. Several stores can live side by side on one machine without touching each other\'s games.', copy: 'Copy', }, code: { diff --git a/apps/frontend/src/i18n/locales/hu.ts b/apps/frontend/src/i18n/locales/hu.ts index c0ef5bd..6703c48 100644 --- a/apps/frontend/src/i18n/locales/hu.ts +++ b/apps/frontend/src/i18n/locales/hu.ts @@ -200,17 +200,19 @@ export default { batocera: { title: 'Batocera Store', subtitle: 'A katalógusunk közvetlenül a retró gépeden.', - lead: 'A ttg-store egy kicsi katalógus-kliens a Batocerához, a plug-and-play retró gamer disztribúcióhoz. A játékainkat a gép ROM mappáiba tölti le, borítóképpel és EmulationStation metaadatokkal együtt, és a Ports menüből bármikor újrafuttatható az új kiadásokért. Csak a Python 3 alapkönyvtárát használja — nem kell mellé semmit telepíteni.', + lead: 'A ttg-batocera-store a katalógusunkat teszi fel a Batocerára, a plug-and-play retró gamer disztribúcióra. A játékainkat a gép ROM mappáiba tölti le, borítóképpel és EmulationStation metaadatokkal együtt, és a Ports menüből bármikor újrafuttatható az új kiadásokért. Csak a Python 3 alapkönyvtárát használja — nem kell mellé semmit telepíteni.', repo: 'Git tároló', docs: 'Dokumentáció', batoceraProject: 'Batocera projekt', installTitle: 'Telepítés', - installDesc: 'Futtasd ezt SSH-n a Batocera gépen. Telepíti a klienst, kiírja az alapértelmezett konfigurációt, létrehozza a Ports bejegyzést és lefuttatja az első szinkront.', + installDesc: 'Futtasd ezt SSH-n a Batocera gépen. Telepíti a klienst, kiírja a konfigurációt, létrehozza a Ports bejegyzést és lefuttatja az első szinkront.', installNote: 'Utána indítsd újra az EmulationStationt, hogy megjelenjenek a játékok:', useTitle: 'Használat', useDesc: 'A gépen: Ports ▸ „Teletype Games Store”. SSH-n keresztül egy egyszerű CLI áll rendelkezésre:', platformsTitle: 'Mit telepít', platformsDesc: 'Egy katalógus-platform akkor telepíthető, ha a kiadás fájlja közvetlenül elindul egy Batocera rendszeren. A többi platform webes és asztali buildeket ad, ezért nincsenek leképezve.', + engineTitle: 'Csinálj saját store-t', + engineDesc: 'Itt semmi sem ránk van szabva. A mi store-unk csak egy konfigurációs fájl a warp-engine-batocera-store fölött, ami bármilyen WarpEngine alapú oldallal működik: állítsd a saját katalógusodra, adj neki nevet és saját ROM almappát, és a játékaid ugyanígy kerülnek fel egy Batocera gépre. Egy gépen több store is megfér egymás mellett anélkül, hogy egymás játékaihoz nyúlnának.', copy: 'Másolás', }, code: { diff --git a/apps/frontend/src/page/batocera/BatoceraIndexPage.vue b/apps/frontend/src/page/batocera/BatoceraIndexPage.vue index 36ef289..cf4f3ff 100644 --- a/apps/frontend/src/page/batocera/BatoceraIndexPage.vue +++ b/apps/frontend/src/page/batocera/BatoceraIndexPage.vue @@ -68,6 +68,16 @@ +
+

+ {{ t('batocera.engineTitle') }} +

+

{{ t('batocera.engineDesc') }}

+ + warp-engine-batocera-store + +
+
{{ t('catalogShow.back') }}
@@ -82,18 +92,23 @@ import { CONFIG } from '../../lib/config' const { t } = useI18n() -const REPO_URL = 'https://git.teletypegames.org/tools/batocera-store' -const WIKI_URL = `${CONFIG.wikiBase}/others/batocera-store` +const FORGE = 'https://git.teletypegames.org/tools' +const REPO_URL = `${FORGE}/ttg-batocera-store` +// The store is only a config; the client itself is a reusable engine that runs +// against any WarpEngine site, so it gets its own repository and its own link. +const ENGINE_URL = `${FORGE}/warp-engine-batocera-store` +const WIKI_URL = `${CONFIG.wikiBase}/others/ttg-batocera-store` const BATOCERA_URL = 'https://batocera.org' // The installer is served straight from the forge, so this one line is the // whole install on a Batocera box. const INSTALL_CMD = `curl -fsSL ${REPO_URL}/raw/branch/master/install.sh | bash` const RESTART_CMD = 'batocera-es-swissknife --restart' +const STORE_CLI = '/userdata/system/batocera-store/ttg-store' const CLI_SNIPPET = [ - 'ttg-store list # compatible catalog entries', - 'ttg-store sync # download everything new', - 'ttg-store remove c64demo', + `${STORE_CLI} list # compatible catalog entries`, + `${STORE_CLI} sync # download everything new`, + `${STORE_CLI} remove c64demo`, ].join('\n') const platforms = [ @@ -128,6 +143,7 @@ async function copy(text: string) { @apply inline-flex items-center gap-2 font-bold py-2.5 px-5 rounded-xl text-sm text-white transition-all active:scale-95; } .bat-link-dark { @apply bg-slate-800 hover:bg-slate-900 shadow-lg shadow-slate-800/20; } +.bat-link-slate { @apply bg-slate-600 hover:bg-slate-700 shadow-lg shadow-slate-600/20; } .bat-link-indigo { @apply bg-indigo-600 hover:bg-indigo-700 shadow-lg shadow-indigo-600/20; } .bat-link-emerald { @apply bg-emerald-600 hover:bg-emerald-700 shadow-lg shadow-emerald-600/20; } @@ -155,6 +171,12 @@ async function copy(text: string) { .bat-copy { @apply absolute top-2 right-2 w-9 h-9 rounded-lg bg-gray-800 text-gray-300 hover:bg-gray-700 hover:text-white transition-colors; } +.bat-engine { + @apply bg-gray-50; +} +.bat-engine-icon { + @apply text-gray-400 text-lg; +} .bat-platforms { @apply grid grid-cols-1 sm:grid-cols-2 gap-3; }