This is an automated email from the git hooks/post-receive script. detiste-guest pushed a commit to branch master in repository game-data-packager.
commit 47f9deb5b37c12ee432fb255ac3de9764f194ec4 Author: Alexandre Detiste <[email protected]> Date: Wed Sep 9 11:10:54 2015 +0200 Steam: compare locally found games with http://steamcommunity.com/profiles/<SteamID>/ --- game_data_packager/__init__.py | 32 +++++++++++++++++++++++++------- game_data_packager/steam.py | 15 +++++++++++++-- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py index cf11e5a..8419c25 100644 --- a/game_data_packager/__init__.py +++ b/game_data_packager/__init__.py @@ -54,6 +54,7 @@ from .util import (MEBIBYTE, lang_score, ascii_safe, which) +from .steam import get_steam_id, owned_steam_games from .version import GAME_PACKAGE_VERSION AGENT = ('Debian Game-Data-Packager/%s (%s %s;' @@ -3087,26 +3088,40 @@ def load_games(workdir=None,game='*'): return games def run_steam_meta_mode(parsed, games): - logging.info('Searching for Steam games...') + owned = set() + if parsed.download: + steam_id = get_steam_id() + if steam_id is None: + logger.error("Couldn't read SteamID from ~/.steam/config/loginusers.vdf") + else: + logger.info('Getting list of owned games from ' + 'http://steamcommunity.com/profiles/' + steam_id) + owned = set(g[0] for g in owned_steam_games(steam_id)) + + logging.info('Searching for locally installed Steam games...') found_games = [] found_packages = [] for game, gamedata in games.items(): for package in gamedata.packages.values(): + id = package.steam.get('id') or gamedata.steam.get('id') + if not id: + continue + if package.type == 'demo': continue # ignore other translations for "I Have No Mouth" if lang_score(package.lang) == 0: continue + installed = PACKAGE_CACHE.is_installed(package.name) + if parsed.new and installed: + continue + paths = [] for path in gamedata.iter_steam_paths((package,)): if path not in paths: paths.append(path) - if not paths: - continue - - installed = PACKAGE_CACHE.is_installed(package.name) - if parsed.new and installed: + if not paths and id not in owned: continue if game not in found_games: @@ -3133,7 +3148,10 @@ def run_steam_meta_mode(parsed, games): continue print('[%s] %-42s %s' % ('x' if p['installed'] else ' ', p['package'], ascii_safe(p['longname']))) - print('\n'.join(p['paths'])) + for path in p['paths']: + print(path) + if not p['paths']: + print('<game owned but not installed/found>') print() if not parsed.new and not parsed.all: diff --git a/game_data_packager/steam.py b/game_data_packager/steam.py index 366a42a..d39be1b 100644 --- a/game_data_packager/steam.py +++ b/game_data_packager/steam.py @@ -16,6 +16,7 @@ # /usr/share/common-licenses/GPL-2. import glob +import os import xml.etree.ElementTree import urllib.request @@ -43,7 +44,7 @@ def parse_acf(path): yield acf_struct def owned_steam_games(steam_id): - url = "http://steamcommunity.com/id/" + steam_id + "/games?xml=1" + url = "http://steamcommunity.com/profiles/" + steam_id + "/games?xml=1" html = urllib.request.urlopen(url) tree = xml.etree.ElementTree.ElementTree() tree.parse(html) @@ -52,4 +53,14 @@ def owned_steam_games(steam_id): appid = int(game.find('appID').text) name = game.find('name').text #print(appid, name) - yield [appid, name] + yield (appid, name) + +def get_steam_id(): + path = os.path.expanduser('~/.steam/config/loginusers.vdf') + if not os.path.isfile(path): + return None + with open(path, 'r', ) as data: + for line in data.readlines(): + line = line.strip('\t\n "') + if line not in ('users', '{'): + return line -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

