This commit is contained in:
Eric 2023-06-10 20:23:04 -07:00
parent 08bcf88929
commit 0bf2eeb0e3
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
6 changed files with 90 additions and 65 deletions

View File

@ -12,6 +12,18 @@ from efro.util import set_canonical_module_names
import _babase import _babase
from _babase import ( from _babase import (
music_player_set_volume,
music_player_play,
music_player_stop,
music_player_shutdown,
mac_music_app_init,
mac_music_app_get_volume,
mac_music_app_get_library_source,
mac_music_app_stop,
mac_music_app_set_volume,
mac_music_app_get_playlists,
mac_music_app_play_playlist,
set_thread_name,
show_progress_bar, show_progress_bar,
print_load_info, print_load_info,
reload_media, reload_media,
@ -131,6 +143,7 @@ _babase.app = app = App()
app.postinit() app.postinit()
__all__ = [ __all__ = [
'set_thread_name',
'app', 'app',
'AccountV2Handle', 'AccountV2Handle',
'AccountV2Subsystem', 'AccountV2Subsystem',
@ -243,6 +256,17 @@ __all__ = [
'print_load_info', 'print_load_info',
'show_progress_bar', 'show_progress_bar',
'handle_leftover_v1_cloud_log_file', 'handle_leftover_v1_cloud_log_file',
'music_player_set_volume',
'music_player_play',
'music_player_stop',
'music_player_shutdown',
'mac_music_app_init',
'mac_music_app_get_volume',
'mac_music_app_get_library_source',
'mac_music_app_stop',
'mac_music_app_set_volume',
'mac_music_app_get_playlists',
'mac_music_app_play_playlist',
] ]
# We want stuff to show up as babase.Foo instead of babase._sub.Foo. # We want stuff to show up as babase.Foo instead of babase._sub.Foo.

View File

@ -9,9 +9,9 @@ import weakref
from enum import Enum from enum import Enum
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import _babase import babase
import _bascenev1
from babase.internal import DEFAULT_REQUEST_TIMEOUT_SECONDS from babase.internal import DEFAULT_REQUEST_TIMEOUT_SECONDS
import bascenev1
if TYPE_CHECKING: if TYPE_CHECKING:
from typing import Any, Callable from typing import Any, Callable
@ -44,10 +44,10 @@ class MasterServerV1CallThread(threading.Thread):
self._response_type = response_type self._response_type = response_type
self._data = {} if data is None else copy.deepcopy(data) self._data = {} if data is None else copy.deepcopy(data)
self._callback: MasterServerCallback | None = callback self._callback: MasterServerCallback | None = callback
self._context = _babase.ContextRef() self._context = babase.ContextRef()
# Save and restore the context we were created from. # Save and restore the context we were created from.
activity = _bascenev1.getactivity(doraise=False) activity = bascenev1.getactivity(doraise=False)
self._activity = weakref.ref(activity) if activity is not None else None self._activity = weakref.ref(activity) if activity is not None else None
def _run_callback(self, arg: None | dict[str, Any]) -> None: def _run_callback(self, arg: None | dict[str, Any]) -> None:
@ -77,14 +77,14 @@ class MasterServerV1CallThread(threading.Thread):
from efro.error import is_urllib_communication_error from efro.error import is_urllib_communication_error
from babase._general import Call, utf8_all from babase._general import Call, utf8_all
plus = _babase.app.plus plus = babase.app.plus
assert plus is not None assert plus is not None
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 assert babase.app.classic is not None
self._data = utf8_all(self._data) self._data = 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':
url = ( url = (
plus.get_master_server_address() plus.get_master_server_address()
@ -98,9 +98,9 @@ class MasterServerV1CallThread(threading.Thread):
urllib.request.Request( urllib.request.Request(
url, url,
None, None,
{'User-Agent': _babase.app.classic.user_agent_string}, {'User-Agent': babase.app.classic.user_agent_string},
), ),
context=_babase.app.net.sslcontext, context=babase.app.net.sslcontext,
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS, timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS,
) )
elif self._request_type == 'post': elif self._request_type == 'post':
@ -110,9 +110,9 @@ 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': babase.app.classic.user_agent_string},
), ),
context=_babase.app.net.sslcontext, context=babase.app.net.sslcontext,
timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS, timeout=DEFAULT_REQUEST_TIMEOUT_SECONDS,
) )
else: else:
@ -148,6 +148,6 @@ class MasterServerV1CallThread(threading.Thread):
response_data = None response_data = None
if self._callback is not None: if self._callback is not None:
_babase.pushcall( babase.pushcall(
Call(self._run_callback, response_data), from_other_thread=True Call(self._run_callback, response_data), from_other_thread=True
) )

View File

