[game-data-packager] 01/01: add support for www.gog.com & Origin

Alexandre Detiste detiste-guest at moszumanska.debian.org
Sat Mar 14 13:01:44 UTC 2015


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 c8c4a115c243000f5d64098350d49b5327a9da58
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date:   Sat Mar 14 14:00:14 2015 +0100

    add support for www.gog.com & Origin
    
    move iter_fat_mounts() outside of GameData object,
    re-use it for iter_origin_paths()
---
 data/rott.yaml                 |  2 ++
 data/syndicate.yaml            |  2 ++
 data/theme-hospital.yaml       |  4 +++
 game_data_packager/__init__.py | 56 ++++++++++++++++++++++++++++++++++--------
 4 files changed, 54 insertions(+), 10 deletions(-)

diff --git a/data/rott.yaml b/data/rott.yaml
index 7e80a8f..6991701 100644
--- a/data/rott.yaml
+++ b/data/rott.yaml
@@ -35,6 +35,8 @@ packages:
     longname: "Rise of the Triad: Dark War"
     debian:
       depends: rott-data
+    gog:
+      url: rise_of_the_triad__dark_war
     install_to: usr/share/games/rott
     install:
     - any_registered_rtc
diff --git a/data/syndicate.yaml b/data/syndicate.yaml
index 7a76d0b..ca3292d 100644
--- a/data/syndicate.yaml
+++ b/data/syndicate.yaml
@@ -11,6 +11,8 @@ packages:
     install_to: usr/share/games/freesynd/data
     # this should be engine-agnostic:
     #  usr/share/games/syndicate
+    origin:
+      path: "Syndicate (1993)"
     install:
     - col01.dat
     - game01.dat
diff --git a/data/theme-hospital.yaml b/data/theme-hospital.yaml
index 2b1a564..859b7e8 100644
--- a/data/theme-hospital.yaml
+++ b/data/theme-hospital.yaml
@@ -20,6 +20,10 @@ packages:
     install_to: usr/share/games/theme-hospital
     debian:
       conflicts: theme-hospital-demo-data
+    gog:
+      url: theme_hospital
+    origin:
+      path: Theme Hospital
     optional:
     # documentation
     - EN.pdf
diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index 489b940..e5946b7 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -353,6 +353,8 @@ class GameDataPackage(object):
 
         # Steam ID and path
         self.steam = {}
+        self.gog = {}
+        self.origin = {}
 
         # overide the game engine when needed
         self.engine = None
@@ -433,6 +435,8 @@ class GameDataPackage(object):
             'optional': sorted(self.optional),
             'rip_cd': self.rip_cd,
             'steam': self.steam,
+            'gog': self.gog,
+            'origin': self.origin,
             'symlinks': self.symlinks,
             'type': self.type,
         }
@@ -487,13 +491,15 @@ class GameData(object):
 
         # Steam ID and path
         self.steam = {}
+        self.gog = {}
+        self.origin = {}
 
         self.data = data
 
         self.argument_parser = None
 
         for k in ('longname', 'copyright', 'compress_deb', 'help_text',
-                 'steam','engine', 'genre'):
+                 'steam', 'gog', 'origin', 'engine', 'genre'):
             if k in self.data:
                 setattr(self, k, self.data[k])
 
@@ -741,7 +747,7 @@ class GameData(object):
         for k in ('expansion_for', 'longname', 'symlinks', 'install_to',
                 'install_to_docdir', 'install_contents_of', 'steam', 'debian',
                 'rip_cd', 'architecture', 'aliases', 'better_version',
-                'copyright', 'engine'):
+                'copyright', 'engine', 'gog', 'origin'):
             if k in d:
                 setattr(package, k, d[k])
 
@@ -1952,6 +1958,10 @@ class GameData(object):
                 if path not in paths:
                     paths.append(path)
 
+            for path in self.iter_origin_paths():
+                if path not in paths:
+                    paths.append(path)
+
         for arg in paths:
             logger.debug('%s...', arg)
             self.consider_file_or_dir(arg)
@@ -2268,13 +2278,6 @@ class GameData(object):
 
         subprocess.call(['su', '-c', cmd])
 
-    def iter_fat_mounts(self):
-        with open('/proc/mounts', 'r', encoding='utf8') as mounts:
-            for line in mounts.readlines():
-                mount, type = line.split(' ')[1:3]
-                if type in ('fat','vfat', 'ntfs'):
-                    yield os.path.join(mount, 'Program Files/Steam')
-
     def iter_steam_paths(self, packages=None):
         if packages is None:
             packages = self.packages.values()
@@ -2291,7 +2294,7 @@ class GameData(object):
                     'wineprefixes/steam/drive_c/Program Files/Steam'),
                 os.path.expanduser('~/.wine/drive_c/Program Files/Steam'),
                 os.path.expanduser('~/.PlayOnLinux/wineprefix/Steam/drive_c/Program Files/Steam'),
-                ) + tuple(self.iter_fat_mounts()):
+                ) + tuple(iter_fat_mounts('Steam')):
             if not os.path.isdir(prefix):
                 continue
 
@@ -2306,6 +2309,32 @@ class GameData(object):
                                 self.shortname, path)
                         yield path
 
+    def iter_origin_paths(self, packages=None):
+        if packages is None:
+            packages = self.packages.values()
+
+        suffixes = set(p.origin.get('path') for p in packages)
+        suffixes.add(self.origin.get('path'))
+        suffixes.discard(None)
+        if not suffixes:
+            return
+
+        for prefix in (
+                os.path.expanduser('~/.wine/drive_c/Program Files/Origin Games'),
+                ) + tuple(iter_fat_mounts('Origin Games')):
+            if not os.path.isdir(prefix):
+                continue
+
+            logger.debug('possible Origin root directory at %s', prefix)
+
+            for suffix in suffixes:
+                path = os.path.join(prefix, suffix)
+                if os.path.isdir(path):
+                    logger.debug('possible %s found in Origin at %s',
+                            self.shortname, path)
+                    yield path
+
+
     def construct_package(self, binary):
         return GameDataPackage(binary)
 
@@ -2391,6 +2420,13 @@ class GameData(object):
                 'apt-get install %s',
                 ' '.join(sorted(packages)))
 
+def iter_fat_mounts(folder):
+    with open('/proc/mounts', 'r', encoding='utf8') as mounts:
+        for line in mounts.readlines():
+            mount, type = line.split(' ')[1:3]
+            if type in ('fat','vfat', 'ntfs'):
+                yield os.path.join(mount, 'Program Files', folder)
+
 def load_games(workdir=None):
     games = {}
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git



More information about the Pkg-games-commits mailing list