Gtk UI: Remove fallback notification widget code
[gpodder.git] / src / gpodder / __init__.py
blob46c765cbd2aaf3e0d9d9fd8d08f4633aac6286b3
1 # -*- coding: utf-8 -*-
3 # gPodder - A media aggregator and podcast client
4 # Copyright (c) 2005-2012 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__ = '3.0.4'
22 __date__ = '2012-01-24'
23 __relname__ = 'Weekend Vampire'
24 __copyright__ = '© 2005-2012 Thomas Perl and the gPodder Team'
25 __license__ = 'GNU General Public License, version 3 or later'
26 __url__ = 'http://gpodder.org/'
28 __version_info__ = tuple(int(x) for x in __version__.split('.'))
30 import os
31 import sys
32 import platform
33 import gettext
34 import locale
36 # Check if real hard dependencies are available
37 try:
38 import feedparser
39 except ImportError:
40 print """
41 Error: Module "feedparser" (python-feedparser) not found.
42 The feedparser module can be downloaded from
43 http://code.google.com/p/feedparser/
44 """
45 sys.exit(1)
46 del feedparser
48 try:
49 import mygpoclient
50 except ImportError:
51 print """
52 Error: Module "mygpoclient" (python-mygpoclient) not found.
53 The mygpoclient module can be downloaded from
54 http://thp.io/2010/mygpoclient/
55 """
56 sys.exit(1)
57 del mygpoclient
59 # The User-Agent string for downloads
60 user_agent = 'gPodder/%s (+%s)' % (__version__, __url__)
62 # Are we running in GUI, Maemo or console mode?
63 class UI(object):
64 def __init__(self):
65 self.desktop = False
66 self.fremantle = False
67 self.harmattan = False
68 self.qt = False
69 self.gtk = False
72 ui = UI()
74 # D-Bus specific interface names
75 dbus_bus_name = 'org.gpodder'
76 dbus_gui_object_path = '/gui'
77 dbus_podcasts_object_path = '/podcasts'
78 dbus_interface = 'org.gpodder.interface'
79 dbus_podcasts = 'org.gpodder.podcasts'
80 dbus_session_bus = None
82 # Set "win32" to True if we are on Windows
83 win32 = (platform.system() == 'Windows')
84 # Set "osx" to True if we are on Mac OS X
85 osx = (platform.system() == 'Darwin')
87 # i18n setup (will result in "gettext" to be available)
88 # Use _ = gpodder.gettext in modules to enable string translations
89 textdomain = 'gpodder'
90 locale_dir = gettext.bindtextdomain(textdomain)
91 t = gettext.translation(textdomain, locale_dir, fallback=True)
93 try:
94 # Python 2
95 gettext = t.ugettext
96 ngettext = t.ungettext
97 except AttributeError:
98 # Python 3
99 gettext = t.gettext
100 ngettext = t.ngettext
102 if win32:
103 try:
104 # Workaround for bug 650
105 from gtk.glade import bindtextdomain
106 bindtextdomain(textdomain, locale_dir)
107 del bindtextdomain
108 except:
109 # Ignore for QML UI or missing glade module
110 pass
111 del t
113 # Set up textdomain for gtk.Builder (this accesses the C library functions)
114 if hasattr(locale, 'bindtextdomain'):
115 locale.bindtextdomain(textdomain, locale_dir)
117 del locale_dir
119 # Set up socket timeouts to fix bug 174
120 SOCKET_TIMEOUT = 60
121 import socket
122 socket.setdefaulttimeout(SOCKET_TIMEOUT)
123 del socket
124 del SOCKET_TIMEOUT
126 # Variables reserved for GUI-specific use (will be set accordingly)
127 ui_folders = []
128 credits_file = None
129 icon_file = None
130 images_folder = None
131 user_extensions = None
133 # Episode states used in the database
134 STATE_NORMAL, STATE_DOWNLOADED, STATE_DELETED = range(3)
136 # Paths (gPodder's home folder, config, db and download folder)
137 home = None
138 config_file = None
139 database_file = None
140 downloads = None
142 # Function to set a new gPodder home folder
143 def set_home(new_home):
144 global home, config_file, database_file, downloads
145 home = os.path.abspath(new_home)
147 config_file = os.path.join(home, 'Settings.json')
148 database_file = os.path.join(home, 'Database')
149 downloads = os.path.join(home, 'Downloads')
151 # Default locations for configuration and data files
152 default_home = os.path.expanduser(os.path.join('~', 'gPodder'))
153 set_home(os.environ.get('GPODDER_HOME', default_home))
155 if home != default_home:
156 print >>sys.stderr, 'Storing data in', home, '(GPODDER_HOME is set)'
158 # Plugins to load by default
159 DEFAULT_PLUGINS = ['gpodder.plugins.soundcloud', 'gpodder.plugins.xspf',
160 'gpodder.plugins.woodchuck', 'gpodder.plugins.notification']
162 def load_plugins():
163 """Load (non-essential) plugin modules
165 This loads a default set of plugins, but you can use
166 the environment variable "GPODDER_PLUGINS" to modify
167 the list of plugins."""
168 PLUGINS = os.environ.get('GPODDER_PLUGINS', None)
169 if PLUGINS is None:
170 PLUGINS = DEFAULT_PLUGINS
171 else:
172 PLUGINS = PLUGINS.split()
173 for plugin in PLUGINS:
174 try:
175 __import__(plugin)
176 except Exception, e:
177 print >>sys.stderr, 'Cannot load plugin: %s (%s)' % (plugin, e)
180 def detect_platform():
181 global ui
183 try:
184 ui.fremantle = ('Maemo 5' in open('/etc/issue').read())
185 if ui.fremantle:
186 print >>sys.stderr, 'Detected platform: Maemo 5 (Fremantle)'
187 except Exception, e:
188 ui.fremantle = False
190 try:
191 ui.harmattan = ('MeeGo 1.2 Harmattan' in open('/etc/issue').read())
192 except Exception, e:
193 ui.harmattan = False
195 ui.fremantle = ui.fremantle or ui.harmattan
196 ui.desktop = not ui.fremantle and not ui.harmattan
198 if ui.fremantle and 'GPODDER_HOME' not in os.environ:
199 new_home = os.path.expanduser(os.path.join('~', 'MyDocs', 'gPodder'))
200 set_home(os.path.expanduser(new_home))