@ -6,7 +6,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import _babase import babase
if TYPE_CHECKING: if TYPE_CHECKING:
from typing import Any from typing import Any
@ -15,8 +15,7 @@ if TYPE_CHECKING:
def get_tournament_prize_strings(entry: dict[str, Any]) -> list[str]: def get_tournament_prize_strings(entry: dict[str, Any]) -> list[str]:
"""Given a tournament entry, return strings for its prize levels.""" """Given a tournament entry, return strings for its prize levels."""
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
from babase._mgen.enums import SpecialChar from bascenev1 import get_trophy_string
from bascenev1._gameutils import get_trophy_string
range1 = entry.get('prizeRange1') range1 = entry.get('prizeRange1')
range2 = entry.get('prizeRange2') range2 = entry.get('prizeRange2')
@ -48,7 +47,9 @@ def get_tournament_prize_strings(entry: dict[str, Any]) -> list[str]:
# in to compensate so the ticket counts line up. # in to compensate so the ticket counts line up.
if prize is not None: if prize is not None:
pvval = ( pvval = (
_babase.charstr(SpecialChar.TICKET_BACKING) + str(prize) + pvval babase.charstr(babase.SpecialChar.TICKET_BACKING)
+ str(prize)
+ pvval
) )
out_vals.append(prval) out_vals.append(prval)
out_vals.append(pvval) out_vals.append(pvval)

View File

