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/>.
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
30 See gpo(1) for the command-line interface.
45 print >>sys
.stderr
, """
46 Warning: python-dbus not found. Disabling D-Bus support.
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
)
86 # Enable i18n for gPodder translations
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
="diablo", default
=False,
105 help=_("Start the Maemo 4 user interface"))
107 parser
.add_option("-f", "--fremantle",
108 action
="store_true", dest
="fremantle", default
=False,
109 help=_("Start the Maemo 5 user interface"))
111 parser
.add_option('-s', '--subscribe', dest
='subscribe', metavar
='URL',
112 help=_('Subscribe to the given URL'))
114 (options
, args
) = parser
.parse_args(sys
.argv
)
116 if options
.fremantle
or options
.diablo
:
117 gpodder
.icon_file
= gpodder
.icon_file
.replace('.svg', '.png')
119 if options
.fremantle
:
120 gpodder
.ui
.fremantle
= True
121 gpodder
.ui_folders
.insert(0, os
.path
.join(ui_folder
, 'frmntl'))
122 elif options
.diablo
or os
.path
.exists(maemo_file
):
123 gpodder
.ui
.diablo
= True
124 gpodder
.ui_folders
.insert(0, os
.path
.join(ui_folder
, 'maemo'))
126 gpodder
.ui
.desktop
= True
127 gpodder
.ui_folders
.insert(0, os
.path
.join(ui_folder
, 'desktop'))
130 from gpodder
.liblogger
import enable_verbose
134 # Try to find an already-running instance of gPodder
136 session_bus
= dbus
.SessionBus()
137 remote_object
= session_bus
.get_object(gpodder
.dbus_bus_name
, gpodder
.dbus_gui_object_path
)
138 from gpodder
.liblogger
import log
139 log('Found gPodder GUI instance already running')
140 except dbus
.exceptions
.DBusException
:
143 # No D-Bus available :/
146 if remote_object
is not None:
147 # An instance of GUI is already running
148 remote_object
.show_gui_window(dbus_interface
=gpodder
.dbus_interface
)
149 if options
.subscribe
:
150 remote_object
.subscribe_to_url(options
.subscribe
)
152 # gPodder is not yet running - create new instance
153 from gpodder
import gui
155 # check if we have an X11 connection (but not on Windows)
156 if platform
.system() != 'Windows' and \
157 not os
.environ
.get('DISPLAY', None):
158 print >>sys
.stderr
, 'Cannot start gPodder: $DISPLAY is not set.'
162 # Reduce our nice value to zero if we're on Maemo to
163 # make the tablet not kill itself while updating feeds