From 3232e09f2821c6e6783c57ca03bf408776562b04 Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Sun, 27 Dec 2009 15:02:46 +0100 Subject: [PATCH] Add support for portable mode (bug 236) It's now possible to modify the home folder of gPodder (where settings and metadata are stored) and the downloads directory by using environment variables. --- README | 17 +++++++++++++++++ src/gpodder/__init__.py | 7 ++++++- src/gpodder/config.py | 5 +++++ src/gpodder/launcher.py | 6 ++---- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/README b/README index 92663426..549409c0 100644 --- a/README +++ b/README @@ -97,6 +97,23 @@ If you have any problems, please visit the gPodder website or mail the gPodder mailing list (see below for more information). + ================================ + Portable mode / roaming profiles + ================================ + + You can set the environment variables GPODDER_HOME and GPODDER_DOWNLOAD_DIR + to point to locations for storing the database and downloaded files: + + GPODDER_HOME ........... location for configuration and database + GPODDER_DOWNLOAD_DIR ... location for downloaded episodes + + You can use this to have different configurations for gPodder or to put + gPodder's data directly on your MP3 player or USB disk, for example: + + export GPODDER_HOME=/media/usbdisk/gpodder-data/ + export GPODDER_DOWLOAD_DIR=/media/usbdisk/podcasts/ + gpodder + ========================================= Feature requests, bug reports and patches ========================================= diff --git a/src/gpodder/__init__.py b/src/gpodder/__init__.py index cd5deff9..d2daf391 100644 --- a/src/gpodder/__init__.py +++ b/src/gpodder/__init__.py @@ -110,7 +110,12 @@ icon_file = None STATE_NORMAL, STATE_DOWNLOADED, STATE_DELETED = range(3) # Default locations for configuration and data files -home = os.path.expanduser(os.path.join('~', '.config', 'gpodder')) +default_home = os.path.expanduser(os.path.join('~', '.config', 'gpodder')) +home = os.environ.get('GPODDER_HOME', None) +if home is None: + home = default_home +else: + print >>sys.stderr, 'Using', home, 'to store data (GPODDER_HOME is set)' subscription_file = os.path.join(home, 'channels.opml') config_file = os.path.join(home, 'gpodder.conf') database_file = os.path.join(home, 'database.sqlite') diff --git a/src/gpodder/config.py b/src/gpodder/config.py index 87bed1b1..9161cc9a 100644 --- a/src/gpodder/config.py +++ b/src/gpodder/config.py @@ -276,6 +276,11 @@ class Config(dict): self.load() self.apply_fixes() + download_dir = os.environ.get('GPODDER_DOWNLOAD_DIR', None) + if download_dir is not None: + log('Setting download_dir from environment: %s', download_dir, sender=self) + self.download_dir = download_dir + atexit.register( self.__atexit) def apply_fixes(self): diff --git a/src/gpodder/launcher.py b/src/gpodder/launcher.py index 95ba12b1..a73bf9ec 100644 --- a/src/gpodder/launcher.py +++ b/src/gpodder/launcher.py @@ -73,10 +73,8 @@ if __name__ == '__main__': gpodder.subscription_file = os.path.join(home, 'channels.opml') gpodder.config_file = os.path.join(home, 'gpodder.conf') gpodder.database_file = os.path.join(home, 'database.sqlite') - from gpodder import config - cfg = config.Config(gpodder.config_file) - cfg.download_dir = os.path.join(os.getcwd(), 'downloads') - cfg.save() + download_dir = os.path.join(os.getcwd(), 'downloads') + os.environ['GPODDER_DOWNLOAD_DIR'] = download_dir from gpodder import gui -- 2.11.4.GIT