Lots of code clean-ups, translation update, itunes image support :) (for full list, please see changelog...)

git-svn-id: svn://svn.berlios.de/gpodder@65 b0d088ad-0a06-0410-aad2-9ed5178a7e87
This commit is contained in:
Thomas Perl 2006-03-31 16:20:18 +00:00
parent 498fbb1a1b
commit 3b3d806d38
16 changed files with 607 additions and 1048 deletions

View File

@ -1,3 +1,13 @@
Fri, 31 Mar 2006 18:13:16 +0200 <thp@perli.net>
* Major code clean-up in gpodder.py and other modules
* Updated strings in all source code + gladefile (for i18n)
* Added support for itunes image ("Cover") in channel editor
* Removed orphaned (for a very long time) download status window
* User applications (from libplayers) only readed once now
* Fixed gPodder window icon when running with "make test"
* Updated gladefile (removed status, non-translatable strings)
* Updated data/messages.pot and updated german translation (de.po)
Thu, 30 Mar 2006 23:00:44 +0200 <thp@perli.net>
* Modified makefile for i18n purposes
* Added data/po directory structure

View File

@ -62,7 +62,7 @@ $(GLADEGETTEXT): $(GLADEFILE)
intltool-extract --type=gettext/glade $(GLADEFILE)
$(MESSAGESPOT): src/gpodder/*.py $(GLADEGETTEXT) $(BINFILE)
xgettext -j -k_ -kN_ -o $(MESSAGESPOT) src/gpodder/*.py $(GLADEGETTEXT) $(BINFILE)
xgettext -k_ -kN_ -o $(MESSAGESPOT) src/gpodder/*.py $(GLADEGETTEXT) $(BINFILE)
sed -e 's/SOME DESCRIPTIVE TITLE/gPodder translation template/g' -e 's/YEAR THE PACKAGE'"'"'S COPYRIGHT HOLDER/2006 Thomas Perl/g' -e 's/FIRST AUTHOR <EMAIL@ADDRESS>, YEAR/Thomas Perl <thp@perli.net>, 2006/g' -e 's/PACKAGE VERSION/gPodder '$(GPODDERVERSION)'/g' -e 's/PACKAGE/gPodder/g' $(MESSAGESPOT) > $(MESSAGESPOT).tmp
mv $(MESSAGESPOT).tmp $(MESSAGESPOT)

5
TODO
View File

@ -1,9 +1,8 @@
== 0.7 or afterwards ==
* i18n support (http://docs.python.org/lib/node333.html)
more help here: http://www.async.com.br/faq/pygtk/index.py?querytype=simple&query=gettext&req=search
(might look into this soon ) -- thp <thp@perli.net>
* add i18n files to installed data
* do more translations (you can contribute here, of course :)
* viewing pod info such as pubdate/description
would've been nice.. It would give a better over view on your

View File

@ -36,29 +36,29 @@ def main(argv=None):
parser.add_option("-v", "--verbose",
action="store_true", dest="verbose", default=False,
help=_("print extra information"))
help=_("Be more verbose"))
parser.add_option("--debug",
action="store_true", dest="debug", default=False,
help=_("run local version for debugging"))
help=_("Run local version in current directory"))
parser.add_option("-l", "--list",
action="store_true", dest="list", default=False,
help=_("list all channel subscriptions"))
help=_("List all channel subscriptions"))
parser.add_option("-r", "--run",
action="store_true", dest="run", default=False,
help=_("update channels and download new podcasts"))
help=_("Update channel list, download new podcasts"))
parser.add_option("-u", "--update",
action="store_true", dest="update", default=False,
help=_("update channels"))
help=_("Update channel list and exit"))
parser.add_option("-a", "--add", dest="add",
help=_("add FEEDURL to channel subscriptions"), metavar="FEEDURL")
help=_("Subscribe to channel from FEEDURL"), metavar="FEEDURL")
parser.add_option("-d", "--delete", dest="delete",
help=_("delete channel n"), metavar="n")
help=_("Delete channel with ID n"), metavar="n")
(options, args) = parser.parse_args(argv)
@ -76,10 +76,8 @@ def main(argv=None):
from gpodder import console
which_wget = console.testForWget()
if which_wget == "":
print _("ERROR: You do not seem to have a usable \"wget\" binary in your path.")
print _("Error: cannot find wget.")
return 20
else:
print _("Found wget: %s") % which_wget
# which_wget
if options.list:
@ -95,15 +93,15 @@ def main(argv=None):
if options.add != None and options.add != "" and (options.add[:4] == "http" or options.add[:3] == "ftp"):
console.add_channel(options.add)
else:
print _('unknown channel: %s') % options.add
print _('Cannot add channel: %s') % options.add
elif options.delete:
try:
chid = int(options.delete)
console.del_channel(chid)
print _("channel IDs may have changed, list before deleting again")
print _("Channel IDs may have changed, list before deleting again.")
except ValueError:
print _('%s is not a valid id') %options.delete
print _('Not a valid channel ID: %s') %options.delete
else:
#default run gui

View File

@ -1024,288 +1024,6 @@
</child>
</widget>
<widget class="GtkWindow" id="gPodderStatus">
<property name="visible">True</property>
<property name="title" translatable="yes">gPodder Download Status</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_CENTER</property>
<property name="modal">False</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
<property name="urgency_hint">False</property>
<signal name="destroy" handler="on_gPodderStatus_destroy" last_modification_time="Sun, 30 Oct 2005 14:04:51 GMT"/>
<child>
<widget class="GtkTable" id="waiterTable">
<property name="border_width">10</property>
<property name="visible">True</property>
<property name="n_rows">5</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">5</property>
<property name="column_spacing">5</property>
<child>
<widget class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="label" translatable="yes">Downloading from:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">1</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="label" translatable="yes">Episode:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">1</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="label" translatable="yes">Current speed:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">1</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox3">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkButton" id="btnCancel">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_btnCancel_clicked" last_modification_time="Sun, 30 Oct 2005 13:59:26 GMT"/>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="y_options">fill</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label10">
<property name="visible">True</property>
<property name="label" translatable="yes">Progress:</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">1</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options">expand</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="labelFrom">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;labelFrom&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="labelFilename">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;labelFilename&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="labelSpeed">
<property name="visible">True</property>
<property name="label" translatable="yes">labelSpeed</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkProgressBar" id="progressBar">
<property name="visible">True</property>
<property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property>
<property name="fraction">0</property>
<property name="pulse_step">0.10000000149</property>
<property name="text" translatable="yes"></property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options">expand</property>
</packing>
</child>
</widget>
</child>
</widget>
<widget class="GtkWindow" id="gPodderChannel">
<property name="border_width">10</property>
<property name="visible">True</property>
@ -1558,7 +1276,7 @@
<widget class="GtkTable" id="table3">
<property name="border_width">10</property>
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">5</property>
@ -1642,6 +1360,82 @@
<property name="type">tab</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="border_width">10</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="imgCover">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="labelCoverStatus">
<property name="visible">True</property>
<property name="label" translatable="yes">No cover available.</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">4</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
<property name="tab_fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label31">
<property name="visible">True</property>
<property name="label" translatable="yes">Cover</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="type">tab</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
@ -2145,7 +1939,7 @@ you can use the usual format of the environment variables:
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes">~/.config/gpodder/downloads/</property>
<property name="text">~/.config/gpodder/downloads/</property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
@ -2279,7 +2073,7 @@ you can use the usual format of the environment variables:
<child>
<widget class="GtkLabel" id="episode_title">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;The gPodder Episode Title&lt;/big&gt;&lt;/b&gt;</property>
<property name="label">&lt;b&gt;&lt;big&gt;The gPodder Episode Title&lt;/big&gt;&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@ -2326,7 +2120,7 @@ you can use the usual format of the environment variables:
<property name="left_margin">5</property>
<property name="right_margin">5</property>
<property name="indent">0</property>
<property name="text" translatable="yes">Description of the episode currently selected in gPodder</property>
<property name="text">Description of the episode currently selected in gPodder</property>
</widget>
</child>
</widget>

View File

@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: gPodder 0.7-svn\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-03-30 23:18+0200\n"
"POT-Creation-Date: 2006-03-31 18:11+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: src/gpodder/console.py:65
@ -26,36 +26,40 @@ msgstr ""
msgid "%s is not a valid id"
msgstr ""
#: src/gpodder/gpodder.py:110 src/gpodder/gpodder.py:125
#: src/gpodder/gpodder.py:131
#: src/gpodder/gpodder.py:54
msgid "Contributors / patch writers:"
msgstr ""
#: src/gpodder/gpodder.py:58
msgid "See the AUTHORS file for all contributors"
msgstr ""
#: src/gpodder/gpodder.py:113 src/gpodder/gpodder.py:128
#: src/gpodder/gpodder.py:134
msgid "Episode"
msgstr ""
#: src/gpodder/gpodder.py:115
#: src/gpodder/gpodder.py:118
msgid "Size"
msgstr ""
#: src/gpodder/gpodder.py:134
#: src/gpodder/gpodder.py:137
msgid "Speed"
msgstr ""
#: src/gpodder/gpodder.py:137
#: src/gpodder/gpodder.py:140
msgid "Progress"
msgstr ""
#: src/gpodder/gpodder.py:166
#: src/gpodder/gpodder.py:164
msgid "Channel Info"
msgstr ""
#: src/gpodder/gpodder.py:186
msgid "probably no channels found"
#: src/gpodder/gpodder.py:199
msgid "No downloaded podcasts found."
msgstr ""
#: src/gpodder/gpodder.py:201
msgid "no downloaded podcasts found.."
msgstr ""
#: src/gpodder/gpodder.py:211
#: src/gpodder/gpodder.py:209
msgid ""
"<b>No channels found</b>\n"
"\n"
@ -63,52 +67,35 @@ msgid ""
"new channel."
msgstr ""
#: src/gpodder/gpodder.py:212
msgid "probably no feeds or channels found"
msgstr ""
#: src/gpodder/gpodder.py:214
msgid "some unknown function"
msgstr ""
#: src/gpodder/gpodder.py:214
#: src/gpodder/gpodder.py:211
msgid "gPodder message"
msgstr ""
#: src/gpodder/gpodder.py:222
#: src/gpodder/gpodder.py:219
msgid "Do you really want to do this?"
msgstr ""
#: src/gpodder/gpodder.py:222
#: src/gpodder/gpodder.py:219
msgid "gPodder confirmation"
msgstr ""
#: src/gpodder/gpodder.py:233
#, python-format
msgid "I Asked: %s"
#: src/gpodder/gpodder.py:284
msgid ""
"There has been an error adding the channel.\n"
"Maybe the URL is wrong?"
msgstr ""
#: src/gpodder/gpodder.py:234
#, python-format
msgid "User answered: %s"
msgstr ""
#: src/gpodder/gpodder.py:274
#, python-format
msgid "Adding channel: %s"
msgstr ""
#: src/gpodder/gpodder.py:275 src/gpodder/gpodder.py:345
#: src/gpodder/gpodder.py:388
#: src/gpodder/gpodder.py:290 src/gpodder/gpodder.py:377
msgid "Fetching channel index..."
msgstr ""
#: src/gpodder/gpodder.py:293
#, python-format
msgid "unkonwn link format: %s"
#: src/gpodder/gpodder.py:303
msgid ""
"Could not add new channel.\n"
"Only <b>http://</b> and <b>ftp://</b> URLs supported at the moment."
msgstr ""
#: src/gpodder/gpodder.py:320
#: src/gpodder/gpodder.py:333
msgid ""
"<big><b>Updating feed cache</b></big>\n"
"\n"
@ -116,26 +103,14 @@ msgid ""
"updating the feed cache..."
msgstr ""
#: src/gpodder/gpodder.py:361
msgid ""
"There has been an error adding the channel.\n"
"Maybe the URL is wrong?"
msgstr ""
#: src/gpodder/gpodder.py:367
msgid ""
"Could not add new channel.\n"
"Only <b>http://</b> and <b>ftp://</b> URLs supported at the moment."
msgstr ""
#: src/gpodder/gpodder.py:381
#: src/gpodder/gpodder.py:370
msgid ""
"Cannot edit this channel.\n"
"\n"
"No channel found."
msgstr ""
#: src/gpodder/gpodder.py:419
#: src/gpodder/gpodder.py:400
#, python-format
msgid ""
"Do you really want to remove this channel?\n"
@ -143,43 +118,31 @@ msgid ""
" %s"
msgstr ""
#: src/gpodder/gpodder.py:426
#: src/gpodder/gpodder.py:407
msgid ""
"Could not delete channel.\n"
"Probably no channel is selected."
msgstr ""
#: src/gpodder/gpodder.py:434
#: src/gpodder/gpodder.py:415
msgid "Your channel list is empty. Nothing to export."
msgstr ""
#: src/gpodder/gpodder.py:417
msgid "Export to OPML"
msgstr ""
#: src/gpodder/gpodder.py:485
msgid "You have not selected an episode to download."
msgstr ""
#: src/gpodder/gpodder.py:500
msgid ""
"Your channel list is empty. Nothing to export.\n"
"\n"
"Go add some fancy channels! :)"
msgstr ""
#: src/gpodder/gpodder.py:436
msgid "Export to OPML..."
msgstr ""
#: src/gpodder/gpodder.py:445
msgid "=> WILL WRITE OPML TO: "
msgstr ""
#: src/gpodder/gpodder.py:504
msgid ""
"You have not selected an episode to download.\n"
"\n"
"Please select one, and I'll download it for you."
"You have already downloaded this episode\n"
"or you are currently downloading it."
msgstr ""
#: src/gpodder/gpodder.py:519
msgid ""
"<big><b>Already downloaded</b></big>\n"
"\n"
"You have already downloaded this episode.\n"
"Or you are currently downloading it."
msgstr ""
#: src/gpodder/gpodder.py:538
#, python-format
msgid ""
"Do you really want to cancel this download?\n"
@ -187,18 +150,11 @@ msgid ""
"%s"
msgstr ""
#: src/gpodder/gpodder.py:541
msgid "No episode selected - nothing cancelled."
#: src/gpodder/gpodder.py:522 src/gpodder/gpodder.py:559
msgid "No episode selected."
msgstr ""
#: src/gpodder/gpodder.py:583
msgid ""
"Could not open this episode.\n"
"\n"
"Have you even selected one?"
msgstr ""
#: src/gpodder/gpodder.py:610
#: src/gpodder/gpodder.py:585
#, python-format
msgid ""
"Do you really want to remove this episode?\n"
@ -206,23 +162,30 @@ msgid ""
"%s"
msgstr ""
#: src/gpodder/gpodder.py:620
#: src/gpodder/gpodder.py:595
msgid "Could not delete downloaded podcast."
msgstr ""
#: src/gpodder/gpodder.py:631 src/gpodder/gpodder.py:632
#: data/gpodder.glade.h:1
msgid "(unknown)"
msgstr ""
#: src/gpodder/gpodder.py:829
msgid ""
"Could not delete selected item.\n"
"Have you selected an episode to delete?"
"Please do not call gpodder.py directly. Instead, call the gpodder binary."
msgstr ""
#: src/gpodder/gpodder.py:914 src/gpodder/gpodder.py:915
msgid "please run the gpodder binary, not this file"
msgstr ""
#: src/gpodder/libgpodder.py:137 src/gpodder/libgpodder.py:146
#: src/gpodder/libgpodder.py:152
#: src/gpodder/libgpodder.py:64
msgid "gPodder downloads"
msgstr ""
#: src/gpodder/libgpodder.py:167
msgid "automatically generated, will be overwritten on next gpodder shutdown."
#: src/gpodder/libgpodder.py:160
msgid "Downloading channel cover..."
msgstr ""
#: src/gpodder/libgpodder.py:211
msgid "gPodder channel list"
msgstr ""
#: src/gpodder/liblocdbwriter.py:33
@ -233,24 +196,8 @@ msgstr ""
msgid "gPodder subscription list (exported)"
msgstr ""
#: src/gpodder/libpodcasts.py:207
msgid "no local db found or local db error"
msgstr ""
#: src/gpodder/libpodcasts.py:242
msgid "GB"
msgstr ""
#: src/gpodder/libpodcasts.py:244
msgid "MB"
msgstr ""
#: src/gpodder/libpodcasts.py:246
msgid "KB"
msgstr ""
#: src/gpodder/libpodcasts.py:248
msgid "Bytes"
#: src/gpodder/libpodcasts.py:214
msgid "No LocalDB found or error in existing LocalDB."
msgstr ""
#: src/gpodder/libwget.py:39 src/gpodder/libwget.py:57
@ -258,25 +205,13 @@ msgstr ""
msgid "unknown"
msgstr ""
#: src/gpodder/libwget.py:272
msgid "initializing download..."
msgstr ""
#: src/gpodder/libwget.py:298
msgid "Download has been cancelled."
msgstr ""
#: src/gpodder/libwget.py:300
#, python-format
msgid "wget exited with status: %s"
msgstr ""
#: src/gpodder/libwget.py:301
msgid "*** THERE HAS BEEN AN ERROR WHILE DOWNLOADING **"
msgstr ""
#: data/gpodder.glade.h:1
msgid "(unknown)"
msgid "Download error. Wget exit code was: %d"
msgstr ""
#: data/gpodder.glade.h:2
@ -284,106 +219,82 @@ msgid "<b>(unknown)</b>"
msgstr ""
#: data/gpodder.glade.h:3
msgid "<b><big>The gPodder Episode Title</big></b>"
msgstr ""
#: data/gpodder.glade.h:4
msgid "<b>labelFilename</b>"
msgstr ""
#: data/gpodder.glade.h:5
msgid "<b>labelFrom</b>"
msgstr ""
#: data/gpodder.glade.h:6
msgid "Advanced"
msgstr ""
#: data/gpodder.glade.h:7
#: data/gpodder.glade.h:4
msgid "Available Podcasts"
msgstr ""
#: data/gpodder.glade.h:8
#: data/gpodder.glade.h:5
msgid "Channel:"
msgstr ""
#: data/gpodder.glade.h:9
#: data/gpodder.glade.h:6
msgid "Command:"
msgstr ""
#: data/gpodder.glade.h:10
msgid "Current speed:"
#: data/gpodder.glade.h:7
msgid "Cover"
msgstr ""
#: data/gpodder.glade.h:11
#: data/gpodder.glade.h:8
msgid "Delete selected item"
msgstr ""
#: data/gpodder.glade.h:12
msgid "Description of the episode currently selected in gPodder"
msgstr ""
#: data/gpodder.glade.h:13
#: data/gpodder.glade.h:9
msgid "Description:"
msgstr ""
#: data/gpodder.glade.h:14
#: data/gpodder.glade.h:10
msgid "Desktop:"
msgstr ""
#: data/gpodder.glade.h:15
#: data/gpodder.glade.h:11
msgid "Download Pod_cast"
msgstr ""
#: data/gpodder.glade.h:16
#: data/gpodder.glade.h:12
msgid "Download Status"
msgstr ""
#: data/gpodder.glade.h:17
#: data/gpodder.glade.h:13
msgid "Download to:"
msgstr ""
#: data/gpodder.glade.h:18
#: data/gpodder.glade.h:14
msgid "Downloaded Podcasts"
msgstr ""
#: data/gpodder.glade.h:19
msgid "Downloading from:"
msgstr ""
#: data/gpodder.glade.h:20
#: data/gpodder.glade.h:15
msgid "Downloads"
msgstr ""
#: data/gpodder.glade.h:21
#: data/gpodder.glade.h:16
msgid "E_xport list..."
msgstr ""
#: data/gpodder.glade.h:22
#: data/gpodder.glade.h:17
msgid "Episode Information"
msgstr ""
#: data/gpodder.glade.h:23
msgid "Episode:"
msgstr ""
#: data/gpodder.glade.h:24
#: data/gpodder.glade.h:18
msgid "FTP Proxy:"
msgstr ""
#: data/gpodder.glade.h:25
#: data/gpodder.glade.h:19
msgid "Feed URL:"
msgstr ""
#: data/gpodder.glade.h:26
#: data/gpodder.glade.h:20
msgid "General"
msgstr ""
#: data/gpodder.glade.h:27
#: data/gpodder.glade.h:21
msgid "HTTP Proxy:"
msgstr ""
#: data/gpodder.glade.h:28
#: data/gpodder.glade.h:22
msgid ""
"If you have to use a HTTP or FTP proxy server,\n"
"you can use the usual format of the environment variables:\n"
@ -391,135 +302,118 @@ msgid ""
"<b>http://username:password@proxy_host:proxy_port/</b>"
msgstr ""
#: data/gpodder.glade.h:32
#: data/gpodder.glade.h:26
msgid "No cover available."
msgstr ""
#: data/gpodder.glade.h:27
msgid "Play selected item"
msgstr ""
#: data/gpodder.glade.h:33
#: data/gpodder.glade.h:28
msgid "Player application:"
msgstr ""
#: data/gpodder.glade.h:34
msgid "Progress:"
msgstr ""
#: data/gpodder.glade.h:35
#: data/gpodder.glade.h:29
msgid "Proxy"
msgstr ""
#: data/gpodder.glade.h:36
#: data/gpodder.glade.h:30
msgid "Save downloads in:"
msgstr ""
#: data/gpodder.glade.h:37
#: data/gpodder.glade.h:31
msgid "Show \"gPodder downloads\" link"
msgstr ""
#: data/gpodder.glade.h:38
#: data/gpodder.glade.h:32
msgid "Title:"
msgstr ""
#: data/gpodder.glade.h:39
#: data/gpodder.glade.h:33
msgid "_About gPodder..."
msgstr ""
#: data/gpodder.glade.h:40
#: data/gpodder.glade.h:34
msgid "_Add channel..."
msgstr ""
#: data/gpodder.glade.h:41
#: data/gpodder.glade.h:35
msgid "_Channels"
msgstr ""
#: data/gpodder.glade.h:42
#: data/gpodder.glade.h:36
msgid "_Check for Updates"
msgstr ""
#: data/gpodder.glade.h:43
#: data/gpodder.glade.h:37
msgid "_Close"
msgstr ""
#: data/gpodder.glade.h:44
#: data/gpodder.glade.h:38
msgid "_Edit channel..."
msgstr ""
#: data/gpodder.glade.h:45
#: data/gpodder.glade.h:39
msgid "_Help"
msgstr ""
#: data/gpodder.glade.h:46
#: data/gpodder.glade.h:40
msgid "_Podcasts"
msgstr ""
#: data/gpodder.glade.h:47
#: data/gpodder.glade.h:41
msgid "_Preferences..."
msgstr ""
#: data/gpodder.glade.h:48
#: data/gpodder.glade.h:42
msgid "_Remove channel"
msgstr ""
#: data/gpodder.glade.h:49
#: data/gpodder.glade.h:43
msgid "gPodder - your podcast catcher."
msgstr ""
#: data/gpodder.glade.h:50
#: data/gpodder.glade.h:44
msgid "gPodder Channel Editor"
msgstr ""
#: data/gpodder.glade.h:51
msgid "gPodder Download Status"
msgstr ""
#: data/gpodder.glade.h:52
#: data/gpodder.glade.h:45
msgid "gPodder properties"
msgstr ""
#: data/gpodder.glade.h:53
msgid "labelSpeed"
msgstr ""
#: data/gpodder.glade.h:54
msgid "~/.config/gpodder/downloads/"
msgstr ""
#: bin/gpodder:39
msgid "print extra information"
msgid "Be more verbose"
msgstr ""
#: bin/gpodder:43
msgid "run local version for debugging"
msgid "Run local version in current directory"
msgstr ""
#: bin/gpodder:47
msgid "list all channel subscriptions"
msgid "List all channel subscriptions"
msgstr ""
#: bin/gpodder:51
msgid "update channels and download new podcasts"
msgid "Update channel list, download new podcasts"
msgstr ""
#: bin/gpodder:55
msgid "update channels"
msgid "Update channel list and exit"
msgstr ""
#: bin/gpodder:58
msgid "add FEEDURL to channel subscriptions"
msgid "Subscribe to channel from FEEDURL"
msgstr ""
#: bin/gpodder:61
msgid "delete channel n"
msgid "Delete channel with ID n"
msgstr ""
#: bin/gpodder:79
msgid "ERROR: You do not seem to have a usable \"wget\" binary in your path."
msgid "Error: cannot find wget."
msgstr ""
#: bin/gpodder:82
#, c-format
msgid "Found wget: %s"
msgstr ""
#: bin/gpodder:104
msgid "channel IDs may have changed, list before deleting again"
#: bin/gpodder:102
msgid "Channel IDs may have changed, list before deleting again."
msgstr ""

View File

@ -1,2 +1,4 @@
Put your translated *.po files here, then execute "make" to generate
machine-readable *.mo files in the locale directory.
If you want to edit your *.po file with a GUI, try www.poedit.org.

View File

@ -3,228 +3,220 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: gPodder 0.7-svn\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-03-30 23:05+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"POT-Creation-Date: 2006-03-31 18:11+0200\n"
"PO-Revision-Date: 2006-03-31 18:04+0100\n"
"Last-Translator: Thomas Perl <thp@perli.net>\n"
"Language-Team: gPodder Team <thp@perli.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: German\n"
#: src/gpodder/console.py:65
#, python-format
msgid "delete channel: %s"
msgstr "channel entfernen: %s"
msgstr "Channel entfernen: %s"
#: src/gpodder/console.py:68
#, python-format
msgid "%s is not a valid id"
msgstr "%s is keine gültige ID"
#: src/gpodder/gpodder.py:110 src/gpodder/gpodder.py:125
#: src/gpodder/gpodder.py:131
#: src/gpodder/gpodder.py:54
msgid "Contributors / patch writers:"
msgstr "Helfer und Patchschreiber:"
#: src/gpodder/gpodder.py:58
msgid "See the AUTHORS file for all contributors"
msgstr "Eine Liste aller Helfer finden Sie in der AUTHORS-Datei"
#: src/gpodder/gpodder.py:113 src/gpodder/gpodder.py:128
#: src/gpodder/gpodder.py:134
msgid "Episode"
msgstr "Episode"
#: src/gpodder/gpodder.py:115
#: src/gpodder/gpodder.py:118
msgid "Size"
msgstr "Größe"
#: src/gpodder/gpodder.py:134
#: src/gpodder/gpodder.py:137
msgid "Speed"
msgstr "Geschwindigkeit"
#: src/gpodder/gpodder.py:137
#: src/gpodder/gpodder.py:140
msgid "Progress"
msgstr "Fortschritt"
#: src/gpodder/gpodder.py:166
#: src/gpodder/gpodder.py:164
msgid "Channel Info"
msgstr "Channel-Informationen"
#: src/gpodder/gpodder.py:186
msgid "probably no channels found"
msgstr "wahrscheinlich keine channels gefunden"
#: src/gpodder/gpodder.py:199
msgid "No downloaded podcasts found."
msgstr "Keine heruntergeladenen Podcasts gefunden."
#: src/gpodder/gpodder.py:201
msgid "no downloaded podcasts found.."
msgstr "keine heruntergeladenen podcasts gefunden.."
#: src/gpodder/gpodder.py:211
#: src/gpodder/gpodder.py:209
msgid ""
"<b>No channels found</b>\n"
"\n"
"Click on <b><i>Channels</i></b> &gt; <b><i>Add channel..</i></b> to add a "
"new channel."
msgstr ""
"<b>Keine Channels gefunden</b>\n"
"\n"
"Klicken Sie auf <b><i>Channels</i></b> &gt; <b><i>Abbonieren...</i></b>, um "
"einen neuen Channel zu abbonieren."
#: src/gpodder/gpodder.py:212
msgid "probably no feeds or channels found"
msgstr "wahrscheinlich keine feeds oder channels gefunden"
#: src/gpodder/gpodder.py:214
msgid "some unknown function"
msgstr "eine unbekannte Funktion"
#: src/gpodder/gpodder.py:214
#: src/gpodder/gpodder.py:211
msgid "gPodder message"
msgstr "gPodder Nachricht"
#: src/gpodder/gpodder.py:222
#: src/gpodder/gpodder.py:219
msgid "Do you really want to do this?"
msgstr "Willst du das wirklich machen?"
#: src/gpodder/gpodder.py:222
#: src/gpodder/gpodder.py:219
msgid "gPodder confirmation"
msgstr "gPodder Bestätigung"
#: src/gpodder/gpodder.py:233
#, python-format
msgid "I Asked: %s"
msgstr "Ich fragte: %s"
#: src/gpodder/gpodder.py:284
msgid ""
"There has been an error adding the channel.\n"
"Maybe the URL is wrong?"
msgstr ""
"Ein Fehler trat beim Hinzufügen des Channels auf.\n"
"Vielleicht ist die URL falsch?"
#: src/gpodder/gpodder.py:234
#, python-format
msgid "User answered: %s"
msgstr "Benutzer antwortete mit: %s"
#: src/gpodder/gpodder.py:274
#, python-format
msgid "Adding channel: %s"
msgstr "Channel wird hinzugefügt: %s"
#: src/gpodder/gpodder.py:275 src/gpodder/gpodder.py:345
#: src/gpodder/gpodder.py:388
#: src/gpodder/gpodder.py:290 src/gpodder/gpodder.py:377
msgid "Fetching channel index..."
msgstr "Channel-Index wird heruntergeladen..."
#: src/gpodder/gpodder.py:293
#, python-format
msgid "unkonwn link format: %s"
msgstr "Unbekanntes Link-Format: %s"
#: src/gpodder/gpodder.py:303
msgid ""
"Could not add new channel.\n"
"Only <b>http://</b> and <b>ftp://</b> URLs supported at the moment."
msgstr ""
"Konnte neuen Channel nicht abbonieren.\n"
"Derzeit werden nur <b>http://</b> und <b>ftp://</b>-URLs unterstützt."
#: src/gpodder/gpodder.py:320
#: src/gpodder/gpodder.py:333
msgid ""
"<big><b>Updating feed cache</b></big>\n"
"\n"
"Please wait while gPodder is\n"
"updating the feed cache..."
msgstr ""
"<big><b>Abonnements werden geprüft</b></big>\n"
"\n"
"Bitte warten Sie, während gPodder Ihre\n"
"Channel-Abonnements aktualisiert..."
#: src/gpodder/gpodder.py:361
msgid ""
"There has been an error adding the channel.\n"
"Maybe the URL is wrong?"
msgstr ""
#: src/gpodder/gpodder.py:367
msgid ""
"Could not add new channel.\n"
"Only <b>http://</b> and <b>ftp://</b> URLs supported at the moment."
msgstr ""
#: src/gpodder/gpodder.py:381
#: src/gpodder/gpodder.py:370
msgid ""
"Cannot edit this channel.\n"
"\n"
"No channel found."
msgstr ""
"Kann diesen Channel nicht editieren.\n"
"\n"
"Kein Channel gefunden."
#: src/gpodder/gpodder.py:419
#: src/gpodder/gpodder.py:400
#, python-format
msgid ""
"Do you really want to remove this channel?\n"
"\n"
" %s"
msgstr ""
"Wollen Sie diesen Channel wirklich entfernen?\n"
"\n"
"%s"
#: src/gpodder/gpodder.py:426
#: src/gpodder/gpodder.py:407
msgid ""
"Could not delete channel.\n"
"Probably no channel is selected."
msgstr ""
"Konnte Channel nicht entfernen.\n"
"Wahrscheinlich ist keiner ausgewählt."
#: src/gpodder/gpodder.py:434
#: src/gpodder/gpodder.py:415
msgid "Your channel list is empty. Nothing to export."
msgstr "Nichts zu exportieren: Sie haben keine Abonnements."
#: src/gpodder/gpodder.py:417
msgid "Export to OPML"
msgstr "Als OPML-Datei exportieren"
#: src/gpodder/gpodder.py:485
msgid "You have not selected an episode to download."
msgstr "Sie haben keine Episode für den Download ausgewählt."
#: src/gpodder/gpodder.py:500
msgid ""
"Your channel list is empty. Nothing to export.\n"
"\n"
"Go add some fancy channels! :)"
msgstr ""
#: src/gpodder/gpodder.py:436
msgid "Export to OPML..."
msgstr "Exportieren als OPML..."
#: src/gpodder/gpodder.py:445
msgid "=> WILL WRITE OPML TO: "
msgstr "=> WERDE OPML SCHREIBEN: "
#: src/gpodder/gpodder.py:504
msgid ""
"You have not selected an episode to download.\n"
"\n"
"Please select one, and I'll download it for you."
"You have already downloaded this episode\n"
"or you are currently downloading it."
msgstr ""
"Sie haben diese Episode bereits heruntergeladen\n"
"oder Sie laden sie jetzt gerade herunter."
#: src/gpodder/gpodder.py:519
msgid ""
"<big><b>Already downloaded</b></big>\n"
"\n"
"You have already downloaded this episode.\n"
"Or you are currently downloading it."
msgstr ""
#: src/gpodder/gpodder.py:538
#, python-format
msgid ""
"Do you really want to cancel this download?\n"
"\n"
"%s"
msgstr ""
#: src/gpodder/gpodder.py:541
msgid "No episode selected - nothing cancelled."
msgstr "Keine Episode ausgewählt - nichts abgebrochen."
#: src/gpodder/gpodder.py:583
msgid ""
"Could not open this episode.\n"
"Wollen Sie diesen Download wirklich abbrechen?\n"
"\n"
"Have you even selected one?"
msgstr ""
"%s"
#: src/gpodder/gpodder.py:610
#: src/gpodder/gpodder.py:522 src/gpodder/gpodder.py:559
msgid "No episode selected."
msgstr "Keine Episode ausgewählt."
#: src/gpodder/gpodder.py:585
#, python-format
msgid ""
"Do you really want to remove this episode?\n"
"\n"
"%s"
msgstr ""
"Wollen Sie diese Episode wirklich entfernen?\n"
"\n"
"%s"
#: src/gpodder/gpodder.py:620
#: src/gpodder/gpodder.py:595
msgid "Could not delete downloaded podcast."
msgstr "Konnte den ausgewählten Podcast nicht entfernen."
#: src/gpodder/gpodder.py:631 src/gpodder/gpodder.py:632
#: data/gpodder.glade.h:1
msgid "(unknown)"
msgstr "(unbekannt)"
#: src/gpodder/gpodder.py:829
msgid ""
"Could not delete selected item.\n"
"Have you selected an episode to delete?"
"Please do not call gpodder.py directly. Instead, call the gpodder binary."
msgstr ""
"Bitte starten Sie gPodder nie direkt über gpodder.py. Rufen Sie stattdessen "
"das \"gpodder\" Programm auf."
#: src/gpodder/gpodder.py:914 src/gpodder/gpodder.py:915
msgid "please run the gpodder binary, not this file"
msgstr "Bitte starten Sie die gpodder-Applikation, nicht diese Datei"
#: src/gpodder/libgpodder.py:137 src/gpodder/libgpodder.py:146
#: src/gpodder/libgpodder.py:152
#: src/gpodder/libgpodder.py:64
msgid "gPodder downloads"
msgstr "gPodder-Downloads"
msgstr "gPodder Downloads"
#: src/gpodder/libgpodder.py:167
msgid "automatically generated, will be overwritten on next gpodder shutdown."
msgstr ""
"Automatisch generiert, wird beim nächsten Beenden von gPodder überschrieben."
#: src/gpodder/libgpodder.py:160
msgid "Downloading channel cover..."
msgstr "Bild wird heruntergeladen..."
#: src/gpodder/libgpodder.py:211
msgid "gPodder channel list"
msgstr "gPodder Channel-Editor"
#: src/gpodder/liblocdbwriter.py:33
msgid "local download database, generated by gPodder"
@ -234,296 +226,231 @@ msgstr "lokale Download-Datenbank, generiert von gPodder"
msgid "gPodder subscription list (exported)"
msgstr "gPodder Abonnement-Liste (exportiert)"
#: src/gpodder/libpodcasts.py:207
msgid "no local db found or local db error"
msgstr "keine local DB gefunden, oder Fehler in lokaler DB"
#: src/gpodder/libpodcasts.py:242
msgid "GB"
msgstr ""
#: src/gpodder/libpodcasts.py:244
msgid "MB"
msgstr ""
#: src/gpodder/libpodcasts.py:246
msgid "KB"
msgstr ""
#: src/gpodder/libpodcasts.py:248
msgid "Bytes"
#: src/gpodder/libpodcasts.py:214
msgid "No LocalDB found or error in existing LocalDB."
msgstr ""
"Keine Lokale Datenbank gefunden (oder Fehler in existierender Datenbank)."
#: src/gpodder/libwget.py:39 src/gpodder/libwget.py:57
#: src/gpodder/libwget.py:66
msgid "unknown"
msgstr "unbekannt"
#: src/gpodder/libwget.py:272
msgid "initializing download..."
msgstr "initialisiere download..."
#: src/gpodder/libwget.py:298
msgid "Download has been cancelled."
msgstr "Der Download wurde abgebrochen."
#: src/gpodder/libwget.py:300
#, python-format
msgid "wget exited with status: %s"
msgstr "wget beendete mit status: %s"
#: src/gpodder/libwget.py:301
msgid "*** THERE HAS BEEN AN ERROR WHILE DOWNLOADING **"
msgstr "*** FEHLER IST WÄHREND DES DOWNLOADS AUFGETRETEN **"
#: data/gpodder.glade.h:1
msgid "(unknown)"
msgstr "(unbekannt)"
msgid "Download error. Wget exit code was: %d"
msgstr "Fehler beim Download. Wget's Exit-Status ist: %d"
#: data/gpodder.glade.h:2
msgid "<b>(unknown)</b>"
msgstr ""
msgstr "<b>(unbekannt)</b>"
#: data/gpodder.glade.h:3
msgid "<b><big>The gPodder Episode Title</big></b>"
msgstr ""
#: data/gpodder.glade.h:4
msgid "<b>labelFilename</b>"
msgstr ""
#: data/gpodder.glade.h:5
msgid "<b>labelFrom</b>"
msgstr ""
#: data/gpodder.glade.h:6
msgid "Advanced"
msgstr "Erweitert"
#: data/gpodder.glade.h:7
#: data/gpodder.glade.h:4
msgid "Available Podcasts"
msgstr "Verfügbare Podcasts"
#: data/gpodder.glade.h:8
#: data/gpodder.glade.h:5
msgid "Channel:"
msgstr "Channel:"
#: data/gpodder.glade.h:9
#: data/gpodder.glade.h:6
msgid "Command:"
msgstr "Befehl:"
#: data/gpodder.glade.h:10
msgid "Current speed:"
msgstr "Derzeitige Geschwindigkeit:"
#: data/gpodder.glade.h:7
msgid "Cover"
msgstr "Bild"
#: data/gpodder.glade.h:11
#: data/gpodder.glade.h:8
msgid "Delete selected item"
msgstr "Ausgewähltes Element löschen"
#: data/gpodder.glade.h:12
msgid "Description of the episode currently selected in gPodder"
msgstr "Beschreibung der Episode, die momentan ausgewählt ist"
#: data/gpodder.glade.h:13
#: data/gpodder.glade.h:9
msgid "Description:"
msgstr "Beschreibung:"
#: data/gpodder.glade.h:14
#: data/gpodder.glade.h:10
msgid "Desktop:"
msgstr "Desktop:"
#: data/gpodder.glade.h:15
#: data/gpodder.glade.h:11
msgid "Download Pod_cast"
msgstr "Pod_cast herunterladen"
#: data/gpodder.glade.h:16
#: data/gpodder.glade.h:12
msgid "Download Status"
msgstr "Download-Status"
#: data/gpodder.glade.h:17
#: data/gpodder.glade.h:13
msgid "Download to:"
msgstr "Herunterladen nach:"
#: data/gpodder.glade.h:18
#: data/gpodder.glade.h:14
msgid "Downloaded Podcasts"
msgstr "Heruntergeladene Podcasts"
#: data/gpodder.glade.h:19
msgid "Downloading from:"
msgstr "Herunterladen von:"
#: data/gpodder.glade.h:20
#: data/gpodder.glade.h:15
msgid "Downloads"
msgstr "Downloads"
#: data/gpodder.glade.h:21
#: data/gpodder.glade.h:16
msgid "E_xport list..."
msgstr "Liste e_xportieren..."
#: data/gpodder.glade.h:22
#: data/gpodder.glade.h:17
msgid "Episode Information"
msgstr "Informationen zur Episode"
#: data/gpodder.glade.h:23
msgid "Episode:"
msgstr "Episode:"
#: data/gpodder.glade.h:24
#: data/gpodder.glade.h:18
msgid "FTP Proxy:"
msgstr "FTP-Proxy:"
#: data/gpodder.glade.h:25
#: data/gpodder.glade.h:19
msgid "Feed URL:"
msgstr "Feed-Adresse:"
#: data/gpodder.glade.h:26
#: data/gpodder.glade.h:20
msgid "General"
msgstr "Allgemeines"
#: data/gpodder.glade.h:27
#: data/gpodder.glade.h:21
msgid "HTTP Proxy:"
msgstr "HTTP-Proxy:"
#: data/gpodder.glade.h:28
#: data/gpodder.glade.h:22
msgid ""
"If you have to use a HTTP or FTP proxy server,\n"
"you can use the usual format of the environment variables:\n"
"\n"
"<b>http://username:password@proxy_host:proxy_port/</b>"
msgstr ""
"Wenn Sie einen HTTP oder FTP Proxy Server nutzen,\n"
"benutzen Sie bitte das übliche Format der Umgebungsvariablen:\n"
"\n"
"<b>http://benutzer:passwort@proxy_host:proxy_port/</b>"
#: data/gpodder.glade.h:32
#: data/gpodder.glade.h:26
msgid "No cover available."
msgstr "Kein Cover verfügbar."
#: data/gpodder.glade.h:27
msgid "Play selected item"
msgstr "Ausgewähltes Element abspielen"
#: data/gpodder.glade.h:33
#: data/gpodder.glade.h:28
msgid "Player application:"
msgstr "Abspielprogramm:"
#: data/gpodder.glade.h:34
msgid "Progress:"
msgstr "Fortschritt:"
#: data/gpodder.glade.h:35
#: data/gpodder.glade.h:29
msgid "Proxy"
msgstr "Proxy"
#: data/gpodder.glade.h:36
#: data/gpodder.glade.h:30
msgid "Save downloads in:"
msgstr "Downloads speichern in:"
#: data/gpodder.glade.h:37
#: data/gpodder.glade.h:31
msgid "Show \"gPodder downloads\" link"
msgstr "\"gPodder-Downloads\"-Verknüpfung anzeigen"
msgstr "\"gPodder Downloads\"-Verknüpfung anzeigen"
#: data/gpodder.glade.h:38
#: data/gpodder.glade.h:32
msgid "Title:"
msgstr "Titel:"
#: data/gpodder.glade.h:39
#: data/gpodder.glade.h:33
msgid "_About gPodder..."
msgstr "Üb_er gPodder..."
#: data/gpodder.glade.h:40
#: data/gpodder.glade.h:34
msgid "_Add channel..."
msgstr "Ch_annel hinzufügen..."
msgstr "Ch_annel abbonieren..."
#: data/gpodder.glade.h:41
#: data/gpodder.glade.h:35
msgid "_Channels"
msgstr "_Channels"
#: data/gpodder.glade.h:42
#: data/gpodder.glade.h:36
msgid "_Check for Updates"
msgstr "Na_ch Aktualisierungen suchen"
#: data/gpodder.glade.h:43
#: data/gpodder.glade.h:37
msgid "_Close"
msgstr "S_chließen"
#: data/gpodder.glade.h:44
#: data/gpodder.glade.h:38
msgid "_Edit channel..."
msgstr "_Editiere Channel..."
#: data/gpodder.glade.h:45
#: data/gpodder.glade.h:39
msgid "_Help"
msgstr "_Hilfe"
#: data/gpodder.glade.h:46
#: data/gpodder.glade.h:40
msgid "_Podcasts"
msgstr "_Podcasts"
#: data/gpodder.glade.h:47
#: data/gpodder.glade.h:41
msgid "_Preferences..."
msgstr "Ein_s_tellungen..."
#: data/gpodder.glade.h:48
#: data/gpodder.glade.h:42
msgid "_Remove channel"
msgstr "Entfe_rne Channel"
#: data/gpodder.glade.h:49
#: data/gpodder.glade.h:43
msgid "gPodder - your podcast catcher."
msgstr "gPodder - dein podcast catcher."
#: data/gpodder.glade.h:50
#: data/gpodder.glade.h:44
msgid "gPodder Channel Editor"
msgstr "gPodder Channel-Editor"
#: data/gpodder.glade.h:51
msgid "gPodder Download Status"
msgstr "gPodder Downloadstatus"
#: data/gpodder.glade.h:52
#: data/gpodder.glade.h:45
msgid "gPodder properties"
msgstr "gPodder Einstellungen"
#: data/gpodder.glade.h:53
msgid "labelSpeed"
msgstr ""
#: data/gpodder.glade.h:54
msgid "~/.config/gpodder/downloads/"
msgstr ""
#: bin/gpodder:39
#, fuzzy
msgid "print extra information"
msgstr "Informationen zur Episode"
msgid "Be more verbose"
msgstr "Detailliertere Ausgabe"
#: bin/gpodder:43
msgid "run local version for debugging"
msgstr "lokale Version zu Debugging-Zwecken starten"
msgid "Run local version in current directory"
msgstr "Lokale Version im Arbeitsverzeichnis starten"
#: bin/gpodder:47
msgid "list all channel subscriptions"
msgstr "Alle Abonnements anzeigen"
msgid "List all channel subscriptions"
msgstr "Alle Channel-Abonnements anzeigen"
#: bin/gpodder:51
msgid "update channels and download new podcasts"
msgstr "Channels aktualisieren und neue Podcasts herunterladen"
msgid "Update channel list, download new podcasts"
msgstr "Channel-Liste aktualisieren und neue Podcasts herunterladen"
#: bin/gpodder:55
#, fuzzy
msgid "update channels"
msgstr "channel aktualisieren: %s"
msgid "Update channel list and exit"
msgstr "nur Channel-Liste aktualisieren"
#: bin/gpodder:58
msgid "add FEEDURL to channel subscriptions"
msgstr "füge FEEDURL zu den Channel-Abonnements hinzu"
msgid "Subscribe to channel from FEEDURL"
msgstr "Channel auf FEEDURL abonnieren"
#: bin/gpodder:61
#, fuzzy
msgid "delete channel n"
msgstr "channel entfernen: %s"
msgid "Delete channel with ID n"
msgstr "Channel mit der ID n entfernen"
#: bin/gpodder:79
msgid "ERROR: You do not seem to have a usable \"wget\" binary in your path."
msgstr "FEHLER: Sie haben anscheinend kein benutzbares \"wget\"-Programm in ihrem Pfad."
msgid "Error: cannot find wget."
msgstr "Fehler: kann wget nicht finden."
#: bin/gpodder:82
#, c-format
msgid "Found wget: %s"
msgstr "Wget gefunden: %s"
#: bin/gpodder:104
msgid "channel IDs may have changed, list before deleting again"
msgstr "IDs könnten sich verändert haben. Bitte neue Liste anzeigen lassen vor dem nächsten Delete!!"
#: bin/gpodder:102
msgid "Channel IDs may have changed, list before deleting again."
msgstr ""
"Channel IDs könnten sich verändert haben. Bitte vor dem nächsten Löschen "
"zuerst Channel-Liste anzeigen lassen."

View File

@ -18,11 +18,10 @@
KNOWN BUGS:
*) installation of locale files when doing
a "make install" not working
*) should re-think the original strings in
source files, so this is likely to change in the future
*) has had only minimal testing - there might be bugs..
-- thp <thp@perli.net>, Thu, 30 Mar 2006 23:16:20 +0200
Updated: Fri, 31 Mar 2006 18:11:41 +0200

View File

@ -15,22 +15,22 @@ show program's version number and exit
show this help message and exit
.TP
\fB\-v\fR, \fB\-\-verbose\fR
print extra information
Be more verbose
.TP
\fB\-\-debug\fR
run local version for debugging
Run local version in current directory
.TP
\fB\-l\fR, \fB\-\-list\fR
list all channel subscriptions
List all channel subscriptions
.TP
\fB\-r\fR, \fB\-\-run\fR
update channels and download new podcasts
Update channel list, download new podcasts
.TP
\fB\-u\fR, \fB\-\-update\fR
update channels
Update channel list and exit
.TP
\fB\-aFEEDURL\fR, \fB\-\-add\fR=\fIFEEDURL\fR
add FEEDURL to channel subscriptions
Subscribe to channel from FEEDURL
.TP
\fB\-dn\fR, \fB\-\-delete\fR=\fIn\fR
delete channel n
Delete channel with ID n

View File

@ -3,7 +3,7 @@
# Python module src/gpodder/gpodder.py
# Autogenerated from gpodder.glade
# Generated on Thu Mar 30 23:18:13 2006
# Generated on Fri Mar 31 18:11:13 2006
# Warning: Do not modify any context comment such as #--
# They are required to keep user's code
@ -50,19 +50,19 @@ import libgpodder
app_name = "gpodder"
app_version = "unknown" # will be set in main() call
app_authors = [
"Thomas Perl <thp@perli.net>",
"", "Contributors / patch writers:",
"Peter Hoffmann <tosh@cs.tu-berlin.de>",
"Adrien Beaucreux <informancer@web.de>",
"Alain Tauch <contrib@maisondubonheur.com>",
"", "For a complete list of contributors, see AUTHORS file"
'Thomas Perl <thp@perli.net>', '',
_('Contributors / patch writers:'),
'Peter Hoffmann <tosh@cs.tu-berlin.de>',
'Adrien Beaucreux <informancer@web.de>',
'Alain Tauch <contrib@maisondubonheur.com>', '',
_('See the AUTHORS file for all contributors')
]
app_copyright = "Copyright (c) 2005-2006 Thomas Perl"
app_website = "http://perli.net/projekte/gpodder/"
app_copyright = 'Copyright (c) 2005-2006 Thomas Perl'
app_website = 'http://perli.net/projekte/gpodder/'
glade_dir = "/usr/share/gpodder/"
icon_dir = "/usr/share/gpodder/images/gpodder.png"
locale_dir = "/usr/share/locale/"
glade_dir = '/usr/share/gpodder/'
icon_dir = '/usr/share/gpodder/images/gpodder.png'
locale_dir = '/usr/share/locale/'
class Gpodder(SimpleGladeApp):
channels = []
@ -81,6 +81,9 @@ class Gpodder(SimpleGladeApp):
# Local DB
ldb = None
# User Apps Reader
uar = None
def __init__(self, path="gpodder.glade",
root="gPodder",
domain=app_name, **kwargs):
@ -143,12 +146,7 @@ class Gpodder(SimpleGladeApp):
self.download_status_manager = downloadStatusManager()
self.treeDownloads.set_model( self.download_status_manager.getModel())
# xml test
#reader = rssReader()
#reader.parseXML( "http://www.perli.net", "test.xml")
#self.channels.append( reader.channel)
#reader.parseXML( "http://www.lugradio.org/episodes.rss", "episodes.rss")
#self.channels.append( reader.channel)
# read and display subscribed channels
reader = gPodderChannelReader()
self.channels = reader.read( False)
self.channels_loaded = True
@ -183,7 +181,7 @@ class Gpodder(SimpleGladeApp):
try:
self.comboAvailable.set_active( 0)
except:
print _("probably no channels found")
pass
#self.updateTreeView()
def updateDownloadedComboBox( self):
@ -198,7 +196,7 @@ class Gpodder(SimpleGladeApp):
except:
self.active_downloaded_channels = 0
if libgpodder.isDebugging():
print _("no downloaded podcasts found..")
print _('No downloaded podcasts found.')
# end of self.updateDownloadedComboBox()
def updateTreeView( self):
@ -209,9 +207,8 @@ class Gpodder(SimpleGladeApp):
if self.items_model != None:
self.items_model.clear()
self.showMessage( _("<b>No channels found</b>\n\nClick on <b><i>Channels</i></b> &gt; <b><i>Add channel..</i></b> to add a new channel."))
print _("probably no feeds or channels found")
def showMessage( self, message = _("some unknown function"), title = _("gPodder message")):
def showMessage( self, message, title = _('gPodder message')):
dlg = gtk.MessageDialog( self.gPodder, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK)
dlg.set_title( title)
dlg.set_markup( message)
@ -219,7 +216,7 @@ class Gpodder(SimpleGladeApp):
dlg.run()
dlg.destroy()
def showConfirmation( self, message = _("Do you really want to do this?"), title = _("gPodder confirmation")):
def showConfirmation( self, message = _('Do you really want to do this?'), title = _('gPodder confirmation')):
myresult = False
dlg = gtk.MessageDialog( self.gPodder, gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO)
dlg.set_title( title)
@ -230,8 +227,8 @@ class Gpodder(SimpleGladeApp):
dlg.destroy()
if libgpodder.isDebugging():
print _("I Asked: %s") % message
print _("User answered: %s") % str(myresult)
print "I Asked: %s" % message
print "User answered: %s" % str(myresult)
return myresult
def set_icon(self):
@ -240,7 +237,7 @@ class Gpodder(SimpleGladeApp):
def get_icon(self, entry, size=24):
#path = self.custom_handler.getIconPath(entry, size)
path = '/usr/share/gpodder/images/gpodder.png'
path = icon_dir
if path == None:
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, size, size)
pb.fill(0x00000000)
@ -268,30 +265,46 @@ class Gpodder(SimpleGladeApp):
self.updateDownloadedComboBox()
def drag_data_received(self, widget, context, x, y, sel, ttype, time):
#TODO following code is copied from on_itemAddChannel_activate refactor both to new method
result = sel.data
self.add_new_channel( result)
def refetch_channel_list( self):
channels_should_be = len( self.channels)
# fetch metadata for that channel
gPodderChannelWriter().write( self.channels)
self.channels = gPodderChannelReader().read( False)
# fetch feed for that channel
gPodderChannelWriter().write( self.channels)
self.channels = gPodderChannelReader().read( False)
# check if gPodderChannelReader has successfully added the channel
if channels_should_be > len( self.channels):
self.showMessage( _("There has been an error adding the channel.\nMaybe the URL is wrong?"))
def add_new_channel( self, result = None):
if result != None and result != "" and (result[:4] == "http" or result[:3] == "ftp"):
print _("Adding channel: %s") % result
if libgpodder.isDebugging():
print ("Will add channel :%s") % result
self.statusLabel.set_text( _("Fetching channel index..."))
channel_new = podcastChannel( result)
channel_new.shortname = "__unknown__"
self.channels.append( channel_new)
# fetch metadata for that channel
gPodderChannelWriter().write( self.channels)
self.channels = gPodderChannelReader().read( False)
# fetch feed for that channel
gPodderChannelWriter().write( self.channels)
self.channels = gPodderChannelReader().read( False)
#TODO maybe change to new channel
# download changed channels
self.refetch_channel_list()
# try to update combo box
self.updateComboBox()
self.statusLabel.set_text( "")
else:
#TODO graphical reaction
print _("unkonwn link format: %s") %result
if result != None and result != "":
self.showMessage( _("Could not add new channel.\nOnly <b>http://</b> and <b>ftp://</b> URLs supported at the moment."))
def get_current_channel_downloaded( self):
iter = self.comboDownloaded.get_active_iter()
return self.comboDownloaded.get_model().get_value( iter, 0)
#-- Gpodder custom methods }
#-- Gpodder.close_gpodder {
@ -329,7 +342,11 @@ class Gpodder(SimpleGladeApp):
def on_itemPreferences_activate(self, widget, *args):
if libgpodder.isDebugging():
print "on_itemPreferences_activate called with self.%s" % widget.get_name()
if self.uar == None:
self.uar = UserAppsReader()
self.uar.read()
prop = Gpodderproperties()
prop.set_uar( self.uar)
#-- Gpodder.on_itemPreferences_activate }
#-- Gpodder.on_itemAddChannel_activate {
@ -339,52 +356,24 @@ class Gpodder(SimpleGladeApp):
ch = Gpodderchannel()
ch.entryURL.set_text( "http://")
result = ch.requestURL()
if result != None and result != "" and (result[:4] == "http" or result[:3] == "ftp"):
if libgpodder.isDebugging():
print ("Will add channel :%s") % result
self.statusLabel.set_text( _("Fetching channel index..."))
channel_new = podcastChannel( result)
channel_new.shortname = "__unknown__"
self.channels.append( channel_new)
channels_should_be = len( self.channels)
# fetch metadata for that channel
gPodderChannelWriter().write( self.channels)
self.channels = gPodderChannelReader().read( False)
# fetch feed for that channel
gPodderChannelWriter().write( self.channels)
self.channels = gPodderChannelReader().read( False)
# check if gPodderChannelReader has successfully added the channel
if channels_should_be > len( self.channels):
self.showMessage( _("There has been an error adding the channel.\nMaybe the URL is wrong?"))
self.updateComboBox()
self.statusLabel.set_text( "")
else:
if result != None and result != "":
self.showMessage( _("Could not add new channel.\nOnly <b>http://</b> and <b>ftp://</b> URLs supported at the moment."))
self.add_new_channel( result)
#-- Gpodder.on_itemAddChannel_activate }
#-- Gpodder.on_itemEditChannel_activate {
def on_itemEditChannel_activate(self, widget, *args):
if libgpodder.isDebugging():
print "on_itemEditChannel_activate called with self.%s" % widget.get_name()
active = self.active_channel
channel = None
try:
url_old = self.channels[active].url
title_old = self.channels[active].title
desc_old = self.channels[active].description
downloaddir_old = self.channels[active].save_dir # FIXME: should be download dir, but save_dir is more descriptive for now
channel = self.channels[self.active_channel]
except:
self.showMessage( _("Cannot edit this channel.\n\nNo channel found."))
return
result = Gpodderchannel().requestURL( preset = url_old, title = title_old, description = desc_old, downloaddir = downloaddir_old)
if result != None and result != "" and (result[:4] == "http" or result[:3] == "ftp"):
result = Gpodderchannel().requestURL( channel)
if result != channel.url and result != None and result != "" and (result[:4] == "http" or result[:3] == "ftp"):
if libgpodder.isDebugging():
print "will EDIT ID " + str(active) + " FROM " + url_old + " TO " + result
print 'Changing ID %d from "%s" to "%s"' % (active, channel.url, result)
self.statusLabel.set_text( _("Fetching channel index..."))
channel_new = podcastChannel( result)
channel_new.shortname = "__unknown__"
@ -392,18 +381,10 @@ class Gpodder(SimpleGladeApp):
new_channels.append( channel_new)
new_channels.extend( self.channels[active+1:])
self.channels = new_channels
# TODO: REFACTOR THE NEXT TWO CODEBLOCKS INTO
# A SINGLE FUNCTION (SAME BLOCKS ARE USED IN "ADD FEED")
# fetch metadata for that channel
gPodderChannelWriter().write( self.channels)
self.channels = gPodderChannelReader().read( False)
# fetch feed for that channel
gPodderChannelWriter().write( self.channels)
self.channels = gPodderChannelReader().read( False)
# fetch new channels
self.refetch_channel_list()
self.updateComboBox()
self.statusLabel.set_text( "")
# end if result != None etc etc
@ -431,9 +412,9 @@ class Gpodder(SimpleGladeApp):
if libgpodder.isDebugging():
print "on_itemExportChannels_activate called with self.%s" % widget.get_name()
if len( self.channels) == 0:
self.showMessage( _("Your channel list is empty. Nothing to export.\n\nGo add some fancy channels! :)"))
self.showMessage( _("Your channel list is empty. Nothing to export."))
return
dlg = gtk.FileChooserDialog( title=_("Export to OPML..."), parent = None, action = gtk.FILE_CHOOSER_ACTION_SAVE)
dlg = gtk.FileChooserDialog( title=_("Export to OPML"), parent = None, action = gtk.FILE_CHOOSER_ACTION_SAVE)
dlg.add_button( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
dlg.add_button( gtk.STOCK_SAVE, gtk.RESPONSE_OK)
response = dlg.run()
@ -442,7 +423,7 @@ class Gpodder(SimpleGladeApp):
if foutname[-5:] != ".opml" and foutname[-4:] != ".xml":
foutname = foutname + ".opml"
if libgpodder.isDebugging():
print _("=> WILL WRITE OPML TO: ") + foutname
print 'Exporting channels list to: %s' % foutname
w = opmlWriter( foutname)
for ch in self.channels:
w.addChannel( ch)
@ -501,7 +482,7 @@ class Gpodder(SimpleGladeApp):
selection_iter = selection_tuple[1]
url = self.items_model.get_value( selection_iter, 0)
except:
self.showMessage( _("You have not selected an episode to download.\n\nPlease select one, and I'll download it for you."))
self.showMessage( _("You have not selected an episode to download."))
return
self.active_item = self.channels[self.active_channel].getActiveByUrl( url)
@ -510,13 +491,13 @@ class Gpodder(SimpleGladeApp):
current_podcast = current_channel.items[self.active_item]
filename = current_channel.getPodcastFilename( current_podcast.url)
if widget.get_name() == "treeAvailable":
Gpodderepisode().set_episode( current_podcast)
Gpodderepisode().set_episode( current_podcast)
return
if os.path.exists( filename) == False and self.download_status_manager.is_download_in_progress( current_podcast.url) == False:
downloadThread( current_podcast.url, filename, None, self.download_status_manager, current_podcast.title, current_channel, current_podcast, self.ldb).download()
else:
self.showMessage( _("<big><b>Already downloaded</b></big>\n\nYou have already downloaded this episode.\nOr you are currently downloading it."))
self.showMessage( _("You have already downloaded this episode\nor you are currently downloading it."))
#-- Gpodder.on_treeAvailable_row_activated }
#-- Gpodder.on_btnDownload_clicked {
@ -538,7 +519,7 @@ class Gpodder(SimpleGladeApp):
if self.showConfirmation( _("Do you really want to cancel this download?\n\n%s") % title):
self.download_status_manager.cancel_by_url( url)
else:
self.showMessage( _("No episode selected - nothing cancelled."))
self.showMessage( _("No episode selected."))
#-- Gpodder.on_treeDownloads_row_activated }
#-- Gpodder.on_btnCancelDownloadStatus_clicked {
@ -554,11 +535,8 @@ class Gpodder(SimpleGladeApp):
print "on_comboDownloaded_changed called with self.%s" % widget.get_name()
self.active_downloaded_channels = self.comboDownloaded.get_active()
try:
selection_iter = self.comboDownloaded.get_active_iter()
selected_value = self.comboDownloaded.get_model().get_value( selection_iter, 0)
if libgpodder.isDebugging():
print "comboDownloaded_changed with: " + selected_value
new_model = self.ldb.getDownloadedEpisodesModelByFilename( selected_value)
filename = self.get_current_channel_downloaded()
new_model = self.ldb.getDownloadedEpisodesModelByFilename( filename)
self.treeDownloaded.set_model( new_model)
except:
# silently ignore the fact that we do not have any downloads
@ -569,18 +547,16 @@ class Gpodder(SimpleGladeApp):
def on_treeDownloaded_row_activated(self, widget, *args):
if libgpodder.isDebugging():
print "on_treeDownloaded_row_activated called with self.%s" % widget.get_name()
# TODO: refactor with above "on_comboDownloaded_changed" into one method (next three lines)
try:
selection_iter = self.comboDownloaded.get_active_iter()
channel_filename = self.comboDownloaded.get_model().get_value( selection_iter, 0)
channel_filename = self.get_current_channel_downloaded()
selection_tuple = self.treeDownloaded.get_selection().get_selected()
selection_iter = selection_tuple[1]
url = self.treeDownloaded.get_model().get_value( selection_iter, 0)
filename_final = localDB().getLocalFilenameByPodcastURL( channel_filename, url)
filename_final = self.ldb.getLocalFilenameByPodcastURL( channel_filename, url)
gPodderLib().openFilename( filename_final)
except:
self.showMessage( _("Could not open this episode.\n\nHave you even selected one?"))
self.showMessage( _("No episode selected."))
#-- Gpodder.on_treeDownloaded_row_activated }
#-- Gpodder.on_btnDownloadedExecute_clicked {
@ -595,17 +571,16 @@ class Gpodder(SimpleGladeApp):
if libgpodder.isDebugging():
print "on_btnDownloadedDelete_clicked called with self.%s" % widget.get_name()
# Note: same code as in on_treeDownloaded_row_activated()
# Note: same code as in on_treeDownloaded_row_activated() TODO: refactor!
try:
selection_iter = self.comboDownloaded.get_active_iter()
channel_filename = self.comboDownloaded.get_model().get_value( selection_iter, 0)
channel_filename = self.get_current_channel_downloaded()
selection_tuple = self.treeDownloaded.get_selection().get_selected()
selection_iter = selection_tuple[1]
url = self.treeDownloaded.get_model().get_value( selection_iter, 0)
title = self.treeDownloaded.get_model().get_value( selection_iter, 1)
filename_final = localDB().getLocalFilenameByPodcastURL( channel_filename, url)
filename_final = self.ldb.getLocalFilenameByPodcastURL( channel_filename, url)
current_channel = self.downloaded_channels[self.comboDownloaded.get_active()]
if self.showConfirmation( _("Do you really want to remove this episode?\n\n%s") % title) == False:
return
@ -617,78 +592,16 @@ class Gpodder(SimpleGladeApp):
self.updateComboBox()
self.updateDownloadedComboBox()
except:
self.showMessage( _("Could not delete selected item.\nHave you selected an episode to delete?"))
self.showMessage( _("Could not delete downloaded podcast."))
#-- Gpodder.on_btnDownloadedDelete_clicked }
class Gpodderstatus(SimpleGladeApp):
class Gpodderchannel(SimpleGladeApp):
event = None
channel = None
podcast = None
thread = None
def __init__(self, path="gpodder.glade",
root="gPodderStatus",
domain=app_name, **kwargs):
path = os.path.join(glade_dir, path)
SimpleGladeApp.__init__(self, path, root, domain, **kwargs)
#-- Gpodderstatus.new {
def new(self, download_status_manager = None):
if libgpodder.isDebugging():
print "A new %s has been created" % self.__class__.__name__
#-- Gpodderstatus.new }
#-- Gpodderstatus custom methods {
# Write your own methods here
def setup( self, channel, podcast, download_status_manager):
self.channel = channel
self.podcast = podcast
self.labelFrom.set_markup( "<b>" + self.channel.title + "</b>")
self.labelFilename.set_markup( "<b>" + self.podcast.title + "</b>")
def download( self):
self.thread.download()
while self.event.isSet() == False:
self.event.wait( 0.1)
self.labelSpeed.set_text( self.thread.speed)
self.progressBar.set_fraction( float(self.thread.percentage))
while gtk.events_pending():
gtk.main_iteration( False)
self.gPodderStatus.destroy()
def cancel( self):
self.on_btnCancel_clicked( self.btnCancel, None)
#-- Gpodderstatus custom methods }
#-- Gpodderstatus.on_gPodderStatus_destroy {
def on_gPodderStatus_destroy(self, widget, *args):
if libgpodder.isDebugging():
print "on_gPodderStatus_destroy called with self.%s" % widget.get_name()
#-- Gpodderstatus.on_gPodderStatus_destroy }
#-- Gpodderstatus.on_btnCancel_clicked {
def on_btnCancel_clicked(self, widget, *args):
if libgpodder.isDebugging():
print "on_btnCancel_clicked called with self.%s" % widget.get_name()
if self.thread != None:
self.thread.cancel()
while self.event != None and self.event.isSet() == False:
None
self.gPodderStatus.destroy()
#-- Gpodderstatus.on_btnCancel_clicked }
class Gpodderchannel(SimpleGladeApp):
def __init__(self, path="gpodder.glade",
root="gPodderChannel",
domain=app_name, **kwargs):
@ -705,15 +618,19 @@ class Gpodderchannel(SimpleGladeApp):
#-- Gpodderchannel.new }
#-- Gpodderchannel custom methods {
# Write your own methods here
def requestURL( self, preset = None, title = "(unknown)", description = "(unknown)", downloaddir = None):
if preset != None:
self.entryURL.set_text( preset)
if downloaddir != None:
self.downloadTo.set_text( downloaddir)
self.channel_title.set_markup( "<b>%s</b>" % title)
def requestURL( self, channel = None):
if channel != None:
self.entryURL.set_text( channel.url)
self.downloadTo.set_text( channel.save_dir)
self.channel_title.set_markup( "<b>%s</b>" % channel.title)
description = channel.description
if channel.image != None:
# load image in background
gPodderLib().get_image_from_url( channel.image, self.imgCover.set_from_pixbuf, self.labelCoverStatus.set_text, self.labelCoverStatus.hide, channel.cover_file)
else:
self.channel_title.set_markup( "<b>%s</b>" % _("(unknown)"))
description = _("(unknown)")
b = gtk.TextBuffer()
b.set_text( description)
self.channel_description.set_buffer( b)
@ -778,9 +695,6 @@ class Gpodderproperties(SimpleGladeApp):
self.openApp.set_text( gl.open_app)
# if the symlink exists, set the checkbox active
self.cbDesktopSymlink.set_active( gPodderLib().getDesktopSymlink())
# fill players box with values
uar = UserAppsReader()
uar.read()
# setup cell renderers
cellrenderer = gtk.CellRendererPixbuf()
self.comboPlayerApp.pack_start( cellrenderer, False)
@ -789,14 +703,16 @@ class Gpodderproperties(SimpleGladeApp):
self.comboPlayerApp.pack_start( cellrenderer, True)
self.comboPlayerApp.add_attribute( cellrenderer, 'markup', 0)
# end setup cell renderers
#-- Gpodderproperties.new }
#-- Gpodderproperties custom methods {
def set_uar( self, uar):
self.comboPlayerApp.set_model( uar.get_applications_as_model())
# try to activate an item
index = self.find_active()
self.comboPlayerApp.set_active( index)
#-- Gpodderproperties.new }
#-- Gpodderproperties custom methods {
# Write your own methods here
# end set_uar
def find_active( self):
model = self.comboPlayerApp.get_model()
iter = model.get_iter_first()
@ -821,8 +737,8 @@ class Gpodderproperties(SimpleGladeApp):
#-- Gpodderproperties.on_comboPlayerApp_changed {
def on_comboPlayerApp_changed(self, widget, *args):
if libgpodder.isDebugging():
print "on_comboPlayerApp_changed called with self.%s" % widget.get_name()
print "on_comboPlayerApp_changed called with self.%s" % widget.get_name()
# find out which one
iter = self.comboPlayerApp.get_active_iter()
model = self.comboPlayerApp.get_model()
@ -864,7 +780,6 @@ class Gpodderproperties(SimpleGladeApp):
class Gpodderepisode(SimpleGladeApp):
def __init__(self, path="gpodder.glade",
root="gPodderEpisode",
domain=app_name, **kwargs):
@ -872,7 +787,7 @@ class Gpodderepisode(SimpleGladeApp):
SimpleGladeApp.__init__(self, path, root, domain, **kwargs)
#-- Gpodderepisode.new {
def new( self):
def new(self):
if libgpodder.isDebugging():
print "A new %s has been created" % self.__class__.__name__
#-- Gpodderepisode.new }
@ -903,7 +818,6 @@ def main( __version__ = None):
bindtextdomain( app_name, locale_dir)
app_version = __version__
g_podder = Gpodder()
#g_podder_status = Gpodderstatus()
#g_podder_channel = Gpodderchannel()
#g_podder_properties = Gpodderproperties()
#g_podder_episode = Gpodderepisode()
@ -912,7 +826,7 @@ def main( __version__ = None):
g_podder.run()
if __name__ == "__main__":
print _("please run the gpodder binary, not this file")
print _("Please do not call gpodder.py directly. Instead, call the gpodder binary.")
sys.exit( -1)
#-- main }

View File

@ -3,7 +3,7 @@
# Python module src/gpodder/gpodder.py
# Autogenerated from gpodder.glade
# Generated on Thu Mar 30 23:18:13 2006
# Generated on Fri Mar 31 18:11:13 2006
# Warning: Do not modify any context comment such as #--
# They are required to keep user's code
@ -137,34 +137,6 @@ class Gpodder(SimpleGladeApp):
#-- Gpodder.on_btnDownloadedDelete_clicked }
class Gpodderstatus(SimpleGladeApp):
def __init__(self, path="gpodder.glade",
root="gPodderStatus",
domain=app_name, **kwargs):
path = os.path.join(glade_dir, path)
SimpleGladeApp.__init__(self, path, root, domain, **kwargs)
#-- Gpodderstatus.new {
def new(self):
print "A new %s has been created" % self.__class__.__name__
#-- Gpodderstatus.new }
#-- Gpodderstatus custom methods {
# Write your own methods here
#-- Gpodderstatus custom methods }
#-- Gpodderstatus.on_gPodderStatus_destroy {
def on_gPodderStatus_destroy(self, widget, *args):
print "on_gPodderStatus_destroy called with self.%s" % widget.get_name()
#-- Gpodderstatus.on_gPodderStatus_destroy }
#-- Gpodderstatus.on_btnCancel_clicked {
def on_btnCancel_clicked(self, widget, *args):
print "on_btnCancel_clicked called with self.%s" % widget.get_name()
#-- Gpodderstatus.on_btnCancel_clicked }
class Gpodderchannel(SimpleGladeApp):
def __init__(self, path="gpodder.glade",
@ -263,7 +235,6 @@ class Gpodderepisode(SimpleGladeApp):
def main():
g_podder = Gpodder()
g_podder_status = Gpodderstatus()
g_podder_channel = Gpodderchannel()
g_podder_properties = Gpodderproperties()
g_podder_episode = Gpodderepisode()

View File

@ -14,6 +14,7 @@
import gtk
import thread
import threading
import urllib
from xml.sax.saxutils import DefaultHandler
from xml.sax import make_parser
@ -35,6 +36,8 @@ from stat import ST_MODE
from librssreader import rssReader
from libpodcasts import podcastChannel
from gtk.gdk import PixbufLoader
# global debugging variable, set to False on release
# TODO: while developing a new version, set this to "True"
debugging = True
@ -58,6 +61,7 @@ class gPodderLib( object):
http_proxy = ""
ftp_proxy = ""
open_app = ""
desktop_link = _("gPodder downloads")
def __init__( self):
self.gpodderdir = expanduser( "~/.config/gpodder/")
@ -134,7 +138,7 @@ class gPodderLib( object):
system( self.open_app + " " + filename + " &")
def getDesktopSymlink( self):
symlink_path = expanduser( "~/Desktop/"+_("gPodder downloads"))
symlink_path = expanduser( "~/Desktop/%s" % self.desktop_link)
return exists( symlink_path)
def createDesktopSymlink( self):
@ -143,13 +147,53 @@ class gPodderLib( object):
if not self.getDesktopSymlink():
downloads_path = expanduser( "~/Desktop/")
self.createIfNecessary( downloads_path)
symlink( self.downloaddir, downloads_path + _("gPodder downloads"))
symlink( self.downloaddir, "%s%s" % (downloads_path, self.desktop_link))
def removeDesktopSymlink( self):
if isDebugging():
print "removeDesktopSymlink requested"
if self.getDesktopSymlink():
unlink( expanduser( "~/Desktop/"+_("gPodder downloads")))
unlink( expanduser( "~/Desktop/%s" % self.desktop_link))
def image_download_thread( self, url, callback_pixbuf = None, callback_status = None, callback_finished = None, cover_file = None):
if callback_status != None:
callback_status( _('Downloading channel cover...'))
pixbuf = PixbufLoader()
if cover_file == None:
if isDebugging():
print "directly downloading %s" % url
pixbuf.write( urllib.urlopen(url).read())
if cover_file != None and not exists( cover_file):
if isDebugging():
print "downloading cover to %s" % cover_file
cachefile = open( cover_file, "w")
cachefile.write( urllib.urlopen(url).read())
cachefile.close()
if cover_file != None:
if isDebugging():
print "reading cover from %s" % cover_file
pixbuf.write( open( cover_file, "r").read())
try:
pixbuf.close()
except:
# data error, delete temp file
self.deleteFilename( cover_file)
if callback_pixbuf != None:
callback_pixbuf( pixbuf.get_pixbuf())
if callback_status != None:
callback_status( '')
if callback_finished != None:
callback_finished()
def get_image_from_url( self, url, callback_pixbuf = None, callback_status = None, callback_finished = None, cover_file = None):
args = ( url, callback_pixbuf, callback_status, callback_finished, cover_file )
thread = threading.Thread( target = self.image_download_thread, args = args)
thread.start()
def deleteFilename( self, filename):
if isDebugging():
@ -164,12 +208,12 @@ class gPodderChannelWriter( object):
def write( self, channels):
filename = gPodderLib().getChannelsFilename()
fd = open( filename, "w")
print >> fd, '<!-- '+_('automatically generated, will be overwritten on next gpodder shutdown.')+' -->'
print >> fd, '<!-- '+_('gPodder channel list')+' -->'
print >> fd, '<channels>'
for chan in channels:
print >> fd, ' <channel name="%s">' %chan.filename
print >> fd, ' <url>%s</url>' %chan.url
print >> fd, ' <download_dir>%s</download_dir>' %chan.save_dir
print >> fd, ' <channel name="%s">' % chan.filename
print >> fd, ' <url>%s</url>' % chan.url
print >> fd, ' <download_dir>%s</download_dir>' % chan.save_dir
print >> fd, ' </channel>'
print >> fd, '</channels>'
fd.close()

View File

@ -94,7 +94,7 @@ class localDB( object):
rdb.parseXML( filename)
self.localdbs[filename] = rdb
return rdb.channel.getItemsModel()
return rdb.channel.getItemsModel( False)
def getLocalFilenameByPodcastURL( self, channel_filename, url):
if channel_filename in self.localdbs:

View File

@ -76,7 +76,8 @@ class podcastChannel(object):
locdb_reader.parseXML( localdb)
self.downloaded = locdb_reader.channel
except:
print "no local db found or local db error: creating new.."
if libgpodder.isDebugging():
print "no local db found or local db error: creating new.."
self.downloaded = podcastChannel( self.url, self.title, self.link, self.description)
self.downloaded.items.append( item)
@ -91,13 +92,13 @@ class podcastChannel(object):
def isDownloaded( self, item):
return self.podcastFilenameExists( item.url)
def getItemsModel( self):
def getItemsModel( self, want_color = True):
new_model = gtk.ListStore( gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_STRING)
for item in self.items:
# Skip items with no download url
if item.url != "":
if self.isDownloaded(item):
if self.isDownloaded(item) and want_color:
background_color = "#eeeeee"
else:
background_color = "white"
@ -173,6 +174,12 @@ class podcastChannel(object):
index_file = property(fget=get_index_file)
def get_cover_file( self):
# gets cover filename for cover download cache
return self.save_dir + "cover"
cover_file = property(fget=get_cover_file)
def getPodcastFilename( self, url):
# strip question mark (and everything behind it), fix %20 errors
filename = basename( url).replace( "%20", " ")
@ -204,7 +211,7 @@ class podcastChannel(object):
nr_items += 1
self.downloaded.items.remove(item)
except:
print _("no local db found or local db error")
print _("No LocalDB found or error in existing LocalDB.")
if libgpodder.isDebugging():
print " found", nr_items, "matching item(s)"
if nr_items > 0:
@ -239,13 +246,14 @@ class podcastItem(object):
size = int( self.length)
if size > gigabyte:
return str( size / gigabyte) + " " + _("GB")
# Might be a bit big, but who cares...
return '%d GB' % str(size / gigabyte)
if size > megabyte:
return str( size / megabyte) + " " + _("MB")
return '%d MB' % int(size / megabyte)
if size > kilobyte:
return str( size / kilobyte) + " " + _("KB")
return '%d KB' % int(size / kilobyte)
return str( size) + " "+_("Bytes")
return '%d Bytes' % size
def channelsToModel( channels):
new_model = gtk.ListStore( gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_OBJECT)

View File

@ -269,7 +269,7 @@ def downloadProcedure( url, filename, force_update):
url = url.replace( "%20", " ")
dlinfo_speed = _("initializing download...")
dlinfo_speed = '...'
dlinfo_percentage = "0"
dlinfo_result = -1
@ -297,8 +297,7 @@ def downloadProcedure( url, filename, force_update):
if dlinfo_result == 9:
showMessage( _("Download has been cancelled."))
else:
showMessage( _("wget exited with status: %s") % str( dlinfo_result))
print _("*** THERE HAS BEEN AN ERROR WHILE DOWNLOADING **")
showMessage( _("Download error. Wget exit code was: %d") % dlinfo_result)
# end if
# end if