New version 0.5.2, fixes some issues with login.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
1
dist/pristontale-eu-linux-installer-v0-5-2.tar.gz.sha256
vendored
Normal file
1
dist/pristontale-eu-linux-installer-v0-5-2.tar.gz.sha256
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
cd0314c9fba1779dac5bbe24190c174941dbed89c371b68808fefa37de7750bf pristontale-eu-linux-installer-v0-5-2.tar.gz
|
||||||
BIN
dist/pristontale-eu-linux-installer-v0-5-2.zip
vendored
Normal file
BIN
dist/pristontale-eu-linux-installer-v0-5-2.zip
vendored
Normal file
Binary file not shown.
BIN
dist/pristontale-eu-linux-update-v0.5.2.tar.gz
vendored
Normal file
BIN
dist/pristontale-eu-linux-update-v0.5.2.tar.gz
vendored
Normal file
Binary file not shown.
1
dist/pristontale-eu-linux-update-v0.5.2.tar.gz.sha256
vendored
Normal file
1
dist/pristontale-eu-linux-update-v0.5.2.tar.gz.sha256
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
e391accd5448f3239aeda2561e5faf2eb17b5aa5c61837da609f456815398002 pristontale-eu-linux-update-v0.5.2.tar.gz
|
||||||
11
dist/stable.json
vendored
Normal file
11
dist/stable.json
vendored
Normal 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
BIN
dist/stable.json.sig
vendored
Normal file
Binary file not shown.
@@ -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
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ from .paths import AppPaths
|
|||||||
|
|
||||||
__all__ = ["AppPaths", "__version__"]
|
__all__ = ["AppPaths", "__version__"]
|
||||||
|
|
||||||
__version__ = "0.5.1"
|
__version__ = "0.5.2"
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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 = []
|
||||||
|
|||||||
Reference in New Issue
Block a user