Don't translate advanced config descriptions
[gpodder.git] / bin / gpodder
blobd8c9094177b3cb104560b25df82586b83e435453
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
5 # gPodder - A media aggregator and podcast client
6 # Copyright (c) 2005-2009 Thomas Perl and the gPodder Team
8 # gPodder is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or
11 # (at your option) any later version.
13 # gPodder is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
22 """
23 gPodder enables you to subscribe to RSS feeds and download
24 podcast episodes from these feeds.
26 Downloaded podcasts can either be synchronized to portable
27 MP3 players (including iPods) or played back on the user's
28 desktop.
30 See gpo(1) for the command-line interface.
31 """
33 import sys
34 import os
35 import os.path
36 import platform
38 import gettext
40 try:
41 import dbus
42 import dbus.glib
43 have_dbus = True
44 except ImportError:
45 print >>sys.stderr, """
46 Warning: python-dbus not found. Disabling D-Bus support.
47 """
48 have_dbus = False
50 from optparse import OptionParser
52 if __name__ == '__main__':
53 # Paths to important files
54 gpodder_script = sys.argv[0]
55 if os.path.islink(gpodder_script):
56 gpodder_script = os.readlink(gpodder_script)
57 gpodder_dir = os.path.join(os.path.dirname(gpodder_script), '..')
58 prefix = os.path.abspath(os.path.normpath(gpodder_dir))
60 src_dir = os.path.join(prefix, 'src')
61 data_dir = os.path.join(prefix, 'data')
62 locale_dir = os.path.join(prefix, 'share', 'locale')
63 ui_folder = os.path.join(prefix, 'share', 'gpodder', 'ui')
64 credits_file = os.path.join(prefix, 'share', 'gpodder', 'credits.txt')
65 icon_file = os.path.join(prefix, 'share', 'icons', 'hicolor', 'scalable', 'apps', 'gpodder.svg')
67 # The existence of this file tells us we're running on Maemo
68 maemo_file = os.path.join(prefix, 'share', 'applications', 'hildon', 'gpodder.desktop')
70 if os.path.exists(src_dir) and os.path.exists(data_dir) and \
71 not prefix.startswith('/usr'):
72 # Run gPodder from local source folder (not installed)
73 print >>sys.stderr, 'Using modules from', src_dir
74 sys.path.insert(0, src_dir)
75 print >>sys.stderr, 'Using resources from', data_dir
76 locale_dir = os.path.join(data_dir, 'locale')
77 ui_folder = os.path.join(data_dir, 'ui')
78 credits_file = os.path.join(data_dir, 'credits.txt')
79 icon_file = os.path.join(data_dir, 'gpodder.svg')
81 # Set up the path to translation files
82 gettext.bindtextdomain('gpodder', locale_dir)
84 import gpodder
86 # Enable i18n for gPodder translations
87 _ = gpodder.gettext
89 # Set up paths to folder with GtkBuilder files and gpodder.svg
90 gpodder.ui_folders.append(ui_folder)
91 gpodder.credits_file = credits_file
92 gpodder.icon_file = icon_file
94 s_usage = 'usage: %%prog [options]\n\n%s' % ( __doc__.strip() )
95 s_version = '%%prog %s' % ( gpodder.__version__ )
97 parser = OptionParser( usage = s_usage, version = s_version)
99 parser.add_option("-v", "--verbose",
100 action="store_true", dest="verbose", default=False,
101 help=_("Print debugging output to stdout"))
103 parser.add_option("-m", "--maemo",
104 action="store_true", dest="maemo", default=False,
105 help=_("Start the Maemo user interface of gPodder"))
107 parser.add_option('-s', '--subscribe', dest='subscribe', metavar='URL',
108 help=_('Subscribe to the given URL'))
110 (options, args) = parser.parse_args(sys.argv)
112 if options.maemo or os.path.exists(maemo_file):
113 gpodder.interface = gpodder.MAEMO
114 gpodder.ui_folders.insert(0, os.path.join(ui_folder, 'maemo'))
115 gpodder.icon_file = gpodder.icon_file.replace('.svg', '.png')
116 else:
117 gpodder.interface = gpodder.GUI
118 gpodder.ui_folders.insert(0, os.path.join(ui_folder, 'desktop'))
120 if options.verbose:
121 from gpodder.liblogger import enable_verbose
122 enable_verbose()
124 if have_dbus:
125 # Try to find an already-running instance of gPodder
126 try:
127 session_bus = dbus.SessionBus()
128 remote_object = session_bus.get_object(gpodder.dbus_bus_name, gpodder.dbus_gui_object_path)
129 from gpodder.liblogger import log
130 log('Found gPodder GUI instance already running')
131 except dbus.exceptions.DBusException:
132 remote_object = None
133 else:
134 # No D-Bus available :/
135 remote_object = None
137 if remote_object is not None:
138 # An instance of GUI is already running
139 remote_object.show_gui_window(dbus_interface=gpodder.dbus_interface)
140 if options.subscribe:
141 remote_object.subscribe_to_url(options.subscribe)
142 else:
143 # gPodder is not yet running - create new instance
144 from gpodder import gui
146 # check if we have an X11 connection (but not on Windows)
147 if platform.system() != 'Windows' and \
148 not os.environ.get('DISPLAY', None):
149 print >>sys.stderr, 'Cannot start gPodder: $DISPLAY is not set.'
150 sys.exit(1)
152 if gpodder.interface == gpodder.MAEMO:
153 # Reduce our nice value to zero if we're on Maemo to
154 # make the tablet not kill itself while updating feeds
155 if os.nice(0) < 0:
156 os.nice(-os.nice(0))
158 gui.main(options)