Add support for portable mode (bug 236)
[gpodder.git] / src / gpodder / __init__.py
blobd2daf391ac396735cc0072175f87a426a186d540
1 # -*- coding: utf-8 -*-
3 # gPodder - A media aggregator and podcast client
4 # Copyright (c) 2005-2009 Thomas Perl and the gPodder Team
6 # gPodder is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # gPodder is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 __author__ = 'Thomas Perl <thp@gpodder.org>'
21 __version__ = '2.1'
22 __date__ = '2009-12-12'
23 __copyright__ = '© 2005-2009 Thomas Perl and the gPodder Team'
24 __licence__ = 'GNU General Public License, version 3 or later'
25 __url__ = 'http://gpodder.org/'
27 import os
28 import sys
29 import platform
30 import gettext
31 import locale
33 # Check if real hard dependencies are available
34 try:
35 import feedparser
36 except ImportError:
37 print """
38 Error: Module "feedparser" not found. Please install "python-feedparser".
39 The feedparser module can be downloaded from www.feedparser.org.
40 """
41 sys.exit(1)
42 del feedparser
45 # The User-Agent string for downloads
46 user_agent = 'gPodder/%s (+%s)' % (__version__, __url__)
48 # Are we running in GUI, Maemo or console mode?
49 class UI(object):
50 def __init__(self):
51 self.desktop = False
52 self.diablo = False
53 self.fremantle = False
55 @property
56 def maemo(self):
57 return self.diablo or self.fremantle
59 ui = UI()
61 # D-Bus specific interface names
62 dbus_bus_name = 'org.godder'
63 dbus_gui_object_path = '/gui'
64 dbus_interface = 'org.gpodder.interface'
66 # Set "win32" to True if we are on Windows
67 win32 = (platform.system() == 'Windows')
69 # i18n setup (will result in "gettext" to be available)
70 # Use _ = gpodder.gettext in modules to enable string translations
71 textdomain = 'gpodder'
72 locale_dir = gettext.bindtextdomain(textdomain)
73 t = gettext.translation(textdomain, locale_dir, fallback=True)
74 gettext = t.ugettext
75 ngettext = t.ungettext
76 if win32:
77 # Workaround for bug 650
78 from gtk.glade import bindtextdomain
79 bindtextdomain(textdomain, locale_dir)
80 del bindtextdomain
81 del t
83 # Set up textdomain for gtk.Builder (this accesses the C library functions)
84 if hasattr(locale, 'bindtextdomain'):
85 locale.bindtextdomain(textdomain, locale_dir)
86 else:
87 # On Win32, the locale module does not have bindtextdomain. We use a
88 # small module that provides similar functionality here (from doc/dev/).
89 try:
90 import gtkbuilderi18n
91 gtkbuilderi18n.bindtextdomain(textdomain, locale_dir)
92 except ImportError, ioe:
93 pass
95 del locale_dir
97 # Set up socket timeouts to fix bug 174
98 SOCKET_TIMEOUT = 60
99 import socket
100 socket.setdefaulttimeout(SOCKET_TIMEOUT)
101 del socket
102 del SOCKET_TIMEOUT
104 # Variables reserved for GUI-specific use (will be set accordingly)
105 ui_folders = []
106 credits_file = None
107 icon_file = None
109 # Episode states used in the database
110 STATE_NORMAL, STATE_DOWNLOADED, STATE_DELETED = range(3)
112 # Default locations for configuration and data files
113 default_home = os.path.expanduser(os.path.join('~', '.config', 'gpodder'))
114 home = os.environ.get('GPODDER_HOME', None)
115 if home is None:
116 home = default_home
117 else:
118 print >>sys.stderr, 'Using', home, 'to store data (GPODDER_HOME is set)'
119 subscription_file = os.path.join(home, 'channels.opml')
120 config_file = os.path.join(home, 'gpodder.conf')
121 database_file = os.path.join(home, 'database.sqlite')
123 # Plugins to load by default
124 DEFAULT_PLUGINS = ['gpodder.soundcloud']
126 def load_plugins():
127 """Load (non-essential) plugin modules
129 This loads a default set of plugins, but you can use
130 the environment variable "GPODDER_PLUGINS" to modify
131 the list of plugins."""
132 global DEFAULT_PLUGINS
133 PLUGINS = os.environ.get('GPODDER_PLUGINS', None)
134 if PLUGINS is None:
135 PLUGINS = DEFAULT_PLUGINS
136 else:
137 PLUGINS = PLUGINS.split()
138 import imp
139 for plugin in PLUGINS:
140 try:
141 __import__(plugin)
142 print >>sys.stderr, 'Plugin loaded:', plugin
143 except Exception, e:
144 print >>sys.stderr, 'Cannot load plugin: %s (%s)' % (plugin, e)