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 4f4d4b94553282ff51524bcdfd642745b712dbc4 Author: Alexandre Detiste <[email protected]> Date: Tue Sep 15 11:59:10 2015 +0200 GOG: call lgogdownloader automatically --- debian/changelog | 1 + debian/control | 5 +++-- game_data_packager/__init__.py | 32 +++++++++++++++++++++++++++++--- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index ec22339..14ac238 100644 --- a/debian/changelog +++ b/debian/changelog @@ -24,6 +24,7 @@ game-data-packager (43) UNRELEASED; urgency=medium * add "game-data-packager steam" mode * make-template mode: check innoextract version (#797550) * add support for the new Doom packages at GOG.com (#796995) + * call 'lgogdownloader' automatically [ Stephen Kitt ] * Add Steam path for The 7th Guest. diff --git a/debian/control b/debian/control index a3220ec..e1ca1d6 100644 --- a/debian/control +++ b/debian/control @@ -25,6 +25,7 @@ Depends: fakeroot, ${misc:Depends}, python3-debian, python3-yaml, ${python3:Depends}, +Breaks: lgogdownloader (<< 2.25-2~) Suggests: # for quake music and quake2 music cdparanoia, vorbis-tools, @@ -38,8 +39,8 @@ Suggests: dynamite (>= 0.1.1-2), # for wolf3d v1.2 unzip, -# gog.com games: Descent 1/2, Theme Hospital - innoextract, +# for 100+ gog.com games + innoextract, lgogdownloader, # for Doom3 p7zip-full, # for Jedi Academy (demo), Arx Fatalis diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py index 8419c25..01e2a38 100644 --- a/game_data_packager/__init__.py +++ b/game_data_packager/__init__.py @@ -43,6 +43,7 @@ from debian.deb822 import Deb822 import yaml from .config import read_config +from .gog import GOG from .paths import DATADIR, ETCDIR from .util import (MEBIBYTE, TemporaryUmask, @@ -1257,7 +1258,7 @@ class GameData(object): logger.warning('file "%s" does not exist or is not a file, ' + 'directory or CD block device', path) - def fill_gaps(self, package, download=False, log=True): + def fill_gaps(self, package, download=False, log=True, recheck=False): """Return a FillResult. """ assert package is not None @@ -1293,6 +1294,7 @@ class GameData(object): wanted = self.files[filename] # updates file_status as a side-effect self.fill_gap(package, wanted, download=download, + recheck=recheck, log=(log and filename in package.install)) logger.debug('%s: %s', filename, self.file_status[filename]) @@ -1301,6 +1303,30 @@ class GameData(object): # it is mandatory result &= self.file_status[filename] + # download game if it is already owned by user's GOG.com account + # user must have used 'lgogdownloader' at least once to make this work + if (result is FillResult.IMPOSSIBLE and package.gog + and which('innoextract') and which('lgogdownloader') ): + game = package.gog.get('game', package.gog['url']) + if game in GOG.owned_games(): + if recheck: + logger.error('Something went bad,avoiding infinite loop') + elif not download: + result = FillResult.DOWNLOAD_NEEDED + else: + tmpdir = os.path.join(self.get_workdir(), game) + mkdir_p(tmpdir) + subprocess.check_call(['lgogdownloader', + '--download', '--no-extra', + '--directory', tmpdir, + '--platform', '1', + '--language', '1', + '--game', game]) + self.consider_file_or_dir(tmpdir) + # recursively call again + result = self.fill_gaps(package, log=True, + download=True, recheck=True) + self.package_status[package.name] = result logger.debug('%s: %s', package.name, result) return result @@ -1497,7 +1523,7 @@ class GameData(object): os.utime(path, (orig_time, orig_time)) self.use_file(wanted, path, hasher) - def fill_gap(self, package, wanted, download=False, log=True): + def fill_gap(self, package, wanted, download=False, log=True, recheck=False): """Try to unpack, download or otherwise obtain wanted. If download is true, we may attempt to download wanted or a @@ -1509,7 +1535,7 @@ class GameData(object): assert self.file_status[wanted.name] is FillResult.COMPLETE return FillResult.COMPLETE - if self.file_status[wanted.name] is FillResult.IMPOSSIBLE: + if self.file_status[wanted.name] is FillResult.IMPOSSIBLE and not recheck: return FillResult.IMPOSSIBLE if (self.file_status[wanted.name] is FillResult.DOWNLOAD_NEEDED and -- 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

