mirror of
https://github.com/travelerdev/frameloader.git
synced 2026-10-20 19:01:53 +02:00
- apps/desktop: the Electron app, now bundling all runtime deps into dist/main.cjs so packaged builds need no node_modules; Electron pinned for electron-builder; screenshot script for the website - apps/web: static landing page (Vite) and terms of use, using real app screenshots in light and dark - packages/tokens: shared color/type/shape tokens used by both - Terms of use (TERMS.md, /terms.html), linked from the app's connect screen - Canonical URLs, social tags, robots.txt and sitemap for www.frameloader.com Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
88 lines
3.8 KiB
Python
88 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
import os
|
|
import logging
|
|
from urllib.parse import quote_plus as urllib_quote_plus
|
|
import json
|
|
import tempfile
|
|
|
|
from . import validate_steam_client
|
|
from . import execute_steam_client_command
|
|
from . import wait_on_file_response
|
|
|
|
import logging as logging_module
|
|
logger = logging_module.getLogger(__name__)
|
|
|
|
|
|
def resolve_shortcuts():
|
|
# make sure there is a steam client online that we can talk to before doing anything
|
|
validate_steam_client()
|
|
|
|
# scan the devkit games
|
|
installed_gameids = set([])
|
|
devkit_game_path = os.path.expanduser('~/devkit-game')
|
|
if not os.path.exists(devkit_game_path):
|
|
logger.info('%r does not exist, creating', devkit_game_path)
|
|
os.mkdir(devkit_game_path)
|
|
entries = sorted(os.scandir(devkit_game_path), key=lambda entry: entry.name)
|
|
directories = [e for e in entries if e.is_dir()]
|
|
for d in directories:
|
|
gameid = d.name
|
|
file_names = [f.name for f in entries if f.is_file() and f.name.startswith(gameid)]
|
|
has_argv = '{0}-argv.json'.format(gameid) in file_names
|
|
has_settings = '{0}-settings.json'.format(gameid) in file_names
|
|
if (not has_argv and not has_settings):
|
|
logger.info('Subfolder %r in %r is not accompanied by devkit configuration files, ignoring', d.name, devkit_game_path)
|
|
continue
|
|
logger.info('Found installed Devkit Game: %r', gameid)
|
|
installed_gameids.add(gameid)
|
|
|
|
# ask the Steam Client which Devkit Games are registered
|
|
with tempfile.TemporaryDirectory(prefix='list-shortcuts') as tempdir:
|
|
response = os.path.join(tempdir, 'shortcuts.json')
|
|
cmd = 'list-shortcuts?response={}'.format(
|
|
urllib_quote_plus(os.path.join(response))
|
|
)
|
|
# send the request
|
|
execute_steam_client_command(cmd)
|
|
with wait_on_file_response(response) as response:
|
|
client_shortcuts = json.loads(response)
|
|
logger.debug(client_shortcuts)
|
|
assert client_shortcuts['version'] == 2
|
|
registered_gameids = set([])
|
|
logger.info('Steam Client has %d registered devkit game(s)', len(client_shortcuts['gameids']))
|
|
for gameid in client_shortcuts['gameids']:
|
|
logger.info('Found Devkit Game registered with Steam Client: %r', gameid)
|
|
registered_gameids.add(gameid)
|
|
|
|
# any registered game that is not found installed on disk needs to be removed
|
|
for remove_gameid in registered_gameids - installed_gameids:
|
|
with tempfile.TemporaryDirectory(prefix='delete-shortcut') as tempdir:
|
|
logger.info('Removing stale registered Devkit Game: %r', remove_gameid)
|
|
response = os.path.join(tempdir, 'shortcut-deleted')
|
|
cmd = 'delete-shortcut?response={}&gameid={}'.format(
|
|
urllib_quote_plus(response),
|
|
remove_gameid
|
|
)
|
|
execute_steam_client_command(cmd)
|
|
with wait_on_file_response(response) as response:
|
|
logger.info('from Steam Client: %s', response.strip())
|
|
|
|
# any installed game that is not found registered needs to be added
|
|
for add_gameid in installed_gameids - registered_gameids:
|
|
with tempfile.TemporaryDirectory(prefix='create-shortcut') as tempdir:
|
|
logger.info('Registering installed Dekit Game: %r', add_gameid)
|
|
response = os.path.join(tempdir, 'registered')
|
|
cmd = 'create-shortcut?response={}&gameid={}&directory={}'.format(
|
|
urllib_quote_plus(response),
|
|
add_gameid,
|
|
urllib_quote_plus(devkit_game_path)
|
|
)
|
|
execute_steam_client_command(cmd)
|
|
with wait_on_file_response(response) as response:
|
|
logger.info('from Steam Client: %s', response.strip())
|
|
|
|
if __name__ == '__main__':
|
|
resolve_shortcuts()
|