New version 0.5.2, fixes some issues with login.

This commit is contained in:
2026-08-27 21:09:18 +02:00
parent 5a0e6520f4
commit 4288036bb3
11 changed files with 76 additions and 7 deletions

View File

@@ -1,6 +1,6 @@
# PristonTale EU for Linux # PristonTale EU for Linux
Version 0.5.1 installs, updates, repairs, and launches PristonTale EU through a Version 0.5.2 installs, updates, repairs, and launches PristonTale EU through a
native Linux dashboard. Game files come directly from the publisher and are not native Linux dashboard. Game files come directly from the publisher and are not
included in this archive. included in this archive.
@@ -9,9 +9,9 @@ included in this archive.
Keep the archive and checksum file together, then run: Keep the archive and checksum file together, then run:
```text ```text
sha256sum -c pristontale-eu-linux-installer-v0-5-1.tar.gz.sha256 sha256sum -c pristontale-eu-linux-installer-v0-5-2.tar.gz.sha256
tar -xzf pristontale-eu-linux-installer-v0-5-1.tar.gz tar -xzf pristontale-eu-linux-installer-v0-5-2.tar.gz
cd pristontale-eu-linux-installer-v0-5-1 cd pristontale-eu-linux-installer-v0-5-2
./install.sh ./install.sh
``` ```
@@ -48,6 +48,7 @@ for rollback.
pristontale-eu --help Show all commands and options pristontale-eu --help Show all commands and options
pristontale-eu gui Open the native dashboard pristontale-eu gui Open the native dashboard
pristontale-eu doctor Check required host components pristontale-eu doctor Check required host components
pristontale-eu login-diagnostics Check the login route without credentials
pristontale-eu update Install or update official files pristontale-eu update Install or update official files
pristontale-eu update --repair Verify and repair every game file pristontale-eu update --repair Verify and repair every game file
pristontale-eu update --dry-run Preview an update pristontale-eu update --dry-run Preview an update

View File

@@ -0,0 +1 @@
cd0314c9fba1779dac5bbe24190c174941dbed89c371b68808fefa37de7750bf pristontale-eu-linux-installer-v0-5-2.tar.gz

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@
e391accd5448f3239aeda2561e5faf2eb17b5aa5c61837da609f456815398002 pristontale-eu-linux-update-v0.5.2.tar.gz

11
dist/stable.json vendored Normal file
View File

@@ -0,0 +1,11 @@
{
"archive_sha256": "e391accd5448f3239aeda2561e5faf2eb17b5aa5c61837da609f456815398002",
"archive_size": 71737,
"archive_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/download/v0.5.2/pristontale-eu-linux-update-v0.5.2.tar.gz",
"channel": "stable",
"minimum_updater_version": "0.5.0",
"notes_url": "https://git.m4ko.net/m4ko/pristontale-eu-linux/releases/tag/v0.5.2",
"published_at": "2026-08-27T19:01:33Z",
"schema": 1,
"version": "0.5.2"
}

BIN
dist/stable.json.sig vendored Normal file

Binary file not shown.

View File

@@ -3,7 +3,7 @@
set -euo pipefail set -euo pipefail
SOURCE_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" SOURCE_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
VERSION="${PTLINUX_VERSION:-0.5.1}" VERSION="${PTLINUX_VERSION:-0.5.2}"
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]
then then
printf 'Invalid launcher version: %s (expected X.Y.Z)\n' "$VERSION" >&2 printf 'Invalid launcher version: %s (expected X.Y.Z)\n' "$VERSION" >&2

View File

@@ -4,4 +4,4 @@ from .paths import AppPaths
__all__ = ["AppPaths", "__version__"] __all__ = ["AppPaths", "__version__"]
__version__ = "0.5.1" __version__ = "0.5.2"

View File

