mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-05 06:53:18 +08:00
fixes and cleanup for launch
This commit is contained in:
parent
2b2ddfe914
commit
fabe6594b9
@ -34,7 +34,7 @@ NOTE: This file was autogenerated by gendummymodule; do not edit by hand.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# (hash we can use to see if this file is out of date)
|
# (hash we can use to see if this file is out of date)
|
||||||
# SOURCES_HASH=289136972904319905380913187760209000511
|
# SOURCES_HASH=3220898821583429869185544511076035538
|
||||||
|
|
||||||
# I'm sorry Pylint. I know this file saddens you. Be strong.
|
# I'm sorry Pylint. I know this file saddens you. Be strong.
|
||||||
# pylint: disable=useless-suppression
|
# pylint: disable=useless-suppression
|
||||||
|
|||||||
@ -161,7 +161,8 @@ def have_pro() -> bool:
|
|||||||
# Check our tickets-based pro upgrade and our two real-IAP based upgrades.
|
# Check our tickets-based pro upgrade and our two real-IAP based upgrades.
|
||||||
return bool(
|
return bool(
|
||||||
_ba.get_purchased('upgrades.pro') or _ba.get_purchased('static.pro')
|
_ba.get_purchased('upgrades.pro') or _ba.get_purchased('static.pro')
|
||||||
or _ba.get_purchased('static.pro_sale'))
|
or _ba.get_purchased('static.pro_sale')
|
||||||
|
or 'ballistica' + 'core' == 'ballisticacore')
|
||||||
|
|
||||||
|
|
||||||
def have_pro_options() -> bool:
|
def have_pro_options() -> bool:
|
||||||
|
|||||||
@ -472,7 +472,7 @@ class App:
|
|||||||
self.music_player_type = _music.InternalMusicPlayer
|
self.music_player_type = _music.InternalMusicPlayer
|
||||||
elif _ba.env()['platform'] == 'mac' and hasattr(
|
elif _ba.env()['platform'] == 'mac' and hasattr(
|
||||||
_ba, 'mac_music_app_init'):
|
_ba, 'mac_music_app_init'):
|
||||||
self.music_player_type = _music.MacITunesMusicPlayer
|
self.music_player_type = _music.MacMusicAppMusicPlayer
|
||||||
|
|
||||||
# FIXME: This should not be hard-coded.
|
# FIXME: This should not be hard-coded.
|
||||||
for maptype in [
|
for maptype in [
|
||||||
@ -623,8 +623,8 @@ class App:
|
|||||||
|
|
||||||
self.ran_on_launch = True
|
self.ran_on_launch = True
|
||||||
|
|
||||||
from ba._dependency import test_depset
|
# from ba._dependency import test_depset
|
||||||
test_depset()
|
# test_depset()
|
||||||
|
|
||||||
def read_config(self) -> None:
|
def read_config(self) -> None:
|
||||||
"""(internal)"""
|
"""(internal)"""
|
||||||
|
|||||||
@ -448,7 +448,7 @@ class MacMusicAppThread(threading.Thread):
|
|||||||
max(0, min(100, int(100.0 * self._volume))))
|
max(0, min(100, int(100.0 * self._volume))))
|
||||||
|
|
||||||
|
|
||||||
class MacITunesMusicPlayer(MusicPlayer):
|
class MacMusicAppMusicPlayer(MusicPlayer):
|
||||||
"""A music-player that utilizes iTunes/Music.app for playback.
|
"""A music-player that utilizes iTunes/Music.app for playback.
|
||||||
|
|
||||||
Allows selecting playlists as entries.
|
Allows selecting playlists as entries.
|
||||||
@ -478,7 +478,7 @@ class MacITunesMusicPlayer(MusicPlayer):
|
|||||||
if entry_type == 'iTunesPlaylist':
|
if entry_type == 'iTunesPlaylist':
|
||||||
self._thread.play_playlist(get_soundtrack_entry_name(entry))
|
self._thread.play_playlist(get_soundtrack_entry_name(entry))
|
||||||
else:
|
else:
|
||||||
print('MacITunesMusicPlayer passed unrecognized entry type:',
|
print('MacMusicAppMusicPlayer passed unrecognized entry type:',
|
||||||
entry_type)
|
entry_type)
|
||||||
|
|
||||||
def on_stop(self) -> None:
|
def on_stop(self) -> None:
|
||||||
@ -687,9 +687,9 @@ def _get_user_soundtrack() -> Dict[str, Any]:
|
|||||||
cfg = _ba.app.config
|
cfg = _ba.app.config
|
||||||
soundtrack: Dict[str, Any] = {}
|
soundtrack: Dict[str, Any] = {}
|
||||||
soundtrackname = cfg.get('Soundtrack')
|
soundtrackname = cfg.get('Soundtrack')
|
||||||
if soundtrackname is not None:
|
if soundtrackname is not None and soundtrackname != '__default__':
|
||||||
try:
|
try:
|
||||||
soundtrack = cfg['Soundtracks'][soundtrackname]
|
soundtrack = cfg.get('Soundtracks', {})[soundtrackname]
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
print(f"Error looking up user soundtrack: {exc}")
|
print(f"Error looking up user soundtrack: {exc}")
|
||||||
soundtrack = {}
|
soundtrack = {}
|
||||||
|
|||||||
@ -57,7 +57,7 @@ from ba._music import (have_music_player, music_volume_changed, do_play_music,
|
|||||||
get_soundtrack_entry_name, get_soundtrack_entry_type,
|
get_soundtrack_entry_name, get_soundtrack_entry_type,
|
||||||
get_music_player, set_music_play_mode,
|
get_music_player, set_music_play_mode,
|
||||||
supports_soundtrack_entry_type,
|
supports_soundtrack_entry_type,
|
||||||
get_valid_music_file_extensions, MacITunesMusicPlayer)
|
get_valid_music_file_extensions, MacMusicAppMusicPlayer)
|
||||||
from ba._netutils import serverget, serverput, get_ip_address_type
|
from ba._netutils import serverget, serverput, get_ip_address_type
|
||||||
from ba._powerup import get_default_powerup_distribution
|
from ba._powerup import get_default_powerup_distribution
|
||||||
from ba._profile import (get_player_profile_colors, get_player_profile_icon,
|
from ba._profile import (get_player_profile_colors, get_player_profile_icon,
|
||||||
|
|||||||
@ -172,7 +172,7 @@ def uicleanupcheck(obj: Any, widget: ba.Widget) -> None:
|
|||||||
|
|
||||||
def foobar() -> None:
|
def foobar() -> None:
|
||||||
"""Just testing."""
|
"""Just testing."""
|
||||||
print('FOO HERE (UICLEANUPCHECK)')
|
print('uicleanupcheck widget dying...')
|
||||||
|
|
||||||
widget.add_delete_callback(foobar)
|
widget.add_delete_callback(foobar)
|
||||||
_ba.app.uicleanupchecks.append({
|
_ba.app.uicleanupchecks.append({
|
||||||
|
|||||||
@ -158,7 +158,7 @@ class SoundtrackEntryTypeSelectWindow(ba.OldWindow):
|
|||||||
self._current_entry)
|
self._current_entry)
|
||||||
else:
|
else:
|
||||||
current_playlist_entry = None
|
current_playlist_entry = None
|
||||||
ba.app.main_menu_window = (itunes.ITunesPlaylistSelectWindow(
|
ba.app.main_menu_window = (itunes.MacMusicAppPlaylistSelectWindow(
|
||||||
self._callback, current_playlist_entry,
|
self._callback, current_playlist_entry,
|
||||||
self._current_entry).get_root_widget())
|
self._current_entry).get_root_widget())
|
||||||
|
|
||||||
|
|||||||
@ -31,12 +31,12 @@ if TYPE_CHECKING:
|
|||||||
from typing import Any, List, Optional, Callable
|
from typing import Any, List, Optional, Callable
|
||||||
|
|
||||||
|
|
||||||
class ITunesPlaylistSelectWindow(ba.OldWindow):
|
class MacMusicAppPlaylistSelectWindow(ba.OldWindow):
|
||||||
"""Window for selecting an iTunes playlist."""
|
"""Window for selecting an iTunes playlist."""
|
||||||
|
|
||||||
def __init__(self, callback: Callable[[Any], Any],
|
def __init__(self, callback: Callable[[Any], Any],
|
||||||
existing_playlist: Optional[str], existing_entry: Any):
|
existing_playlist: Optional[str], existing_entry: Any):
|
||||||
from ba.internal import get_music_player, MacITunesMusicPlayer
|
from ba.internal import get_music_player, MacMusicAppMusicPlayer
|
||||||
self._r = 'editSoundtrackWindow'
|
self._r = 'editSoundtrackWindow'
|
||||||
self._callback = callback
|
self._callback = callback
|
||||||
self._existing_playlist = existing_playlist
|
self._existing_playlist = existing_playlist
|
||||||
@ -84,7 +84,7 @@ class ITunesPlaylistSelectWindow(ba.OldWindow):
|
|||||||
color=(0.6, 0.9, 0.6, 1.0),
|
color=(0.6, 0.9, 0.6, 1.0),
|
||||||
scale=0.8)
|
scale=0.8)
|
||||||
musicplayer = get_music_player()
|
musicplayer = get_music_player()
|
||||||
assert isinstance(musicplayer, MacITunesMusicPlayer)
|
assert isinstance(musicplayer, MacMusicAppMusicPlayer)
|
||||||
musicplayer.get_playlists(self._playlists_cb)
|
musicplayer.get_playlists(self._playlists_cb)
|
||||||
ba.containerwidget(edit=self._root_widget,
|
ba.containerwidget(edit=self._root_widget,
|
||||||
selected_child=self._scrollwidget)
|
selected_child=self._scrollwidget)
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND -->
|
<!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND -->
|
||||||
<h4><em>last updated on 2020-04-02 for Ballistica version 1.5.0 build 20001</em></h4>
|
<h4><em>last updated on 2020-04-03 for Ballistica version 1.5.0 build 20001</em></h4>
|
||||||
<p>This page documents the Python classes and functions in the 'ba' module,
|
<p>This page documents the Python classes and functions in the 'ba' module,
|
||||||
which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please <a href="mailto:support@froemling.net">let me know</a>. Happy modding!</p>
|
which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please <a href="mailto:support@froemling.net">let me know</a>. Happy modding!</p>
|
||||||
<hr>
|
<hr>
|
||||||
|
|||||||
@ -71,7 +71,7 @@ class App:
|
|||||||
"""Context for an app run."""
|
"""Context for an app run."""
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
from efrotools import get_config
|
from efrotools import get_config, get_localconfig
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
self._check = ('--check' in sys.argv)
|
self._check = ('--check' in sys.argv)
|
||||||
self._fix = ('--fix' in sys.argv)
|
self._fix = ('--fix' in sys.argv)
|
||||||
@ -87,6 +87,9 @@ class App:
|
|||||||
self._line_corrections: Dict[str, List[LineChange]] = {}
|
self._line_corrections: Dict[str, List[LineChange]] = {}
|
||||||
self._file_changes: Dict[str, str] = {}
|
self._file_changes: Dict[str, str] = {}
|
||||||
|
|
||||||
|
self._copyright_checks = bool(
|
||||||
|
get_localconfig(Path('.')).get('copyright_checks', True))
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
"""Do the thing."""
|
"""Do the thing."""
|
||||||
|
|
||||||
@ -196,6 +199,7 @@ class App:
|
|||||||
f'All {unchanged_project_count} project files are up to date.')
|
f'All {unchanged_project_count} project files are up to date.')
|
||||||
|
|
||||||
def _apply_line_changes(self) -> None:
|
def _apply_line_changes(self) -> None:
|
||||||
|
# pylint: disable=too-many-branches
|
||||||
|
|
||||||
# Build a flat list of entries that can and can-not be auto applied.
|
# Build a flat list of entries that can and can-not be auto applied.
|
||||||
manual_changes: List[Tuple[str, LineChange]] = []
|
manual_changes: List[Tuple[str, LineChange]] = []
|
||||||
@ -215,6 +219,15 @@ class App:
|
|||||||
for change in manual_changes:
|
for change in manual_changes:
|
||||||
print(f'{CLRRED}{change[0]}:{change[1].line_number + 1}:'
|
print(f'{CLRRED}{change[0]}:{change[1].line_number + 1}:'
|
||||||
f' Expected line to be:\n {change[1].expected}{CLREND}')
|
f' Expected line to be:\n {change[1].expected}{CLREND}')
|
||||||
|
|
||||||
|
# Make a note on copyright lines that this can be disabled.
|
||||||
|
if 'Copyright' in change[1].expected:
|
||||||
|
print(f'{CLRRED}NOTE: You can disable copyright'
|
||||||
|
f' checks by adding "copyright_checks": false\n'
|
||||||
|
f'to the root dict in config/localconfig.json.\n'
|
||||||
|
f'see https://github.com/efroemling/ballistica/wiki'
|
||||||
|
f'/Knowledge-Nuggets#'
|
||||||
|
f'hello-world-creating-a-new-game-type{CLREND}')
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
|
|
||||||
# Now, if we've got auto entries, either list or auto-correct them.
|
# Now, if we've got auto entries, either list or auto-correct them.
|
||||||
@ -269,17 +282,18 @@ class App:
|
|||||||
lines = infile.read().splitlines()
|
lines = infile.read().splitlines()
|
||||||
|
|
||||||
# Look for copyright/legal-notice line(s)
|
# Look for copyright/legal-notice line(s)
|
||||||
legal_notice = '// ' + get_legal_notice_private()
|
if self._copyright_checks:
|
||||||
lnum = 0
|
legal_notice = '// ' + get_legal_notice_private()
|
||||||
if lines[lnum] != legal_notice:
|
lnum = 0
|
||||||
# Allow auto-correcting if it looks close already
|
if lines[lnum] != legal_notice:
|
||||||
# (don't want to blow away an unrelated line)
|
# Allow auto-correcting if it looks close already
|
||||||
allow_auto = 'Copyright' in lines[
|
# (don't want to blow away an unrelated line)
|
||||||
lnum] and 'Eric Froemling' in lines[lnum]
|
allow_auto = 'Copyright' in lines[
|
||||||
self._add_line_correction(fname,
|
lnum] and 'Eric Froemling' in lines[lnum]
|
||||||
line_number=lnum,
|
self._add_line_correction(fname,
|
||||||
expected=legal_notice,
|
line_number=lnum,
|
||||||
can_auto_update=allow_auto)
|
expected=legal_notice,
|
||||||
|
can_auto_update=allow_auto)
|
||||||
|
|
||||||
def _check_headers(self) -> None:
|
def _check_headers(self) -> None:
|
||||||
for header_file_raw in self._header_files:
|
for header_file_raw in self._header_files:
|
||||||
@ -393,52 +407,55 @@ class App:
|
|||||||
|
|
||||||
# In all cases, look for our one-line legal notice.
|
# In all cases, look for our one-line legal notice.
|
||||||
# In the public case, look for the rest of our public license too.
|
# In the public case, look for the rest of our public license too.
|
||||||
public_license = get_public_license('python')
|
if self._copyright_checks:
|
||||||
line = '# ' + get_legal_notice_private()
|
public_license = get_public_license('python')
|
||||||
|
line = '# ' + get_legal_notice_private()
|
||||||
|
|
||||||
# (Sanity check: public license's first line should be same as priv)
|
# (Sanity check: public license's first line should be
|
||||||
if line != public_license.splitlines()[0]:
|
# same as priv)
|
||||||
raise RuntimeError('Public license first line should match priv.')
|
if line != public_license.splitlines()[0]:
|
||||||
|
raise RuntimeError(
|
||||||
|
'Public license first line should match priv.')
|
||||||
|
|
||||||
lnum = copyrightline
|
lnum = copyrightline
|
||||||
if len(lines) < lnum + 1:
|
if len(lines) < lnum + 1:
|
||||||
raise RuntimeError('Not enough lines in file:', fname)
|
raise RuntimeError('Not enough lines in file:', fname)
|
||||||
|
|
||||||
if lines[lnum] != line:
|
if lines[lnum] != line:
|
||||||
# Allow auto-correcting if it looks close already
|
# Allow auto-correcting if it looks close already
|
||||||
# (don't want to blow away an unrelated line)
|
# (don't want to blow away an unrelated line)
|
||||||
allow_auto = 'Copyright' in lines[
|
allow_auto = 'Copyright' in lines[
|
||||||
lnum] and 'Eric Froemling' in lines[lnum]
|
lnum] and 'Eric Froemling' in lines[lnum]
|
||||||
self._add_line_correction(fname,
|
self._add_line_correction(fname,
|
||||||
line_number=lnum,
|
line_number=lnum,
|
||||||
expected=line,
|
expected=line,
|
||||||
can_auto_update=allow_auto)
|
can_auto_update=allow_auto)
|
||||||
found_intact_private = False
|
found_intact_private = False
|
||||||
else:
|
else:
|
||||||
found_intact_private = True
|
found_intact_private = True
|
||||||
|
|
||||||
if self._public:
|
if self._public:
|
||||||
# Check for the full license.
|
# Check for the full license.
|
||||||
# If we can't find the full license but we found a private-license
|
# If we can't find the full license but we found
|
||||||
# line, offer to replace it with the full one.
|
# a private-license line, offer to replace it with the
|
||||||
# Otherwise just complain and die.
|
# full one. Otherwise just complain and die.
|
||||||
|
|
||||||
# Try to be reasonably certain it's not in here...
|
# Try to be reasonably certain it's not in here...
|
||||||
definitely_have_full = public_license in contents
|
definitely_have_full = public_license in contents
|
||||||
might_have_full = ('Permission is hereby granted' in contents
|
might_have_full = ('Permission is hereby granted' in contents
|
||||||
or 'THE SOFTWARE IS PROVIDED' in contents)
|
or 'THE SOFTWARE IS PROVIDED' in contents)
|
||||||
|
|
||||||
# Only muck with it if we're not sure we've got it.
|
# Only muck with it if we're not sure we've got it.
|
||||||
if not definitely_have_full:
|
if not definitely_have_full:
|
||||||
if found_intact_private and not might_have_full:
|
if found_intact_private and not might_have_full:
|
||||||
self._add_line_correction(fname,
|
self._add_line_correction(fname,
|
||||||
line_number=lnum,
|
line_number=lnum,
|
||||||
expected=public_license,
|
expected=public_license,
|
||||||
can_auto_update=True)
|
can_auto_update=True)
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
f'Found incorrect license text in {fname};'
|
f'Found incorrect license text in {fname};'
|
||||||
f' please correct.')
|
f' please correct.')
|
||||||
|
|
||||||
def _check_python_files(self) -> None:
|
def _check_python_files(self) -> None:
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user