summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SteamAPI.py32
-rwxr-xr-xmain.py4
-rw-r--r--templates/lobby_html.jinja8
3 files changed, 38 insertions, 6 deletions
diff --git a/SteamAPI.py b/SteamAPI.py
index 580b375..cc67f20 100644
--- a/SteamAPI.py
+++ b/SteamAPI.py
@@ -19,6 +19,36 @@ class SteamAPI():
def __init__(self, token):
self.token = token
+ def getGames(self):
+ """Get list of steam games by app id.
+
+ Returns:
+ dict() with str(appid) as keys, str gamename as value
+ """
+ if CACHE:
+ cache = Caching.readCache('general', 'gamelist', 7*24*60*60)
+ if cache:
+ return json.loads(cache)
+
+ url = 'https://api.steampowered.com/ISteamApps/GetAppList/v2'
+ try:
+ response = urlopen(url)
+ data = response.read().decode('utf-8')
+ jsondata = json.loads(data)
+ applist = jsondata['applist']['apps']
+ except KeyError:
+ return None
+ except HTTPError:
+ return None
+
+ gamelist = dict()
+ for app in applist:
+ gamelist[int(app['appid'])] = app['name']
+
+ if CACHE:
+ cache = Caching.writeCache('general', 'gamelist', json.dumps(gamelist))
+ return gamelist
+
def getProfiles(self, steamids):
"""Get steam profiles.
@@ -140,7 +170,7 @@ class SteamAPI():
print('No game in json:', jsondata)
return None
- def getGames(self, steamid):
+ def getPlayerGames(self, steamid):
"""Fetch a list of games a person possesses.
Args:
diff --git a/main.py b/main.py
index ca1282e..4071be0 100755
--- a/main.py
+++ b/main.py
@@ -90,6 +90,7 @@ def lobby():
with open(os.path.join(CONFIG, 'lobby.json'), 'rt') as config:
steamids = json.load(config)
+ gamelist = steam.getGames()
profiledata = steam.getProfiles(steamids.keys())
# Merge new data in loaded config
@@ -121,11 +122,12 @@ def lobby():
steamids = OrderedDict(sorted(steamids.items(), key = lambda player: player[1]['personaname'].lower()))
steamids = OrderedDict(sorted(steamids.items(), reverse=True, key = lambda player: int(player[1]['lastlogoff'])))
steamids = OrderedDict(sorted(steamids.items(), key = lambda player: (player[1]['personastate'] > 0) and player[1]['personastate'] or 10))
- steamids = OrderedDict(sorted(steamids.items(), key = lambda player: ('gameextrainfo' in player[1] and player[1]['gameextrainfo'].lower() or "zzz")))
+ steamids = OrderedDict(sorted(steamids.items(), key = lambda player: ('gameid' in player[1] and player[1]['gameid'] or "zzz")))
return render_template('lobby_html.jinja',
steamids = steamids,
serverinfo = serverinfo,
+ gamelist = gamelist,
states = ['Offline', 'Online', 'Busy', 'Away', 'Snooze', 'Looking to trade', 'Looking to play'],
display_time = display_time,
current_time = time.time())
diff --git a/templates/lobby_html.jinja b/templates/lobby_html.jinja
index 54d5037..a9598bc 100644
--- a/templates/lobby_html.jinja
+++ b/templates/lobby_html.jinja
@@ -40,7 +40,7 @@
<div class="interna stats">
{# Ingame (Steam), Ingame (Nonsteam), Offline/Other #}
{% if profile['gameid'] %}
- <span class="ingame"><a href="http://store.steampowered.com/app/{{ profile['gameid'] }}" class="ingame">{{ profile['gameextrainfo'] or 'N/A' }}
+ <span class="ingame"><a href="http://store.steampowered.com/app/{{ profile['gameid'] }}" class="ingame">{{ gamelist[profile['gameid']] or 'N/A' }}
{% if profile['gameserverip'] not in serverinfo %}
{# No serverinfo -> Display game logo #}
<img src="http://cdn.akamai.steamstatic.com/steam/apps/{{ profile['gameid'] }}/header.jpg" class="gameimage" />
@@ -60,7 +60,7 @@
{% set mapname = serverinfo[profile['gameserverip']]['map'] %}
{% set players = serverinfo[profile['gameserverip']]['players'] %}
{% set playersmax = serverinfo[profile['gameserverip']]['playersmax'] %}
- {% if game != profile['gameextrainfo'] %}
+ {% if game != gamelist[profile['gameid']] %}
<span class="gamename">{{ game }}</span><br />
{% endif %}
{{ servername }}<br />
@@ -72,8 +72,8 @@
<a href="#" onclick="javascript:copyToClipboard('[url]steam://connect/{{ profile['gameserverip'] }}[/url]'); return false;" class="joinbutton">Copy link</a>
</div>
{% endif %}
- {% elif profile['gameextrainfo'] %}
- <span class="ingameother">{{ profile['gameextrainfo'] }}</span><br />
+ {% elif gamelist[profile['gameid']] %}
+ <span class="ingameother">{{ gamelist[profile['gameid']] }}</span><br />
<span class="info">(non-steam)</span>
{% else %}
{% if profile['personastate'] == 0 %}