mirror of
https://github.com/lutris/lutris
synced 2024-10-06 07:50:16 +00:00
Add support for actions in Lutris urls
This commit is contained in:
parent
9718e72b2e
commit
d36ff5cc1c
|
@ -98,24 +98,36 @@ def parse_installer_url(url):
|
|||
"""
|
||||
Parses `lutris:` urls, extracting any info necessary to install or run a game.
|
||||
"""
|
||||
action = None
|
||||
try:
|
||||
parsed_url = urlparse(url, scheme="lutris")
|
||||
except:
|
||||
return False
|
||||
if parsed_url.scheme != "lutris":
|
||||
return False
|
||||
game_slug = parsed_url.path
|
||||
if not game_slug:
|
||||
url_path = parsed_url.path
|
||||
if not url_path:
|
||||
return False
|
||||
# urlparse can't parse if the path only contain numbers
|
||||
# workaround to remove the scheme manually:
|
||||
if game_slug.startswith('lutris:'):
|
||||
game_slug = game_slug[7:]
|
||||
if url_path.startswith('lutris:'):
|
||||
url_path = url_path[7:]
|
||||
|
||||
url_parts = url_path.split('/')
|
||||
if len(url_parts) == 2:
|
||||
action = url_parts[0]
|
||||
game_slug = url_parts[1]
|
||||
elif len(url_parts) == 1:
|
||||
game_slug = url_parts[0]
|
||||
else:
|
||||
raise ValueError('Invalid lutris url %s' % url)
|
||||
|
||||
revision = None
|
||||
if parsed_url.query:
|
||||
query = dict(parse_qsl(parsed_url.query))
|
||||
revision = query.get('revision')
|
||||
return {
|
||||
'game_slug': game_slug,
|
||||
'revision': revision
|
||||
'revision': revision,
|
||||
'action': action
|
||||
}
|
||||
|
|
23
tests/test_resources.py
Normal file
23
tests/test_resources.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
from unittest import TestCase
|
||||
|
||||
from lutris.util.resources import parse_installer_url
|
||||
|
||||
|
||||
class TestInstallerUrls(TestCase):
|
||||
def test_legacy_url(self):
|
||||
result = parse_installer_url("lutris:quake")
|
||||
self.assertEqual(result['game_slug'], 'quake')
|
||||
self.assertEqual(result['revision'], None)
|
||||
self.assertEqual(result['action'], None)
|
||||
|
||||
def test_action_rungameid(self):
|
||||
result = parse_installer_url("lutris:rungameid/123")
|
||||
self.assertEqual(result['game_slug'], '123')
|
||||
self.assertEqual(result['revision'], None)
|
||||
self.assertEqual(result['action'], 'rungameid')
|
||||
|
||||
def test_action_rungame(self):
|
||||
result = parse_installer_url("lutris:rungame/quake")
|
||||
self.assertEqual(result['game_slug'], 'quake')
|
||||
self.assertEqual(result['revision'], None)
|
||||
self.assertEqual(result['action'], 'rungame')
|
Loading…
Reference in a new issue