This commit is contained in:
Eric 2023-06-16 19:44:15 -07:00
parent d751593adb
commit b183138ecd
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
23 changed files with 135 additions and 80 deletions

88
.efrocachemap generated
View File

@ -4072,50 +4072,50 @@
"build/assets/workspace/ninjafightplug.py": "https://files.ballistica.net/cache/ba1/18/4b/787a9267e17be3c49966072581a5", "build/assets/workspace/ninjafightplug.py": "https://files.ballistica.net/cache/ba1/18/4b/787a9267e17be3c49966072581a5",
"build/assets/workspace/onslaughtplug.py": "https://files.ballistica.net/cache/ba1/20/f6/4ce9bc3c1f3732f6adf8237fbe9b", "build/assets/workspace/onslaughtplug.py": "https://files.ballistica.net/cache/ba1/20/f6/4ce9bc3c1f3732f6adf8237fbe9b",
"build/assets/workspace/runaroundplug.py": "https://files.ballistica.net/cache/ba1/a5/30/9058181df0b1255bf6950cbc7813", "build/assets/workspace/runaroundplug.py": "https://files.ballistica.net/cache/ba1/a5/30/9058181df0b1255bf6950cbc7813",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/88/5a/046584c2f9bb1dfaf2cc7305811a", "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/cb/2b/b20e3667a76de438a96f0afc0305",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/04/21/578917394a42afdaa94a6d0c2af1", "build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/46/7d/7d4757c004be2572c77b06b77bee",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/9c/cc/b1456d7f585078f0b5116e16ca5b", "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/e7/f1/a546a5af991fe6ca8cad30151c45",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/6a/4c/8eefc8bca27698731ae4eb385b31", "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/0a/6a/ee6c62dfc7df0ee2649b4259859f",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/ba/e7/14a5244c9740a6a3ca510a17d9d2", "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/5c/72/34434953e56f2dc38a38ebc06c8c",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/c5/23/55a127747393ea1bdb45d52f8ef3", "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/81/13/a5095e89d11645df552e952934b2",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/62/39/db07ddb660c23869885b6dfeb2bd", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/e1/5d/2284e87c1eb013e2f9719f3af758",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/f9/88/89c742f5d6d2d03858edc409107c", "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/be/ed/d03bd1603588c5ee3941dcb098b0",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/23/9e/2c6f955ad9ee17fd0fd0d132127e", "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/b5/46/2ff94d2fd35975f6a78333811fce",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/36/f1/cf87abc5c2d38e21f31d17783c64", "build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/84/56/c0a936571bf54f90b4f63d2044df",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/96/94/b9ca75a69e7c2fe122d1af08684e", "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/26/27/18a284bc01bc00d58b0547a6e6cc",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/f5/0b/0bf0d0d9722df1c2bd4a9566166f", "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/36/ac/9001c8d1bd457b7345bfc41d78e9",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/a0/83/b185f5ee357b4730bd96df784bf5", "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/b0/8f/ae5bfba34e6c8652825165e1a91d",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/40/2e/291910a12f2e637d585a23732e39", "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/3c/29/3a0fb2e030569a1e72e26d19b79e",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/b5/97/fdf687c944dff99145350594fbd6", "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/aa/8c/baa3f85599add12b5fb9c6d36a25",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/bc/e6/acb2fa1eebb0c8219919fc7bd904", "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/7c/99/ee5199e38af7e9e26018bd8e53bf",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/43/1d/1e30712c0f7bbed6bc4c4d19d9be", "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/54/9c/4e83da01264024628839375ee954",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/b9/03/9f180b240019437ebdad1d2450b3", "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/b5/8a/3c7f11a2b165425faeab02b6854b",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/ee/1c/c2f9d7571fa7123305727345c493", "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/ae/90/e625b0ef976e7a4d101f184ca70e",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/13/66/5f85708aab5186b5c2cc7dad5628", "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/fb/1e/94322715fea49e0450bfc38cd2eb",
"build/prefab/lib/linux_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/f6/e4/1fc7d7c6701ca9d1a4fc104c11a0", "build/prefab/lib/linux_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/e1/36/4336b37f86fd4a4870133803fab7",
"build/prefab/lib/linux_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/d2/40/7b8787a2a20b2bf5b853762abf82", "build/prefab/lib/linux_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/19/e8/69f3145d1a635ff682323d5122a7",
"build/prefab/lib/linux_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/3d/a9/4d58c1ba26c71020600f16212c59", "build/prefab/lib/linux_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/62/12/fc103a5a8e2e6a607499b8887c65",
"build/prefab/lib/linux_arm64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/a1/81/6700b345f65181be591b999bd0ba", "build/prefab/lib/linux_arm64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/75/d5/4fc5951cf8408dc074a523ec0ecc",
"build/prefab/lib/linux_x86_64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/9b/f3/3e6848d3d51e45f2bc892ba866fe", "build/prefab/lib/linux_x86_64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/e6/35/64ef9eb0aa12b25a35ec4cf94d73",
"build/prefab/lib/linux_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/71/26/3e4f7d23518f3d4dd719223c7bd5", "build/prefab/lib/linux_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/f6/9f/96526d08d8d151381b999206a22c",
"build/prefab/lib/linux_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/41/30/ebf7264a7846b7e17d2ccee1e68e", "build/prefab/lib/linux_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/cf/ac/6b205f3ec382b27a63835723f062",
"build/prefab/lib/linux_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/b7/36/7b5926a3f526c4f53beeb85e0f28", "build/prefab/lib/linux_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/14/09/738e56ba494bfbd25b4d0fd20439",
"build/prefab/lib/mac_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/bb/df/26fd523b58edf61c230e0d8c29a9", "build/prefab/lib/mac_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/5e/15/de8816c5b0978d58a5a97b5dc96b",
"build/prefab/lib/mac_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/60/d6/d24629a9c4cc8d53034b166533fc", "build/prefab/lib/mac_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/cf/05/4b089f20f8673bbeaff43ad22316",
"build/prefab/lib/mac_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/ae/74/add4f1b22a9d870deab498a78150", "build/prefab/lib/mac_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/8c/ea/d02addfdff12637679eb84fc0c76",
"build/prefab/lib/mac_arm64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/60/cc/efd87e8316e57e6060c0f8c1c3b5", "build/prefab/lib/mac_arm64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/3b/3d/cb40316b8f1bcf2be6726e7caa02",
"build/prefab/lib/mac_x86_64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/06/a5/b9dc8830177144edccc3361f2380", "build/prefab/lib/mac_x86_64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/cc/50/4e046e25f8aa45acf1dec45a3ac8",
"build/prefab/lib/mac_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/d6/55/0ed426d7d9718e6c7cfa25ed45fa", "build/prefab/lib/mac_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/0b/0b/3df53fda69cf1bbde139a737155d",
"build/prefab/lib/mac_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/36/d9/1bac79e3118546083de075c591eb", "build/prefab/lib/mac_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/48/72/2bb9986c42cb3f830622bba48b84",
"build/prefab/lib/mac_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/0d/51/6431fa180fe6ca7a4f5e755deb13", "build/prefab/lib/mac_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/cf/55/0266ad6c51ea654700d6e5401942",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/88/27/5acc5bf12db2eeafad941cb4983c", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/69/cb/33e310a3a4088fd8d01a791a4101",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/b5/17/999fb8864717791fdb549e8d27ee", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/29/14/0c633d4d62106e27fad7e93bd1ee",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/75/a7/8a9faed3b33c85ed48becd57b96e", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/f9/6a/02d03767f94811eec30204d75317",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/7c/a5/7e049cf1b1974b1dafa6a5a5c651", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/90/2e/9a54913813513c1d3a44af34bd8a",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/e0/2e/0fb1dcf86dc106e610cdf85d9904", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/bc/20/abfd0ae02083fd0ee86b6d784df7",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/f1/4f/6d693934819c9fa3b46f5796d040", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/87/bc/b7cc546fda6955c72db6cabc055b",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/a2/98/1149701221912567fed626f41262", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/db/d6/6111b49e4ea15032002dea192c53",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/9c/51/6659783ad53b29633d8962fa6463", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/2d/dd/e753ae37c3c6fdc50c36174d0815",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "https://files.ballistica.net/cache/ba1/52/c6/c11130af7b10d6c0321add5518fa", "src/assets/ba_data/python/babase/_mgen/__init__.py": "https://files.ballistica.net/cache/ba1/52/c6/c11130af7b10d6c0321add5518fa",
"src/assets/ba_data/python/babase/_mgen/enums.py": "https://files.ballistica.net/cache/ba1/38/c3/1dedd5e74f2508efc5974c8815a1", "src/assets/ba_data/python/babase/_mgen/enums.py": "https://files.ballistica.net/cache/ba1/38/c3/1dedd5e74f2508efc5974c8815a1",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "https://files.ballistica.net/cache/ba1/ea/6a/6a4721b144e5e297b542d2a0eea2", "src/ballistica/base/mgen/pyembed/binding_base.inc": "https://files.ballistica.net/cache/ba1/ea/6a/6a4721b144e5e297b542d2a0eea2",