@ -7,9 +7,9 @@ import threading
from collections import deque from collections import deque
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import _babase import babase
from baclassic._music import MusicPlayer from baclassic._music import MusicPlayer
import bauiv1 as bui
if TYPE_CHECKING: if TYPE_CHECKING:
from typing import Callable, Any from typing import Callable, Any
@ -47,8 +47,8 @@ class MacMusicAppMusicPlayer(MusicPlayer):
self._thread.get_playlists(callback) self._thread.get_playlists(callback)
def on_play(self, entry: Any) -> None: def on_play(self, entry: Any) -> None:
assert _babase.app.classic is not None assert babase.app.classic is not None
music = _babase.app.classic.music music = babase.app.classic.music
entry_type = music.get_soundtrack_entry_type(entry) entry_type = music.get_soundtrack_entry_type(entry)
if entry_type == 'iTunesPlaylist': if entry_type == 'iTunesPlaylist':
self._thread.play_playlist(music.get_soundtrack_entry_name(entry)) self._thread.play_playlist(music.get_soundtrack_entry_name(entry))
@ -81,27 +81,27 @@ class _MacMusicAppThread(threading.Thread):
from babase._general import Call from babase._general import Call
from babase._language import Lstr from babase._language import Lstr
_babase.set_thread_name('BA_MacMusicAppThread') babase.set_thread_name('BA_MacMusicAppThread')
_babase.mac_music_app_init() babase.mac_music_app_init()
# Let's mention to the user we're launching Music.app in case # Let's mention to the user we're launching Music.app in case
# it causes any funny business (this used to background the app # it causes any funny business (this used to background the app
# sometimes, though I think that is fixed now) # sometimes, though I think that is fixed now)
def do_print() -> None: def do_print() -> None:
bui.apptimer( babase.apptimer(
1.0, 1.0,
Call( Call(
_babase.screenmessage, babase.screenmessage,
Lstr(resource='usingItunesText'), Lstr(resource='usingItunesText'),
(0, 1, 0), (0, 1, 0),
), ),
) )
_babase.pushcall(do_print, from_other_thread=True) babase.pushcall(do_print, from_other_thread=True)
# Here we grab this to force the actual launch. # Here we grab this to force the actual launch.
_babase.mac_music_app_get_volume() babase.mac_music_app_get_volume()
_babase.mac_music_app_get_library_source() babase.mac_music_app_get_library_source()
done = False done = False
while not done: while not done:
self._commands_available.wait() self._commands_available.wait()
@ -137,15 +137,15 @@ class _MacMusicAppThread(threading.Thread):
if old_volume > 0.0 and volume == 0.0: if old_volume > 0.0 and volume == 0.0:
try: try:
assert self._orig_volume is not None assert self._orig_volume is not None
_babase.mac_music_app_stop() babase.mac_music_app_stop()
_babase.mac_music_app_set_volume(self._orig_volume) babase.mac_music_app_set_volume(self._orig_volume)
except Exception as exc: except Exception as exc:
print('Error stopping iTunes music:', exc) print('Error stopping iTunes music:', exc)
elif self._volume > 0: elif self._volume > 0:
# If volume was zero, store pre-playing volume and start # If volume was zero, store pre-playing volume and start
# playing. # playing.
if old_volume == 0.0: if old_volume == 0.0:
self._orig_volume = _babase.mac_music_app_get_volume() self._orig_volume = babase.mac_music_app_get_volume()
self._update_mac_music_app_volume() self._update_mac_music_app_volume()
if old_volume == 0.0: if old_volume == 0.0:
self._play_current_playlist() self._play_current_playlist()
@ -172,7 +172,7 @@ class _MacMusicAppThread(threading.Thread):
from babase._general import Call from babase._general import Call
try: try:
playlists = _babase.mac_music_app_get_playlists() playlists = babase.mac_music_app_get_playlists()
playlists = [ playlists = [
p p
for p in playlists for p in playlists
@ -196,15 +196,15 @@ class _MacMusicAppThread(threading.Thread):
except Exception as exc: except Exception as exc:
print('Error getting iTunes playlists:', exc) print('Error getting iTunes playlists:', exc)
playlists = [] playlists = []
_babase.pushcall(Call(target, playlists), from_other_thread=True) babase.pushcall(Call(target, playlists), from_other_thread=True)
def _handle_play_command(self, target: str | None) -> None: def _handle_play_command(self, target: str | None) -> None:
if target is None: if target is None:
if self._current_playlist is not None and self._volume > 0: if self._current_playlist is not None and self._volume > 0:
try: try:
assert self._orig_volume is not None assert self._orig_volume is not None
_babase.mac_music_app_stop() babase.mac_music_app_stop()
_babase.mac_music_app_set_volume(self._orig_volume) babase.mac_music_app_set_volume(self._orig_volume)
except Exception as exc: except Exception as exc:
print('Error stopping iTunes music:', exc) print('Error stopping iTunes music:', exc)
self._current_playlist = None self._current_playlist = None
@ -214,15 +214,15 @@ class _MacMusicAppThread(threading.Thread):
if self._current_playlist is not None and self._volume > 0: if self._current_playlist is not None and self._volume > 0:
try: try:
assert self._orig_volume is not None assert self._orig_volume is not None
_babase.mac_music_app_stop() babase.mac_music_app_stop()
_babase.mac_music_app_set_volume(self._orig_volume) babase.mac_music_app_set_volume(self._orig_volume)
except Exception as exc: except Exception as exc:
print('Error stopping iTunes music:', exc) print('Error stopping iTunes music:', exc)
# Set our playlist and play it if our volume is up. # Set our playlist and play it if our volume is up.
self._current_playlist = target self._current_playlist = target
if self._volume > 0: if self._volume > 0:
self._orig_volume = _babase.mac_music_app_get_volume() self._orig_volume = babase.mac_music_app_get_volume()
self._update_mac_music_app_volume() self._update_mac_music_app_volume()
self._play_current_playlist() self._play_current_playlist()
@ -232,8 +232,8 @@ class _MacMusicAppThread(threading.Thread):
if self._current_playlist is not None and self._volume > 0: if self._current_playlist is not None and self._volume > 0:
try: try:
assert self._orig_volume is not None assert self._orig_volume is not None
_babase.mac_music_app_stop() babase.mac_music_app_stop()
_babase.mac_music_app_set_volume(self._orig_volume) babase.mac_music_app_set_volume(self._orig_volume)
except Exception as exc: except Exception as exc:
print('Error stopping iTunes music:', exc) print('Error stopping iTunes music:', exc)
@ -242,13 +242,13 @@ class _MacMusicAppThread(threading.Thread):
from babase._general import Call from babase._general import Call
assert self._current_playlist is not None assert self._current_playlist is not None
if _babase.mac_music_app_play_playlist(self._current_playlist): if babase.mac_music_app_play_playlist(self._current_playlist):
pass pass
else: else:
_babase.pushcall( babase.pushcall(
Call( Call(
_babase.screenmessage, babase.screenmessage,
_babase.app.lang.get_resource('playlistNotFoundText') babase.app.lang.get_resource('playlistNotFoundText')
+ ': \'' + ': \''
+ self._current_playlist + self._current_playlist
+ '\'', + '\'',
@ -264,6 +264,6 @@ class _MacMusicAppThread(threading.Thread):
) )
def _update_mac_music_app_volume(self) -> None: def _update_mac_music_app_volume(self) -> None:
_babase.mac_music_app_set_volume( babase.mac_music_app_set_volume(
max(0, min(100, int(100.0 * self._volume))) max(0, min(100, int(100.0 * self._volume)))
) )

View File

@ -5,10 +5,12 @@ from __future__ import annotations
import os import os
import random import random
import logging
import threading import threading
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import _babase import babase
from baclassic._music import MusicPlayer from baclassic._music import MusicPlayer
if TYPE_CHECKING: if TYPE_CHECKING:
@ -47,17 +49,17 @@ class OSMusicPlayer(MusicPlayer):
) )
def on_set_volume(self, volume: float) -> None: def on_set_volume(self, volume: float) -> None:
_babase.music_player_set_volume(volume) babase.music_player_set_volume(volume)
def on_play(self, entry: Any) -> None: def on_play(self, entry: Any) -> None:
assert _babase.app.classic is not None assert babase.app.classic is not None
music = _babase.app.classic.music music = babase.app.classic.music
entry_type = music.get_soundtrack_entry_type(entry) entry_type = music.get_soundtrack_entry_type(entry)
name = music.get_soundtrack_entry_name(entry) name = music.get_soundtrack_entry_name(entry)
assert name is not None assert name is not None
if entry_type == 'musicFile': if entry_type == 'musicFile':
self._want_to_play = self._actually_playing = True self._want_to_play = self._actually_playing = True
_babase.music_player_play(name) babase.music_player_play(name)
elif entry_type == 'musicFolder': elif entry_type == 'musicFolder':
# Launch a thread to scan this folder and give us a random # Launch a thread to scan this folder and give us a random
# valid file within it. # valid file within it.
@ -72,10 +74,8 @@ class OSMusicPlayer(MusicPlayer):
def _on_play_folder_cb( def _on_play_folder_cb(
self, result: str | list[str], error: str | None = None self, result: str | list[str], error: str | None = None
) -> None: ) -> None:
from babase import _language
if error is not None: if error is not None:
rstr = _language.Lstr( rstr = babase.Lstr(
resource='internal.errorPlayingMusicText' resource='internal.errorPlayingMusicText'
).evaluate() ).evaluate()
if isinstance(result, str): if isinstance(result, str):
@ -88,7 +88,7 @@ class OSMusicPlayer(MusicPlayer):
err_str = ( err_str = (
rstr.replace('${MUSIC}', '<multiple>') + '; ' + str(error) rstr.replace('${MUSIC}', '<multiple>') + '; ' + str(error)
) )
_babase.screenmessage(err_str, color=(1, 0, 0)) babase.screenmessage(err_str, color=(1, 0, 0))
return return
# There's a chance a stop could have been issued before our thread # There's a chance a stop could have been issued before our thread
@ -97,15 +97,15 @@ class OSMusicPlayer(MusicPlayer):
print('_on_play_folder_cb called with _want_to_play False') print('_on_play_folder_cb called with _want_to_play False')
else: else:
self._actually_playing = True self._actually_playing = True
_babase.music_player_play(result) babase.music_player_play(result)
def on_stop(self) -> None: def on_stop(self) -> None:
self._want_to_play = False self._want_to_play = False
self._actually_playing = False self._actually_playing = False
_babase.music_player_stop() babase.music_player_stop()
def on_app_shutdown(self) -> None: def on_app_shutdown(self) -> None:
_babase.music_player_shutdown() babase.music_player_shutdown()
class _PickFolderSongThread(threading.Thread): class _PickFolderSongThread(threading.Thread):
@ -124,9 +124,9 @@ class _PickFolderSongThread(threading.Thread):
from babase import _language from babase import _language
from babase._general import Call from babase._general import Call
do_print_error = True do_log_error = True
try: try:
_babase.set_thread_name('BA_PickFolderSongThread') babase.set_thread_name('BA_PickFolderSongThread')
all_files: list[str] = [] all_files: list[str] = []
valid_extensions = ['.' + x for x in self._valid_extensions] valid_extensions = ['.' + x for x in self._valid_extensions]
for root, _subdirs, filenames in os.walk(self._path): for root, _subdirs, filenames in os.walk(self._path):
@ -139,25 +139,23 @@ class _PickFolderSongThread(threading.Thread):
root + '/' + fname, root + '/' + fname,
) )
if not all_files: if not all_files:
do_print_error = False do_log_error = False
raise RuntimeError( raise RuntimeError(
_language.Lstr( _language.Lstr(
resource='internal.noMusicFilesInFolderText' resource='internal.noMusicFilesInFolderText'
).evaluate() ).evaluate()
) )
_babase.pushcall( babase.pushcall(
Call(self._callback, all_files, None), from_other_thread=True Call(self._callback, all_files, None), from_other_thread=True
) )
except Exception as exc: except Exception as exc:
from babase import _error if do_log_error:
logging.exception('Error in _PickFolderSongThread')
if do_print_error:
_error.print_exception()
try: try:
err_str = str(exc) err_str = str(exc)
except Exception: except Exception:
err_str = '<ENCERR4523>' err_str = '<ENCERR4523>'
_babase.pushcall( babase.pushcall(
Call(self._callback, self._path, err_str), Call(self._callback, self._path, err_str),
from_other_thread=True, from_other_thread=True,
) )

View File

@ -213,8 +213,10 @@ from bascenev1._dependency import (
DependencySet, DependencySet,
AssetPackage, AssetPackage,
) )
from bascenev1._gameutils import get_trophy_string
__all__ = [ __all__ = [
'get_trophy_string',
'app', 'app',
'get_local_active_input_devices_count', 'get_local_active_input_devices_count',
'lock_all_input', 'lock_all_input',