Files

78 lines
5.2 KiB
Markdown
Raw Permalink 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-13 08:51:07 +03:00
## BILAUNCHER_HOME
`homeOverride()` читает переменную окружения `BILAUNCHER_HOME`. Если в ней абсолютный путь, он
заменяет домашнюю папку (`~` и `%USERPROFILE%` в таблице выше) для всех путей лаунчера, включая
папку игры по умолчанию. Пустое или относительное значение не учитывается. Остальной Qt
(`QDir::homePath()`, `QStandardPaths`) эту переменную не видит.
Переменная нужна тестам и дымовой проверке на Windows: там `QDir::homePath()` спрашивает профиль
у системы и `USERPROFILE` игнорирует, так что иначе их нельзя увести из настоящего
`%APPDATA%\BiLauncher`. Новых возможностей она не даёт: кто управляет окружением процесса, на
Linux и macOS и так подменит `HOME`. Чтобы случайно оставленную переменную было видно, `main.cpp`
при старте пишет в лог предупреждение с итоговой папкой лаунчера.
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
---
При создании этого документа использовался ИИ.