View File

@ -130,6 +130,7 @@
<w>apprun</w> <w>apprun</w>
<w>appspot</w> <w>appspot</w>
<w>appstate</w> <w>appstate</w>
<w>appstatedata</w>
<w>appstore</w> <w>appstore</w>
<w>appsubsystem</w> <w>appsubsystem</w>
<w>apptime</w> <w>apptime</w>

View File

@ -1,4 +1,4 @@
### 1.7.20 (build 21121, api 8, 2023-06-16) ### 1.7.20 (build 21122, api 8, 2023-06-16)
- This seems like a good time for a `refactoring` release in anticipation of - This seems like a good time for a `refactoring` release in anticipation of
changes coming in 1.8. Basically this means that a lot of things will be changes coming in 1.8. Basically this means that a lot of things will be
@ -340,13 +340,18 @@
its working. its working.
- (build 21118) Fixed an issue where certain messages such as player-left - (build 21118) Fixed an issue where certain messages such as player-left
weren't being send to clients. weren't being send to clients.
- (build 21118) renamed `bascenev1.screenmessage()` to - (build 21118) Renamed `bascenev1.screenmessage()` to
`bascenev1.broadcastmessage()` to make it more clear that it behaves `bascenev1.broadcastmessage()` to make it more clear that it behaves
differently (sending messages to all connected clients instead of just the differently (sending messages to all connected clients instead of just the
local screen). There is still a `bascenev1.screenmessage()` but that is now local screen). There is still a `bascenev1.screenmessage()` but that is now
the same local-only version available in babase. Added a temporary warning if the same local-only version available in babase. Added a temporary warning if
calling screenmessage() in a situation that in previous versions would have calling screenmessage() in a situation that in previous versions would have
done a broadcast. done a broadcast.
- (build 21121) The old app `user_agent_string` which was very ugly and
cluttered and nonstandard has been renamed to `legacy_user_agent_string`. A
newer simpler one is now available from `babase.user_agent_string()`. It looks
like `Ballistica/1.7.20`. If OS version or platform or whatever else needs to
be communicated to a server, it should be passed explicitly as extra data.
### 1.7.19 (build 20997, api 7, 2023-01-19) ### 1.7.19 (build 20997, api 7, 2023-01-19)

