158 lines
5.1 KiB
Markdown
158 lines
5.1 KiB
Markdown
# MoonWell Launcher
|
|
|
|
MoonWell Launcher is the desktop launcher for MoonWell, a private World of
|
|
Warcraft: Wrath of the Lich King server focused on a player-friendly experience
|
|
without excessive grind and with stronger social play.
|
|
|
|
The Windows executable requests administrator privileges on startup so it can
|
|
synchronize game clients installed under protected directories such as
|
|
`Program Files`.
|
|
|
|
Launcher version labels are read from the packaged application metadata. Change
|
|
only the `version: X.Y.Z+N` value in `pubspec.yaml`; login, launcher status,
|
|
Windows metadata, installer packaging, and AppCast are synchronized from it.
|
|
|
|
The launcher is responsible for:
|
|
|
|
- logging in to a player's MoonWell account
|
|
- registering new MoonWell game accounts
|
|
- downloading and synchronizing client files
|
|
- displaying launcher news
|
|
- displaying the live status of the first configured realm
|
|
- launching the game client
|
|
|
|
## Stack
|
|
|
|
- Flutter desktop
|
|
- Dart
|
|
- `flutter_bloc` for launcher UI state
|
|
- `get_it` and `injectable` for dependency injection
|
|
- `dio` for Web API and file download requests
|
|
- `flutter_secure_storage` for launcher sessions
|
|
- `shared_preferences` for non-sensitive launcher preferences
|
|
|
|
## Prerequisites
|
|
|
|
Install FVM. The repository `.fvmrc` tracks the latest stable Flutter channel,
|
|
and all Dart and Flutter commands are run through FVM.
|
|
|
|
```powershell
|
|
fvm flutter pub get
|
|
```
|
|
|
|
Verify the configured SDK with `flutter --version`.
|
|
|
|
## Configuration
|
|
|
|
Set the launcher Web API base URL at compile time:
|
|
|
|
```powershell
|
|
--dart-define=MOONWELL_API_BASE_URL=https://moon-well.online
|
|
```
|
|
|
|
Set the public AppCast feed URL to enable Windows launcher self-updates:
|
|
|
|
```powershell
|
|
--dart-define=MOONWELL_APPCAST_URL=https://moon-well.online/appcast.xml
|
|
```
|
|
|
|
The updater is disabled when `MOONWELL_APPCAST_URL` is omitted. Production
|
|
feeds must use HTTPS.
|
|
|
|
Example run command:
|
|
|
|
```powershell
|
|
flutter run -d windows --dart-define=MOONWELL_API_BASE_URL=https://moon-well.online --dart-define=MOONWELL_APPCAST_URL=https://moon-well.online/appcast.xml
|
|
```
|
|
|
|
## Development
|
|
|
|
Run the component catalog from its standalone workspace:
|
|
|
|
```powershell
|
|
cd widgetbook
|
|
dart run build_runner build
|
|
flutter run -d windows
|
|
```
|
|
|
|
See `docs/widgetbook.md` for the required use-case naming, knobs, callback,
|
|
asset, and coverage conventions.
|
|
|
|
Regenerate dependency injection after changing injectable services:
|
|
|
|
```powershell
|
|
dart run build_runner build --delete-conflicting-outputs
|
|
```
|
|
|
|
Run static analysis:
|
|
|
|
```powershell
|
|
flutter analyze
|
|
```
|
|
|
|
See `docs/linting.md` for the full format, analyze, test, and Lefthook
|
|
pre-commit workflow.
|
|
|
|
Build the Windows launcher:
|
|
|
|
```powershell
|
|
flutter build windows --dart-define=MOONWELL_API_BASE_URL=https://moon-well.online --dart-define=MOONWELL_APPCAST_URL=https://moon-well.online/appcast.xml
|
|
```
|
|
|
|
The Inno Setup installer script lives at `installer/moonwell_launcher.iss`.
|
|
See `docs/launcher_self_update.md` for the AppCast format, signing keys, and
|
|
manual release procedure.
|
|
|
|
Run a safe local production-release rehearsal:
|
|
|
|
```powershell
|
|
.\tool\deploy_launcher.ps1 `
|
|
-DryRun `
|
|
-ExpectedVersion 1.0.2 `
|
|
-ReleaseNotes "Исправления и улучшения MoonWell Launcher."
|
|
```
|
|
|
|
Remove `-DryRun` only after reviewing the generated installer and AppCast.
|
|
See `docs/production_deploy.md` for required environment variables, production
|
|
defaults, safety checks, and failure recovery.
|
|
|
|
Local deploy credentials are read from the ignored root `.env`; use
|
|
`.env.example` as the safe template. Process and CI environment variables
|
|
override values from the file.
|
|
|
|
## Architecture
|
|
|
|
The UI lives in `lib/app`. Presentation-only design-system components live in
|
|
`lib/app/design_system` and are catalogued by the standalone `widgetbook/`
|
|
workspace before they are integrated into production screens.
|
|
Launcher domain models, sync use cases, API clients, installation services, and
|
|
preferences live under `lib/features`.
|
|
|
|
The launcher sync flow is manifest-based:
|
|
|
|
1. authenticate against the MoonWell Web API
|
|
2. fetch the client manifest and automatically synchronize a saved client
|
|
installation
|
|
3. refresh the manifest every five minutes while the launcher is open and
|
|
automatically synchronize when the server build changes
|
|
4. scan the selected installation directory
|
|
5. compare local files to the manifest
|
|
6. remove stale files outside ignored directories
|
|
7. download missing or changed files to temporary part files
|
|
8. verify size and SHA-256 before replacing client files
|
|
9. launch `Wow.exe` from the selected client directory
|
|
|
|
See `docs/launcher_web_api_spec.md` for the API and sync contract.
|
|
|
|
## Documentation
|
|
|
|
- `AGENTS.md`: architecture, commands, and repository rules for contributors
|
|
- `TODO.md`: remaining verification and maintenance tasks
|
|
- `docs/linting.md`: format, analyze, test, and Lefthook workflow
|
|
- `docs/project_review.md`: project review with strengths, weaknesses, and
|
|
upgrade feasibility notes
|
|
- `docs/launcher_web_api_spec.md`: current launcher Web API and sync behavior
|
|
- `docs/launcher_self_update.md`: Windows self-update and release operations
|
|
- `docs/production_deploy.md`: automated production launcher deployment
|
|
- `docs/widgetbook.md`: Widgetbook use-case generation and catalog conventions
|