diff --git a/.gitignore b/.gitignore index 058eb8b..1da4228 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ /dist/ /.idea/ *.log -renderer/dev-preview.html \ No newline at end of file +/renderer/dev-preview.html +/.freebuff/ +/test/ \ No newline at end of file diff --git a/files/translations/en-us.json b/files/translations/en-us.json index 1dcdca8..730b573 100644 --- a/files/translations/en-us.json +++ b/files/translations/en-us.json @@ -7,15 +7,15 @@ "app.title": "PLGL", "app.subtitle": "Portable Linux Wine Launcher", - "nav.library": "Library", + "nav.library": "Apps", "nav.prefixes": "Wine prefixes", "nav.wines": "Wine versions", "nav.settings": "Settings", - "library.title": "Game library", - "library.empty": "No games yet", - "library.emptyHint": "Import a game to get started. The launcher can copy it into files/games to stay fully portable, or just remember where it lives.", - "library.import": "Import game", + "library.title": "Apps Library", + "library.empty": "No apps yet", + "library.emptyHint": "Import an app to get started. The launcher can copy it into files/apps to stay fully portable, or just remember where it lives.", + "library.import": "Import app", "library.play": "Play", "library.stop": "Stop", "library.running": "Running", @@ -27,21 +27,21 @@ "library.portable": "Portable", "library.external": "External", "library.removeConfirm": "Remove {0} from the launcher?{1}", - "library.removeFilesNote": "\nIts imported files in files/games will also be deleted.", + "library.removeFilesNote": "\nIts imported files in files/apps will also be deleted.", "library.tools": "Wine tools", "library.viewLogs": "View logs", - "import.question": "Should the game files be brought into the launcher so it stays portable, or left where they are?", + "import.question": "Should the app files be brought into the launcher so it stays portable, or left where they are?", "import.mode.copy": "Copy into launcher (portable)", "import.mode.move": "Move into launcher (portable)", "import.mode.leave": "Leave in place", - "import.pickFolder": "Choose the game folder", + "import.pickFolder": "Choose the app folder", "import.progress": "Importing {0}…", "import.fileDone": "{0} files copied", "import.done": "Import finished", "import.failed": "Import failed: {0}", - "config.title": "Game configuration", + "config.title": "App configuration", "config.name": "Name", "config.workdir": "Working directory", "config.exePath": "Executable", @@ -66,7 +66,7 @@ "config.launchFailed": "Failed to launch {0}", "tools.title": "Wine tools", - "tools.subtitle": "Run a tool inside this game's wine environment.", + "tools.subtitle": "Run a tool inside this app's wine environment.", "tools.winecfg": "winecfg", "tools.regedit": "regedit", "tools.taskmgr": "taskmgr", diff --git a/files/translations/pl.json b/files/translations/pl.json index 936994c..c363b91 100644 --- a/files/translations/pl.json +++ b/files/translations/pl.json @@ -7,15 +7,15 @@ "app.title": "PLGL", "app.subtitle": "Przenośny launcher Wine dla Linuksa", - "nav.library": "Biblioteka", + "nav.library": "Aplikacje", "nav.prefixes": "Prefiksy Wine", "nav.wines": "Wersje Wine", "nav.settings": "Ustawienia", - "library.title": "Biblioteka gier", - "library.empty": "Brak gier", - "library.emptyHint": "Zaimportuj grę, aby zacząć. Launcher może skopiować ją do files/games, żeby być w pełni przenośny, albo po prostu zapamiętać, gdzie się znajduje.", - "library.import": "Importuj grę", + "library.title": "Biblioteka aplikacji", + "library.empty": "Brak aplikacji", + "library.emptyHint": "Zaimportuj aplikację, aby zacząć. Launcher może skopiować ją do files/apps, żeby być w pełni przenośny, albo po prostu zapamiętać, gdzie się znajduje.", + "library.import": "Importuj aplikację", "library.play": "Graj", "library.stop": "Zatrzymaj", "library.running": "Uruchomiona", @@ -27,21 +27,21 @@ "library.portable": "Przenośna", "library.external": "Zewnętrzna", "library.removeConfirm": "Usunąć {0} z launchera?{1}", - "library.removeFilesNote": "\nJej zaimportowane pliki w files/games również zostaną usunięte.", + "library.removeFilesNote": "\nJej zaimportowane pliki w files/apps również zostaną usunięte.", "library.tools": "Narzędzia Wine", "library.viewLogs": "Podejrzyj logi", - "import.question": "Czy pliki gry mają trafić do launchera, aby był przenośny, czy mają zostać tam, gdzie są?", + "import.question": "Czy pliki aplikacji mają trafić do launchera, aby był przenośny, czy mają zostać tam, gdzie są?", "import.mode.copy": "Skopiuj do launchera (przenośne)", "import.mode.move": "Przenieś do launchera (przenośne)", "import.mode.leave": "Zostaw w miejscu", - "import.pickFolder": "Wybierz folder gry", + "import.pickFolder": "Wybierz folder aplikacji", "import.progress": "Importowanie {0}…", "import.fileDone": "Skopiowane pliki: {0}", "import.done": "Import zakończony", "import.failed": "Import nie powiódł się: {0}", - "config.title": "Konfiguracja gry", + "config.title": "Konfiguracja aplikacji", "config.name": "Nazwa", "config.workdir": "Katalog roboczy", "config.exePath": "Plik wykonywalny", @@ -66,7 +66,7 @@ "config.launchFailed": "Nie udało się uruchomić {0}", "tools.title": "Narzędzia Wine", - "tools.subtitle": "Uruchom narzędzie w środowisku wine tej gry.", + "tools.subtitle": "Uruchom narzędzie w środowisku wine tej aplikacji.", "tools.winecfg": "winecfg", "tools.regedit": "regedit", "tools.taskmgr": "taskmgr", diff --git a/src/importer.js b/src/importer.js index 0af48d6..892e0c3 100644 --- a/src/importer.js +++ b/src/importer.js @@ -58,11 +58,11 @@ async function importGame(srcDir, mode, onProgress) { const name = path.basename(srcDir) let workdir = srcDir if (mode === 'copy') { - const dst = dedupeName(DIRS.GAMES, name) + const dst = dedupeName(DIRS.APPS, name) await copyRecursive(srcDir, dst, onProgress) workdir = dst } else if (mode === 'move') { - const dst = dedupeName(DIRS.GAMES, name) + const dst = dedupeName(DIRS.APPS, name) await moveFolder(srcDir, dst, onProgress) workdir = dst } diff --git a/src/library.js b/src/library.js index 0e50a51..91c2891 100644 --- a/src/library.js +++ b/src/library.js @@ -4,7 +4,7 @@ const path = require('path') const { DIRS, readJson, writeJson } = require('./paths') const { prefixPath } = require('./prefixes') -const REGISTRY = path.join(DIRS.DATA, 'games.json') +const REGISTRY = path.join(DIRS.DATA, 'apps.json') const SETTINGS = path.join(DIRS.DATA, 'settings.json') function loadGames() { @@ -40,7 +40,7 @@ function removeGame(id) { const idx = games.findIndex(g => g.id === id) if (idx === -1) return false const g = games[idx] - if (g.imported && g.path && g.path.startsWith(DIRS.GAMES)) { + if (g.imported && g.path && g.path.startsWith(DIRS.APPS)) { try { require('fs').rmSync(g.path, { recursive: true, force: true }) } catch {} diff --git a/src/paths.js b/src/paths.js index f4475d3..aeebc70 100644 --- a/src/paths.js +++ b/src/paths.js @@ -18,18 +18,14 @@ const DIRS = { DATA, WINES: path.join(FILES, 'wines'), PREFIXES: path.join(FILES, 'wineprefixes'), - GAMES: path.join(FILES, 'games'), + APPS: path.join(FILES, 'apps'), TRANSLATIONS: path.join(FILES, 'translations'), BUNDLED_TRANSLATIONS: path.join(BUNDLED, 'translations'), FAKE_STEAM: path.join(DATA, 'fake-steam') } function ensureDirs() { - const legacy = path.join(FILES, 'wine prefixes') - try { - if (fs.existsSync(legacy) && !fs.existsSync(DIRS.PREFIXES)) fs.renameSync(legacy, DIRS.PREFIXES) - } catch {} - for (const dir of [FILES, DATA, DIRS.WINES, DIRS.PREFIXES, DIRS.GAMES, DIRS.TRANSLATIONS, DIRS.FAKE_STEAM]) { + for (const dir of [FILES, DATA, DIRS.WINES, DIRS.PREFIXES, DIRS.APPS, DIRS.TRANSLATIONS, DIRS.FAKE_STEAM]) { fs.mkdirSync(dir, { recursive: true }) } if (DIRS.TRANSLATIONS !== DIRS.BUNDLED_TRANSLATIONS) { diff --git a/test/make-preview.js b/test/make-preview.js index d5c7c15..6157915 100644 --- a/test/make-preview.js +++ b/test/make-preview.js @@ -41,7 +41,7 @@ window.plgl = { prefixesDelete: async n => n === 'Main' ? ({ ok: false, error: 'isMain' }) : ({ ok: true }), prefixesSetDefault: async () => ({ ok: true }), gamesList: async () => [ - { id: 'g1', name: 'Cyberpunk 2077', mode: 'copy', wine: 'proton-ge-proton9-20', prefix: '', args: '--launcher-skip', env: { 'DXVK_HUD': '0' }, dllOverrides: [{ dll: 'dinput8', setting: 'native' }], workdir: '/home/user/PLGL/files/games/Cyberpunk 2077/bin/x64', exePath: '/home/user/PLGL/files/games/Cyberpunk 2077/bin/x64/Cyberpunk2077.exe', created: 1, lastPlayed: Date.now() - 86400000 }, + { id: 'g1', name: 'Cyberpunk 2077', mode: 'copy', wine: 'proton-ge-proton9-20', prefix: '', args: '--launcher-skip', env: { 'DXVK_HUD': '0' }, dllOverrides: [{ dll: 'dinput8', setting: 'native' }], workdir: '/home/user/PLGL/files/apps/Cyberpunk 2077/bin/x64', exePath: '/home/user/PLGL/files/apps/Cyberpunk 2077/bin/x64/Cyberpunk2077.exe', created: 1, lastPlayed: Date.now() - 86400000 }, { id: 'g2', name: 'Heroes of Might and Magic III', mode: 'leave', wine: 'system', prefix: 'gaming', args: '', env: {}, dllOverrides: [], workdir: '/mnt/games/HoMM3', exePath: '/mnt/games/HoMM3/h3game.exe', created: 2, lastPlayed: 0 } ], gamesGet: async () => null,