Files
BiLauncher/doc/cpp/launcherpaths.md
T

65 lines
3.9 KiB
Markdown
Raw Normal View History

2026-10-11 22:32:13 +03:00
# launcherpaths.h
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
`launcherpaths.h`, `launcherpaths.cpp`
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Все пути к данным лаунчера. Пространство имён `LauncherPaths` из свободных функций, состояния нет:
каждая функция просто собирает строку.
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Данные лаунчера лежат в папке `BiLauncher` рядом со стандартной папкой игры, а не в системном
каталоге данных приложения. `QStandardPaths` не используется, поэтому имя приложения и организации
из `main.cpp` на эти пути не влияют.
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
## Где что лежит
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
`containerDir()` — папка, в которой живут и игра, и лаунчер:
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
| ОС | `containerDir()` | папка игры по умолчанию | `rootDir()` |
|----|------------------|-------------------------|-------------|
| Windows | `%USERPROFILE%/AppData/Roaming` | `.minecraft` | `BiLauncher` |
| macOS | `~/Library/Application Support` | `minecraft` (без точки, как у официального лаунчера) | `BiLauncher` |
| Linux | `~` | `.minecraft` | `BiLauncher` |
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
На Linux папка лаунчера получается `~/BiLauncher`, без точки, то есть видимая.
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Внутри `rootDir()`:
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
```
BiLauncher/
├── settings.json settingsFile()
├── profiles.json profilesFile()
├── customBuilds.json customBuildsFile()
├── versions.json legacyCustomBuildsFile() — старое имя, читается только при миграции
├── builds/ buildStorageDir()
│ ├── index.json журнал BuildSwitcher
│ └── <id>/ buildDir(id): архив сборки, скачанный пак
│ └── season.json seasonalStateFile(id)
├── java/ javaDir(): скачанные сборки Java, каждая в <id>/
├── runtime/ runtimeDir(): authlib-injector.jar
└── cache/ cacheDir(): всё, что можно удалить без потерь
├── version_manifest.json versionManifestFile()
├── java_runtimes.json javaCatalogFile()
├── seasonal_builds.json seasonalCatalogFile()
├── loader_<ключ>.json loaderCacheFile(key)
├── loaders/ loaderDownloadDir(): installer.jar и журналы установщиков
└── java/ javaDownloadDir(): архивы Temurin до распаковки
```
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Папка игры задаётся в настройках (`gameDir`). `defaultMinecraftDir()` используется, только если
там пусто.
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
## ensureRootExists(&error)
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Создаёт `rootDir`, `runtime`, `cache`, `cache/loaders`, `builds`, `java` и `cache/java`, а затем
проверяет, что каждая из них действительно папка и в неё можно писать. `mkpath` возвращает `true`
и для существующей папки без прав на запись, и тогда, когда на месте папки лежит файл. Без этой
проверки сохранения потом молча не работали бы.
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
Вызывается при старте бэкенда, перед каждой записью JSON-файлов бэкенда, перед записью кэшей
каталогов и перед установками. Остальные функции только собирают строки и ошибиться не могут.
2026-09-03 09:16:56 +03:00
2026-10-11 22:32:13 +03:00
`launcherpaths.cpp` подключает `localization.h` ради текста ошибки, заголовок зависит только от
`QString`.
2026-09-03 09:16:56 +03:00
---
При создании этого документа использовался ИИ.