View File

@ -88,6 +88,7 @@
<w>apprun</w> <w>apprun</w>
<w>appspot</w> <w>appspot</w>
<w>appstate</w> <w>appstate</w>
<w>appstatedata</w>
<w>appsubsystem</w> <w>appsubsystem</w>
<w>apptime</w> <w>apptime</w>
<w>apptimer</w> <w>apptimer</w>

View File

@ -81,6 +81,7 @@ from _babase import (
show_progress_bar, show_progress_bar,
SimpleSound, SimpleSound,
unlock_all_input, unlock_all_input,
user_agent_string,
Vec3, Vec3,
workspaces_in_use, workspaces_in_use,
) )
@ -275,6 +276,7 @@ __all__ = [
'timestring', 'timestring',
'UIScale', 'UIScale',
'unlock_all_input', 'unlock_all_input',
'user_agent_string',
'utf8_all', 'utf8_all',
'Vec3', 'Vec3',
'vec3validate', 'vec3validate',

View File

@ -103,7 +103,7 @@ def handle_v1_cloud_log() -> None:
'log': _babase.get_v1_cloud_log(), 'log': _babase.get_v1_cloud_log(),
'version': app.version, 'version': app.version,
'build': app.build_number, 'build': app.build_number,
'userAgentString': app.classic.user_agent_string, 'userAgentString': app.classic.legacy_user_agent_string,
'session': sessionname, 'session': sessionname,
'activity': activityname, 'activity': activityname,
'fatal': 0, 'fatal': 0,
@ -339,10 +339,14 @@ def log_dumped_app_state() -> None:
_tb_held_files.clear() _tb_held_files.clear()
with open(mdpath, 'r', encoding='utf-8') as infile: with open(mdpath, 'r', encoding='utf-8') as infile:
metadata = dataclass_from_json( appstatedata = infile.read()
DumpedAppStateMetadata, infile.read()
) # Kill the file first in case we can't parse the data; don't
# want to get stuck doing this repeatedly.
os.unlink(mdpath) os.unlink(mdpath)
metadata = dataclass_from_json(DumpedAppStateMetadata, appstatedata)
out += ( out += (
f'App state dump:\nReason: {metadata.reason}\n' f'App state dump:\nReason: {metadata.reason}\n'
f'Time: {metadata.app_time:.2f}' f'Time: {metadata.app_time:.2f}'

View File

@ -185,7 +185,11 @@ def fetch_url(url: str, filename: Path, asset_gather: AssetGather) -> None:
# Pass a very short timeout to urllib so we have opportunities # Pass a very short timeout to urllib so we have opportunities
# to cancel even with network blockage. # to cancel even with network blockage.
req = urllib.request.urlopen( req = urllib.request.urlopen(
url, context=_babase.app.net.sslcontext, timeout=1 urllib.request.Request(
url, None, {'User-Agent': _babase.user_agent_string()}
),
context=_babase.app.net.sslcontext,
timeout=1,
) )
file_size = int(req.headers['Content-Length']) file_size = int(req.headers['Content-Length'])
print(f'\nDownloading: {filename} Bytes: {file_size:,}') print(f'\nDownloading: {filename} Bytes: {file_size:,}')

View File

@ -26,7 +26,7 @@ def get_input_device_mapped_value(
app = babase.app app = babase.app
assert app.classic is not None assert app.classic is not None
useragentstring = app.classic.user_agent_string useragentstring = app.classic.legacy_user_agent_string
platform = app.classic.platform platform = app.classic.platform
subplatform = app.classic.subplatform subplatform = app.classic.subplatform
appconfig = babase.app.config appconfig = babase.app.config

View File

@ -165,7 +165,7 @@ class MusicSubsystem:
def supports_soundtrack_entry_type(self, entry_type: str) -> bool: def supports_soundtrack_entry_type(self, entry_type: str) -> bool:
"""Return whether provided soundtrack entry type is supported here.""" """Return whether provided soundtrack entry type is supported here."""
uas = babase.env()['user_agent_string'] uas = babase.env()['legacy_user_agent_string']
assert isinstance(uas, str) assert isinstance(uas, str)
# FIXME: Generalize this. # FIXME: Generalize this.

View File

@ -81,7 +81,8 @@ class MasterServerV1CallThread(threading.Thread):
response_data: Any = None response_data: Any = None
url: str | None = None url: str | None = None
try: try:
assert babase.app.classic is not None classic = babase.app.classic
assert classic is not None
self._data = babase.utf8_all(self._data) self._data = babase.utf8_all(self._data)
babase.set_thread_name('BA_ServerCallThread') babase.set_thread_name('BA_ServerCallThread')
if self._request_type == 'get': if self._request_type == 'get':
@ -97,7 +98,7 @@ class MasterServerV1CallThread(threading.Thread):
urllib.request.Request( urllib.request.Request(
url, url,
None, None,
{'User-Agent': babase.app.classic.user_agent_string}, {'User-Agent': classic.legacy_user_agent_string},
), ),
context=babase.app.net.sslcontext, context=babase.app.net.sslcontext,
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS, timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS,
@ -109,7 +110,7 @@ class MasterServerV1CallThread(threading.Thread):
urllib.request.Request( urllib.request.Request(
url, url,
urllib.parse.urlencode(self._data).encode(), urllib.parse.urlencode(self._data).encode(),
{'User-Agent': babase.app.classic.user_agent_string}, {'User-Agent': classic.legacy_user_agent_string},
), ),
context=babase.app.net.sslcontext, context=babase.app.net.sslcontext,
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS, timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS,

View File

@ -139,10 +139,10 @@ class ClassicSubsystem(babase.AppSubsystem):
return self._env['subplatform'] return self._env['subplatform']
@property @property
def user_agent_string(self) -> str: def legacy_user_agent_string(self) -> str:
"""String containing various bits of info about OS/device/etc.""" """String containing various bits of info about OS/device/etc."""
assert isinstance(self._env['user_agent_string'], str) assert isinstance(self._env['legacy_user_agent_string'], str)
return self._env['user_agent_string'] return self._env['legacy_user_agent_string']
def on_app_loading(self) -> None: def on_app_loading(self) -> None:
from bascenev1lib.actor import spazappearance from bascenev1lib.actor import spazappearance

View File

@ -28,7 +28,7 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be # Build number and version of the ballistica binary we expect to be
# using. # using.
TARGET_BALLISTICA_BUILD = 21121 TARGET_BALLISTICA_BUILD = 21122
TARGET_BALLISTICA_VERSION = '1.7.20' TARGET_BALLISTICA_VERSION = '1.7.20'
_g_env_config: EnvConfig | None = None _g_env_config: EnvConfig | None = None

View File

@ -381,7 +381,7 @@ class MainMenuWindow(bui.Window):
resource=self._r resource=self._r
+ ( + (
'.quitText' '.quitText'
if 'Mac' in app.classic.user_agent_string if 'Mac' in app.classic.legacy_user_agent_string
else '.exitGameText' else '.exitGameText'
) )
), ),

View File

@ -828,7 +828,7 @@ class GamepadSettingsWindow(bui.Window):
classic.master_server_v1_post( classic.master_server_v1_post(
'controllerConfig', 'controllerConfig',
{ {
'ua': classic.user_agent_string, 'ua': classic.legacy_user_agent_string,
'b': bui.app.build_number, 'b': bui.app.build_number,
'name': self._name, 'name': self._name,
'inputMapHash': inputhash, 'inputMapHash': inputhash,

View File

@ -299,7 +299,7 @@ class ConfigKeyboardWindow(bui.Window):
bui.app.classic.master_server_v1_post( bui.app.classic.master_server_v1_post(
'controllerConfig', 'controllerConfig',
{ {
'ua': bui.app.classic.user_agent_string, 'ua': bui.app.classic.legacy_user_agent_string,
'name': self._name, 'name': self._name,
'b': bui.app.build_number, 'b': bui.app.build_number,
'config': dst2, 'config': dst2,

View File

@ -200,7 +200,7 @@ def _run_diagnostics(weakwin: weakref.ref[NetTestingWindow]) -> None:
_print( _print(
f'Running network diagnostics...\n' f'Running network diagnostics...\n'
f'ua: {bui.app.classic.user_agent_string}\n' f'ua: {bui.app.classic.legacy_user_agent_string}\n'
f'time: {utc_now()}.' f'time: {utc_now()}.'
) )
@ -414,7 +414,7 @@ def _test_fetch(baseaddr: str) -> None:
urllib.request.Request( urllib.request.Request(
f'{baseaddr}/ping', f'{baseaddr}/ping',
None, None,
{'User-Agent': bui.app.classic.user_agent_string}, {'User-Agent': bui.app.classic.legacy_user_agent_string},
), ),
context=bui.app.net.sslcontext, context=bui.app.net.sslcontext,
timeout=MAX_TEST_SECONDS, timeout=MAX_TEST_SECONDS,

View File

@ -36,7 +36,8 @@ void App::PostInit() {
assert(true); assert(true);
#endif // !BA_DEBUG_BUILD #endif // !BA_DEBUG_BUILD
g_core->user_agent_string = g_core->platform->GetUserAgentString(); g_core->set_legacy_user_agent_string(
g_core->platform->GetLegacyUserAgentString());
} }
void App::LogicThreadApplyAppConfig() { void App::LogicThreadApplyAppConfig() {

View File

@ -648,7 +648,7 @@ static PyMethodDef PyCommitConfigDef = {
"(internal)", "(internal)",
}; };
// --------------------------------- env --------------------------------------- // ------------------------------- pre_env -------------------------------------
static auto PyPreEnv(PyObject* self) -> PyObject* { static auto PyPreEnv(PyObject* self) -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
@ -726,7 +726,7 @@ static auto PyEnv(PyObject* self) -> PyObject* {
"si" // build_number "si" // build_number
"ss" // config_file_path "ss" // config_file_path
"ss" // locale "ss" // locale
"ss" // user_agent_string "ss" // legacy_user_agent_string
"ss" // version "ss" // version
"sO" // debug_build "sO" // debug_build
"sO" // test_build "sO" // test_build
@ -750,7 +750,7 @@ static auto PyEnv(PyObject* self) -> PyObject* {
"build_number", kEngineBuildNumber, "build_number", kEngineBuildNumber,
"config_file_path", g_core->platform->GetConfigFilePath().c_str(), "config_file_path", g_core->platform->GetConfigFilePath().c_str(),
"locale", g_core->platform->GetLocale().c_str(), "locale", g_core->platform->GetLocale().c_str(),
"user_agent_string", g_core->user_agent_string.c_str(), "legacy_user_agent_string", g_core->legacy_user_agent_string().c_str(),
"version", kEngineVersion, "version", kEngineVersion,
"debug_build", g_buildconfig.debug_build() ? Py_True : Py_False, "debug_build", g_buildconfig.debug_build() ? Py_True : Py_False,
"test_build", g_buildconfig.test_build() ? Py_True : Py_False, "test_build", g_buildconfig.test_build() ? Py_True : Py_False,
@ -1330,6 +1330,27 @@ static PyMethodDef PyReachedEndOfBaBaseDef = {
"reached_end_of_babase() -> None\n" "reached_end_of_babase() -> None\n"
"\n" "\n"
"A simple user-agent-string that should be used in any web requests made\n"
"on behalf of the engine.",
};
// --------------------------- user_agent_string -------------------------------
static auto PyUserAgentString(PyObject* self) -> PyObject* {
BA_PYTHON_TRY;
char buffer[64];
snprintf(buffer, sizeof(buffer), "Ballistica/%s", kEngineVersion);
return PyUnicode_FromString(buffer);
BA_PYTHON_CATCH;
}
static PyMethodDef PyUserAgentStringDef = {
"user_agent_string", // name
(PyCFunction)PyUserAgentString, // method
METH_NOARGS, // flags
"user_agent_string() -> str\n"
"\n"
"(internal)\n", "(internal)\n",
}; };
@ -1375,6 +1396,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector<PyMethodDef> {
PyOnAppRunningDef, PyOnAppRunningDef,
PyOnInitialAppModeSetDef, PyOnInitialAppModeSetDef,
PyReachedEndOfBaBaseDef, PyReachedEndOfBaBaseDef,
PyUserAgentStringDef,
}; };
} }

View File

@ -100,6 +100,14 @@ class CoreFeatureSet {
/// any source file paths we print. /// any source file paths we print.
auto build_src_dir() const { return build_src_dir_; } auto build_src_dir() const { return build_src_dir_; }
const auto& legacy_user_agent_string() const {
return legacy_user_agent_string_;
}
void set_legacy_user_agent_string(const std::string& val) {
legacy_user_agent_string_ = val;
}
// Subsystems. // Subsystems.
CorePython* const python; CorePython* const python;
CorePlatform* const platform; CorePlatform* const platform;
@ -121,7 +129,6 @@ class CoreFeatureSet {
bool should_pause{}; bool should_pause{};
bool reset_vr_orientation{}; bool reset_vr_orientation{};
bool user_ran_commands{}; bool user_ran_commands{};
std::string user_agent_string{"BA_USER_AGENT_UNSET (" BA_PLATFORM_STRING ")"};
int return_value{}; int return_value{};
bool debug_timing{}; bool debug_timing{};
std::thread::id main_thread_id{}; std::thread::id main_thread_id{};
@ -149,6 +156,8 @@ class CoreFeatureSet {
microsecs_t app_time_microsecs_{}; microsecs_t app_time_microsecs_{};
microsecs_t last_app_time_measure_microsecs_; microsecs_t last_app_time_measure_microsecs_;
std::mutex app_time_mutex_; std::mutex app_time_mutex_;
std::string legacy_user_agent_string_{
"BA_USER_AGENT_UNSET (" BA_PLATFORM_STRING ")"};
}; };
} // namespace ballistica::core } // namespace ballistica::core

View File

@ -573,7 +573,7 @@ auto CorePlatform::GetIsStdinATerminal() -> bool {
auto CorePlatform::GetOSVersionString() -> std::string { return ""; } auto CorePlatform::GetOSVersionString() -> std::string { return ""; }
auto CorePlatform::GetUserAgentString() -> std::string { auto CorePlatform::GetLegacyUserAgentString() -> std::string {
std::string device = GetDeviceName(); std::string device = GetDeviceName();
std::string version = GetOSVersionString(); std::string version = GetOSVersionString();
if (!version.empty()) { if (!version.empty()) {

View File

@ -187,7 +187,10 @@ class CorePlatform {
/// Return en_US or whatnot. /// Return en_US or whatnot.
virtual auto GetLocale() -> std::string; virtual auto GetLocale() -> std::string;
virtual auto GetUserAgentString() -> std::string; /// Get the older more complex user-agent-string, used for communication
/// with v1 servers/etc. This can go away eventually.
auto GetLegacyUserAgentString() -> std::string;
virtual auto GetOSVersionString() -> std::string; virtual auto GetOSVersionString() -> std::string;
/// Set an environment variable as utf8, overwriting if it already exists. /// Set an environment variable as utf8, overwriting if it already exists.

View File

@ -222,12 +222,14 @@ static auto PyGetUIInputDevice(PyObject* self, PyObject* args, PyObject* keywds)
dynamic_cast<SceneV1InputDeviceDelegate*>(delegate)) { dynamic_cast<SceneV1InputDeviceDelegate*>(delegate)) {
return c_delegate->NewPyRef(); return c_delegate->NewPyRef();
} else { } else {
// Perhaps will want to return None in this case once we've got // Assuming this would be due to getting called in another app-mode.
// newer versions of InputDevice; we'll see... // Wonder if it would be wise to error in that case...
throw Exception( BA_LOG_ONCE(
"Unexpected delegate " LogLevel::kWarning,
+ (delegate ? delegate->GetObjectDescription() : "(nullptr)") "scene_v1: Found unexpected delegate "
+ " for ui-input-device " + d->GetObjectDescription() + "."); + (delegate ? delegate->GetObjectDescription() : "(nullptr)")
+ " for ui-input-device " + d->GetObjectDescription() + ".");
Py_RETURN_NONE;
} }
} else { } else {
Py_RETURN_NONE; Py_RETURN_NONE;
@ -240,7 +242,7 @@ static PyMethodDef PyGetUIInputDeviceDef = {
(PyCFunction)PyGetUIInputDevice, // method (PyCFunction)PyGetUIInputDevice, // method
METH_VARARGS | METH_KEYWORDS, // flags METH_VARARGS | METH_KEYWORDS, // flags
"get_ui_input_device() -> bascenev1.InputDevice\n" "get_ui_input_device() -> bascenev1.InputDevice | None\n"
"\n" "\n"
"(internal)\n" "(internal)\n"
"\n" "\n"

View File

@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
namespace ballistica { namespace ballistica {
// These are set automatically via script; don't modify them here. // These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 21121; const int kEngineBuildNumber = 21122;
const char* kEngineVersion = "1.7.20"; const char* kEngineVersion = "1.7.20";
auto MonolithicMain(const core::CoreConfig& core_config) -> int { auto MonolithicMain(const core::CoreConfig& core_config) -> int {