@@ -25,6 +25,7 @@ from .launcher import (
prepare_launcher_binary, prepare_launcher_binary,
) )
from .locking import launcher_operation_lock from .locking import launcher_operation_lock
from .login_diagnostics import inspect_login_environment
from .overlay import cache_compatibility_binaries, cache_runtime_patch, prepare_runtime_view from .overlay import cache_compatibility_binaries, cache_runtime_patch, prepare_runtime_view
from .paths import AppPaths from .paths import AppPaths
from .runtime import ( from .runtime import (
@@ -56,6 +57,16 @@ def build_parser() -> argparse.ArgumentParser:
subparsers.add_parser("gui", help="open the native Linux dashboard") subparsers.add_parser("gui", help="open the native Linux dashboard")
subparsers.add_parser("doctor", help="check cross-distribution dependencies") subparsers.add_parser("doctor", help="check cross-distribution dependencies")
login_diagnostics = subparsers.add_parser(
"login-diagnostics",
help="check the client, runtime, and publisher login route without credentials",
)
login_diagnostics.add_argument(
"--timeout",
type=float,
default=5.0,
help="TCP connection timeout in seconds (default: 5)",
)
fetch = subparsers.add_parser("fetch", help="fetch and safely prepare the latest official launcher") fetch = subparsers.add_parser("fetch", help="fetch and safely prepare the latest official launcher")
fetch.add_argument("--dry-run", action="store_true") fetch.add_argument("--dry-run", action="store_true")
@@ -169,6 +180,8 @@ def main(argv: Sequence[str] | None = None) -> int:
return 0 return 0
if command == "doctor": if command == "doctor":
return _doctor(arguments.json) return _doctor(arguments.json)
if command == "login-diagnostics":
return _login_diagnostics(paths, arguments.timeout, arguments.json)
if command == "fetch": if command == "fetch":
return _fetch(paths, arguments.dry_run, arguments.json) return _fetch(paths, arguments.dry_run, arguments.json)
if command == "setup": if command == "setup":
@@ -274,6 +287,48 @@ def _doctor(as_json: bool) -> int:
return 0 if report.ok else 1 return 0 if report.ok else 1
def _login_diagnostics(paths: AppPaths, timeout_seconds: float, as_json: bool) -> int:
settings = _load_or_default_settings(paths, persist=False)
report = inspect_login_environment(
paths,
settings,
timeout_seconds=timeout_seconds,
)
if as_json:
_print_json(report.to_dict())
else:
probe = report.login_server
print(f"Launcher: {report.launcher_version} ({report.launcher_module})")
print(f"Python: {report.python_executable}")
status = "REACHABLE" if probe.reachable else "UNREACHABLE"
latency = f", {probe.latency_ms:.1f} ms" if probe.latency_ms is not None else ""
print(f"Login server: {status} ({probe.host}:{probe.port}{latency})")
if probe.error:
print(f"Network error: {probe.error}")
print("Authentication: not tested; no credentials or game-protocol data were sent")
print(f"Game profile: {report.game_profile}")
print(f"Game.exe: {report.game_exe}")
if report.game_exe_sha256:
print(f"Game SHA-256: {report.game_exe_sha256}")
print(f"game.dll: {report.game_dll}")
if report.game_dll_sha256:
print(f"DLL SHA-256: {report.game_dll_sha256}")
if report.runtime_kind:
print(f"Runtime: {report.runtime_kind} ({report.runtime_path or 'unknown path'})")
else:
print(f"Runtime: unavailable ({report.runtime_error or 'selection failed'})")
prefix_status = "ready" if report.prefix_ready else "not ready"
directx_status = "ready" if report.directx_ready else "not ready"
print(f"Prefix: {prefix_status}; DirectX helpers {directx_status}")
print(f"Prefix path: {report.prefix or 'unavailable'}")
print(f"Latest log: {report.latest_game_log or 'not found'}")
if report.latest_game_log_modified_at:
print(f"Log modified: {report.latest_game_log_modified_at}")
for warning in report.warnings:
print(f"Warning: {warning}")
return 0 if report.preflight_ok else 1
def _fetch(paths: AppPaths, dry_run: bool, as_json: bool) -> int: def _fetch(paths: AppPaths, dry_run: bool, as_json: bool) -> int:
if not dry_run: if not dry_run:
paths.create_base_directories() paths.create_base_directories()

View File

@@ -1,6 +1,6 @@
[project] [project]
name = "ptdiag" name = "ptdiag"
version = "0.5.1" version = "0.5.2"
description = "PristonTale EU Linux installer, clean launcher, and diagnostic harness" description = "PristonTale EU Linux installer, clean launcher, and diagnostic harness"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [] dependencies = []