Projects
Multimedia
gpodder3
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 11
View file
gpodder3.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Thu Jul 3 15:36:00 UTC 2014 - darin@darins.net + +- update to 3.7.0 + +------------------------------------------------------------------- Sat Mar 30 14:53:36 UTC 2013 - pascal.bleser@opensuse.org - update to 3.5.0
View file
gpodder3.spec
Changed
@@ -17,7 +17,7 @@ %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} Name: gpodder3 -Version: 3.5.0 +Version: 3.7.0 Release: 0.pm.1 Summary: Podcast Receiver Source: http://gpodder.org/src/gpodder-%{version}.tar.gz @@ -122,6 +122,7 @@ %{_datadir}/icons/*/*/apps/gpodder.* %doc %{_mandir}/man1/gpo.1%{ext_man} %doc %{_mandir}/man1/gpodder.1%{ext_man} +%doc %{_mandir}/man1/gpodder-migrate2tres.1%{ext_man} %if %suse_version >= 1020 %{python_sitelib}/gpodder-%{version}-py%{py_ver}.egg-info %endif
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/flv2mp4.py
Deleted
@@ -1,98 +0,0 @@ -# -*- coding: utf-8 -*- -# Put FLV files from YouTube into a MP4 container after download -# This requires ffmpeg to be installed. Also works as a context -# menu item for already-downloaded files. This does not convert -# the files in reality, but just swaps the container format. -# -# (c) 2011-08-05 Thomas Perl <thp.io/about> -# Released under the same license terms as gPodder itself. - -import os -import subprocess - -import gpodder - -from gpodder import util -from gpodder import youtube - -import logging -logger = logging.getLogger(__name__) - -_ = gpodder.gettext - -__title__ = _('Convert .flv files from YouTube to .mp4') -__description__ = _('Useful for playing downloaded videos on hardware players') -__authors__ = 'Thomas Perl <thp@gpodder.org>, Bernd Schlapsi <brot@gmx.info>' -__category__ = 'post-download' - -DefaultConfig = { - 'context_menu': True, # Show the conversion option in the context menu -} - - -class gPodderExtension: - MIME_TYPE = 'video/x-flv' - - def __init__(self, container): - self.container = container - self.config = self.container.config - - # Dependency checks - self.container.require_command('ffmpeg') - - def on_episode_downloaded(self, episode): - if youtube.is_video_link(episode.url): - self._convert_episode(episode) - - def on_episodes_context_menu(self, episodes): - if not self.config.context_menu: - return None - - if not all(e.was_downloaded(and_exists=True) for e in episodes): - return None - - if not any(e.mime_type == self.MIME_TYPE for e in episodes): - return None - - return [(_('Convert FLV to MP4'), self._convert_episodes)] - - - def _convert_episode(self, episode): - old_filename = episode.local_filename(create=False) - filename, ext = os.path.splitext(old_filename) - new_filename = filename + '.mp4' - - if open(old_filename, 'rb').read(3) != 'FLV': - logger.debug('Not a FLV file. Ignoring.') - return - - if ext.lower() == '.mp4': - # Move file out of place for conversion - tmp_filename = filename + '.flv' - os.rename(old_filename, tmp_filename) - old_filename = tmp_filename - - cmd = ['ffmpeg', - '-i', old_filename, - '-vcodec', 'copy', - '-acodec', 'copy', - new_filename] - - ffmpeg = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, stderr = ffmpeg.communicate() - - if ffmpeg.returncode == 0: - util.rename_episode_file(episode, new_filename) - os.remove(old_filename) - - logger.info('FLV conversion successful.') - gpodder.user_extensions.on_notification_show(_('File converted'), episode.title) - else: - logger.warn('Error converting file: %s / %s', stdout, stderr) - gpodder.user_extensions.on_notification_show(_('Conversion failed'), episode.title) - - def _convert_episodes(self, episodes): - for episode in episodes: - self._convert_episode(episode) -
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/m4a_converter.py
Deleted
@@ -1,112 +0,0 @@ -# -*- coding: utf-8 -*- -# Convertes m4a audio files to mp3 -# This requires ffmpeg to be installed. Also works as a context -# menu item for already-downloaded files. -# -# (c) 2011-11-23 Bernd Schlapsi <brot@gmx.info> -# Released under the same license terms as gPodder itself. - -import os -import subprocess - -import gpodder -from gpodder import util - -import logging -logger = logging.getLogger(__name__) - -_ = gpodder.gettext - -__title__ = _('Convert M4A audio to MP3 or OGG') -__description__ = _('Transcode .m4a files to .mp3 or .ogg using ffmpeg') -__authors__ = 'Bernd Schlapsi <brot@gmx.info>, Thomas Perl <thp@gpodder.org>' -__category__ = 'post-download' - - -DefaultConfig = { - 'use_ogg': False, # Set to True to convert to .ogg (otherwise .mp3) - 'context_menu': True, # Show the conversion option in the context menu -} - -class gPodderExtension: - MIME_TYPES = ['audio/x-m4a', 'audio/mp4', 'audio/mp4a-latm'] - EXT = '.m4a' - CMD = {'avconv': ['-i', '%(old_file)s', '-q:a', '2', '-id3v2_version', - '3', '-write_id3v1', '1', '%(new_file)s'], - 'ffmpeg': ['-i', '%(old_file)s', '-q:a', '2', '-id3v2_version', - '3', '-write_id3v1', '1', '%(new_file)s'] - } - - def __init__(self, container): - self.container = container - self.config = self.container.config - - # Dependency checks - self.command = self.container.require_any_command(['avconv', 'ffmpeg']) - - # extract command without extension (.exe on Windows) from command-string - command_without_ext = os.path.basename(os.path.splitext(self.command)[0]) - self.command_param = self.CMD[command_without_ext] - - def on_episode_downloaded(self, episode): - self._convert_episode(episode) - - def _check_mp4(self, episode): - if episode.mime_type in self.MIME_TYPES: - return True - - # Also check file extension (bug 1770) - if episode.extension() == self.EXT: - return True - - return False - - def on_episodes_context_menu(self, episodes): - if not self.config.context_menu: - return None - - if not all(e.was_downloaded(and_exists=True) for e in episodes): - return None - - if not any(self._check_mp4(episode) for episode in episodes): - return None - - target_format = ('OGG' if self.config.use_ogg else 'MP3') - menu_item = _('Convert to %(format)s') % {'format': target_format} - - return [(menu_item, self._convert_episodes)] - - def _convert_episode(self, episode): - old_filename = episode.local_filename(create=False) - - if not self._check_mp4(episode): - return - - if self.config.use_ogg: - extension = '.ogg' - else: - extension = '.mp3' - - filename, old_extension = os.path.splitext(old_filename) - new_filename = filename + extension - - cmd = [self.command] + \ - [param % {'old_file': old_filename, 'new_file': new_filename} - for param in self.command_param] - ffmpeg = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, stderr = ffmpeg.communicate() - - if ffmpeg.returncode == 0: - util.rename_episode_file(episode, new_filename) - os.remove(old_filename) - - logger.info('Converted M4A file.') - gpodder.user_extensions.on_notification_show(_('File converted'), episode.title) - else: - logger.warn('Error converting file: %s / %s', stdout, stderr) - gpodder.user_extensions.on_notification_show(_('Conversion failed'), episode.title) - - def _convert_episodes(self, episodes): - for episode in episodes: - self._convert_episode(episode)
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/ogg2mp3_converter.py
Deleted
@@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -# Convertes ogg audio files to mp3 -# This requires ffmpeg to be installed. Also works as a context -# menu item for already-downloaded files. -# -# (c) 2012-12-28 Bernd Schlapsi <brot@gmx.info> -# Released under the same license terms as gPodder itself. - -import os -import subprocess - -import gpodder -from gpodder import util - -import logging -logger = logging.getLogger(__name__) - -_ = gpodder.gettext - -__title__ = _('Convert OGG audio to MP3') -__description__ = _('Transcode .ogg files to .mp3 using ffmpeg') -__authors__ = 'Bernd Schlapsi <brot@gmx.info>' -__category__ = 'post-download' - - -DefaultConfig = { - 'context_menu': True, # Show the conversion option in the context menu -} - -class gPodderExtension: - MIME_TYPES = ('audio/ogg',) - TARGET_EXT = '.mp3' - CMD = {'avconv': ['-i', '%(old_file)s', '-q:a', '2', '-id3v2_version', - '3', '-write_id3v1', '1', '%(new_file)s'], - 'ffmpeg': ['-i', '%(old_file)s', '-q:a', '2', '-id3v2_version', - '3', '-write_id3v1', '1', '%(new_file)s'] - } - - def __init__(self, container): - self.container = container - self.config = self.container.config - - # Dependency checks - self.command = self.container.require_any_command(['avconv', 'ffmpeg']) - - # extract command without extension (.exe on Windows) from command-string - command_without_ext = os.path.basename(os.path.splitext(self.command)[0]) - self.command_param = self.CMD[command_without_ext] - - def on_episode_downloaded(self, episode): - self.convert_episode(episode) - - def on_episodes_context_menu(self, episodes): - if not self.config.context_menu: - return None - - if not all(e.was_downloaded(and_exists=True) for e in episodes): - return None - - if not any(e.mime_type in self.MIME_TYPES for e in episodes): - return None - - return [('Convert to MP3', self.convert_episodes)] - - def convert_episode(self, episode): - if episode.mime_type not in self.MIME_TYPES: - return - - old_filename = episode.local_filename(create=False) - filename, old_extension = os.path.splitext(old_filename) - new_filename = filename + self.TARGET_EXT - - cmd = [self.command] + \ - [param % {'old_file': old_filename, 'new_file': new_filename} - for param in self.command_param] - ffmpeg = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, stderr = ffmpeg.communicate() - - if ffmpeg.returncode == 0: - util.rename_episode_file(episode, new_filename) - os.remove(old_filename) - - logger.info('Converted OGG file to MP3.') - gpodder.user_extensions.on_notification_show(_('File converted from ogg to mp3'), episode.title) - else: - logger.warn('Error converting file from ogg to mp3: %s / %s', stdout, stderr) - gpodder.user_extensions.on_notification_show(_('Conversion failed from ogg to mp3'), episode.title) - - def convert_episodes(self, episodes): - for episode in episodes: - self.convert_episode(episode) -
View file
gpodder-3.5.0.tar.gz/src/gpodder/plugins/xspf.py
Deleted
@@ -1,167 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team -# -# gPodder is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# gPodder is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# - -# XSPF playlist parser module for gPodder -# Thomas Perl <thp@gpodder.org>; 2010-08-07 - - -# Currently, this is restricted to FM4 On Demand content, as the XSPF parser -# here isn't generic enough to parse all other feeds reliably. Please get in -# touch if you want support for other feeds - you can use the existing parser -# as a template for your own! :) -# -# See http://fm4.orf.at/radio/stories/audio for available feeds - - -import gpodder - -_ = gpodder.gettext - -from gpodder import model -from gpodder import util - -import os -import time - -import re -import feedparser - -from xml.dom import minidom - - -def get_metadata(url): - """Get file download metadata - - Returns a (size, type, name) from the given download - URL. Will use the network connection to determine the - metadata via the HTTP header fields. - """ - track_fp = util.urlopen(url) - headers = track_fp.info() - filesize = headers['content-length'] or '0' - filetype = headers['content-type'] or 'application/octet-stream' - - if 'last-modified' in headers: - parsed_date = feedparser._parse_date(headers['last-modified']) - filedate = time.mktime(parsed_date) - else: - filedate = None - - filename = os.path.basename(os.path.dirname(url)) - track_fp.close() - return filesize, filetype, filedate, filename - - -class FM4OnDemandPlaylist(object): - URL_REGEX = re.compile('http://onapp1\.orf\.at/webcam/fm4/fod/([^/]+)\.xspf$') - CONTENT = { - 'spezialmusik': ( - 'FM4 Sendungen', - 'http://onapp1.orf.at/webcam/fm4/fod/SOD_Bild_Spezialmusik.jpg', - 'http://fm4.orf.at/', - 'Sendungen jeweils sieben Tage zum Nachhören.', - ), - 'unlimited': ( - 'FM4 Unlimited', - 'http://onapp1.orf.at/webcam/fm4/fod/SOD_Bild_Unlimited.jpg', - 'http://fm4.orf.at/unlimited', - 'Montag bis Freitag (14-15 Uhr)', - ), - 'soundpark': ( - 'FM4 Soundpark', - 'http://onapp1.orf.at/webcam/fm4/fod/SOD_Bild_Soundpark.jpg', - 'http://fm4.orf.at/soundpark', - 'Nacht von Sonntag auf Montag (1-6 Uhr)', - ), - } - - @classmethod - def handle_url(cls, url): - m = cls.URL_REGEX.match(url) - if m is not None: - category = m.group(1) - return cls(url, category) - - @classmethod - def get_text_contents(cls, node): - if hasattr(node, '__iter__'): - return u''.join(cls.get_text_contents(x) for x in node) - elif node.nodeType == node.TEXT_NODE: - return node.data - else: - return u''.join(cls.get_text_contents(c) for c in node.childNodes) - - def __init__(self, url, category): - self.url = url - self.category = category - # TODO: Use proper caching of contents with support for - # conditional GETs (If-Modified-Since, ETag, ...) - self.data = minidom.parse(util.urlopen(url)) - self.playlist = self.data.getElementsByTagName('playlist')[0] - - def get_title(self): - title = self.playlist.getElementsByTagName('title')[0] - default = self.get_text_contents(title) - return self.CONTENT.get(self.category, \ - (default, None, None, None))[0] - - def get_image(self): - return self.CONTENT.get(self.category, \ - (None, None, None, None))[1] - - def get_link(self): - return self.CONTENT.get(self.category, \ - (None, None, 'http://fm4.orf.at/', None))[2] - - def get_description(self): - return self.CONTENT.get(self.category, \ - (None, None, None, 'XSPF playlist'))[3] - - def get_new_episodes(self, channel, existing_guids): - tracks = [] - seen_guids = [] - - for track in self.playlist.getElementsByTagName('track'): - title = self.get_text_contents(track.getElementsByTagName('title')) - url = self.get_text_contents(track.getElementsByTagName('location')) - seen_guids.append(url) - if url in existing_guids: - continue - - filesize, filetype, filedate, filename = get_metadata(url) - episode = channel.episode_factory({ - 'title': title, - 'link': '', - 'description': '', - 'url': url, - 'file_size': int(filesize), - 'mime_type': filetype, - 'guid': url, - 'published': filedate, - }) - episode.save() - tracks.append(episode) - - return tracks, seen_guids - - -# Register our URL handlers -model.register_custom_handler(FM4OnDemandPlaylist) -
View file
gpodder-3.5.0.tar.gz/ChangeLog -> gpodder-3.7.0.tar.gz/ChangeLog
Changed
@@ -1,945 +1,268 @@ -commit ef2d1746bcac5b274ad2e65adb9b9c7ffc7ac68c +commit b0d83b90bfb09083c4c7f2b03fb22c18705b74f9 Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 16:57:26 2013 +0100 +Date: Sat May 17 12:01:34 2014 +0200 - gPodder 3.5.0 "The After Hours" released + gPodder 3.7.0 "Off-Screen Bionic Chiseling" released -commit bda982be028b45b47ea2899f7f8962572da1e9c2 +commit 14fad9d3ec5bbe225b659bf7f0db930a7ec56d87 Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 16:38:48 2013 +0100 +Date: Sat May 17 11:46:09 2014 +0200 - Update copyright years for 2013 + Downloads: Chronological order config option (+add to CLI) -commit 4720daa4c87da554acf5ac26dc9f0cef3c14cb1d +commit f83e64e1698318e77fcb2072f099d86773ead852 Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 16:37:26 2013 +0100 +Date: Sat May 17 11:42:05 2014 +0200 - README: Add dependency information for Sailfish Silica + gpodder.util: Fix a bug in the delete_empty_folders code -commit 98a25e2096a493effba3ab5702ed0b7a0eb30da3 +commit 1860ba382484d5d90456e1ba5c30bf931bc902be Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 16:34:43 2013 +0100 +Date: Sat May 17 11:24:55 2014 +0200 - Util: Fix unit test (use real unknown extension) + Update German translation -commit 8eb7f7c7d412d1bb5a81e681c231158bfaf5be4b -Author: Rafael Ferreira <rafael.f.f1@gmail.com> -Date: Tue Mar 5 16:22:56 2013 +0100 - - Updated Portuguese (Brazil) translation - -commit 0a5ff92d20e23a0ce343008555899ca6048589f6 -Author: Sérgio Marques <smarquespt@gmail.com> -Date: Tue Mar 5 16:22:33 2013 +0100 - - Updated Portuguese translation - -commit 542ec297c858b6174bd662ce67f5d883de0ac1c3 -Author: Filip Kłębczyk <fklebczyk@gmail.com> -Date: Tue Mar 5 16:22:14 2013 +0100 - - Updated Polish translation - -commit a9025c3c0efb5515f27d499183c5afc85d8e906e -Author: Adolfo Jayme Barrientos <fitoschido@gmail.com> -Date: Tue Mar 5 16:21:47 2013 +0100 - - Updated Spanish (Spain) translation - -commit 0fa044c984d18a21d837941bfffe733a2533f406 +commit f630a0c8b5948fcf3e6c827bd5d775473ea2fef6 Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 16:21:22 2013 +0100 +Date: Sat May 17 11:14:49 2014 +0200 - Updated German translation + Update translation templates from source -commit 8b70bd1c15c4dd236ee5dc65bc00db3b93a83152 -Author: David Štancl <dstancl@dstancl.cz> -Date: Tue Mar 5 16:21:09 2013 +0100 +commit 142214d9eb17508f6228a979b348c4b2c8f5a5e1 +Author: Ricardo Miranda <mail@ricardomiranda.com> +Date: Tue Nov 12 02:43:24 2013 +0000 - Updated Czech (Czech Republic) translation + CLI: Delete empty folders on download, update, pending (bug 1601) -commit 8358e76143009562ddbf6e370b68bfa8e7d79083 +commit f26aa50e60416757e7064dc30947ad89ab0bc78b Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 16:01:14 2013 +0100 +Date: Sat May 17 11:04:27 2014 +0200 - Updated translation templates from source - -commit 36312f29ca225427b896ca9f8824052269ff01c5 -Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 13:49:19 2013 +0100 - - QML UI: Fix top margin of input sheet - -commit 762974db2e7cc7768e424ccd99cd05f8d4d4ff61 -Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 13:46:33 2013 +0100 - - QML UI: Small triangle new indicator in podcast item - -commit 26d6787b0335d4d35dc1c1d836edb36d42e6ab73 -Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 13:09:30 2013 +0100 - - Gtk UI: Shownotes text view must not be editable - -commit b6706cc50948cb2b9b49b61287210dbc1d3af97b -Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 12:08:14 2013 +0100 - - Gtk UI: Searching in extensions list, keyboard interaction - - Allow search-as-you-type searching in the extensions list. - - Use separate columns in extensions list to allow interaction - with keyboard (enable/disable and show extension infos). - - Remove custom mouse button handling, which was confusing. - -commit 7de1a3e01dcf8f1194860487bc3a0d20bf66fa65 -Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 11:36:41 2013 +0100 - - Gtk UI: Resizable shownotes view in main window - -commit 1699e8cb230c9ced3c343919275d578177dfa919 -Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 11:15:41 2013 +0100 - - Gtk UI: Don't close preferences when WebKit/Gtk is missing - - When trying to login to Flattr without WebKit/Gtk installed, - the preferences dialog should stay open after the message box. - -commit 84667ae4ed9f870d87cc340e11b6b1970c6b1cff -Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 11:13:41 2013 +0100 - - Gtk UI: Show error message for unconfigured devices - -commit 5aea82928bd16fb82938251e6c3f8613d1c369aa -Author: Thomas Perl <m@thp.io> -Date: Tue Mar 5 11:10:33 2013 +0100 - - Gtk UI: Disable all widgets when device sync is off - - In the preferences dialog, disable all widgets in the - "Device sync" tab if device sync is not enabled. + rockbox_coverart: Use logger instead of print() -commit 54e7593b754268bc26be3be4c82cad64355d1992 +commit 8a73027334b45164308f5d82f034772812126501 +Merge: 2dce352 270519f Author: Thomas Perl <m@thp.io> -Date: Sun Mar 3 15:00:55 2013 +0200 +Date: Sat May 17 11:03:08 2014 +0200 - QML UI: Fade truncated text in Sailfish UI + Merge pull request #118 from amayer5125/rockbox_coverart - Looks sexy. + Extension: Rockbox Cover Art Sync -commit 19b91af31d4a1929f7f87871f153aef9b1bf1fc8 +commit 2dce352d2fe3d26446eea2911f18ad28fbadfca5 +Merge: 46aebf3 458a049 Author: Thomas Perl <m@thp.io> -Date: Sat Mar 2 16:30:14 2013 +0200 +Date: Sat May 17 11:02:02 2014 +0200 - QML UI: Abstraction for common UI elements (Label, Button, ...) - -commit 199300bc3a776d3be7a275d234be1f897b982806 -Author: Thomas Perl <m@thp.io> -Date: Sat Mar 2 16:29:36 2013 +0200 - - QML UI: Harmattan UI customization bug fixes - -commit 9b92496f68cd93ac4a7697b925e20f0d4f31c1c4 -Author: Thomas Perl <m@thp.io> -Date: Sat Mar 2 15:42:31 2013 +0200 - - QML UI: Fix header height in Sailfish UI list views - -commit df07607f4474018fa458a2442d04909661987f03 -Author: Thomas Perl <m@thp.io> -Date: Sat Mar 2 15:35:25 2013 +0200 - - QML UI: Abstraction of ListView / pull down handle - -commit 7695b64fef108999d592505f030ba57576d7d63a -Author: Thomas Perl <m@thp.io> -Date: Sat Mar 2 15:24:07 2013 +0200 - - QML UI: Symbolic colors, Sailfish-related color/opacity changes - -commit 8ad155c0b3b00e3e8dd7d8ba8fe20ed3d7595531 -Author: Thomas Perl <m@thp.io> -Date: Sat Mar 2 15:21:21 2013 +0200 -
View file
gpodder-3.5.0.tar.gz/PKG-INFO -> gpodder-3.7.0.tar.gz/PKG-INFO
Changed
@@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: gpodder -Version: 3.5.0 +Version: 3.7.0 Summary: Media aggregator and podcast client Home-page: http://gpodder.org/ Author: Thomas Perl
View file
gpodder-3.5.0.tar.gz/README -> gpodder-3.7.0.tar.gz/README
Changed
@@ -8,7 +8,7 @@ ............................................................................ - Copyright 2005-2013 Thomas Perl and the gPodder Team + Copyright 2005-2014 Thomas Perl and the gPodder Team [ LICENSE ] @@ -50,7 +50,7 @@ [ GTK UI - ADDITIONAL DEPENDENCIES ] - - PyGTK 2.12 or newer http://pygtk.org/ + - PyGTK 2.16 or newer http://pygtk.org/ [ QML UI - ADDITIONAL DEPENDENCIES ] @@ -88,7 +88,8 @@ - Flattr integration: python-webkit - Size detection on Windows: PyWin32 - Native OS X support: ige-mac-integration - - MP3 Player Sync Support: python-eyed3 (< 0.7) + - MP3 Player Sync Support: python-eyed3 (0.7 or newer) + - iPod Sync Support: python-gpod [ BUILD DEPENDENCIES ]
View file
gpodder-3.5.0.tar.gz/bin/gpo -> gpodder-3.7.0.tar.gz/bin/gpo
Changed
@@ -3,7 +3,7 @@ # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -102,6 +102,8 @@ if os.path.islink(gpodder_script): gpodder_script = os.readlink(gpodder_script) gpodder_dir = os.path.join(os.path.dirname(gpodder_script), '..') +# TODO: Read parent directory links as well (/bin -> /usr/bin, like on Fedora, see Bug #1618) +# This would allow /usr/share/gpodder/ (not /share/gpodder/) to be found from /bin/gpodder prefix = os.path.abspath(os.path.normpath(gpodder_dir)) src_dir = os.path.join(prefix, 'src') @@ -136,6 +138,7 @@ from gpodder import opml from gpodder import util from gpodder import youtube +from gpodder import model from gpodder.config import config_value_to_string def incolor(color_id, s): @@ -294,7 +297,7 @@ podcasts = self._model.get_podcasts() opml.Exporter(filename).write(podcasts) - def get_podcast(self, url, create=False): + def get_podcast(self, url, create=False, check_only=False): """Get a specific podcast by URL Returns a podcast object for the URL or None if @@ -304,16 +307,27 @@ if url is None: self._error(_('Invalid url: %s') % url) return None - - podcast = self._model.load_podcast(url, create=create, \ + + # Subscribe to new podcast + if create: + return self._model.load_podcast(url, create=True, max_episodes=self._config.max_episodes_per_feed) - if podcast is None: + + # Load existing podcast + for podcast in self._model.get_podcasts(): + if podcast.url == url: + return podcast + + if not check_only: self._error(_('You are not subscribed to %s.') % url) - return None - - return podcast + return None def subscribe(self, url, title=None): + existing = self.get_podcast(url, check_only=True) + if existing is not None: + self._error(_('Already subscribed to %s.') % existing.url) + return True + try: podcast = self.get_podcast(url, create=True) if podcast is None: @@ -324,6 +338,7 @@ podcast.rename(title) podcast.save() except Exception, e: + logger.warn('Cannot subscribe: %s', e, exc_info=True) if hasattr(e, 'strerror'): self._error(e.strerror) else: @@ -492,6 +507,7 @@ 'podcast': podcast.title}) self._finish_action(skip=True) + util.delete_empty_folders(gpodder.downloads) safe_print(inblue(self._pending_message(count))) return True @@ -509,6 +525,7 @@ safe_print(' ', episode.title) count += 1 + util.delete_empty_folders(gpodder.downloads) safe_print(inblue(self._pending_message(count))) return True @@ -524,19 +541,26 @@ @FirstArgumentIsPodcastURL def download(self, url=None): - count = 0 + episodes = [] for podcast in self._model.get_podcasts(): - podcast_printed = False if url is None or podcast.url == url: for episode in podcast.get_all_episodes(): if self.is_episode_new(episode): - if not podcast_printed: - safe_print(inblue(podcast.title)) - podcast_printed = True - self._download_episode(episode) - count += 1 + episodes.append(episode) + + if self._config.downloads.chronological_order: + # download older episodes first + episodes = list(model.Model.sort_episodes_by_pubdate(episodes)) + + last_podcast = None + for episode in episodes: + if episode.channel != last_podcast: + safe_print(inblue(episode.channel.title)) + last_podcast = episode.channel + self._download_episode(episode) - safe_print(count, 'episodes downloaded.') + util.delete_empty_folders(gpodder.downloads) + safe_print(len(episodes), 'episodes downloaded.') return True @FirstArgumentIsPodcastURL @@ -824,6 +848,7 @@ return s if __name__ == '__main__': + logger = logging.getLogger(__name__) cli = gPodderCli() args = sys.argv[1:] if args:
View file
gpodder-3.5.0.tar.gz/bin/gpodder -> gpodder-3.7.0.tar.gz/bin/gpodder
Changed
@@ -3,7 +3,7 @@ # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/bin/gpodder-migrate2tres -> gpodder-3.7.0.tar.gz/bin/gpodder-migrate2tres
Changed
@@ -3,7 +3,7 @@ # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/makefile -> gpodder-3.7.0.tar.gz/makefile
Changed
@@ -1,6 +1,6 @@ # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,6 +26,7 @@ GPODDER_SERVICE_FILE_IN=$(addsuffix .in,$(GPODDER_SERVICE_FILE)) GPODDER_DESKTOP_FILE=share/applications/gpodder.desktop +GPODDER_DESKTOP_FILE_TMP=$(addsuffix .tmp,$(GPODDER_DESKTOP_FILE)) GPODDER_DESKTOP_FILE_IN=$(addsuffix .in,$(GPODDER_DESKTOP_FILE)) GPODDER_DESKTOP_FILE_H=$(addsuffix .h,$(GPODDER_DESKTOP_FILE_IN)) @@ -36,7 +37,9 @@ UIFILES=$(wildcard share/gpodder/ui/gtk/*.ui) UIFILES_H=$(subst .ui,.ui.h,$(UIFILES)) -QMLFILES=$(wildcard share/gpodder/ui/qml/*.qml) +QMLFILES=$(wildcard share/gpodder/ui/qml/*.qml \ + share/gpodder/ui/qml/harmattan/org/gpodder/qmlui/*.qml \ + share/gpodder/ui/qml/sailfish/org/gpodder/qmlui/*.qml) GETTEXT_SOURCE=$(wildcard src/gpodder/*.py \ src/gpodder/gtkui/*.py \ src/gpodder/gtkui/interface/*.py \ @@ -78,20 +81,22 @@ sed -e 's#__PREFIX__#$(PREFIX)#' $< >$@ $(GPODDER_DESKTOP_FILE): $(GPODDER_DESKTOP_FILE_IN) $(POFILES) - intltool-merge -d -u po $< $@ + sed -e 's#__PREFIX__#$(PREFIX)#' $< >$(GPODDER_DESKTOP_FILE_TMP) + intltool-merge -d -u po $(GPODDER_DESKTOP_FILE_TMP) $@ + rm -f $(GPODDER_DESKTOP_FILE_TMP) $(GPODDER_DESKTOP_FILE_IN).h: $(GPODDER_DESKTOP_FILE_IN) intltool-extract --quiet --type=gettext/ini $< install: messages $(GPODDER_SERVICE_FILE) $(GPODDER_DESKTOP_FILE) - $(PYTHON) setup.py install --root=$(DESTDIR) --prefix=$(PREFIX) + $(PYTHON) setup.py install --root=$(DESTDIR) --prefix=$(PREFIX) --optimize=1 ########################################################################## manpage: $(MANPAGE) $(MANPAGE): src/gpodder/__init__.py $(BINFILE) - $(HELP2MAN) --name="$(shell $(PYTHON) setup.py --description)" -N $(BINFILE) >$(MANPAGE) + LC_ALL=C $(HELP2MAN) --name="$(shell $(PYTHON) setup.py --description)" -N $(BINFILE) >$(MANPAGE) ########################################################################## @@ -127,7 +132,7 @@ find src/ '(' -name '*.pyc' -o -name '*.pyo' ')' -exec rm '{}' + find src/ -type d -name '__pycache__' -exec rm -r '{}' + find share/gpodder/ui/ -name '*.ui.h' -exec rm '{}' + - rm -f MANIFEST PKG-INFO .coverage messages.mo po/*.mo + rm -f MANIFEST .coverage messages.mo po/*.mo rm -f $(GPODDER_SERVICE_FILE) rm -f $(GPODDER_DESKTOP_FILE) rm -f $(GPODDER_DESKTOP_FILE_H)
View file
gpodder-3.5.0.tar.gz/po/ca.po -> gpodder-3.7.0.tar.gz/po/ca.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Catalan (http://www.transifex.com/projects/p/gpodder/language/" @@ -23,162 +23,140 @@ msgid "gPodder on %s" msgstr "" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "" -msgstr[1] "" - -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "" - -#: src/gpodder/util.py:497 -msgid "Yesterday" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" msgstr "" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" msgstr "" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 -#, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "" -msgstr[1] "" - -#: src/gpodder/util.py:1236 -#, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "" -msgstr[1] "" - -#: src/gpodder/util.py:1239 -#, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "" -msgstr[1] "" - -#: src/gpodder/util.py:1245 -msgid "and" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" msgstr "" -#: src/gpodder/sync.py:195 -msgid "Cancelled by user" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" msgstr "" -#: src/gpodder/sync.py:198 -msgid "Writing data to disk" +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" msgstr "" -#: src/gpodder/sync.py:284 -msgid "Opening iPod database" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" msgstr "" -#: src/gpodder/sync.py:294 -msgid "iPod opened" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" msgstr "" -#: src/gpodder/sync.py:305 -msgid "Saving iPod database" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" msgstr "" -#: src/gpodder/sync.py:310 -msgid "Writing extended gtkpod database" +#: src/gpodder/download.py:853 +msgid "Missing content from server" msgstr "" -#: src/gpodder/sync.py:386 src/gpodder/sync.py:646 src/gpodder/sync.py:840 +#: src/gpodder/download.py:859 #, python-format -msgid "Removing %s" +msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/sync.py:401 src/gpodder/sync.py:514 +#: src/gpodder/download.py:866 #, python-format -msgid "Adding %s" +msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/sync.py:417 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "Error copying %(episode)s: Not enough free space on %(mountpoint)s" +msgid "Error: %s" msgstr "" -#: src/gpodder/sync.py:504 -msgid "Opening MP3 player" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" msgstr "" -#: src/gpodder/sync.py:507 -msgid "MP3 player opened" +#: src/gpodder/extensions.py:56 +msgid "Interface" msgstr "" -#: src/gpodder/sync.py:569 src/gpodder/sync.py:577 -#, python-format -msgid "Error opening %(filename)s: %(message)s" +#: src/gpodder/extensions.py:57 +msgid "Post download" msgstr "" -#: src/gpodder/sync.py:746 src/gpodder/sync.py:752 -msgid "MTP device" +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" msgstr "" -#: src/gpodder/sync.py:759 -msgid "Opening the MTP device" +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." msgstr "" -#: src/gpodder/sync.py:769 +#: src/gpodder/extensions.py:213 #, python-format -msgid "%s opened" +msgid "Command not found: %(command)s" msgstr "" -#: src/gpodder/sync.py:774 +#: src/gpodder/extensions.py:229 #, python-format -msgid "Closing %s" +msgid "Need at least one of the following commands: %(list_of_commands)s" msgstr "" -#: src/gpodder/sync.py:782 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%s closed" +msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/sync.py:787 bin/gpo:646 -#, python-format -msgid "Adding %s..." +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" msgstr "" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Added" +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" msgstr "" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Queued" +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" msgstr "" -#: src/gpodder/sync.py:889 -msgid "Synchronizing" +#: src/gpodder/flattr.py:217 +msgid "Invalid request" msgstr "" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527
View file
gpodder-3.5.0.tar.gz/po/cs.po -> gpodder-3.7.0.tar.gz/po/cs.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Czech (http://www.transifex.com/projects/p/gpodder/language/" @@ -23,184 +23,100 @@ msgid "gPodder on %s" msgstr "gPodder nalezl %s" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Dnes" - -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Včera" - -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(neznámý)" - -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 -#, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/gpodder/util.py:1236 -#, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/gpodder/util.py:1239 -#, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: src/gpodder/util.py:1245 -msgid "and" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" msgstr "" -#: src/gpodder/sync.py:195 -msgid "Cancelled by user" -msgstr "Zrušeno uživatelem" - -#: src/gpodder/sync.py:198 -msgid "Writing data to disk" -msgstr "Zápis dat na disk" - -#: src/gpodder/sync.py:284 -msgid "Opening iPod database" -msgstr "Otevírání databáze iPodu" - -#: src/gpodder/sync.py:294 -msgid "iPod opened" -msgstr "iPodu připojen" - -#: src/gpodder/sync.py:305 -msgid "Saving iPod database" -msgstr "Ukládám databázi iPodu" - -#: src/gpodder/sync.py:310 -#, fuzzy -msgid "Writing extended gtkpod database" -msgstr "Zápis dat na disk" - -#: src/gpodder/sync.py:386 src/gpodder/sync.py:646 src/gpodder/sync.py:840 -#, python-format -msgid "Removing %s" -msgstr "Odstraňuji %s" - -#: src/gpodder/sync.py:401 src/gpodder/sync.py:514 -#, python-format -msgid "Adding %s" -msgstr "Přidávání %s" - -#: src/gpodder/sync.py:417 -#, fuzzy, python-format -msgid "Error copying %(episode)s: Not enough free space on %(mountpoint)s" -msgstr "Chyba kopírování %s: Nedostatek volného místa na %s" - -#: src/gpodder/sync.py:504 -msgid "Opening MP3 player" -msgstr "Připojování MP3 přehrávače" - -#: src/gpodder/sync.py:507 -msgid "MP3 player opened" -msgstr "MP3 přehrávač připojen" - -#: src/gpodder/sync.py:569 src/gpodder/sync.py:577 -#, fuzzy, python-format -msgid "Error opening %(filename)s: %(message)s" -msgstr "Chyba otevírání %s: %s" - -#: src/gpodder/sync.py:746 src/gpodder/sync.py:752 -#, fuzzy -msgid "MTP device" -msgstr "Výběr zařízení" - -#: src/gpodder/sync.py:759 -#, fuzzy -msgid "Opening the MTP device" -msgstr "Kopírování souborů na zařízení" - -#: src/gpodder/sync.py:769 -#, fuzzy, python-format -msgid "%s opened" -msgstr "iPodu připojen" - -#: src/gpodder/sync.py:774 -#, fuzzy, python-format -msgid "Closing %s" -msgstr "Odstraňuji %s" - -#: src/gpodder/sync.py:782 -#, fuzzy, python-format -msgid "%s closed" -msgstr "%s je uzamčeno" - -#: src/gpodder/sync.py:787 bin/gpo:646 -#, fuzzy, python-format -msgid "Adding %s..." -msgstr "Přidávání %s" - -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 #, fuzzy msgid "Added" msgstr "Pokročilé" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 msgid "Queued" msgstr "Zařazeno do fronty" -#: src/gpodder/sync.py:889 +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 #, fuzzy -msgid "Synchronizing" -msgstr "<b>Synchronizace</b>" +msgid "Downloading" +msgstr "stahování" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 -#: src/gpodder/qmlui/__init__.py:69 +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 msgid "Finished" msgstr "" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 #, fuzzy msgid "Failed" msgstr "Filtr:" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 #, fuzzy msgid "Cancelled" msgstr "Zrušit" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 msgid "Paused" msgstr "" -#: src/gpodder/sync.py:1046 src/gpodder/download.py:870 +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "" + +#: src/gpodder/download.py:859 #, fuzzy, python-format -msgid "Error: %s" +msgid "I/O Error: %(error)s: %(filename)s" msgstr "Chyba otevírání %s: %s"
View file
gpodder-3.5.0.tar.gz/po/cs_CZ.po -> gpodder-3.7.0.tar.gz/po/cs_CZ.po
Changed
@@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-03-05 15:01+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/" @@ -28,283 +28,299 @@ msgid "gPodder on %s" msgstr "gPodder na %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Špatné jméno/heslo" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Přidáno" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Zařazeno do fronty" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Stahování" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Dokončeno" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Selhalo" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Zrušeno" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pozastaveno" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Poznámky" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "Před %(count)d dnem" -msgstr[1] "Před %(count)d dny" -msgstr[2] "Před %(count)d dny" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Chyba vstupu/výstupu: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Dnes" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Chyba HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Včera" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Chyba: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(neznámo)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "Začlenění do pracovního prostředí" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +msgid "Interface" +msgstr "Rozhraní" + +#: src/gpodder/extensions.py:57 +msgid "Post download" +msgstr "Příspěvek ke stažení" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Jiný" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Pro tento doplněk není dostupný popis." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d sekunda" -msgstr[1] "%(count)d sekundy" -msgstr[2] "%(count)d sekund" +msgid "Command not found: %(command)s" +msgstr "Příkaz %(command)s nebyl nalezen" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d hodina" -msgstr[1] "%(count)d hodiny" -msgstr[2] "%(count)d hodin" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuta" -msgstr[1] "%(count)d minuty" -msgstr[2] "%(count)d minut" +msgid "Python module not found: %(module)s" +msgstr "Python modul %(module)s nebyl nalezen" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "a" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "Nedostatek prostředků pro použití služby Flattr" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "Položka neexistuje ve službě Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "Už bylo zaplaceno prostřednictvím Flattru nebo položku vlastníte" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Neplatný požadavek" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Nebylo nalezeno internetové připojení" -#: src/gpodder/sync.py:195 +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Bez popisu" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Popis není k dispozici" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "neznámý" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "Výchozí" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "Zachovat pouze poslední" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Video" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Přidat %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Odebrat %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Zrušeno uživatelem"
View file
gpodder-3.5.0.tar.gz/po/da.po -> gpodder-3.7.0.tar.gz/po/da.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Danish (http://www.transifex.com/projects/p/gpodder/language/" @@ -26,285 +26,301 @@ msgid "gPodder on %s" msgstr "gPodder på %s" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "for %(count)d dag siden" -msgstr[1] "for %(count)d dage siden" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Forkert brugernavn/adgangskode" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "I dag" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Tilføjet" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "I går" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Sat i kø" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(ukendt)" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Downloader" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Afsluttet" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Fejlet" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Annulleret" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Sat på pause" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Manglende data fra server" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d sekund" -msgstr[1] "%(count)d sekunder" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "I/O-fejl: %(error)s: %(filename)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/download.py:866 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d time" -msgstr[1] "%(count)d timer" +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP-fejl: %(code)s: %(message)s" -#: src/gpodder/util.py:1239 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minut" -msgstr[1] "%(count)d minutter" +msgid "Error: %s" +msgstr "Fejl: %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "og" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Heltal" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Sæt download på pause" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Andet" -#: src/gpodder/sync.py:195 +#: src/gpodder/extensions.py:100 +#, fuzzy +msgid "No description for this extension." +msgstr "Ingen beskrivelse tilgængelig." + +#: src/gpodder/extensions.py:213 +#, fuzzy, python-format +msgid "Command not found: %(command)s" +msgstr "Brugerkommando ikke fundet" + +#: src/gpodder/extensions.py:229 +#, python-format +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Python-modulet \"%s\" er ikke installeret" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +#, fuzzy +msgid "Invalid request" +msgstr "Ugyldig URL" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "Ingen abonnementer" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Ingen tilgængelig beskrivelse" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "ukendt" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Video" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Lyd" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Tilføj %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Fjern %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user"
View file
gpodder-3.5.0.tar.gz/po/de.po -> gpodder-3.7.0.tar.gz/po/de.po
Changed
@@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" -"PO-Revision-Date: 2013-03-05 16:11+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" +"PO-Revision-Date: 2014-05-17 11:24+0100\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: German (http://www.transifex.com/projects/p/gpodder/language/" "de/)\n" @@ -25,281 +25,297 @@ msgid "gPodder on %s" msgstr "gPodder auf %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Falscher Benutzername/Passwort" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Hinzugefügt" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Eingereiht" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Herunterladen" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Fertig" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Fehlgeschlagen" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Abgebrochen" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pause" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Fehlender Inhalt vom Server" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "vor %(count)d Tag" -msgstr[1] "vor %(count)d Tagen" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "I/O Fehler: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Heute" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP-Fehler %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Gestern" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Fehler: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(unbekannt)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "Desktop-Integration" + +#: src/gpodder/extensions.py:56 +msgid "Interface" +msgstr "Oberfläche" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:57 +msgid "Post download" +msgstr "Nach Downloads" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Andere" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Keine Beschreibung für diese Erweiterung." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d Sekunde" -msgstr[1] "%(count)d Sekunden" +msgid "Command not found: %(command)s" +msgstr "Befehl nicht gefunden: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d Stunde" -msgstr[1] "%(count)d Stunden" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "Brauche zumindest eines der folgenden Kommandos: %(list_of_commands)s" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d Minute" -msgstr[1] "%(count)d Minuten" +msgid "Python module not found: %(module)s" +msgstr "Python-Modul nicht gefunden: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "und" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "Nicht genügend Mittel, um zu flattrn" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "Item existiert nicht auf Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "Bereits geflattred oder eigenes Item" -#: src/gpodder/sync.py:195 +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Ungültiger Request" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Keine Internet-Verbindung" + +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Keine Beschreibung" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Keine Beschreibung verfügbar" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "unbekannt" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "Standard" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "Nur Neueste behalten" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Video" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Abonniere %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Entferne %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Vom User abgebrochen" -#: src/gpodder/sync.py:198 +#: src/gpodder/sync.py:199
View file
gpodder-3.5.0.tar.gz/po/el.po -> gpodder-3.7.0.tar.gz/po/el.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Teo <anapospastos@hotmail.com>\n" "Language-Team: Greek (http://www.transifex.com/projects/p/gpodder/language/" @@ -26,283 +26,299 @@ msgid "gPodder on %s" msgstr "Το gPodder στο %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Λάθος όνομα χρήστη/κωδικός πρόσβασης" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Προστέθηκε" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Σε αναμονή" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Λήψη" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Τελείωσε" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Απέτυχε" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Ακυρώθηκε" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Παύση" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Λείπει περιεχόμενο από τον διακομιστή" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "Πριν από %(count)d ημέρα" -msgstr[1] "Πριν από %(count)d ημέρες" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Σφάλμα I/O: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Σήμερα" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Σφάλμα HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Χθες" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Σφάλμα: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(άγνωστο)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Ακέραιος αριθμός" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Παύση λήψης" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Άλλο" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Δεν υπάρχει περιγραφή για αυτή την επέκταση." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d δευτερόλεπτο" -msgstr[1] "%(count)d δευτερόλεπτα" +msgid "Command not found: %(command)s" +msgstr "Δεν βρέθηκε η εντολή: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d ώρα" -msgstr[1] "%(count)d ώρες" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Το python module \"%s\" δεν είναι εγκατεστημένο" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "Δεν υπάρχουν αρκετά μέσα για το Flattr" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "Το αντικείμενο δεν υπάρχει στο Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Μη έγκυρο αίτημα" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Δεν υπάρχει σύνδεση στο internet" + +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Δεν υπάρχει περιγραφή" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Δεν υπάρχει διαθέσιμη περιγραφή" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "άγνωστο" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Βίντεο" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Ήχος" + +#: src/gpodder/my.py:176 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d λεπτό" -msgstr[1] "%(count)d λεπτά" +msgid "Add %s" +msgstr "Προσθήκη %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "και" +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Αφαίρεση %s" -#: src/gpodder/sync.py:195 +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Ακυρώθηκε από το χρήστη" -#: src/gpodder/sync.py:198 +#: src/gpodder/sync.py:199
View file
gpodder-3.5.0.tar.gz/po/es.po -> gpodder-3.7.0.tar.gz/po/es.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Spanish (http://www.transifex.com/projects/p/gpodder/language/" @@ -25,756 +25,782 @@ msgid "gPodder on %s" msgstr "gPodder en %s" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "Hace %(count)d día" -msgstr[1] "Hace %(count)d días" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Nombre de usuario/contraseña incorrectos" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Hoy" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Agregado" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Ayer" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Puesto en cola" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(desconocido)" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Descargando" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Terminado" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Fallado" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Cancelado" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pausado" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Falta contenido en el servidor" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d segundo" -msgstr[1] "%(count)d segundos" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Error de Entrada/Salida: %(error)s: %(filename)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/download.py:866 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d hora" -msgstr[1] "%(count)d horas" +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Error HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:1239 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuto" -msgstr[1] "%(count)d minutos" +msgid "Error: %s" +msgstr "Error: %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "y" +#: src/gpodder/extensions.py:55 +#, fuzzy +msgid "Desktop Integration" +msgstr "Integración con Ubuntu Unity" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Entero" -#: src/gpodder/sync.py:195 +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Cancelar descarga" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Otro" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "No hay descripción para esta extensión." + +#: src/gpodder/extensions.py:213 +#, fuzzy, python-format +msgid "Command not found: %(command)s" +msgstr "Comando de usuario no encontrado" + +#: src/gpodder/extensions.py:229 +#, python-format +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Módulo python \"%s\" no instalado" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +#, fuzzy +msgid "Invalid request" +msgstr "URL inválida" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "No hay suscripciones" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "No hay una descripción disponible" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "desconocido" + +#: src/gpodder/model.py:746 +#, fuzzy +msgid "Default" +msgstr "Color predeterminado" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Vídeo" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Añadir %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Eliminar %s" + +#: src/gpodder/sync.py:196
View file
gpodder-3.5.0.tar.gz/po/es_ES.po -> gpodder-3.7.0.tar.gz/po/es_ES.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-03-05 15:01+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Spanish (Spain) (http://www.transifex.com/projects/p/gpodder/" @@ -26,279 +26,295 @@ msgid "gPodder on %s" msgstr "gPodder en %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Nombre de usuario/contraseña incorrecto" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Añadido" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "En cola" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Descargando" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Finalizado" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Fallido" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Cancelado" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "En pausa" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Falta el contenido del servidor" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "Hace %(count)d día" -msgstr[1] "Hace %(count)d días" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Error de E/S: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Hoy" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Error HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Ayer" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Error: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(desconocido)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "Integración con el escritorio" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +msgid "Interface" +msgstr "Interfaz" + +#: src/gpodder/extensions.py:57 +msgid "Post download" +msgstr "Después de la descarga" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Otros" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "No hay descripción para esta extensión." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d segundo" -msgstr[1] "%(count)d segundos" +msgid "Command not found: %(command)s" +msgstr "Comando no encontrado: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d hora" -msgstr[1] "%(count)d horas" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuto" -msgstr[1] "%(count)d minutos" +msgid "Python module not found: %(module)s" +msgstr "Módulo Python no encontrado: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "y" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "El elemento no existe en Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Solicitud no válida" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "No hay conexión a Internet" + +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "No hay descripción" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Sin descripción disponible" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "desconocido" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "Predeterminado" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "Solo mantener los últimos" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Vídeo" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Añadir %s" -#: src/gpodder/sync.py:195 +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Quitar %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Cancelado por el usuario" -#: src/gpodder/sync.py:198 +#: src/gpodder/sync.py:199 msgid "Writing data to disk" msgstr "Escribiendo datos al disco"
View file
gpodder-3.5.0.tar.gz/po/es_MX.po -> gpodder-3.7.0.tar.gz/po/es_MX.po
Changed
@@ -3,14 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Rigoberto Calleja <rigobertoc@alumni.cmu.edu>, 2012. +# Rigoberto Calleja <rigobertoc (at) alumni (dot) cmu (dot) edu>, 2012-2013. msgid "" msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" -"PO-Revision-Date: 2013-01-19 12:31+0000\n" -"Last-Translator: Thomas Perl <m@thp.io>\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" +"PO-Revision-Date: 2013-04-14 13:46-0600\n" +"Last-Translator: Rigoberto Calleja <rigobertoc@alumni.cmu.edu>\n" "Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/gpodder/" "language/es_MX/)\n" "Language: es_MX\n" @@ -24,204 +24,118 @@ msgid "gPodder on %s" msgstr "gPodder en %s" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "Hace %(count)d día" -msgstr[1] "Hace %(count)d días" - -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Hoy" - -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Ayer" - -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(desconocido)" - -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 -#, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d segundo" -msgstr[1] "%(count)d segundos" - -#: src/gpodder/util.py:1236 -#, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d hora" -msgstr[1] "%(count)d horas" - -#: src/gpodder/util.py:1239 -#, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuto" -msgstr[1] "%(count)d minutos" - -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "y" - -#: src/gpodder/sync.py:195 -#, fuzzy -msgid "Cancelled by user" -msgstr "Cancelado" - -#: src/gpodder/sync.py:198 -msgid "Writing data to disk" -msgstr "" - -#: src/gpodder/sync.py:284 -msgid "Opening iPod database" -msgstr "" - -#: src/gpodder/sync.py:294 -#, fuzzy -msgid "iPod opened" -msgstr "abierto" - -#: src/gpodder/sync.py:305 -msgid "Saving iPod database" -msgstr "" - -#: src/gpodder/sync.py:310 -msgid "Writing extended gtkpod database" -msgstr "" - -#: src/gpodder/sync.py:386 src/gpodder/sync.py:646 src/gpodder/sync.py:840 -#, fuzzy, python-format -msgid "Removing %s" -msgstr "Eliminar %s" - -#: src/gpodder/sync.py:401 src/gpodder/sync.py:514 -#, fuzzy, python-format -msgid "Adding %s" -msgstr "Agregando %s..." - -#: src/gpodder/sync.py:417 -#, python-format -msgid "Error copying %(episode)s: Not enough free space on %(mountpoint)s" -msgstr "" - -#: src/gpodder/sync.py:504 -#, fuzzy -msgid "Opening MP3 player" -msgstr "Error al abrir el reproductor" - -#: src/gpodder/sync.py:507 -#, fuzzy -msgid "MP3 player opened" -msgstr "nunca abierto" - -#: src/gpodder/sync.py:569 src/gpodder/sync.py:577 -#, fuzzy, python-format -msgid "Error opening %(filename)s: %(message)s" -msgstr "Error al actualizar %(url)s: %(message)s" - -#: src/gpodder/sync.py:746 src/gpodder/sync.py:752 -msgid "MTP device" -msgstr "" - -#: src/gpodder/sync.py:759 -msgid "Opening the MTP device" -msgstr "" - -#: src/gpodder/sync.py:769 -#, fuzzy, python-format -msgid "%s opened" -msgstr "abierto" - -#: src/gpodder/sync.py:774 -#, python-format -msgid "Closing %s" -msgstr "" - -#: src/gpodder/sync.py:782 -#, python-format -msgid "%s closed" -msgstr "" - -#: src/gpodder/sync.py:787 bin/gpo:646 -#, python-format -msgid "Adding %s..." -msgstr "Agregando %s..." +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Usuario y/o contraseña incorrectos" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 msgid "Added" msgstr "Agregado" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 msgid "Queued" msgstr "En espera" -#: src/gpodder/sync.py:889 -#, fuzzy -msgid "Synchronizing" -msgstr "Activar sincronización" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Descargando" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 -#: src/gpodder/qmlui/__init__.py:69 +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 msgid "Finished" -msgstr "Terminados" +msgstr "Terminado" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 msgid "Failed" msgstr "Falló" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 msgid "Cancelled" msgstr "Cancelado" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 msgid "Paused" msgstr "En pausa" -#: src/gpodder/sync.py:1046 src/gpodder/download.py:870 +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Falta el contenido del servidor" +
View file
gpodder-3.5.0.tar.gz/po/eu.po -> gpodder-3.7.0.tar.gz/po/eu.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-23 00:23+0000\n" "Last-Translator: Asier Iturralde Sarasola <asier.iturralde@gmail.com>\n" "Language-Team: Basque (http://www.transifex.com/projects/p/gpodder/language/" @@ -24,283 +24,299 @@ msgid "gPodder on %s" msgstr "gPodder %s-n" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Erabiltzaile-izen/pasahitz okerra" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Gehituta" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Ilaran" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Deskargatzen" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Amaituta" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Huts egin du" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Bertan behera utzita" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pausarazita" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Edukia ez dago zerbitzarian" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "Duela egun %(count)d" -msgstr[1] "Duela %(count)d egun" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "I/O Errorea: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Gaur" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP Errorea %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Atzo" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Errorea: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(ezezaguna)" +#: src/gpodder/extensions.py:55 +#, fuzzy +msgid "Desktop Integration" +msgstr "Ubuntu Unity Integrazioa" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +msgid "Interface" +msgstr "Interfazea" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Hautatu erreproduzitutakoak" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Bestelakoak" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Deskribapenik ez hedapen honentzat" + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "Segundu %(count)d" -msgstr[1] "%(count)d segundu" +msgid "Command not found: %(command)s" +msgstr "Ez da komandoa aurkitu: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "Ordu %(count)d" -msgstr[1] "%(count)d ordu" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "Minutu %(count)d" -msgstr[1] "%(count)d minutu" +msgid "Python module not found: %(module)s" +msgstr "Ez da Python modulua aurkitu: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "eta" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "Elementua ez da existitzen Flattr-en" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Baliogabeko eskaera" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Interneteko konexiorik ez" + +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Deskribapenik ez" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Ez dago deskribapenik eskuragarri" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "ezezaguna" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "Lehenetsia" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "Mantendu azkena soilik" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Bideoa" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audioa" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Gehitu %s" -#: src/gpodder/sync.py:195 +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Ezabatu %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Erabiltzaileak ezeztatua" -#: src/gpodder/sync.py:198 +#: src/gpodder/sync.py:199
View file
gpodder-3.5.0.tar.gz/po/fa_IR.po -> gpodder-3.7.0.tar.gz/po/fa_IR.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Mohammad Dashtizadeh <mohammad@dashtizadeh.net>\n" "Language-Team: Persian (Iran) (http://www.transifex.com/projects/p/gpodder/" @@ -25,170 +25,95 @@ msgid "gPodder on %s" msgstr "" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "" - -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "امروز" - -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "دیروز" - -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(نامعلوم)" - -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 -#, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "" - -#: src/gpodder/util.py:1236 -#, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "نام کاربری/گذر واژه اشتباه" -#: src/gpodder/util.py:1239 -#, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "اضافه شد" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "و" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "در صف قرار گرفت" -#: src/gpodder/sync.py:195 -msgid "Cancelled by user" -msgstr "" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "در حال دانلود" -#: src/gpodder/sync.py:198 -msgid "Writing data to disk" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "اتمام یافته" -#: src/gpodder/sync.py:284 -msgid "Opening iPod database" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "نا موفق" -#: src/gpodder/sync.py:294 -msgid "iPod opened" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "لغو شده" -#: src/gpodder/sync.py:305 -msgid "Saving iPod database" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "متوقف شده" -#: src/gpodder/sync.py:310 -msgid "Writing extended gtkpod database" +#: src/gpodder/download.py:853 +msgid "Missing content from server" msgstr "" -#: src/gpodder/sync.py:386 src/gpodder/sync.py:646 src/gpodder/sync.py:840 +#: src/gpodder/download.py:859 #, python-format -msgid "Removing %s" +msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/sync.py:401 src/gpodder/sync.py:514 +#: src/gpodder/download.py:866 #, python-format -msgid "Adding %s" +msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/sync.py:417 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "Error copying %(episode)s: Not enough free space on %(mountpoint)s" -msgstr "" - -#: src/gpodder/sync.py:504 -msgid "Opening MP3 player" -msgstr "" +msgid "Error: %s" +msgstr "خطا: %s" -#: src/gpodder/sync.py:507 -msgid "MP3 player opened" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" msgstr "" -#: src/gpodder/sync.py:569 src/gpodder/sync.py:577 -#, python-format -msgid "Error opening %(filename)s: %(message)s" -msgstr "" +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "عدد صحیح" -#: src/gpodder/sync.py:746 src/gpodder/sync.py:752 -msgid "MTP device" +#: src/gpodder/extensions.py:57 +msgid "Post download" msgstr "" -#: src/gpodder/sync.py:759 -msgid "Opening the MTP device" -msgstr "" +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "دیگر" -#: src/gpodder/sync.py:769 -#, python-format -msgid "%s opened" +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." msgstr "" -#: src/gpodder/sync.py:774 +#: src/gpodder/extensions.py:213 #, python-format -msgid "Closing %s" +msgid "Command not found: %(command)s" msgstr "" -#: src/gpodder/sync.py:782 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%s closed" +msgid "Need at least one of the following commands: %(list_of_commands)s" msgstr "" -#: src/gpodder/sync.py:787 bin/gpo:646 +#: src/gpodder/extensions.py:266 #, python-format -msgid "Adding %s..." -msgstr "" - -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Added" -msgstr "اضافه شد" - -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Queued" -msgstr "در صف قرار گرفت" - -#: src/gpodder/sync.py:889 -msgid "Synchronizing" +msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527
View file
gpodder-3.5.0.tar.gz/po/fi.po -> gpodder-3.7.0.tar.gz/po/fi.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -23,746 +23,772 @@ msgid "gPodder on %s" msgstr "gPodder koneella %s" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d päivä sitten" -msgstr[1] "%(count)d päivää sitten" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Virheellinen käyttäjätunnus tai salasana" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Tänään" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Lisätty" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Eilen" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Jonossa" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(tuntematon)" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Ladataan" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Valmis" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Epäonnistui" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Peruttu" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Tauolla" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Palvelimelta puuttuu sisältöä" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d sekunti" -msgstr[1] "%(count)d sekuntia" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Siirräntävirhe: %(error)s: %(filename)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/download.py:866 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d tunti" -msgstr[1] "%(count)d tuntia" +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP-virhe: %(code)s: %(message)s" -#: src/gpodder/util.py:1239 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuutti" -msgstr[1] "%(count)d minuuttia" +msgid "Error: %s" +msgstr "Virhe: %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "ja" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Kokonaisluku" -#: src/gpodder/sync.py:195 +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Pysäytä lataus" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Muu" + +#: src/gpodder/extensions.py:100 +#, fuzzy +msgid "No description for this extension." +msgstr "Kuvausta ei ole saatavilla." + +#: src/gpodder/extensions.py:213 +#, fuzzy, python-format +msgid "Command not found: %(command)s" +msgstr "Käyttäjän komentoa ei löytynyt" + +#: src/gpodder/extensions.py:229 +#, python-format +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Python-moduulia ”%s” ei ole asennettu" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +#, fuzzy +msgid "Invalid request" +msgstr "Virheellinen URL" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "Ei tilauksia" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Kuvausta ei ole saatavilla" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "tuntematon" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Lisää %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Poista %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user"
View file
gpodder-3.5.0.tar.gz/po/fr.po -> gpodder-3.7.0.tar.gz/po/fr.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: French (http://www.transifex.com/projects/p/gpodder/language/" @@ -25,289 +25,305 @@ msgid "gPodder on %s" msgstr "gPodder sur %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Mauvais nom d'utilisateur / mot de passe" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Ajouté" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Mis en file d'attente" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "En train de télécharger" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Terminé" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Echoué" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Annulé" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "En pause" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Contenu manquant sur le serveur" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "il y a %(count)d jour" -msgstr[1] "il y a %(count)d jours" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Erreur E/S : %(error)s:%(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Aujourd'hui" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Erreur HTTP %(code)s:%(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Hier" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Erreur: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(inconnu)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Entier" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "télécharger" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Autre" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Aucune description pour cette extension" + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d seconde" -msgstr[1] "%(count)d secondes" +msgid "Command not found: %(command)s" +msgstr "" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d heure" -msgstr[1] "%(count)d heures" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minute" -msgstr[1] "%(count)d minutes" +msgid "Python module not found: %(module)s" +msgstr "" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "et" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" -#: src/gpodder/sync.py:195 +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "Aucun abonnement" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Aucune description disponible" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "inconnu" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Vidéo" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Ajouter %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Supprimer %s" + +#: src/gpodder/sync.py:196 #, fuzzy msgid "Cancelled by user" msgstr "Annulé"
View file
gpodder-3.5.0.tar.gz/po/gl.po -> gpodder-3.7.0.tar.gz/po/gl.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Gonçalo Cordeiro <gzcordeiro@gmail.com>\n" "Language-Team: Galician (http://www.transifex.com/projects/p/gpodder/" @@ -25,284 +25,300 @@ msgid "gPodder on %s" msgstr "gPodder en %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Nome de persoa usuaria ou contrasinal incorrecto" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Engadido" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Na fila" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Descargando" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Finalizada" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Fallou" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Cancelado" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Detida" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Faltan contidos do servidor" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "vai %(count)d día" -msgstr[1] "vai %(count)d días" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Erro de E/S: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Hoxe" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Erro de HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Onte" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Erro: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(descoñecido)" +#: src/gpodder/extensions.py:55 +#, fuzzy +msgid "Desktop Integration" +msgstr "Integración en Ubuntu Unity" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Enteiro" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Seleccionar os descargados" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Outro" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Non hai unha descrición para esta extensión." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d segundo" -msgstr[1] "%(count)d segundos" +msgid "Command not found: %(command)s" +msgstr "Non se encontrou o comando: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d hora" -msgstr[1] "%(count)d horas" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuto" -msgstr[1] "%(count)d minutos" +msgid "Python module not found: %(module)s" +msgstr "Non se encontrou o módulo de Python: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "e" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "Non hai suficientes medios para facer flattr" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "Ese elemento no existe no Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "Xa foi «flatteado» ou ben se trata dun elemento propio" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Solicitude non válida" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Non hai conexión de Internet" + +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Sen descrición" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Sen descrición dispoñíbel" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "descoñecido" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Vídeo" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audio" -#: src/gpodder/sync.py:195 +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Engadir %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Eliminar %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Cancelado polo usuario" -#: src/gpodder/sync.py:198
View file
gpodder-3.5.0.tar.gz/po/he.po -> gpodder-3.7.0.tar.gz/po/he.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/gpodder/language/" @@ -26,282 +26,298 @@ msgid "gPodder on %s" msgstr "gPodder על %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "שם משתמש/ססמה שגויים" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "נוסף" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "ממתין" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "מוריד" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "הסתיים" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "נכשל" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "בוטל" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "הושהה" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "חסר תוכן מהשרת" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "לפני יום" -msgstr[1] "לפני %(count)d ימים" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "שגיאת I/O: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "היום" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "שגיאת HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "אתמול" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "שגיאה: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(לא ידוע)" +#: src/gpodder/extensions.py:55 +#, fuzzy +msgid "Desktop Integration" +msgstr "שילוב עם ממשק Unity של אובונטו" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Integer" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "השהה הורדה" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "אחר" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "אין תיאורים זמינים להרחבה זו." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "שנייה אחת" -msgstr[1] "%(count)d שניות" +msgid "Command not found: %(command)s" +msgstr "הפקודה לא נמצאה: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "שעה אחת" -msgstr[1] "%(count)d שעות" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "דקה אחת" -msgstr[1] "%(count)d דקות" +msgid "Python module not found: %(module)s" +msgstr "מודול פייתון לא נמצא: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "וגם" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "אין מספיק אמצעים ל־flattr" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "הפריט אינו קיים ב־Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "כבר נתרם ב־flattr או שהפריט שלך" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "בקשה שגויה" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" -#: src/gpodder/sync.py:195 +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "אין תיאור" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "אין תיאור זמין" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "לא ידוע" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "וידאו" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "שמע" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "הוסף את %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "הסר את %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "בוטל בידי משתמש" -#: src/gpodder/sync.py:198
View file
gpodder-3.5.0.tar.gz/po/id_ID.po -> gpodder-3.7.0.tar.gz/po/id_ID.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/" @@ -23,158 +23,140 @@ msgid "gPodder on %s" msgstr "" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "" - -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "" - -#: src/gpodder/util.py:497 -msgid "Yesterday" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" msgstr "" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" msgstr "" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 -#, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "" - -#: src/gpodder/util.py:1236 -#, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "" - -#: src/gpodder/util.py:1239 -#, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "" - -#: src/gpodder/util.py:1245 -msgid "and" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" msgstr "" -#: src/gpodder/sync.py:195 -msgid "Cancelled by user" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" msgstr "" -#: src/gpodder/sync.py:198 -msgid "Writing data to disk" +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" msgstr "" -#: src/gpodder/sync.py:284 -msgid "Opening iPod database" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" msgstr "" -#: src/gpodder/sync.py:294 -msgid "iPod opened" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" msgstr "" -#: src/gpodder/sync.py:305 -msgid "Saving iPod database" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" msgstr "" -#: src/gpodder/sync.py:310 -msgid "Writing extended gtkpod database" +#: src/gpodder/download.py:853 +msgid "Missing content from server" msgstr "" -#: src/gpodder/sync.py:386 src/gpodder/sync.py:646 src/gpodder/sync.py:840 +#: src/gpodder/download.py:859 #, python-format -msgid "Removing %s" +msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/sync.py:401 src/gpodder/sync.py:514 +#: src/gpodder/download.py:866 #, python-format -msgid "Adding %s" +msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/sync.py:417 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "Error copying %(episode)s: Not enough free space on %(mountpoint)s" +msgid "Error: %s" msgstr "" -#: src/gpodder/sync.py:504 -msgid "Opening MP3 player" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" msgstr "" -#: src/gpodder/sync.py:507 -msgid "MP3 player opened" +#: src/gpodder/extensions.py:56 +msgid "Interface" msgstr "" -#: src/gpodder/sync.py:569 src/gpodder/sync.py:577 -#, python-format -msgid "Error opening %(filename)s: %(message)s" +#: src/gpodder/extensions.py:57 +msgid "Post download" msgstr "" -#: src/gpodder/sync.py:746 src/gpodder/sync.py:752 -msgid "MTP device" +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" msgstr "" -#: src/gpodder/sync.py:759 -msgid "Opening the MTP device" +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." msgstr "" -#: src/gpodder/sync.py:769 +#: src/gpodder/extensions.py:213 #, python-format -msgid "%s opened" +msgid "Command not found: %(command)s" msgstr "" -#: src/gpodder/sync.py:774 +#: src/gpodder/extensions.py:229 #, python-format -msgid "Closing %s" +msgid "Need at least one of the following commands: %(list_of_commands)s" msgstr "" -#: src/gpodder/sync.py:782 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%s closed" +msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/sync.py:787 bin/gpo:646 -#, python-format -msgid "Adding %s..." +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" msgstr "" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Added" +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" msgstr "" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Queued" +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" msgstr "" -#: src/gpodder/sync.py:889 -msgid "Synchronizing" +#: src/gpodder/flattr.py:217 +msgid "Invalid request" msgstr "" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 -#: src/gpodder/qmlui/__init__.py:69 -msgid "Finished" +#: src/gpodder/flattr.py:223 +msgid "No internet connection"
View file
gpodder-3.5.0.tar.gz/po/it.po -> gpodder-3.7.0.tar.gz/po/it.po
Changed
@@ -10,9 +10,9 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" -"PO-Revision-Date: 2013-01-19 12:30+0000\n" -"Last-Translator: Thomas Perl <m@thp.io>\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" +"PO-Revision-Date: 2013-04-23 17:31+0100\n" +"Last-Translator: Maurizio Ballo <xmaurizio.13@hotmail.com>\n" "Language-Team: Italian (http://www.transifex.com/projects/p/gpodder/language/" "it/)\n" "Language: it\n" @@ -20,287 +20,304 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.5.4\n" #: src/gpodder/config.py:55 #, python-format msgid "gPodder on %s" msgstr "gPodder su %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Nome utente o password errati" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Aggiunto" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "In coda" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Download in corso" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Completato" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Fallito" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Annullato" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "In pausa" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Contenuti mancanti dal server" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d giorno fa" -msgstr[1] "%(count)d giorni fa" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Errore I/O: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Oggi" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Errore HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Ieri" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Errore: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(sconosciuto)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "Integrazione Desktop" + +#: src/gpodder/extensions.py:56 +msgid "Interface" +msgstr "Interfaccia" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:57 +msgid "Post download" +msgstr "Dopo il download" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Altro" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Nessuna descrizione per questa estensione." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d secondo" -msgstr[1] "%(count)d secondi" +msgid "Command not found: %(command)s" +msgstr "Comando non trovato: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d ora" -msgstr[1] "%(count)d ore" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "Necessita almeno uno dei seguenti commandi: %(list_of_commands)s" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuto" -msgstr[1] "%(count)d minuti" +msgid "Python module not found: %(module)s" +msgstr "Modulo Python non installato: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "e" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "Non sufficiente per Flattr" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "L'elemento non esiste su Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "Elemento giò segnalato a Flattr o personale" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Richiesta non valida" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Nessuna connessione internet" -#: src/gpodder/sync.py:195 +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Nessuna descrizione" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Nessuna descrizione disponibile" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "sconosciuto" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "Predefinito" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "Tieni solo i più recenti" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Video" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Aggiungi %s" + +#: src/gpodder/my.py:178 +#, python-format
View file
gpodder-3.5.0.tar.gz/po/kk.po -> gpodder-3.7.0.tar.gz/po/kk.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n" "Language-Team: Kazakh (http://www.transifex.com/projects/p/gpodder/language/" @@ -24,278 +24,294 @@ msgid "gPodder on %s" msgstr "gPodder, %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Қате тіркелгі/пароль" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Қосылған" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Кезекте" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Жүктелуде" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Аяқталған" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Сәтсіз аяқталды" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Бас тартылған" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Аялдатылған" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Серверден құрама жоқ" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d күн бұрын" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Е/Ш қатесі: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Бүгін" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP қатесі %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Кеше" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Қате: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(белгісіз)" +#: src/gpodder/extensions.py:55 +#, fuzzy +msgid "Desktop Integration" +msgstr "Ubuntu Unity интеграциясы" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Бүтін сан" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Жүктемені аялдату" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Басқа" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Бұл кеңейту үшін симаттамасы жоқ." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d секунд" +msgid "Command not found: %(command)s" +msgstr "Команда табылмады: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d сағат" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d минут" +msgid "Python module not found: %(module)s" +msgstr "Python модулі табылмады: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "және" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Қате сұраным" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Интернетпен байланыс жоқ" + +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Анықтамасы жоқ" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Анықтамасы жоқ" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "белгісіз" -#: src/gpodder/sync.py:195 +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Видео" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Аудио" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Қосу %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Өшіру %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Пайдаланушы болдырмаған" -#: src/gpodder/sync.py:198 +#: src/gpodder/sync.py:199 msgid "Writing data to disk" msgstr "Мәліметті дискіге жазу"
View file
gpodder-3.5.0.tar.gz/po/messages.pot -> gpodder-3.7.0.tar.gz/po/messages.pot
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+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" @@ -23,162 +23,140 @@ msgid "gPodder on %s" msgstr "" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "" -msgstr[1] "" - -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "" - -#: src/gpodder/util.py:497 -msgid "Yesterday" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" msgstr "" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" msgstr "" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 -#, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "" -msgstr[1] "" - -#: src/gpodder/util.py:1236 -#, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "" -msgstr[1] "" - -#: src/gpodder/util.py:1239 -#, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "" -msgstr[1] "" - -#: src/gpodder/util.py:1245 -msgid "and" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" msgstr "" -#: src/gpodder/sync.py:195 -msgid "Cancelled by user" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" msgstr "" -#: src/gpodder/sync.py:198 -msgid "Writing data to disk" +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" msgstr "" -#: src/gpodder/sync.py:284 -msgid "Opening iPod database" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" msgstr "" -#: src/gpodder/sync.py:294 -msgid "iPod opened" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" msgstr "" -#: src/gpodder/sync.py:305 -msgid "Saving iPod database" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" msgstr "" -#: src/gpodder/sync.py:310 -msgid "Writing extended gtkpod database" +#: src/gpodder/download.py:853 +msgid "Missing content from server" msgstr "" -#: src/gpodder/sync.py:386 src/gpodder/sync.py:646 src/gpodder/sync.py:840 +#: src/gpodder/download.py:859 #, python-format -msgid "Removing %s" +msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/sync.py:401 src/gpodder/sync.py:514 +#: src/gpodder/download.py:866 #, python-format -msgid "Adding %s" +msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/sync.py:417 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "Error copying %(episode)s: Not enough free space on %(mountpoint)s" +msgid "Error: %s" msgstr "" -#: src/gpodder/sync.py:504 -msgid "Opening MP3 player" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" msgstr "" -#: src/gpodder/sync.py:507 -msgid "MP3 player opened" +#: src/gpodder/extensions.py:56 +msgid "Interface" msgstr "" -#: src/gpodder/sync.py:569 src/gpodder/sync.py:577 -#, python-format -msgid "Error opening %(filename)s: %(message)s" +#: src/gpodder/extensions.py:57 +msgid "Post download" msgstr "" -#: src/gpodder/sync.py:746 src/gpodder/sync.py:752 -msgid "MTP device" +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" msgstr "" -#: src/gpodder/sync.py:759 -msgid "Opening the MTP device" +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." msgstr "" -#: src/gpodder/sync.py:769 +#: src/gpodder/extensions.py:213 #, python-format -msgid "%s opened" +msgid "Command not found: %(command)s" msgstr "" -#: src/gpodder/sync.py:774 +#: src/gpodder/extensions.py:229 #, python-format -msgid "Closing %s" +msgid "Need at least one of the following commands: %(list_of_commands)s" msgstr "" -#: src/gpodder/sync.py:782 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%s closed" +msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/sync.py:787 bin/gpo:646 -#, python-format -msgid "Adding %s..." +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" msgstr "" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Added" +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" msgstr "" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Queued" +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" msgstr "" -#: src/gpodder/sync.py:889 -msgid "Synchronizing" +#: src/gpodder/flattr.py:217 +msgid "Invalid request" msgstr "" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527
View file
gpodder-3.5.0.tar.gz/po/nb.po -> gpodder-3.7.0.tar.gz/po/nb.po
Changed
@@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/projects/p/gpodder/" @@ -27,742 +27,768 @@ msgid "gPodder on %s" msgstr "gPodder på %s" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d dag siden" -msgstr[1] "%(count)d dager siden" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Feil brukernavn/passord" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Idag" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Lagt til" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Igår" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "I kø" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(ukjent)" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Laster ned" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Ferdig" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Feilet" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Avbrutt" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pauset" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Manglende innhold fra tjener" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d sekund" -msgstr[1] "%(count)d sekunder" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "I/O feil: %(error)s: %(filename)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/download.py:866 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d time" -msgstr[1] "%(count)d timer" +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP feil %(code)s: %(message)s" -#: src/gpodder/util.py:1239 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minutt" -msgstr[1] "%(count)d minutter" +msgid "Error: %s" +msgstr "Feil: %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "og" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Heltall" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Pause nedlasting" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Annet" + +#: src/gpodder/extensions.py:100 +#, fuzzy +msgid "No description for this extension." +msgstr "Ingen beskrivelse tilgjengelig." + +#: src/gpodder/extensions.py:213 +#, fuzzy, python-format +msgid "Command not found: %(command)s" +msgstr "Fant ikke brukerkommando" + +#: src/gpodder/extensions.py:229 +#, python-format +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Python modul «%s» er ikke installert" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +#, fuzzy +msgid "Invalid request" +msgstr "Ugyldig URL" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "Ingen abonnement" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Ingen beskrivelse tilgjengelig" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "ukjent" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" -#: src/gpodder/sync.py:195 +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Video" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Legg til %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Fjern %s?" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user"
View file
gpodder-3.5.0.tar.gz/po/nl.po -> gpodder-3.7.0.tar.gz/po/nl.po
Changed
@@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Dutch (http://www.transifex.com/projects/p/gpodder/language/" @@ -27,174 +27,97 @@ msgid "gPodder on %s" msgstr "gPodder heeft %s gevonden" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d dag geleden" -msgstr[1] "%(count)d dagen geleden" - -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Vandaag" - -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Gisteren" - -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(onbekend)" - -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 -#, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d seconde" -msgstr[1] "%(count)d seconden" - -#: src/gpodder/util.py:1236 -#, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d uur" -msgstr[1] "%(count)d uren" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Voer uw naam en wachtwoord in." -#: src/gpodder/util.py:1239 -#, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuut" -msgstr[1] "%(count)d minuten" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Toegevoegd" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "en" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "In wachtrij" -#: src/gpodder/sync.py:195 -msgid "Cancelled by user" -msgstr "" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Downloaden" -#: src/gpodder/sync.py:198 -msgid "Writing data to disk" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Klaar" -#: src/gpodder/sync.py:284 -msgid "Opening iPod database" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Mislukt" -#: src/gpodder/sync.py:294 -msgid "iPod opened" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Geannuleerd" -#: src/gpodder/sync.py:305 -msgid "Saving iPod database" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pauze" -#: src/gpodder/sync.py:310 -msgid "Writing extended gtkpod database" -msgstr "" +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Ontbrekende componenten:" -#: src/gpodder/sync.py:386 src/gpodder/sync.py:646 src/gpodder/sync.py:840 +#: src/gpodder/download.py:859 #, python-format -msgid "Removing %s" -msgstr "" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Fout bij het openen van %(error)s: %(filename)s" -#: src/gpodder/sync.py:401 src/gpodder/sync.py:514 +#: src/gpodder/download.py:866 #, python-format -msgid "Adding %s" -msgstr "" +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Fout bij het openen van %(code)s: %(message)s" -#: src/gpodder/sync.py:417 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "Error copying %(episode)s: Not enough free space on %(mountpoint)s" -msgstr "" - -#: src/gpodder/sync.py:504 -msgid "Opening MP3 player" -msgstr "" +msgid "Error: %s" +msgstr "Fout: %s" -#: src/gpodder/sync.py:507 -msgid "MP3 player opened" -msgstr "" +#: src/gpodder/extensions.py:55 +#, fuzzy +msgid "Desktop Integration" +msgstr "Ubuntu Unity Integratie" -#: src/gpodder/sync.py:569 src/gpodder/sync.py:577 -#, python-format -msgid "Error opening %(filename)s: %(message)s" -msgstr "" +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Integer" -#: src/gpodder/sync.py:746 src/gpodder/sync.py:752 -msgid "MTP device" -msgstr "" +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Selecteer afleveringen" -#: src/gpodder/sync.py:759 -msgid "Opening the MTP device" -msgstr "" +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Anders" -#: src/gpodder/sync.py:769 -#, python-format -msgid "%s opened" -msgstr "" +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Geen omschrijving voor deze extensie" -#: src/gpodder/sync.py:774 +#: src/gpodder/extensions.py:213 #, python-format -msgid "Closing %s" +msgid "Command not found: %(command)s" msgstr "" -#: src/gpodder/sync.py:782 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%s closed" +msgid "Need at least one of the following commands: %(list_of_commands)s" msgstr "" -#: src/gpodder/sync.py:787 bin/gpo:646 +#: src/gpodder/extensions.py:266 #, python-format -msgid "Adding %s..." -msgstr "Toevoegen van %s..." - -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Added"
View file
gpodder-3.5.0.tar.gz/po/nn.po -> gpodder-3.7.0.tar.gz/po/nn.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -25,285 +25,301 @@ msgid "gPodder on %s" msgstr "gPodder på %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Feil brukarnamn/passord" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Lagt til" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "I kø" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Lastar ned" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Ferdig" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Feila" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Avbrote" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pausa" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Manglande innhald frå tenaren" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "" -msgstr[1] "" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "I/O-feil: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Idag" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP-feil %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "I går" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Feil: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(ukjend)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Heiltal" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Pause nedlasting" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Andre" + +#: src/gpodder/extensions.py:100 +#, fuzzy +msgid "No description for this extension." +msgstr "Inga skildring tilgjengeleg." -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "" -msgstr[1] "" +msgid "Command not found: %(command)s" +msgstr "" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "" -msgstr[1] "" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Python-modulen «%s» er ikkje installert" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "Ingen abonnement" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Ingen detaljar tilgjengeleg" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "ukjend" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "" + +#: src/gpodder/my.py:176 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "" -msgstr[1] "" +msgid "Add %s" +msgstr "Legg til %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "og" +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Fjern %s" -#: src/gpodder/sync.py:195 +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Avbroten av brukar."
View file
gpodder-3.5.0.tar.gz/po/pl.po -> gpodder-3.7.0.tar.gz/po/pl.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-03-05 15:01+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Polish (http://www.transifex.com/projects/p/gpodder/language/" @@ -26,285 +26,301 @@ msgid "gPodder on %s" msgstr "gPodder na %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Nieprawidłowa nazwa użytkownika lub hasło" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Dodane" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Skolejkowane" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Pobieranie" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Ukończone" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Nieudane" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Anulowane" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Wstrzymane" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Brak zawartości na serwerze" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d dzień temu" -msgstr[1] "%(count)d dni temu" -msgstr[2] "%(count)d dni temu" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Błąd we/wy: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Dzisiaj" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Błąd HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Wczoraj" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Błąd: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(nieznane)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "Integracja Pulpitu" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +msgid "Interface" +msgstr "Interfejs" + +#: src/gpodder/extensions.py:57 +msgid "Post download" +msgstr "Po ściągnięciu" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Inne" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Brak opisu dla tego rozszerzenia" + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d sekundę" -msgstr[1] "%(count)d sekundy" -msgstr[2] "%(count)d sekund" +msgid "Command not found: %(command)s" +msgstr "Polecenie nie znalezione: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d godzinę" -msgstr[1] "%(count)d godziny" -msgstr[2] "%(count)d godzin" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minutę" -msgstr[1] "%(count)d minuty" -msgstr[2] "%(count)d minut" +msgid "Python module not found: %(module)s" +msgstr "Moduł Pythona nie znaleziony: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "i" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "Brak wystarczających środków na Flattr" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "Element nie występuje na Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "Już udzielono wsparcia na Flattr lub własny element" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Nieprawidłowe żądanie" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Brak połączenia internetowego" -#: src/gpodder/sync.py:195 +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Brak opisu" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Brak opisu" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "nieznany" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "Domyślnie" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "Zachowaj tylko najnowsze" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Wideo" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Audio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Dodaj %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Usuń %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Anulowane przez użytkownika"
View file
gpodder-3.5.0.tar.gz/po/pt.po -> gpodder-3.7.0.tar.gz/po/pt.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-03-05 15:01+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Portuguese (http://www.transifex.com/projects/p/gpodder/" @@ -26,280 +26,296 @@ msgid "gPodder on %s" msgstr "gPodder em %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Utilizador/senha inválida" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Adicionado" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Na fila" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "A transferir" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Concluído" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Falhou" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Cancelado" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pausado" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "O conteúdo não existe no servidor" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d dia atrás" -msgstr[1] "%(count)d dias atrás" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Erro E/S: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Hoje" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Erro HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Ontem" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Erro: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(desconhecido)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "Integração no ambiente de trabalho" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +msgid "Interface" +msgstr "Interface" + +#: src/gpodder/extensions.py:57 +msgid "Post download" +msgstr "Enviar transferência" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Outros" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Sem descrição para esta extensão." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d segundo" -msgstr[1] "%(count)d segundos" +msgid "Command not found: %(command)s" +msgstr "Comando não encontrado: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d hora" -msgstr[1] "%(count)d horas" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuto" -msgstr[1] "%(count)d minutos" +msgid "Python module not found: %(module)s" +msgstr "Módulo python não encontrado: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "e" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "Sem possibilidade de flattr" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "O item não existe no Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "Já flattred ou item próprio" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Pedido inválido" -#: src/gpodder/sync.py:195 +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Sem ligação à Internet" + +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Sem descrição" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Sem descrição" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "desconhecido" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "Padrão" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "Manter última" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Vídeo" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Áudio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Adicionar %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Remover %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Cancelado pelo utilizador" -#: src/gpodder/sync.py:198 +#: src/gpodder/sync.py:199 msgid "Writing data to disk" msgstr "A escrever dados no disco"
View file
gpodder-3.5.0.tar.gz/po/pt_BR.po -> gpodder-3.7.0.tar.gz/po/pt_BR.po
Changed
@@ -13,7 +13,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-03-05 15:01+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" @@ -29,279 +29,295 @@ msgid "gPodder on %s" msgstr "gPodder em %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Login/Password inválidos" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Adicionado" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Em espera" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Downloading" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Terminados" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Falhou" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Cancelado" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pausado" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Conteúdo do servidor esta faltando" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d dia atrás" -msgstr[1] "%(count)d dias atrás" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Erro de I/O: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Hoje" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Erro de HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Ontem" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Erro: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(desconhecido)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "Integração com a área de trabalho" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +msgid "Interface" +msgstr "Interface" + +#: src/gpodder/extensions.py:57 +msgid "Post download" +msgstr "Pós-Download" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Outro" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Nenhuma descrição para a extensão" + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d segundo" -msgstr[1] "%(count)d segundos" +msgid "Command not found: %(command)s" +msgstr "Comando não foi encontrado: %(command)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d hora" -msgstr[1] "%(count)d horas" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minuto" -msgstr[1] "%(count)d minutos" +msgid "Python module not found: %(module)s" +msgstr "Módulo python não foi encontrado: %(module)s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "e" +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "Sem possibilidade de flattr" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "Item não existe no Flattr" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "Já no Flattr ou item próprio" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "Requisição inválida" -#: src/gpodder/sync.py:195 +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "Sem conexão com à Internet" + +#: src/gpodder/flattr.py:228 +msgid "No description" +msgstr "Nnenhuma descrição" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Descrição não disponível" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "desconhecido" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "Padrão" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "Apenas manter as últimas" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Vídeo" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Áudio" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Adicionar %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Remove %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user" msgstr "Cancelado pelo usuário" -#: src/gpodder/sync.py:198 +#: src/gpodder/sync.py:199 msgid "Writing data to disk" msgstr "Gravando dados no disco"
View file
gpodder-3.5.0.tar.gz/po/ro.po -> gpodder-3.7.0.tar.gz/po/ro.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -23,290 +23,306 @@ msgid "gPodder on %s" msgstr "gPodder pe %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Numele sau parola este greșită" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Adăugat" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Adăugat în coada de așteptare" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Se descarcă" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Gata" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Eșuat" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Sa renunțat" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Întrerupt temporar" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Conținutul lipseste de pe server" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Eroare I/O: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Astăzi" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Eroare HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Ieri" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Eroare: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(necunoscut)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Întreg" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Întrerupe descărcarea" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Altele" + +#: src/gpodder/extensions.py:100 +#, fuzzy +msgid "No description for this extension." +msgstr "Nu există disponibilă nici o descriere." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgid "Command not found: %(command)s" +msgstr "" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Modulul Python \"%s\" nu este instalat" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "Nu există abonamente" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Nu există descriere" -#: src/gpodder/util.py:1239 +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "necunoscut" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "" + +#: src/gpodder/my.py:176 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgid "Add %s" +msgstr "Adaugă %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "și" +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Îndepărtează %s" -#: src/gpodder/sync.py:195
View file
gpodder-3.5.0.tar.gz/po/ru.po -> gpodder-3.7.0.tar.gz/po/ru.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gPodder 2.10+git\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2010-11-24 21:55+0300\n" "Last-Translator: Maxim Prohorov <prohorov.max@gmail.com>\n" "Language-Team: \n" @@ -23,290 +23,306 @@ msgid "gPodder on %s" msgstr "gPodder на %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Неверное имя пользователя/пароль" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Добавлено" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "В очереди" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Загрузка" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Завершено" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Ошибка" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Отменено" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Остановлено" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Отсутствуют данные с сервера" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "Один день назад" -msgstr[1] "%(count)d дня назад" -msgstr[2] "%(count)d дней назад" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Ошибка ввода/вывода: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Сегодня" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "Ошибка HTTP %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Вчера" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Ошибка: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(неизвестно)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Целое" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Приостановить загрузку." + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Другое" + +#: src/gpodder/extensions.py:100 +#, fuzzy +msgid "No description for this extension." +msgstr "Нет описания." + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "Одна секунда" -msgstr[1] "%(count)d секунды" -msgstr[2] "%(count)d секунд" +msgid "Command not found: %(command)s" +msgstr "" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "один час" -msgstr[1] "%(count)d часа" -msgstr[2] "%(count)d часов" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Python module \"%s\" not installed" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "Нет подписок" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Нет описания" -#: src/gpodder/util.py:1239 +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "неизвестно" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Видео" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Аудио" + +#: src/gpodder/my.py:176 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "Одна минута" -msgstr[1] "%(count)d минуты" -msgstr[2] "%(count)d минут" +msgid "Add %s" +msgstr "Добавление %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "и" +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Удалить %s?" -#: src/gpodder/sync.py:195
View file
gpodder-3.5.0.tar.gz/po/sv.po -> gpodder-3.7.0.tar.gz/po/sv.po
Changed
@@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Swedish (http://www.transifex.com/projects/p/gpodder/language/" @@ -27,744 +27,770 @@ msgid "gPodder on %s" msgstr "gPodder på %s" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d dag sedan" -msgstr[1] "%(count)d dagar sedan" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Fel användarnamn/lösenord." -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Idag" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Tillagt" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Igår" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "Köad" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(okänt)" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Laddar ner" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Klar" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Misslyckad" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Avbruten" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Pausad" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "Innehåll från server saknas" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d sekund" -msgstr[1] "%(count)d sekunder" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "I/O Fel: %(error)s: %(filename)s" -#: src/gpodder/util.py:1236 +#: src/gpodder/download.py:866 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d timme" -msgstr[1] "%(count)d timmar" +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP Fel: %(code)s: %(message)s" -#: src/gpodder/util.py:1239 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d minut" -msgstr[1] "%(count)d minuter" +msgid "Error: %s" +msgstr "Fel: %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "och" +#: src/gpodder/extensions.py:55 +#, fuzzy +msgid "Desktop Integration" +msgstr "Ubuntu Unity-integration" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Heltal" + +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Pausa nedladdning" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Annan" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "Saknas beskrivning för den här extensionen" + +#: src/gpodder/extensions.py:213 +#, fuzzy, python-format +msgid "Command not found: %(command)s" +msgstr "Anvädar kommando finns inte" + +#: src/gpodder/extensions.py:229 +#, python-format +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Python modul \"%s\" ej installerad" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +#, fuzzy +msgid "Invalid request" +msgstr "Ogiltig URL" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "Inga prenumerationer" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Ingen beskrivning tillgänglig" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "okänt" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" -#: src/gpodder/sync.py:195 +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "Video" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "Ljud" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "Lägg till %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Radera %s" + +#: src/gpodder/sync.py:196 msgid "Cancelled by user"
View file
gpodder-3.5.0.tar.gz/po/tr.po -> gpodder-3.7.0.tar.gz/po/tr.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Turkish (http://www.transifex.com/projects/p/gpodder/language/" @@ -24,170 +24,94 @@ msgid "gPodder on %s" msgstr "" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "" - -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Bugün" - -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Dün" - -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(Bilinmiyor)" - -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 -#, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d saniye" - -#: src/gpodder/util.py:1236 -#, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d saat" - -#: src/gpodder/util.py:1239 -#, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d dakika" - -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "ve" - -#: src/gpodder/sync.py:195 -#, fuzzy -msgid "Cancelled by user" -msgstr "İptal Edildi" - -#: src/gpodder/sync.py:198 -msgid "Writing data to disk" -msgstr "" - -#: src/gpodder/sync.py:284 -msgid "Opening iPod database" -msgstr "" - -#: src/gpodder/sync.py:294 -msgid "iPod opened" -msgstr "" - -#: src/gpodder/sync.py:305 -msgid "Saving iPod database" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" msgstr "" -#: src/gpodder/sync.py:310 -msgid "Writing extended gtkpod database" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" msgstr "" -#: src/gpodder/sync.py:386 src/gpodder/sync.py:646 src/gpodder/sync.py:840 -#, fuzzy, python-format -msgid "Removing %s" -msgstr "%s kaldır" - -#: src/gpodder/sync.py:401 src/gpodder/sync.py:514 -#, fuzzy, python-format -msgid "Adding %s" -msgstr "Podcastler ekleniyor" - -#: src/gpodder/sync.py:417 -#, python-format -msgid "Error copying %(episode)s: Not enough free space on %(mountpoint)s" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" msgstr "" -#: src/gpodder/sync.py:504 -msgid "Opening MP3 player" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" msgstr "" -#: src/gpodder/sync.py:507 -msgid "MP3 player opened" +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" msgstr "" -#: src/gpodder/sync.py:569 src/gpodder/sync.py:577 -#, python-format -msgid "Error opening %(filename)s: %(message)s" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" msgstr "" -#: src/gpodder/sync.py:746 src/gpodder/sync.py:752 -msgid "MTP device" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "İptal Edildi" -#: src/gpodder/sync.py:759 -msgid "Opening the MTP device" -msgstr "" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Durduruldu" -#: src/gpodder/sync.py:769 -#, python-format -msgid "%s opened" +#: src/gpodder/download.py:853 +msgid "Missing content from server" msgstr "" -#: src/gpodder/sync.py:774 +#: src/gpodder/download.py:859 #, python-format -msgid "Closing %s" +msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/sync.py:782 +#: src/gpodder/download.py:866 #, python-format -msgid "%s closed" +msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/sync.py:787 bin/gpo:646 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "Adding %s..." -msgstr "" +msgid "Error: %s" +msgstr "Hata: %s" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Added" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" msgstr "" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Queued" +#: src/gpodder/extensions.py:56 +msgid "Interface" msgstr "" -#: src/gpodder/sync.py:889 -msgid "Synchronizing" -msgstr "" +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Seçilmedi" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 -#: src/gpodder/qmlui/__init__.py:69 -msgid "Finished" -msgstr "" +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Diğer" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 -msgid "Failed" +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." msgstr "" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 -msgid "Cancelled" -msgstr "İptal Edildi"
View file
gpodder-3.5.0.tar.gz/po/tr_TR.po -> gpodder-3.7.0.tar.gz/po/tr_TR.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:30+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/projects/p/gpodder/" @@ -23,158 +23,140 @@ msgid "gPodder on %s" msgstr "" -#: src/gpodder/util.py:419 -#, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "" - -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "" - -#: src/gpodder/util.py:497 -msgid "Yesterday" +#: src/gpodder/download.py:328 +msgid "Wrong username/password" msgstr "" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" msgstr "" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 -#, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "" - -#: src/gpodder/util.py:1236 -#, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "" - -#: src/gpodder/util.py:1239 -#, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "" - -#: src/gpodder/util.py:1245 -msgid "and" +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" msgstr "" -#: src/gpodder/sync.py:195 -msgid "Cancelled by user" +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" msgstr "" -#: src/gpodder/sync.py:198 -msgid "Writing data to disk" +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" msgstr "" -#: src/gpodder/sync.py:284 -msgid "Opening iPod database" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" msgstr "" -#: src/gpodder/sync.py:294 -msgid "iPod opened" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" msgstr "" -#: src/gpodder/sync.py:305 -msgid "Saving iPod database" +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" msgstr "" -#: src/gpodder/sync.py:310 -msgid "Writing extended gtkpod database" +#: src/gpodder/download.py:853 +msgid "Missing content from server" msgstr "" -#: src/gpodder/sync.py:386 src/gpodder/sync.py:646 src/gpodder/sync.py:840 +#: src/gpodder/download.py:859 #, python-format -msgid "Removing %s" +msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/sync.py:401 src/gpodder/sync.py:514 +#: src/gpodder/download.py:866 #, python-format -msgid "Adding %s" +msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/sync.py:417 +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 #, python-format -msgid "Error copying %(episode)s: Not enough free space on %(mountpoint)s" +msgid "Error: %s" msgstr "" -#: src/gpodder/sync.py:504 -msgid "Opening MP3 player" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" msgstr "" -#: src/gpodder/sync.py:507 -msgid "MP3 player opened" +#: src/gpodder/extensions.py:56 +msgid "Interface" msgstr "" -#: src/gpodder/sync.py:569 src/gpodder/sync.py:577 -#, python-format -msgid "Error opening %(filename)s: %(message)s" +#: src/gpodder/extensions.py:57 +msgid "Post download" msgstr "" -#: src/gpodder/sync.py:746 src/gpodder/sync.py:752 -msgid "MTP device" +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" msgstr "" -#: src/gpodder/sync.py:759 -msgid "Opening the MTP device" +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." msgstr "" -#: src/gpodder/sync.py:769 +#: src/gpodder/extensions.py:213 #, python-format -msgid "%s opened" +msgid "Command not found: %(command)s" msgstr "" -#: src/gpodder/sync.py:774 +#: src/gpodder/extensions.py:229 #, python-format -msgid "Closing %s" +msgid "Need at least one of the following commands: %(list_of_commands)s" msgstr "" -#: src/gpodder/sync.py:782 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%s closed" +msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/sync.py:787 bin/gpo:646 -#, python-format -msgid "Adding %s..." +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" msgstr "" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Added" +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" msgstr "" -#: src/gpodder/sync.py:889 src/gpodder/download.py:526 -msgid "Queued" +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" msgstr "" -#: src/gpodder/sync.py:889 -msgid "Synchronizing" +#: src/gpodder/flattr.py:217 +msgid "Invalid request" msgstr "" -#: src/gpodder/sync.py:890 src/gpodder/download.py:527 -#: src/gpodder/qmlui/__init__.py:69 -msgid "Finished" +#: src/gpodder/flattr.py:223 +msgid "No internet connection"
View file
gpodder-3.5.0.tar.gz/po/uk.po -> gpodder-3.7.0.tar.gz/po/uk.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -24,313 +24,343 @@ msgid "gPodder on %s" msgstr "gPodder на %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "Неправильне ім'я користувача/пароль" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "Додано" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "В черзі" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "Завантажую" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "Завершено" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "Помилка" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "Скасовано" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "Призупинено" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "На сервері немає контенту" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d день тому" -msgstr[1] "%(count)d дні тому" -msgstr[2] "%(count)d днів тому" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "Помилка вводу/виводу: %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "Сьогодні" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP помилка %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "Вчора" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "Помилка: %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(невідомо)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "Ціле" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "Призупинити завантаження" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "Інше" + +#: src/gpodder/extensions.py:100 +#, fuzzy +msgid "No description for this extension." +msgstr "Опис відсутній" + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d секунда" -msgstr[1] "%(count)d секунди" -msgstr[2] "%(count)d секунд" +msgid "Command not found: %(command)s" +msgstr "" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d година" -msgstr[1] "%(count)d години" -msgstr[2] "%(count)d годин" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" + +#: src/gpodder/extensions.py:266 +#, fuzzy, python-format +msgid "Python module not found: %(module)s" +msgstr "Модуль Python \"%s\" не встановлено" + +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "Немає підписок" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "Опис відсутній" -#: src/gpodder/util.py:1239 +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "невідомий" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" + +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "" + +#: src/gpodder/my.py:176 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d хвилина" -msgstr[1] "%(count)d хвилини" -msgstr[2] "%(count)d хвилин\t" +msgid "Add %s" +msgstr "Додати %s" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr "та" +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "Видалити %s" -#: src/gpodder/sync.py:195
View file
gpodder-3.5.0.tar.gz/po/zh_CN.po -> gpodder-3.7.0.tar.gz/po/zh_CN.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-03-05 16:00+0100\n" +"POT-Creation-Date: 2014-05-17 11:14+0200\n" "PO-Revision-Date: 2013-01-19 12:31+0000\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gpodder/" @@ -25,282 +25,298 @@ msgid "gPodder on %s" msgstr "gPodder 在 %s" -#: src/gpodder/util.py:419 +#: src/gpodder/download.py:328 +msgid "Wrong username/password" +msgstr "错误的 用户名/密码" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Added" +msgstr "已添加" + +#: src/gpodder/download.py:526 src/gpodder/sync.py:908 +msgid "Queued" +msgstr "已入序" + +#: src/gpodder/download.py:526 src/gpodder/gtkui/model.py:328 +msgid "Downloading" +msgstr "下载中" + +#: src/gpodder/download.py:527 src/gpodder/model.py:721 +#: src/gpodder/sync.py:909 src/gpodder/qmlui/__init__.py:69 +msgid "Finished" +msgstr "已完成" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Failed" +msgstr "失败" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Cancelled" +msgstr "取消" + +#: src/gpodder/download.py:527 src/gpodder/sync.py:909 +msgid "Paused" +msgstr "暂停" + +#: src/gpodder/download.py:853 +msgid "Missing content from server" +msgstr "服务端缺失内容" + +#: src/gpodder/download.py:859 #, python-format -msgid "%(count)d day ago" -msgid_plural "%(count)d days ago" -msgstr[0] "%(count)d 日之前" +msgid "I/O Error: %(error)s: %(filename)s" +msgstr "I/O错误 %(error)s: %(filename)s" -#: src/gpodder/util.py:495 -msgid "Today" -msgstr "今日" +#: src/gpodder/download.py:866 +#, python-format +msgid "HTTP Error %(code)s: %(message)s" +msgstr "HTTP错误 %(code)s: %(message)s" -#: src/gpodder/util.py:497 -msgid "Yesterday" -msgstr "昨日" +#: src/gpodder/download.py:870 src/gpodder/sync.py:1065 +#, python-format +msgid "Error: %s" +msgstr "错误 %s" -#: src/gpodder/util.py:540 src/gpodder/util.py:543 -msgid "(unknown)" -msgstr "(不明)" +#: src/gpodder/extensions.py:55 +msgid "Desktop Integration" +msgstr "" + +#: src/gpodder/extensions.py:56 +#, fuzzy +msgid "Interface" +msgstr "整型" -#: src/gpodder/util.py:1223 src/gpodder/util.py:1242 +#: src/gpodder/extensions.py:57 +#, fuzzy +msgid "Post download" +msgstr "清空选择" + +#: src/gpodder/extensions.py:59 src/gpodder/model.py:779 +#: src/gpodder/model.py:1226 +msgid "Other" +msgstr "其他" + +#: src/gpodder/extensions.py:100 +msgid "No description for this extension." +msgstr "" + +#: src/gpodder/extensions.py:213 #, python-format -msgid "%(count)d second" -msgid_plural "%(count)d seconds" -msgstr[0] "%(count)d 秒" +msgid "Command not found: %(command)s" +msgstr "" -#: src/gpodder/util.py:1236 +#: src/gpodder/extensions.py:229 #, python-format -msgid "%(count)d hour" -msgid_plural "%(count)d hours" -msgstr[0] "%(count)d 小时" +msgid "Need at least one of the following commands: %(list_of_commands)s" +msgstr "" -#: src/gpodder/util.py:1239 +#: src/gpodder/extensions.py:266 #, python-format -msgid "%(count)d minute" -msgid_plural "%(count)d minutes" -msgstr[0] "%(count)d 分" +msgid "Python module not found: %(module)s" +msgstr "" -#: src/gpodder/util.py:1245 -msgid "and" -msgstr " " +#: src/gpodder/flattr.py:211 +msgid "Not enough means to flattr" +msgstr "" + +#: src/gpodder/flattr.py:213 +msgid "Item does not exist on Flattr" +msgstr "" + +#: src/gpodder/flattr.py:215 +msgid "Already flattred or own item" +msgstr "" + +#: src/gpodder/flattr.py:217 +msgid "Invalid request" +msgstr "" + +#: src/gpodder/flattr.py:223 +msgid "No internet connection" +msgstr "" + +#: src/gpodder/flattr.py:228 +#, fuzzy +msgid "No description" +msgstr "无介绍" + +#: src/gpodder/model.py:448 src/gpodder/plugins/soundcloud.py:155 +msgid "No description available" +msgstr "无介绍" + +#: src/gpodder/model.py:679 +msgid "unknown" +msgstr "未知" + +#: src/gpodder/model.py:746 +msgid "Default" +msgstr "" -#: src/gpodder/sync.py:195 +#: src/gpodder/model.py:747 +msgid "Only keep latest" +msgstr "" + +#: src/gpodder/model.py:1209 src/gpodder/model.py:1224 +msgid "Video" +msgstr "视频" + +#: src/gpodder/model.py:1222 +msgid "Audio" +msgstr "音频" + +#: src/gpodder/my.py:176 +#, python-format +msgid "Add %s" +msgstr "添加 %s" + +#: src/gpodder/my.py:178 +#, python-format +msgid "Remove %s" +msgstr "移除 %s" + +#: src/gpodder/sync.py:196 #, fuzzy msgid "Cancelled by user" msgstr "取消" -#: src/gpodder/sync.py:198 +#: src/gpodder/sync.py:199 msgid "Writing data to disk" msgstr ""
View file
gpodder-3.5.0.tar.gz/setup.py -> gpodder-3.7.0.tar.gz/setup.py
Changed
@@ -2,7 +2,7 @@ # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/share/applications/gpodder.desktop.in -> gpodder-3.7.0.tar.gz/share/applications/gpodder.desktop.in
Changed
@@ -3,7 +3,7 @@ _X-GNOME-FullName=gPodder Podcast Client _GenericName=Podcast Client _Comment=Subscribe to audio and video content from the web -Exec=gpodder +Exec=__PREFIX__/bin/gpodder Icon=gpodder Terminal=false Type=Application
View file
gpodder-3.5.0.tar.gz/share/gpodder/credits.txt -> gpodder-3.7.0.tar.gz/share/gpodder/credits.txt
Changed
@@ -5,6 +5,7 @@ Alexander Boström Alex Bennee Alex Ghitza +Alex Mayer Alistair Sutton Amiad Bareli Anders Kvist @@ -24,6 +25,7 @@ Bastian Kleineidam Bastian Staeck Baurzhan Muftakhidinov +Ben Hummon Bernd Schlapsi Bernhard Walle Bill Barnard @@ -40,6 +42,7 @@ Chionsas Chris Arnold Chris Moffitt +Christian Boxdörfer Clark Burbidge Corey Goldberg corq @@ -157,6 +160,7 @@ Rafi Rubin R.Bell red26wings +Ricardo Miranda Richard Voigt Rigoberto Calleja Robert Willert @@ -201,11 +205,15 @@ Todd Zullinger Tomas Matheson Tomasz Dominikowski +Tomislav Jovanovic +Tony Mancill Torbjörn Wassberg Torstein Adolf Winterseth Ville-Pekka Vainio Vitaliy Bondar VladDrac +Vladimir Rutsky Vladimir Voroshilov Vladimir Zemlyakov +Wes Morgan Wilfred van Rooijen
View file
gpodder-3.7.0.tar.gz/share/gpodder/extensions/audio_converter.py
Added
@@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +# Convertes m4a audio files to mp3 +# This requires ffmpeg to be installed. Also works as a context +# menu item for already-downloaded files. +# +# (c) 2011-11-23 Bernd Schlapsi <brot@gmx.info> +# Released under the same license terms as gPodder itself. + +import os +import subprocess + +import gpodder +from gpodder import util + +import logging +logger = logging.getLogger(__name__) + +_ = gpodder.gettext + +__title__ = _('Convert audio files') +__description__ = _('Transcode audio files to mp3/ogg') +__authors__ = 'Bernd Schlapsi <brot@gmx.info>, Thomas Perl <thp@gpodder.org>' +__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/AudioConverter' +__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/AudioConverter' +__category__ = 'post-download' + + +DefaultConfig = { + 'use_ogg': False, # Set to True to convert to .ogg (otherwise .mp3) + 'context_menu': True, # Show the conversion option in the context menu +} + +class gPodderExtension: + MIME_TYPES = ('audio/x-m4a', 'audio/mp4', 'audio/mp4a-latm', 'audio/ogg', ) + EXT = ('.m4a', '.ogg') + CMD = {'avconv': {'.mp3': ['-i', '%(old_file)s', '-q:a', '2', '-id3v2_version', '3', '-write_id3v1', '1', '%(new_file)s'], + '.ogg': ['-i', '%(old_file)s', '-q:a', '2', '%(new_file)s'] + }, + 'ffmpeg': {'.mp3': ['-i', '%(old_file)s', '-q:a', '2', '-id3v2_version', '3', '-write_id3v1', '1', '%(new_file)s'], + '.ogg': ['-i', '%(old_file)s', '-q:a', '2', '%(new_file)s'] + } + } + + def __init__(self, container): + self.container = container + self.config = self.container.config + + # Dependency checks + self.command = self.container.require_any_command(['avconv', 'ffmpeg']) + + # extract command without extension (.exe on Windows) from command-string + self.command_without_ext = os.path.basename(os.path.splitext(self.command)[0]) + + def on_episode_downloaded(self, episode): + self._convert_episode(episode) + + def _get_new_extension(self): + return ('.ogg' if self.config.use_ogg else '.mp3') + + def _check_source(self, episode): + if episode.extension() == self._get_new_extension(): + return False + + if episode.mime_type in self.MIME_TYPES: + return True + + # Also check file extension (bug 1770) + if episode.extension() in self.EXT: + return True + + return False + + def on_episodes_context_menu(self, episodes): + if not self.config.context_menu: + return None + + if not all(e.was_downloaded(and_exists=True) for e in episodes): + return None + + if not any(self._check_source(episode) for episode in episodes): + return None + + target_format = ('OGG' if self.config.use_ogg else 'MP3') + menu_item = _('Convert to %(format)s') % {'format': target_format} + + return [(menu_item, self._convert_episodes)] + + def _convert_episode(self, episode): + if not self._check_source(episode): + return + + new_extension = self._get_new_extension() + old_filename = episode.local_filename(create=False) + filename, old_extension = os.path.splitext(old_filename) + new_filename = filename + new_extension + + cmd_param = self.CMD[self.command_without_ext][new_extension] + cmd = [self.command] + \ + [param % {'old_file': old_filename, 'new_file': new_filename} + for param in cmd_param] + + ffmpeg = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdout, stderr = ffmpeg.communicate() + + if ffmpeg.returncode == 0: + util.rename_episode_file(episode, new_filename) + os.remove(old_filename) + + logger.info('Converted audio file to %(format)s.' % {'format': new_extension}) + gpodder.user_extensions.on_notification_show(_('File converted'), episode.title) + else: + logger.warn('Error converting audio file: %s / %s', stdout, stderr) + gpodder.user_extensions.on_notification_show(_('Conversion failed'), episode.title) + + def _convert_episodes(self, episodes): + for episode in episodes: + self._convert_episode(episode)
View file
gpodder-3.7.0.tar.gz/share/gpodder/extensions/concatenate_videos.py
Added
@@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +# Concatenate multiple videos to a single file using ffmpeg +# 2014-05-03 Thomas Perl <thp.io/about> +# Released under the same license terms as gPodder itself. + +import subprocess + +import gpodder +from gpodder import util + +import gtk +from gpodder.gtkui.interface.progress import ProgressIndicator +import os + +import logging +logger = logging.getLogger(__name__) + +_ = gpodder.gettext + +__title__ = _('Concatenate videos') +__description__ = _('Add a context menu item for concatenating multiple videos') +__authors__ = 'Thomas Perl <thp@gpodder.org>' +__category__ = 'interface' +__only_for__ = 'gtk' + +class gPodderExtension: + def __init__(self, container): + self.container = container + self.gpodder = None + self.have_ffmpeg = (util.find_command('ffmpeg') is not None) + + def on_ui_object_available(self, name, ui_object): + if name == 'gpodder-gtk': + self.gpodder = ui_object + + def _get_save_filename(self): + dlg = gtk.FileChooserDialog(title=_('Save video'), + parent=self.gpodder.get_dialog_parent(), + action=gtk.FILE_CHOOSER_ACTION_SAVE) + dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) + dlg.add_button(gtk.STOCK_SAVE, gtk.RESPONSE_OK) + + if dlg.run() == gtk.RESPONSE_OK: + filename = dlg.get_filename() + dlg.destroy() + return filename + + dlg.destroy() + + def _concatenate_videos(self, episodes): + episodes = self._get_sorted_episode_list(episodes) + + # TODO: Show file list dialog for reordering + + out_filename = self._get_save_filename() + if out_filename is None: + return + + list_filename = os.path.join(os.path.dirname(out_filename), + '.' + os.path.splitext(os.path.basename(out_filename))[0] + '.txt') + + with open(list_filename, 'w') as fp: + fp.write('\n'.join("file '%s'\n" % episode.local_filename(create=False) + for episode in episodes)) + + indicator = ProgressIndicator(_('Concatenating video files'), + _('Writing %(filename)s') % { + 'filename': os.path.basename(out_filename) + }, False, self.gpodder.get_dialog_parent()) + + def convert(): + ffmpeg = subprocess.Popen(['ffmpeg', '-f', 'concat', '-nostdin', '-y', + '-i', list_filename, '-c', 'copy', out_filename]) + result = ffmpeg.wait() + util.delete_file(list_filename) + util.idle_add(lambda: indicator.on_finished()) + util.idle_add(lambda: self.gpodder.show_message( + _('Videos successfully converted') if result == 0 else + _('Error converting videos'), + _('Concatenation result'), important=True)) + + util.run_in_background(convert, True) + + def _is_downloaded_video(self, episode): + return episode.file_exists() and episode.file_type() == 'video' + + def _get_sorted_episode_list(self, episodes): + return sorted([e for e in episodes if self._is_downloaded_video(e)], + key=lambda e: e.published) + + def on_episodes_context_menu(self, episodes): + if self.gpodder is None or not self.have_ffmpeg: + return None + + episodes = self._get_sorted_episode_list(episodes) + + if len(episodes) < 2: + return None + + return [(_('Concatenate videos'), self._concatenate_videos)] +
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/enqueue_in_mediaplayer.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/enqueue_in_mediaplayer.py
Changed
@@ -15,58 +15,70 @@ __title__ = _('Enqueue in media players') __description__ = _('Add a context menu item for enqueueing episodes in installed media players') -__author__ = 'Thomas Perl <thp@gpodder.org>, Bernd Schlapsi <brot@gmx.info>' +__authors__ = 'Thomas Perl <thp@gpodder.org>, Bernd Schlapsi <brot@gmx.info>' +__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/EnqueueInMediaplayer' +__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/EnqueueInMediaplayer' __category__ = 'interface' __only_for__ = 'gtk' -AMAROK = (['amarok', '--play', '--append'], - '%s/%s' % (_('Enqueue in'), 'Amarok')) -VLC = (['vlc', '--started-from-file', '--playlist-enqueue'], - '%s/%s' % (_('Enqueue in'), 'VLC')) - - -class gPodderExtension: - def __init__(self, container): - self.container = container +class Player: + def __init__(self, application, command): + self.title = '/'.join((_('Enqueue in'), application)) + self.command = command self.gpodder = None - # Check media players - self.amarok_available = self.check_mediaplayer(AMAROK[0][0]) - self.vlc_available = self.check_mediaplayer(VLC[0][0]) + def is_installed(self): + return util.find_command(self.command[0]) is not None - def on_ui_object_available(self, name, ui_object): - if name == 'gpodder-gtk': - self.gpodder = ui_object - - def check_mediaplayer(self, cmd): - return not (util.find_command(cmd) == None) - - def _enqueue_episodes_cmd(self, episodes, cmd): + def enqueue_episodes(self, episodes): filenames = [episode.get_playback_url() for episode in episodes] - vlc = subprocess.Popen(cmd + filenames, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + subprocess.Popen(self.command + filenames, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) for episode in episodes: episode.playback_mark() self.gpodder.update_episode_list_icons(selected=True) - def enqueue_episodes_amarok(self, episodes): - self._enqueue_episodes_cmd(episodes, AMAROK[0]) - def enqueue_episodes_vlc(self, episodes): - self._enqueue_episodes_cmd(episodes, VLC[0]) +PLAYERS = [ + # Amarok, http://amarok.kde.org/ + Player('Amarok', ['amarok', '--play', '--append']), - def on_episodes_context_menu(self, episodes): - if not [e for e in episodes if e.file_exists()]: - return None + # VLC, http://videolan.org/ + Player('VLC', ['vlc', '--started-from-file', '--playlist-enqueue']), + + # Totem, https://live.gnome.org/Totem + Player('Totem', ['totem', '--enqueue']), + + # DeaDBeeF, http://deadbeef.sourceforge.net/ + Player('DeaDBeeF', ['deadbeef', '--queue']), - menu_entries = [] + # gmusicbrowser, http://gmusicbrowser.org/ + Player('gmusicbrowser', ['gmusicbrowser', '-enqueue']), - if self.amarok_available: - menu_entries.append((AMAROK[1], self.enqueue_episodes_amarok)) + # Audacious, http://audacious-media-player.org/ + Player('Audacious', ['audacious', '--enqueue']), + + # Clementine, http://www.clementine-player.org/ + Player('Clementine', ['clementine', '--append']), +] + +class gPodderExtension: + def __init__(self, container): + self.container = container + + # Only display media players that can be found at extension load time + self.players = filter(lambda player: player.is_installed(), PLAYERS) + + def on_ui_object_available(self, name, ui_object): + if name == 'gpodder-gtk': + for p in self.players: + p.gpodder = ui_object + + def on_episodes_context_menu(self, episodes): + if not any(e.file_exists() for e in episodes): + return None - if self.vlc_available: - menu_entries.append((VLC[1], self.enqueue_episodes_vlc)) + return [(p.title, p.enqueue_episodes) for p in self.players] - return menu_entries
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/gtk_statusicon.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/gtk_statusicon.py
Changed
@@ -6,35 +6,68 @@ import gpodder +import logging +logger = logging.getLogger(__name__) + _ = gpodder.gettext __title__ = _('Gtk Status Icon') __description__ = _('Show a status icon for Gtk-based Desktops.') __category__ = 'desktop-integration' __only_for__ = 'gtk' -__disable_in__ = 'unity' +__disable_in__ = 'unity,win32' import gtk import os.path +from gpodder.gtkui import draw + +DefaultConfig = { + 'download_progress_bar': False, # draw progress bar on icon while downloading? +} + class gPodderExtension: def __init__(self, container): self.container = container + self.config = self.container.config self.status_icon = None + self.icon_name = None self.gpodder = None + self.last_progress = 1 - def on_load(self): + def set_icon(self, use_pixbuf=False): path = os.path.join(os.path.dirname(__file__), '..', '..', 'icons') icon_path = os.path.abspath(path) theme = gtk.icon_theme_get_default() theme.append_search_path(icon_path) - if theme.has_icon('gpodder'): - self.status_icon = gtk.status_icon_new_from_icon_name('gpodder') + if self.icon_name is None: + if theme.has_icon('gpodder'): + self.icon_name = 'gpodder' + else: + self.icon_name = 'stock_mic' + + if self.status_icon is None: + self.status_icon = gtk.status_icon_new_from_icon_name(self.icon_name) + return + + # If current mode matches desired mode, nothing to do. + is_pixbuf = (self.status_icon.get_storage_type() == gtk.IMAGE_PIXBUF) + if is_pixbuf == use_pixbuf: + return + + if not use_pixbuf: + self.status_icon.set_from_icon_name(self.icon_name) else: - self.status_icon = gtk.status_icon_new_from_icon_name('stock_mic') + # Currently icon is not a pixbuf => was loaded by name, at which + # point size was automatically determined. + icon_size = self.status_icon.get_size() + icon_pixbuf = theme.load_icon(self.icon_name, icon_size, gtk.ICON_LOOKUP_USE_BUILTIN) + self.status_icon.set_from_pixbuf(icon_pixbuf) + def on_load(self): + self.set_icon() self.status_icon.connect('activate', self.on_toggle_visible) self.status_icon.set_has_tooltip(True) self.status_icon.set_tooltip_text("gPodder") @@ -50,9 +83,42 @@ if self.status_icon is not None: self.status_icon.set_visible(False) self.status_icon = None + self.icon_name = None def on_ui_object_available(self, name, ui_object): if name == 'gpodder-gtk': self.gpodder = ui_object + def get_icon_pixbuf(self): + assert self.status_icon is not None + if self.status_icon.get_storage_type() != gtk.IMAGE_PIXBUF: + self.set_icon(use_pixbuf=True) + return self.status_icon.get_pixbuf() + + def on_download_progress(self, progress): + logger.debug("download progress: %f", progress) + + if not self.config.download_progress_bar: + # reset the icon in case option was turned off during download + if self.last_progress < 1: + self.last_progress = 1 + self.set_icon() + # in any case, we're now done + return + + if progress == 1: + self.set_icon() # no progress bar + self.last_progress = progress + return + + # Only update in 3-percent-steps to save some resources + if abs(progress-self.last_progress) < 0.03 and progress > self.last_progress: + return + + icon = self.get_icon_pixbuf().copy() + progressbar = draw.progressbar_pixbuf(icon.get_width(), icon.get_height(), progress) + progressbar.composite(icon, 0, 0, icon.get_width(), icon.get_height(), 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, 255) + + self.status_icon.set_from_pixbuf(icon) + self.last_progress = progress
View file
gpodder-3.7.0.tar.gz/share/gpodder/extensions/mpris-listener.py
Added
@@ -0,0 +1,305 @@ +# -*- coding: utf-8 -*- +# +# gPodder extension for listening to notifications from MPRIS-capable +# players and translating them to gPodder's Media Player D-Bus API +# +# Copyright (c) 2013-2014 Dov Feldstern <dovdevel@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import collections +import dbus +import dbus.service +import gpodder +import logging +import time +import urllib +import urlparse + +logger = logging.getLogger(__name__) +_ = gpodder.gettext + +__title__ = _('MPRIS Listener') +__description__ = _('Convert MPRIS notifications to gPodder Media Player D-Bus API') +__authors__ = 'Dov Feldstern <dovdevel@gmail.com>' +__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/MprisListener' +__category__ = 'desktop-integration' + +USECS_IN_SEC = 1000000 + +TrackInfo = collections.namedtuple('TrackInfo', + ['uri', 'length', 'status', 'pos', 'rate']) + +def subsecond_difference(usec1, usec2): + return abs(usec1 - usec2) < USECS_IN_SEC + +class CurrentTrackTracker(object): + '''An instance of this class is responsible for tracking the state of the + currently playing track -- it's playback status, playing position, etc. + ''' + def __init__(self, notifier): + self.uri = None + self.length = None + self.pos = None + self.rate = None + self.status = None + self._notifier = notifier + self._prev_notif = () + + def _calc_update(self): + + now = time.time() + + logger.debug('CurrentTrackTracker: calculating at %d (status: %r)', + now, self.status) + + try: + if self.status != 'Playing': + logger.debug('CurrentTrackTracker: not currently playing, no change') + return + if self.pos is None or self.rate is None: + logger.debug('CurrentTrackTracker: unknown pos/rate, no change') + return + logger.debug('CurrentTrackTracker: %f @%f (diff: %f)', + self.pos, self.rate, now - self._last_time) + self.pos = self.pos + self.rate * (now - self._last_time) * USECS_IN_SEC + finally: + self._last_time = now + + def update_needed(self, current, updated): + for field in updated: + if field == 'pos': + if not subsecond_difference(updated['pos'], current['pos']): + return True + elif updated[field] != current[field]: + return True + # no unequal field was found, no new info here! + return False + + def update(self, **kwargs): + + # check if there is any new info here -- if not, no need to update! + + cur = self.getinfo()._asdict() + if not self.update_needed(cur, kwargs): + return + + # there *is* new info, go ahead and update... + + uri = kwargs.pop('uri', None) + if uri is not None: + length = kwargs.pop('length') # don't know how to handle uri with no length + if uri != cur['uri']: + # if this is a new uri, and the previous state was 'Playing', + # notify that the previous track has stopped before updating to + # the new track. + if cur['status'] == 'Playing': + logger.debug('notify Stopped: new uri: old %s new %s', + cur['uri'], uri) + self.notify_stop() + self.uri = uri + self.length = float(length) + + if 'pos' in kwargs: + # If the position is being updated, and the current status was Playing + # If the status *is* playing, and *was* playing, but the position + # has changed discontinuously, notify a stop for the old position + if ( cur['status'] == 'Playing' + and (not kwargs.has_key('status') or kwargs['status'] == 'Playing') + and not subsecond_difference(cur['pos'], kwargs['pos']) + ): + logger.debug('notify Stopped: playback discontinuity:' + + 'calc: %f observed: %f', cur['pos'], kwargs['pos']) + self.notify_stop() + + if ( (kwargs['pos']) == 0 + and self.pos > (self.length - USECS_IN_SEC) + and self.pos < (self.length + 2 * USECS_IN_SEC) + ): + logger.debug('fixing for position 0 (calculated pos: %f/%f [%f])', + self.pos / USECS_IN_SEC, self.length / USECS_IN_SEC, + (self.pos/USECS_IN_SEC)-(self.length/USECS_IN_SEC)) + self.pos = self.length + kwargs.pop('pos') # remove 'pos' even though we're not using it + else: + if self.pos is not None: + logger.debug("%r %r", self.pos, self.length) + logger.debug('not fixing for position 0 (calculated pos: %f/%f [%f])', + self.pos / USECS_IN_SEC, self.length / USECS_IN_SEC, + (self.pos/USECS_IN_SEC)-(self.length/USECS_IN_SEC)) + self.pos = kwargs.pop('pos') + + if 'status' in kwargs: + self.status = kwargs.pop('status') + + if 'rate' in kwargs: + self.rate = kwargs.pop('rate') + + if kwargs: + logger.error('unexpected update fields %r', kwargs) + + # notify about the current state + if self.status == 'Playing': + self.notify_playing() + else: + logger.debug('notify Stopped: status %s', self.status) + self.notify_stop() + + def getinfo(self): + self._calc_update() + return TrackInfo(self.uri, self.length, self.status, self.pos, self.rate) + + def notify_stop(self): + self.notify('Stopped') + + def notify_playing(self): + self.notify('Playing') + + def notify(self, status): + if ( self.uri is None + or self.pos is None + or self.status is None + or self.length is None + or self.length <= 0 + ): + return + pos = self.pos // USECS_IN_SEC + file_uri = urllib.url2pathname(urlparse.urlparse(self.uri).path).encode('utf-8') + total_time = self.length // USECS_IN_SEC + + if status == 'Stopped': + end_position = pos + start_position = self._notifier.start_position + if self._prev_notif != (start_position, end_position, total_time, file_uri): + self._notifier.PlaybackStopped(start_position, end_position, + total_time, file_uri) + self._prev_notif = (start_position, end_position, total_time, file_uri) + + elif status == 'Playing': + start_position = pos + if self._prev_notif != (start_position, file_uri): + self._notifier.PlaybackStarted(start_position, file_uri) + self._prev_notif = (start_position, file_uri) + self._notifier.start_position = start_position + + logger.info('CurrentTrackTracker: %s: %r', status, self) + + def __repr__(self): + return '%s: %s at %d/%d (@%f)' % (
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/normalize_audio.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/normalize_audio.py
Changed
@@ -21,6 +21,8 @@ __title__ = _('Normalize audio with re-encoding') __description__ = _('Normalize the volume of audio files with normalize-audio') __authors__ = 'Bernd Schlapsi <brot@gmx.info>' +__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/NormalizeAudio' +__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/NormalizeAudio' __category__ = 'post-download' @@ -35,6 +37,9 @@ } class gPodderExtension: + MIME_TYPES = ('audio/mpeg', 'audio/ogg', ) + EXT = ('.mp3', '.ogg', ) + def __init__(self, container): self.container = container @@ -56,13 +61,23 @@ if not self.container.config.context_menu: return None - mimetypes = [e.mime_type for e in episodes - if e.mime_type is not None and e.file_exists()] - if 'audio/ogg' not in mimetypes and 'audio/mpeg' not in mimetypes: + if not any(self._check_source(episode) for episode in episodes): return None return [(self.container.metadata.title, self.convert_episodes)] + def _check_source(self, episode): + if not episode.file_exists(): + return False + + if episode.mime_type in self.MIME_TYPES: + return True + + if episode.extension() in self.EXT: + return True + + return False + def _convert_episode(self, episode): if episode.file_type() != 'audio': return
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/notification-win32.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/notification-win32.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ __description__ = 'Display notification bubbles for different events.' __authors__ = 'Sean Munkel <SeanMunkel@gmail.com>' __category__ = 'desktop-integration' +__mandatory_in__ = 'win32' __only_for__ = 'win32' import functools
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/rename_download.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/rename_download.py
Changed
@@ -16,6 +16,8 @@ __title__ = _('Rename episodes after download') __description__ = _('Rename episodes to "<Episode Title>.<ext>" on download') __authors__ = 'Bernd Schlapsi <brot@gmx.info>, Thomas Perl <thp@gpodder.org>' +__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/RenameAfterDownload' +__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/RenameAfterDownload' __category__ = 'post-download' @@ -39,7 +41,9 @@ basename, ext = os.path.splitext(filename) new_basename = util.sanitize_encoding(title) + ext - new_basename = util.sanitize_filename(new_basename) + # On Windows, force ASCII encoding for filenames (bug 1724) + new_basename = util.sanitize_filename(new_basename, + use_ascii=gpodder.ui.win32) new_filename = os.path.join(dirname, new_basename) if new_filename == current_filename:
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/rm_ogg_cover.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/rm_ogg_cover.py
Changed
@@ -37,6 +37,8 @@ __title__ = _('Remove cover art from OGG files') __description__ = _('removes coverart from all downloaded ogg files') __authors__ = 'Bernd Schlapsi <brot@gmx.info>' +__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/RemoveOGGCover' +__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/RemoveOGGCover' __category__ = 'post-download'
View file
gpodder-3.7.0.tar.gz/share/gpodder/extensions/rockbox_coverart.py
Added
@@ -0,0 +1,42 @@ +# Copies cover art to a file based device +# +# (c) 2014-04-10 Alex Mayer <magictrick4906@aim.com> +# Released under the same license terms as gPodder itself. + +import os +import shutil + +# Use a logger for debug output - this will be managed by gPodder +import logging +logger = logging.getLogger(__name__) + +# Provide some metadata that will be displayed in the gPodder GUI +__title__ = 'Rockbox Cover Art Sync' +__description__ = 'Copy Cover Art To Rockboxed Media Player' +__only_for__ = 'gtk, cli, qml' +__authors__ = 'Alex Mayer <magictrick4906@aim.com>' + +DefaultConfig = { + "art_name_on_device": "cover.jpg" # The file name that will be used on the device for cover art +} + +class gPodderExtension: + + def __init__(self, container): + self.container = container + self.config = self.container.config + + def on_episode_synced(self, device, episode): + # check that we have the functions we need + if hasattr(device, 'get_episode_folder_on_device'): + # get the file and folder names we need + episode_folder = os.path.dirname(episode.local_filename(False)) + device_folder = device.get_episode_folder_on_device(episode) + episode_art = os.path.join(episode_folder, "folder.jpg") + device_art = os.path.join(device_folder, self.config.art_name_on_device) + # make sure we have art to copy and it doesnt already exist + if os.path.isfile(episode_art) and not os.path.isfile(device_art): + logger.info('Syncing cover art for %s', episode.channel.title) + # copy and rename art + shutil.copy(episode_art, device_art) +
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/sonos.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/sonos.py
Changed
@@ -18,7 +18,7 @@ __title__ = _('Stream to Sonos') __description__ = _('Stream podcasts to Sonos speakers') -__author__ = 'Stefan Kögl <stefan@skoegl.net>' +__authors__ = 'Stefan Kögl <stefan@skoegl.net>' __category__ = 'interface' __only_for__ = 'gtk'
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/tagging.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/tagging.py
Changed
@@ -23,21 +23,30 @@ # The episode title is written into the title tag # The podcast title is written into the album tag +import base64 import datetime +import mimetypes import os import gpodder +from gpodder import coverart import logging logger = logging.getLogger(__name__) from mutagen import File +from mutagen.flac import Picture +from mutagen.mp3 import MP3 +from mutagen.id3 import ID3, APIC +from mutagen.mp4 import MP4Cover _ = gpodder.gettext __title__ = _('Tag downloaded files using Mutagen') __description__ = _('Add episode and podcast titles to MP3/OGG tags') __authors__ = 'Bernd Schlapsi <brot@gmx.info>' +__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/Tagging' +__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/Tagging' __category__ = 'post-download' @@ -45,24 +54,165 @@ 'strip_album_from_title': True, 'genre_tag': 'Podcast', 'always_remove_tags': False, + 'auto_embed_coverart': False, } +class AudioFile(object): + def __init__(self, filename, album, title, genre, pubDate, cover): + self.filename = filename + self.album = album + self.title = title + self.genre = genre + self.pubDate = pubDate + self.cover = cover + + def remove_tags(self): + audio = File(self.filename, easy=True) + if audio.tags is not None: + audio.delete() + audio.save() + + def write_basic_tags(self): + audio = File(self.filename, easy=True) + + if audio.tags is None: + audio.add_tags() + + if self.album is not None: + audio.tags['album'] = self.album + + if self.title is not None: + audio.tags['title'] = self.title + + if self.genre is not None: + audio.tags['genre'] = self.genre + + if self.pubDate is not None: + audio.tags['date'] = self.pubDate + + audio.save() + + def insert_coverart(self): + """ implement the cover art logic in the subclass + """ + None + + def get_cover_picture(self, cover): + """ Returns mutage Picture class for the cover image + Usefull for OGG and FLAC format + + Picture type = cover image + see http://flac.sourceforge.net/documentation_tools_flac.html#encoding_options + """ + f = file(cover) + p = Picture() + p.type = 3 + p.data = f.read() + p.mime = mimetypes.guess_type(cover)[0] + f.close() + + return p + + +class OggFile(AudioFile): + def __init__(self, filename, album, title, genre, pubDate, cover): + super(OggFile, self).__init__(filename, album, title, genre, pubDate, cover) + + def insert_coverart(self): + audio = File(self.filename, easy=True) + p = self.get_cover_picture(self.cover) + audio['METADATA_BLOCK_PICTURE'] = base64.b64encode(p.write()) + audio.save() + + +class Mp4File(AudioFile): + def __init__(self, filename, album, title, genre, pubDate, cover): + super(Mp4File, self).__init__(filename, album, title, genre, pubDate, cover) + + def insert_coverart(self): + audio = File(self.filename) + + if self.cover.endswith('png'): + cover_format = MP4Cover.FORMAT_PNG + else: + cover_format = MP4Cover.FORMAT_JPEG + + data = open(self.cover, 'rb').read() + audio.tags['covr'] = [MP4Cover(data, cover_format)] + audio.save() + + +class Mp3File(AudioFile): + def __init__(self, filename, album, title, genre, pubDate, cover): + super(Mp3File, self).__init__(filename, album, title, genre, pubDate, cover) + + def insert_coverart(self): + audio = MP3(self.filename, ID3=ID3) + + if audio.tags is None: + audio.add_tags() + + audio.tags.add( + APIC( + encoding = 3, # 3 is for utf-8 + mime = mimetypes.guess_type(self.cover)[0], + type = 3, + desc = u'Cover', + data = open(self.cover).read() + ) + ) + audio.save() + + class gPodderExtension: def __init__(self, container): self.container = container def on_episode_downloaded(self, episode): info = self.read_episode_info(episode) - self.write_info2file(info) + if info['filename'] is None: + return + + self.write_info2file(info, episode) + + def get_audio(self, info, episode): + audio = None + cover = None + + if self.container.config.auto_embed_coverart: + cover = self.get_cover(episode.channel) + + if info['filename'].endswith('.mp3'): + audio = Mp3File(info['filename'], + info['album'], + info['title'], + info['genre'], + info['pubDate'], + cover) + elif info['filename'].endswith('.ogg'): + audio = OggFile(info['filename'], + info['album'], + info['title'], + info['genre'], + info['pubDate'], + cover) + elif info['filename'].endswith('.m4a') or info['filename'].endswith('.mp4'): + audio = Mp4File(info['filename'], + info['album'], + info['title'], + info['genre'], + info['pubDate'], + cover) - logger.info(u'tagging.on_episode_downloaded(%s/%s)' % (episode.channel.title, episode.title)) + return audio def read_episode_info(self, episode): info = { 'filename': None, 'album': None, 'title': None, + 'genre': None, 'pubDate': None } @@ -79,6 +229,9 @@
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/taskbar_progress.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/taskbar_progress.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/ted_subtitles.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/ted_subtitles.py
Changed
@@ -86,9 +86,16 @@ if not episode_data: return - intro = episode_data.split('introDuration%22%3A')[1] \ - .split('%2C')[0] or 15 - intro = int(intro)*1000 + INTRO_DEFAULT = 15 + try: + # intro in the data could be 15 or 15.33 + intro = episode_data + intro = episode_data.split('introDuration":')[1] \ + .split(',')[0] or INTRO_DEFAULT + intro = int(float(intro)*1000) + except (ValueError, IndexError), e: + logger.info("Couldn't parse introDuration string: %s", intro) + intro = INTRO_DEFAULT * 1000 current_filename = episode.local_filename(create=False) srt_filename = self.get_srt_filename(current_filename) sub = self.ted_to_srt(sub_data, int(intro))
View file
gpodder-3.5.0.tar.gz/share/gpodder/extensions/update_feeds_on_startup.py -> gpodder-3.7.0.tar.gz/share/gpodder/extensions/update_feeds_on_startup.py
Changed
@@ -14,6 +14,8 @@ __title__ = _('Search for new episodes on startup') __description__ = _('Starts the search for new episodes on startup') __authors__ = 'Bernd Schlapsi <brot@gmx.info>' +__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/SearchEpisodeOnStartup' +__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/SearchEpisodeOnStartup' __category__ = 'interface' __only_for__ = 'gtk'
View file
gpodder-3.7.0.tar.gz/share/gpodder/extensions/video_converter.py
Added
@@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- +# Convertes video files to avi or mp4 +# This requires ffmpeg to be installed. Also works as a context +# menu item for already-downloaded files. +# +# (c) 2011-08-05 Thomas Perl <thp.io/about> +# Released under the same license terms as gPodder itself. + +import os +import subprocess + +import gpodder + +from gpodder import util +from gpodder import youtube + +import logging +logger = logging.getLogger(__name__) + +_ = gpodder.gettext + +__title__ = _('Convert video files') +__description__ = _('Transcode video files to avi/mp4/m4v') +__authors__ = 'Thomas Perl <thp@gpodder.org>, Bernd Schlapsi <brot@gmx.info>' +__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/VideoConverter' +__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/VideoConverter' +__category__ = 'post-download' + +DefaultConfig = { + 'output_format': 'mp4', # At the moment we support/test only mp4, m4v and avi + 'context_menu': True, # Show the conversion option in the context menu +} + + +class gPodderExtension: + MIME_TYPES = ('video/mp4', 'video/m4v', 'video/x-flv', ) + EXT = ('.mp4', '.m4v', '.flv', ) + CMD = {'avconv': ['-i', '%(old_file)s', '-codec', 'copy', '%(new_file)s'], + 'ffmpeg': ['-i', '%(old_file)s', '-codec', 'copy', '%(new_file)s'] + } + + def __init__(self, container): + self.container = container + self.config = self.container.config + + # Dependency checks + self.command = self.container.require_any_command(['avconv', 'ffmpeg']) + + # extract command without extension (.exe on Windows) from command-string + command_without_ext = os.path.basename(os.path.splitext(self.command)[0]) + self.command_param = self.CMD[command_without_ext] + + def on_episode_downloaded(self, episode): + self._convert_episode(episode) + + def _get_new_extension(self): + ext = self.config.output_format + if not ext.startswith('.'): + ext = '.' + ext + + return ext + + def _check_source(self, episode): + if episode.extension() == self._get_new_extension(): + return False + + if episode.mime_type in self.MIME_TYPES: + return True + + # Also check file extension (bug 1770) + if episode.extension() in self.EXT: + return True + + return False + + def on_episodes_context_menu(self, episodes): + if not self.config.context_menu: + return None + + if not all(e.was_downloaded(and_exists=True) for e in episodes): + return None + + if not any(self._check_source(episode) for episode in episodes): + return None + + menu_item = _('Convert to %(format)s') % {'format': self.config.output_format} + + return [(menu_item, self._convert_episodes)] + + def _convert_episode(self, episode): + if not self._check_source(episode): + return + + new_extension = self._get_new_extension() + old_filename = episode.local_filename(create=False) + filename, old_extension = os.path.splitext(old_filename) + new_filename = filename + new_extension + + cmd = [self.command] + \ + [param % {'old_file': old_filename, 'new_file': new_filename} + for param in self.command_param] + ffmpeg = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + stdout, stderr = ffmpeg.communicate() + + if ffmpeg.returncode == 0: + util.rename_episode_file(episode, new_filename) + os.remove(old_filename) + + logger.info('Converted video file to %(format)s.' % {'format': self.config.output_format}) + gpodder.user_extensions.on_notification_show(_('File converted'), episode.title) + else: + logger.warn('Error converting video file: %s / %s', stdout, stderr) + gpodder.user_extensions.on_notification_show(_('Conversion failed'), episode.title) + + def _convert_episodes(self, episodes): + for episode in episodes: + self._convert_episode(episode) +
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/gtk/gpodder.ui -> gpodder-3.7.0.tar.gz/share/gpodder/ui/gtk/gpodder.ui
Changed
@@ -240,19 +240,6 @@ </object> </child> <child> - <object class="GtkToggleAction" id="itemShowAllEpisodes"> - <property name="active">True</property> - <property name="label" translatable="yes">"All episodes" in podcast list</property> - <signal handler="on_itemShowAllEpisodes_activate" name="activate"/> - </object> - </child> - <child> - <object class="GtkToggleAction" id="item_podcast_sections"> - <property name="active">True</property> - <property name="label" translatable="yes">Use sections for podcast list</property> - </object> - </child> - <child> <object class="GtkToggleAction" id="itemShowToolbar"> <property name="active">True</property> <property name="name">itemShowToolbar</property> @@ -382,9 +369,6 @@ <menuitem action="item_sync"/> </menu> <menu action="menuView"> - <menuitem action="itemShowAllEpisodes"/> - <menuitem action="item_podcast_sections"/> - <separator/> <menuitem action="itemShowToolbar"/> <menuitem action="itemShowDescription"/> <separator/> @@ -609,21 +593,12 @@ <child> <object class="GtkEntry" id="entry_search_podcasts"> <property name="visible">True</property> + <property name="secondary-icon-stock">gtk-close</property> + <signal name="icon-press" handler="hide_podcast_search"/> <signal name="changed" handler="on_entry_search_podcasts_changed"/> <signal name="key-press-event" handler="on_entry_search_podcasts_key_press"/> </object> </child> - <child> - <object class="GtkToolButton" id="button_search_podcasts_clear"> - <property name="visible">True</property> - <property name="stock-id">gtk-clear</property> - <signal name="clicked" handler="hide_podcast_search"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> </object> <packing> <property name="expand">False</property> @@ -755,21 +730,12 @@ <child> <object class="GtkEntry" id="entry_search_episodes"> <property name="visible">True</property> + <property name="secondary-icon-stock">gtk-close</property> + <signal name="icon-press" handler="hide_episode_search"/> <signal name="changed" handler="on_entry_search_episodes_changed"/> <signal name="key-press-event" handler="on_entry_search_episodes_key_press"/> </object> </child> - <child> - <object class="GtkToolButton" id="button_search_episodes_clear"> - <property name="visible">True</property> - <property name="stock-id">gtk-clear</property> - <signal name="clicked" handler="hide_episode_search"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> </object> <packing> <property name="expand">False</property>
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/gtk/gpodderpreferences.ui -> gpodder-3.7.0.tar.gz/share/gpodder/ui/gtk/gpodderpreferences.ui
Changed
@@ -166,6 +166,35 @@ <property name="expand">False</property> </packing> </child> + <child> + <object class="GtkHSeparator" id="hseparator_general"> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkbutton_show_all_episodes"> + <property name="label" translatable="yes">"All episodes" in podcast list</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="checkbutton_podcast_sections"> + <property name="label" translatable="yes">Use sections for podcast list</property> + <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">3</property> + </packing> + </child> </object> <packing> <property name="tab-label" translatable="yes">General</property> @@ -191,7 +220,8 @@ <property name="reorderable">False</property> <property name="enable_search">True</property> <property name="search_column">1</property> - <signal name="row-activated" handler="on_treeview_extensions_row_activated" swapped="no"/> + <signal name="popup-menu" handler="on_treeview_extension_show_context_menu" swapped="no"/> + <signal name="button-release-event" handler="on_treeview_extension_button_released" swapped="no"/> </object> </child> </object>
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/qml/EpisodeList.qml -> gpodder-3.7.0.tar.gz/share/gpodder/ui/qml/EpisodeList.qml
Changed
@@ -59,7 +59,7 @@ } ListList { - headerText: main.currentPodcast.qtitle + headerText: main.currentPodcast === undefined ? "" : main.currentPodcast.qtitle id: listView cacheBuffer: 10000 @@ -83,6 +83,15 @@ property int openedIndex: -1 visible: count > 0 + Connections { + target: main + onLoadingEpisodesChanged: { + if (main.loadingEpisodes) { + listView.openedIndex = -1; + } + } + } + delegate: EpisodeItem { id: episodeItem property variant modelData: episode
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/qml/Main.qml -> gpodder-3.7.0.tar.gz/share/gpodder/ui/qml/Main.qml
Changed
@@ -165,6 +165,8 @@ togglePlayback(episode); } else { mediaPlayer.enqueueEpisode(episode); + /* Let the user know that the episode was correctly added to the playlist */ + main.showMessage(_('Episode added to playlist')); } } @@ -223,22 +225,98 @@ PagePage { id: episodesPage - listview: episodeList.listview + lockToPortrait: mainPage.lockToPortrait + + Column { + id: episodesHeader + + anchors.top: parent.top + width: parent.width + spacing: 0 + + Item { + id: episodesHeaderRow + width: parent.width + height: Config.listItemHeight + + Text { + id: headerCaption + + text: main.currentPodcast.qtitle + color: Config.settingsHeaderColor + + anchors { + left: parent.left + leftMargin: Config.smallSpacing + verticalCenter: parent.verticalCenter + } - onClosed: { - episodeList.resetSelection(); - main.currentPodcast = undefined; - } + font.pixelSize: Config.headerHeight * .5 + wrapMode: Text.NoWrap + } - EpisodeList { - id: episodeList + Label { + id: counters - anchors.fill: parent + property int newEpisodes: main.currentPodcast.qnew + property int downloadedEpisodes: main.currentPodcast.qdownloaded + + anchors { + right: parent.right + rightMargin: Config.smallSpacing + verticalCenter: parent.verticalCenter + } + + visible: !spinner.visible && (downloadedEpisodes > 0) + text: counters.downloadedEpisodes + color: "white" + + font.pixelSize: Config.headerHeight * .5 + } + + BusyIndicator { + id: spinner + + anchors { + right: parent.right + rightMargin: Config.smallSpacing + verticalCenter: parent.verticalCenter + } + visible: main.currentPodcast.qupdating + running: visible + } + } + + Rectangle { + id: horizontalLine + + height: 1 + border.width: 0 + color: Config.sectionHeaderColorLine + width: parent.width - Config.largeSpacing + } + } + + EpisodeList { + id: episodeList + + width: parent.width + anchors { + top: episodesHeader.bottom + bottom: parent.bottom + } model: ListModel { id: episodeListModel } onEpisodeContextMenu: controller.episodeContextMenu(episode) } + listview: episodeList.listview + + onClosed: { + episodeList.resetSelection(); + main.currentPodcast = undefined; + } + actions: [ Action { text: _('Now playing') @@ -253,6 +331,12 @@ } }, Action { + text: _('Update') + onClicked: { + controller.updatePodcast(main.currentPodcast) + } + }, + Action { text: _('Download episodes') onClicked: { main.showMultiEpisodesSheet(text, _('Download'), 'download'); @@ -307,6 +391,7 @@ PagePage { id: mediaPlayerPage + lockToPortrait: mainPage.lockToPortrait MediaPlayer { id: mediaPlayer
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/qml/MediaPlayer.qml -> gpodder-3.7.0.tar.gz/share/gpodder/ui/qml/MediaPlayer.qml
Changed
@@ -361,10 +361,9 @@ } Label { + y: progressBar.y - height - Config.smallSpacing anchors { - bottom: parent.bottom right: parent.right - bottomMargin: progressBar.height rightMargin: Config.largeSpacing } color: '#aaa'
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/qml/PodcastItem.qml -> gpodder-3.7.0.tar.gz/share/gpodder/ui/qml/PodcastItem.qml
Changed
@@ -97,7 +97,7 @@ id: titleBox text: modelData.qtitle - color: 'white' + color: (!isSailfish && counters.newEpisodes)?Config.newColor:'white' anchors { verticalCenter: parent.verticalCenter
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/qml/Subscribe.qml -> gpodder-3.7.0.tar.gz/share/gpodder/ui/qml/Subscribe.qml
Changed
@@ -18,8 +18,16 @@ } function search() { - searchResultsListModel.searchFor(searchInput.text); - resultsSheet.open(); + var q = searchInput.text; + + if (q.indexOf('http://') === 0 || q.indexOf('https://') === 0) { + /* Directly subscribe to a URL */ + subscribe.subscribe([q]); + } else { + /* Search the web directory */ + searchResultsListModel.searchFor(q); + resultsSheet.open(); + } } onVisibleChanged: {
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/qml/config.js -> gpodder-3.7.0.tar.gz/share/gpodder/ui/qml/config.js
Changed
@@ -20,7 +20,7 @@ var newColor = '#cf65de' /* gpodder purple */ var downloadColor = '#8ae234' /* download green */ var playbackColor = '#729fcf' /* playback blue */ -var selectColorBg = Qt.darker(selectColor, 5) +var selectColorBg = Qt.darker(selectColor, 2) var downloadColorBg = Qt.darker(downloadColor, 4) var playbackColorBg = Qt.darker(playbackColor, 4) var episodeActionsColorBg = '#70000000'
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/qml/harmattan/org/gpodder/qmlui/PagePage.qml -> gpodder-3.7.0.tar.gz/share/gpodder/ui/qml/harmattan/org/gpodder/qmlui/PagePage.qml
Changed
@@ -13,13 +13,15 @@ orientationLock: lockToPortrait?PageOrientation.LockPortrait:PageOrientation.Automatic function close() { - pageStack.pop(); + if (pageStack !== null) { + pageStack.pop(); + } closed(); } tools: ToolBarLayout { ToolIcon { - visible: pageStack.depth > 1 + visible: pageStack !== null && pageStack.depth > 1 anchors.left: parent.left iconId: "icon-m-toolbar-back-white" onClicked: pagePage.close();
View file
gpodder-3.5.0.tar.gz/share/gpodder/ui/qml/main_default.qml -> gpodder-3.7.0.tar.gz/share/gpodder/ui/qml/main_default.qml
Changed
@@ -58,6 +58,7 @@ PagePage { id: subscribePage + lockToPortrait: mainPage.lockToPortrait Subscribe { anchors.fill: parent @@ -71,6 +72,7 @@ PagePage { id: showNotesPage + lockToPortrait: mainPage.lockToPortrait ShowNotes { id: showNotes @@ -210,17 +212,61 @@ PagePage { - id: settingsPage + id: myGpoLoginPage lockToPortrait: mainPage.lockToPortrait onClosed: { controller.myGpoUsername = myGpoUsernameField.text controller.myGpoPassword = myGpoPasswordField.text controller.myGpoDeviceCaption = myGpoDeviceCaptionField.text - controller.myGpoEnabled = myGpoEnableSwitch.checked && (controller.myGpoUsername != '' && controller.myGpoPassword != '') - controller.saveMyGpoSettings() } + Item { + id: myGpoLoginContent + anchors.fill: parent + + Flickable { + anchors.fill: parent + anchors.margins: Config.largeSpacing + contentHeight: myGpoLoginColumn.height + + Column { + id: myGpoLoginColumn + anchors.fill: parent + spacing: 4 + + Label { + text: _('gPodder.net Login') + font.pixelSize: 40 + anchors.right: parent.right + } + + SettingsHeader { text: _('Credentials') } + + SettingsLabel { text: _('Username') } + InputField { id: myGpoUsernameField; anchors.left: parent.left; anchors.right: parent.right } + + Item { height: 1; width: 1 } + + SettingsLabel { text: _('Password') } + InputField { id: myGpoPasswordField; anchors.left: parent.left; anchors.right: parent.right; echoMode: TextInput.Password } + + Item { height: 1; width: 1 } + + SettingsLabel { text: _('Device name') } + InputField { id: myGpoDeviceCaptionField; anchors.left: parent.left; anchors.right: parent.right } + + } + } + } +} + + PagePage { + id: settingsPage + lockToPortrait: mainPage.lockToPortrait + + property bool myGpoUserPassFilled: controller.myGpoUsername != '' && controller.myGpoPassword != '' + function loadSettings() { settingsAutorotate.checked = configProxy.autorotate settingsIndexing.checked = trackerMinerConfig.get_index_podcasts() @@ -233,6 +279,11 @@ myGpoDeviceCaptionField.text = controller.myGpoDeviceCaption } + onClosed: { + controller.myGpoEnabled = myGpoEnableSwitch.checked && myGpoUserPassFilled; + controller.saveMyGpoSettings(); + } + Item { id: myGpoSheetContent anchors.fill: parent @@ -315,35 +366,43 @@ Item { height: Config.largeSpacing; width: 1 } - SettingsLabel { text: _('Username') } - InputField { id: myGpoUsernameField; anchors.left: parent.left; anchors.right: parent.right } - - Item { height: 1; width: 1 } - - SettingsLabel { text: _('Password') } - InputField { id: myGpoPasswordField; anchors.left: parent.left; anchors.right: parent.right; echoMode: TextInput.Password } - - Item { height: 1; width: 1 } - - SettingsLabel { text: _('Device name') } - InputField { id: myGpoDeviceCaptionField; anchors.left: parent.left; anchors.right: parent.right } - + Button { + text: { + if (settingsPage.myGpoUserPassFilled) { + _('Sign out') + } else { + _('Sign in to gPodder.net') + } + } + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width * .8 + onClicked: { + if (settingsPage.myGpoUserPassFilled) { + /* Logout */ + controller.myGpoPassword = ''; + myGpoPasswordField.text = ''; + } else { + /* Login */ + pageStack.push(myGpoLoginPage); + } + } + } Item { height: Config.largeSpacing; width: 1 } Button { text: _('Replace list on server') anchors.horizontalCenter: parent.horizontalCenter width: parent.width * .8 + visible: settingsPage.myGpoUserPassFilled onClicked: { - settingsPage.close(); + pageStack.pop(); controller.myGpoUploadList(); } } - Item { height: Config.largeSpacing; width: 1 } - Button { text: _('No account? Register here') + visible: ! settingsPage.myGpoUserPassFilled anchors.horizontalCenter: parent.horizontalCenter width: parent.width * .8 onClicked: Qt.openUrlExternally('http://gpodder.net/register/')
View file
gpodder-3.5.0.tar.gz/share/man/man1/gpo.1 -> gpodder-3.7.0.tar.gz/share/man/man1/gpo.1
Changed
@@ -1,4 +1,4 @@ -.TH GPO "1" "March 2013" "gpodder 3.5.0" "User Commands" +.TH GPO "1" "May 2014" "gpodder 3.7.0" "User Commands" .SH NAME gpo \- Text mode interface of gPodder .SH SYNOPSIS
View file
gpodder-3.7.0.tar.gz/share/man/man1/gpodder-migrate2tres.1
Added
@@ -0,0 +1,13 @@ +.TH GPODDER-MIGRATE2TRES "1" "May 2012" "gpodder 3.2.0" "User Commands" +.SH NAME +gpodder-migrate2tres \- gpodder 2.x to 3.x profile migrator +.SH SYNOPSIS +.B gpodder-migrate2tres +.SH DESCRIPTION +Command-line utility to migrate user's gPodder 2.x configuration data for +use with gPodder 3.x. Invoke the command with no options to migrate the +configuration data for the current user. Feedback is provided. +.PP +The gpodder-backup utility (included with gPodder 2.x) can be used to +backup the configuration prior to migration. There isn't currently a +migration from gPodder 3.x to gPodder 2.x.
View file
gpodder-3.5.0.tar.gz/share/man/man1/gpodder.1 -> gpodder-3.7.0.tar.gz/share/man/man1/gpodder.1
Changed
@@ -1,5 +1,5 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.12. -.TH GPODDER "1" "March 2013" "gpodder 3.5.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.44.1. +.TH GPODDER "1" "May 2014" "gpodder 3.7.0" "User Commands" .SH NAME gpodder \- Media aggregator and podcast client .SH SYNOPSIS
View file
gpodder-3.5.0.tar.gz/src/gpodder/__init__.py -> gpodder-3.7.0.tar.gz/src/gpodder/__init__.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,10 +20,10 @@ # This metadata block gets parsed by setup.py - use single quotes only __tagline__ = 'Media aggregator and podcast client' __author__ = 'Thomas Perl <thp@gpodder.org>' -__version__ = '3.5.0' -__date__ = '2013-03-05' -__relname__ = 'The After Hours' -__copyright__ = '© 2005-2013 Thomas Perl and the gPodder Team' +__version__ = '3.7.0' +__date__ = '2014-05-17' +__relname__ = 'Off-Screen Bionic Chiseling' +__copyright__ = '© 2005-2014 Thomas Perl and the gPodder Team' __license__ = 'GNU General Public License, version 3 or later' __url__ = 'http://gpodder.org/' @@ -166,8 +166,23 @@ if ENV_DOWNLOADS not in os.environ: downloads = os.path.join(home, 'Downloads') +def fixup_home(old_home): + if ui.osx: + new_home = os.path.expanduser(os.path.join('~', 'Library', + 'Application Support', 'gPodder')) + + # Users who do not have the old home directory, or who have it but also + # have the new home directory (to cater to situations where the user + # might for some reason or the other have a ~/gPodder/ directory) get + # to use the new, more OS X-ish home. + if not os.path.exists(old_home) or os.path.exists(new_home): + return new_home + + return old_home + # Default locations for configuration and data files default_home = os.path.expanduser(os.path.join('~', 'gPodder')) +default_home = fixup_home(default_home) set_home(os.environ.get(ENV_HOME, default_home)) if home != default_home: @@ -182,7 +197,6 @@ # Plugins to load by default DEFAULT_PLUGINS = [ 'gpodder.plugins.soundcloud', - 'gpodder.plugins.xspf', ] def load_plugins():
View file
gpodder-3.5.0.tar.gz/src/gpodder/common.py -> gpodder-3.7.0.tar.gz/src/gpodder/common.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/config.py -> gpodder-3.7.0.tar.gz/src/gpodder/config.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -69,6 +69,11 @@ 'episodes': 200, # max episodes per feed }, + # Behavior of downloads + 'downloads': { + 'chronological_order': True, # download older episodes first + }, + # Automatic feed updates, download removal and retry on download timeout 'auto': { 'update': { @@ -146,7 +151,7 @@ 'episode_list': { 'descriptions': True, 'view_mode': 1, - 'columns': int('101', 2), # bitfield of visible columns + 'columns': int('110', 2), # bitfield of visible columns }, 'download_list': { @@ -157,8 +162,8 @@ # Synchronization with portable devices (MP3 players, etc..) 'device_sync': { - 'device_type': 'none', # Possible values: 'none', 'filesystem' - 'device_folder': '/media', + 'device_type': 'none', # Possible values: 'none', 'filesystem', 'ipod' + 'device_folder': '/media', 'one_folder_per_podcast': True, 'skip_played_episodes': True,
View file
gpodder-3.5.0.tar.gz/src/gpodder/core.py -> gpodder-3.7.0.tar.gz/src/gpodder/core.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/coverart.py -> gpodder-3.7.0.tar.gz/src/gpodder/coverart.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/dbsqlite.py -> gpodder-3.7.0.tar.gz/src/gpodder/dbsqlite.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -93,6 +93,9 @@ # Check schema version, upgrade if necessary schema.upgrade(self._db, self.database_file) + # Sanity checks for the data in the database + schema.check_data(self) + logger.debug('Database opened.') return self._db
View file
gpodder-3.5.0.tar.gz/src/gpodder/dbusproxy.py -> gpodder-3.7.0.tar.gz/src/gpodder/dbusproxy.py
Changed
@@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/download.py -> gpodder-3.7.0.tar.gz/src/gpodder/download.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/extensions.py -> gpodder-3.7.0.tar.gz/src/gpodder/extensions.py
Changed
@@ -98,12 +98,14 @@ # Default fallback metadata in case metadata fields are missing DEFAULTS = { 'description': _('No description for this extension.'), + 'doc': None, + 'payment': None, } SORTKEYS = { 'title': 1, 'description': 2, 'category': 3, - 'author': 4, + 'authors': 4, 'only_for': 5, 'mandatory_in': 6, 'disable_in': 7, @@ -489,6 +491,22 @@ pass @call_extensions + def on_episode_synced(self, device, episode): + """Called when an episode has been synced to device + + You can retrieve the filename via episode.local_filename(False) + For MP3PlayerDevice: + You can retrieve the filename on device via + device.get_episode_file_on_device(episode) + You can retrieve the folder name on device via + device.get_episode_folder_on_device(episode) + + @param device: A gpodder.sync.Device instance + @param episode: A gpodder.model.PodcastEpisode instance + """ + pass + + @call_extensions def on_episodes_context_menu(self, episodes): """Called when the episode list context menu is opened
View file
gpodder-3.5.0.tar.gz/src/gpodder/feedcore.py -> gpodder-3.7.0.tar.gz/src/gpodder/feedcore.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/feedservice.py -> gpodder-3.7.0.tar.gz/src/gpodder/feedservice.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/flattr.py -> gpodder-3.7.0.tar.gz/src/gpodder/flattr.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -226,3 +226,13 @@ self._worker_thread = util.run_in_background(lambda: self._worker_proc(), True) return (True, content.get('description', _('No description'))) + + def is_flattr_url(self, url): + if 'flattr.com' in url: + return True + return False + + def is_flattrable(self, url): + if self._config.token and self.is_flattr_url(url): + return True + return False
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/__init__.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/__init__.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/config.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/config.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -132,6 +132,9 @@ def connect_gtk_window(self, window, config_prefix, show_window=False): cfg = getattr(self.ui.gtk.state, config_prefix) + if gpodder.ui.win32: + window.set_gravity(gtk.gdk.GRAVITY_STATIC) + window.resize(cfg.width, cfg.height) if cfg.x == -1 or cfg.y == -1: window.set_position(gtk.WIN_POS_CENTER_ON_PARENT) @@ -144,7 +147,9 @@ def _receive_configure_event(widget, event): x_pos, y_pos = event.x, event.y width_size, height_size = event.width, event.height - if not self.__ignore_window_events and not cfg.maximized: + maximized = bool(event.window.get_state() & + gtk.gdk.WINDOW_STATE_MAXIMIZED) + if not self.__ignore_window_events and not maximized: cfg.x = x_pos cfg.y = y_pos cfg.width = width_size
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/desktop/__init__.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/desktop/__init__.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/desktop/channel.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/desktop/channel.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/desktop/deviceplaylist.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/desktop/deviceplaylist.py
Changed
@@ -31,9 +31,9 @@ def __init__(self, config, playlist_name): self._config=config self.linebreak = '\r\n' - self.playlist_file=playlist_name + '.m3u' + self.playlist_file=util.sanitize_filename(playlist_name + '.m3u') self.playlist_folder = os.path.join(self._config.device_sync.device_folder, self._config.device_sync.playlists.folder) - self.mountpoint = util.find_mount_point(self.playlist_folder) + self.mountpoint = util.find_mount_point(util.sanitize_encoding(self.playlist_folder)) if self.mountpoint == '/': self.mountpoint = self.playlist_folder logger.warning('MP3 player resides on / - using %s as MP3 player root', self.mountpoint) @@ -84,7 +84,7 @@ """ filename = self.get_filename_for_playlist(episode) if self._config.device_sync.one_folder_per_podcast: - filename = os.path.join(episode.channel.title, filename) + filename = os.path.join(util.sanitize_filename(episode.channel.title), filename) if self._config.device_sync.playlist.absolute_path: filename = os.path.join(util.relpath(self.mountpoint, self._config.device_sync.device_folder), filename) return filename
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/desktop/episodeselector.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/desktop/episodeselector.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@ from gpodder import util from gpodder.gtkui.interface.common import BuilderWidget +from gpodder.gtkui.interface.common import TreeViewHelper class gPodderEpisodeSelector(BuilderWidget): """Episode selection dialog @@ -222,6 +223,7 @@ self.episode_list_can_tooltip = True self.treeviewEpisodes.connect('button-press-event', self.treeview_episodes_button_pressed) + self.treeviewEpisodes.connect('popup-menu', self.treeview_episodes_button_pressed) self.treeviewEpisodes.set_rules_hint( True) self.treeviewEpisodes.set_model( self.model) self.treeviewEpisodes.columns_autosize() @@ -258,6 +260,9 @@ self.last_tooltip_episode = index description = util.remove_html_tags(description) + # Bug 1825: make sure description is a unicode string, + # so it may be cut correctly on UTF-8 char boundaries + description = util.convert_bytes(description) if description is not None: if len(description) > 400: description = description[:398]+'[...]' @@ -269,8 +274,8 @@ self.last_tooltip_episode = None return False - def treeview_episodes_button_pressed(self, treeview, event): - if event.button == 3: + def treeview_episodes_button_pressed(self, treeview, event=None): + if event is None or event.button == 3: menu = gtk.Menu() if len(self.selection_buttons): @@ -293,7 +298,11 @@ # the tooltip will not appear over the menu self.episode_list_can_tooltip = False menu.connect('deactivate', lambda menushell: self.episode_list_allow_tooltips()) - menu.popup(None, None, None, event.button, event.time) + if event is None: + func = TreeViewHelper.make_popup_position_func(treeview) + menu.popup(None, None, func, 3, 0) + else: + menu.popup(None, None, None, event.button, event.time) return True
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/desktop/podcastdirectory.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/desktop/podcastdirectory.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/desktop/preferences.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/desktop/preferences.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -34,6 +34,7 @@ from gpodder import youtube from gpodder.gtkui.interface.common import BuilderWidget +from gpodder.gtkui.interface.common import TreeViewHelper from gpodder.gtkui.interface.configeditor import gPodderConfigEditor from gpodder.gtkui.desktopfile import PlayerListModel @@ -68,6 +69,7 @@ gtk.ListStore.__init__(self, str, str) self._config = config self.append((_('None'), 'none')) + self.append((_('iPod'), 'ipod')) self.append((_('Filesystem-based'), 'filesystem')) def get_index(self): @@ -195,6 +197,11 @@ self.combobox_preferred_video_format.add_attribute(cellrenderer, 'text', self.preferred_video_format_model.C_CAPTION) self.combobox_preferred_video_format.set_active(self.preferred_video_format_model.get_index()) + self._config.connect_gtk_togglebutton('podcast_list_view_all', + self.checkbutton_show_all_episodes) + self._config.connect_gtk_togglebutton('podcast_list_sections', + self.checkbutton_podcast_sections) + self.update_interval_presets = [0, 10, 30, 60, 2*60, 6*60, 12*60] adjustment_update_interval = self.hscale_update_interval.get_adjustment() adjustment_update_interval.upper = len(self.update_interval_presets)-1 @@ -328,6 +335,55 @@ self.treeviewExtensions.set_model(self.extensions_model) self.treeviewExtensions.columns_autosize() + def on_treeview_extension_button_released(self, treeview, event): + if event.window != treeview.get_bin_window(): + return False + + if event.type == gtk.gdk.BUTTON_RELEASE and event.button == 3: + return self.on_treeview_extension_show_context_menu(treeview, event) + + return False + + def on_treeview_extension_show_context_menu(self, treeview, event=None): + selection = treeview.get_selection() + model, paths = selection.get_selected_rows() + container = model.get_value(model.get_iter(paths[0]), self.C_EXTENSION) + + if not container: + return + + menu = gtk.Menu() + + if container.metadata.doc: + menu_item = gtk.MenuItem(_('Documentation')) + menu_item.connect('activate', self.open_weblink, + container.metadata.doc) + menu.append(menu_item) + + menu_item = gtk.MenuItem(_('Extension info')) + menu_item.connect('activate', self.show_extension_info, model, container) + menu.append(menu_item) + + if container.metadata.payment: + if self.flattr.is_flattrable(container.metadata.payment): + menu_item = gtk.MenuItem(_('Flattr this')) + menu_item.connect('activate', self.flattr_extension, + container.metadata.payment) + else: + menu_item = gtk.MenuItem(_('Support the author')) + menu_item.connect('activate', self.open_weblink, + container.metadata.payment) + menu.append(menu_item) + + menu.show_all() + if event is None: + func = TreeViewHelper.make_popup_position_func(treeview) + menu.popup(None, None, func, 3, 0) + else: + menu.popup(None, None, None, 3, 0) + + return True + def set_flattr_preferences(self, widget=None): if not self._config.flattr.token: self.label_flattr.set_text(_('Please sign in with Flattr and Support Publishers')) @@ -383,12 +439,7 @@ _('Extension cannot be activated'), important=True) model.set_value(it, self.C_TOGGLE, False) - def on_treeview_extensions_row_activated(self, treeview, path, column): - model = treeview.get_model() - container = model.get_value(model.get_iter(path), self.C_EXTENSION) - self.show_extension_info(model, container) - - def show_extension_info(self, model, container): + def show_extension_info(self, w, model, container): if not container or not model: return @@ -400,6 +451,14 @@ self.show_message(info, _('Extension module info'), important=True) + def open_weblink(self, w, url): + util.open_website(url) + + def flattr_extension(self, w, flattr_url): + success, message = self.flattr.flattr_url(flattr_url) + self.show_message(message, title=_('Flattr status'), + important=not success) + def on_dialog_destroy(self, widget): # Re-enable mygpo sync if the user has selected it self._config.mygpo.enabled = self._enable_mygpo @@ -524,7 +583,7 @@ self.toggle_playlist_interface(True) def toggle_playlist_interface(self, enabled): - if enabled and self._config.device_sync.device_type != 'none': + if enabled and self._config.device_sync.device_type == 'filesystem': self.btn_playlistfolder.set_sensitive(True) self.btn_playlistfolder.set_label(self._config.device_sync.playlists.folder) self.checkbutton_delete_using_playlists.set_sensitive(True) @@ -561,6 +620,20 @@ self.toggle_playlist_interface(self._config.device_sync.playlists.create) self.combobox_on_sync.set_sensitive(True) self.checkbutton_skip_played_episodes.set_sensitive(True) + elif device_type == 'ipod': + self.btn_filesystemMountpoint.set_label(self._config.device_sync.device_folder) + self.btn_filesystemMountpoint.set_sensitive(True) + self.checkbutton_create_playlists.set_sensitive(False) + self.toggle_playlist_interface(False) + self.checkbutton_delete_using_playlists.set_sensitive(False) + self.combobox_on_sync.set_sensitive(False) + self.checkbutton_skip_played_episodes.set_sensitive(False) + + children = self.btn_filesystemMountpoint.get_children() + if children: + label = children.pop() + label.set_alignment(0., .5) + else: # TODO: Add support for iPod and MTP devices pass @@ -575,6 +648,8 @@ filename = fs.get_filename() if self._config.device_sync.device_type == 'filesystem': self._config.device_sync.device_folder = filename + elif self._config.device_sync.device_type == 'ipod': + self._config.device_sync.device_folder = filename # Request an update of the mountpoint button self.on_combobox_device_type_changed(None)
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/desktop/sync.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/desktop/sync.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -178,7 +178,7 @@ self.commit_changes_to_database() for current_channel in self.channels: #only sync those channels marked for syncing - if (current_channel.sync_to_mp3_player and self._config.device_sync.playlists.create): + if (self._config.device_sync.device_type=='filesystem' and current_channel.sync_to_mp3_player and self._config.device_sync.playlists.create): #get playlist object playlist=gPodderDevicePlaylist(self._config, @@ -187,12 +187,15 @@ #deleted episodes aren't included in playlists episodes_for_playlist=sorted(current_channel.get_episodes(gpodder.STATE_DOWNLOADED), key=lambda ep: ep.published) + #don't add played episodes to playlist if skip_played_episodes is True + if self._config.device_sync.skip_played_episodes: + episodes_for_playlist=filter(lambda ep: ep.is_new, episodes_for_playlist) playlist.write_m3u(episodes_for_playlist) #enable updating of UI self.enable_download_list_update() - if self._config.device_sync.playlists.create: + if (self._config.device_sync.device_type=='filesystem' and self._config.device_sync.playlists.create): title = _('Update successful') message = _('The playlist on your MP3 player has been updated.') self.notification(message, title, widget=self.preferences_widget) @@ -200,7 +203,8 @@ # Finally start the synchronization process @util.run_in_background def sync_thread_func(): - device.add_sync_tasks(episodes, force_played=force_played) + device.add_sync_tasks(episodes, force_played=force_played, + done_callback=self.enable_download_list_update) return
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/desktop/welcome.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/desktop/welcome.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/desktopfile.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/desktopfile.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/download.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/download.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/draw.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/draw.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -333,3 +333,40 @@ gc = pixmap.new_gc(foreground=red) pixmap.draw_layout(gc, x, y, layout) widget.set_from_pixmap(pixmap, mask) + + +def progressbar_pixbuf(width, height, percentage): + COLOR_BG = (.4, .4, .4, .4) + COLOR_FG = (.2, .9, .2, 1.) + COLOR_FG_HIGH = (1., 1., 1., .5) + COLOR_BORDER = (0., 0., 0., 1.) + + surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) + ctx = cairo.Context(surface) + + padding = int(float(width)/8.0) + bar_width = 2*padding + bar_height = height - 2*padding + bar_height_fill = bar_height*percentage + + # Background + ctx.rectangle(padding, padding, bar_width, bar_height) + ctx.set_source_rgba(*COLOR_BG) + ctx.fill() + + # Foreground + ctx.rectangle(padding, padding+bar_height-bar_height_fill, bar_width, bar_height_fill) + ctx.set_source_rgba(*COLOR_FG) + ctx.fill() + ctx.rectangle(padding+bar_width/3, padding+bar_height-bar_height_fill, bar_width/4, bar_height_fill) + ctx.set_source_rgba(*COLOR_FG_HIGH) + ctx.fill() + + # Border + ctx.rectangle(padding-.5, padding-.5, bar_width+1, bar_height+1) + ctx.set_source_rgba(*COLOR_BORDER) + ctx.set_line_width(1.) + ctx.stroke() + + return cairo_surface_to_pixbuf(surface) +
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/flattr.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/flattr.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/interface/__init__.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/interface/__init__.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/interface/addpodcast.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/interface/addpodcast.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/interface/common.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/interface/common.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -299,7 +299,18 @@ @staticmethod def make_popup_position_func(widget): def position_func(menu): - x, y = widget.window.get_origin() + x, y = widget.get_bin_window().get_origin() + + # If there's a selection, place the popup menu on top of + # the first-selected row (otherwise in the top left corner) + selection = widget.get_selection() + model, paths = selection.get_selected_rows() + if paths: + path = paths[0] + area = widget.get_cell_area(path, widget.get_column(0)) + x += area.x + y += area.y + return (x, y, True) return position_func
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/interface/configeditor.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/interface/configeditor.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/interface/progress.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/interface/progress.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/macosx.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/macosx.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/main.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/main.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@ import subprocess import glob import time +import threading import tempfile import collections import urllib @@ -139,9 +140,11 @@ self.episode_columns_menu = None self.config.add_observer(self.on_config_changed) - self.sw_shownotes = gtk.ScrolledWindow() - self.sw_shownotes.set_shadow_type(gtk.SHADOW_IN) - self.sw_shownotes.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.shownotes_pane = gtk.HBox() + if shownotes.have_webkit and self.config.enable_html_shownotes: + self.shownotes_object = shownotes.gPodderShownotesHTML(self.shownotes_pane) + else: + self.shownotes_object = shownotes.gPodderShownotesText(self.shownotes_pane) # Vertical paned for the episode list and shownotes self.vpaned = gtk.VPaned() @@ -149,23 +152,17 @@ self.vbox_episode_list.reparent(self.vpaned) self.vpaned.child_set_property(self.vbox_episode_list, 'resize', True) self.vpaned.child_set_property(self.vbox_episode_list, 'shrink', False) - self.vpaned.pack2(self.sw_shownotes, resize=False, shrink=False) + self.vpaned.pack2(self.shownotes_pane, resize=False, shrink=False) self.vpaned.show() # Minimum height for both episode list and shownotes self.vbox_episode_list.set_size_request(-1, 100) - self.sw_shownotes.set_size_request(-1, 100) + self.shownotes_pane.set_size_request(-1, 100) self.config.connect_gtk_paned('ui.gtk.state.main_window.episode_list_size', self.vpaned) paned.add2(self.vpaned) - if self.config.enable_html_shownotes and shownotes.have_webkit: - self.shownotes_object = shownotes.gPodderShownotesHTML(self.sw_shownotes) - else: - self.shownotes_object = shownotes.gPodderShownotesText(self.sw_shownotes) - - self.sw_shownotes.hide() self.new_episodes_window = None @@ -190,7 +187,6 @@ self.download_status_model = DownloadStatusModel() self.download_queue_manager = download.DownloadQueueManager(self.config) - self.itemShowAllEpisodes.set_active(self.config.podcast_list_view_all) self.itemShowToolbar.set_active(self.config.show_toolbar) self.itemShowDescription.set_active(self.config.episode_list_descriptions) @@ -199,8 +195,6 @@ self.config.connect_gtk_spinbutton('limit_rate_value', self.spinLimitDownloads) self.config.connect_gtk_togglebutton('limit_rate', self.cbLimitDownloads) - self.config.connect_gtk_togglebutton('podcast_list_sections', self.item_podcast_sections) - # When the amount of maximum downloads changes, notify the queue manager changed_cb = lambda spinbutton: self.download_queue_manager.spawn_threads() self.spinMaxDownloads.connect('value-changed', changed_cb) @@ -271,7 +265,8 @@ self.update_podcast_list_model(updated_urls) # Do the initial sync with the web service - util.idle_add(self.mygpo_client.flush, True) + if self.mygpo_client.can_access_webservice(): + util.idle_add(self.mygpo_client.flush, True) # First-time users should be asked if they want to see the OPML if not self.channels: @@ -885,7 +880,7 @@ if self.hbox_search_episodes.get_property('visible'): self.hide_episode_search() else: - self.sw_shownotes.hide() + self.shownotes_object.hide_pane() elif event.state & gtk.gdk.CONTROL_MASK: # Don't handle type-ahead when control is pressed (so shortcuts # with the Ctrl key still work, e.g. Ctrl+A, ...) @@ -918,13 +913,8 @@ def on_episode_list_selection_changed(self, selection): # Update the toolbar buttons self.play_or_download() - - rows = selection.count_selected_rows() - if rows != 1: - self.shownotes_object.set_episode(None) - elif self.sw_shownotes.get_property('visible'): - episode = self.get_selected_episodes()[0] - self.shownotes_object.set_episode(episode) + # and the shownotes + self.shownotes_object.set_episodes(self.get_selected_episodes()) def init_download_list_treeview(self): # enable multiple selection support @@ -1378,13 +1368,13 @@ message = self.format_episode_list(finished_downloads, 5) message += '\n\n<i>%s</i>\n' % _('Could not download some episodes:') message += self.format_episode_list(failed_downloads, 5) - self.show_message(message, _('Downloads finished'), True, widget=self.labelDownloads) + self.show_message(message, _('Downloads finished'), widget=self.labelDownloads) elif finished_downloads: message = self.format_episode_list(finished_downloads) self.show_message(message, _('Downloads finished'), widget=self.labelDownloads) elif failed_downloads: message = self.format_episode_list(failed_downloads) - self.show_message(message, _('Downloads failed'), True, widget=self.labelDownloads) + self.show_message(message, _('Downloads failed'), widget=self.labelDownloads) if finished_syncs and failed_syncs: message = self.format_episode_list(map((lambda task: str(task)),finished_syncs), 5) @@ -1427,6 +1417,9 @@ result = [] for title in episode_list[:min(len(episode_list), max_episodes)]: + # Bug 1834: make sure title is a unicode string, + # so it may be cut correctly on UTF-8 char boundaries + title = util.convert_bytes(title) if len(title) > MAX_TITLE_LENGTH: middle = (MAX_TITLE_LENGTH/2)-2 title = '%s...%s' % (title[0:middle], title[-middle:]) @@ -1509,16 +1502,6 @@ menu = gtk.Menu() - item = gtk.ImageMenuItem(_('Episode details')) - item.set_image(gtk.image_new_from_stock(gtk.STOCK_INFO, gtk.ICON_SIZE_MENU)) - if len(selected_tasks) == 1: - row_reference, task = selected_tasks[0] - episode = task.episode - item.connect('activate', lambda item: self.show_episode_shownotes(episode)) - else: - item.set_sensitive(False) - menu.append(item) - menu.append(gtk.SeparatorMenuItem()) if can_force: menu.append(make_menu_item(_('Start download now'), gtk.STOCK_GO_DOWN, selected_tasks, download.DownloadTask.QUEUED, True, True)) else: @@ -1675,6 +1658,27 @@ root_item.set_submenu(sub_menu) return sub_menu + def _submenu_item_activate_hack(self, item, callback, *args): + # See http://stackoverflow.com/questions/5221326/submenu-item-does-not-call-function-with-working-solution + # Note that we can't just call the callback on button-press-event, as + # it might be blocking (see http://gpodder.org/bug/1778), so we run + # this in the GUI thread at a later point in time (util.idle_add). + # Also, we also have to connect to the activate signal, as this is the + # only signal that is fired when keyboard navigation is used. + + # It can happen that both (button-release-event and activate) signals + # are fired, and we must avoid calling the callback twice. We do this + # using a semaphore and only acquiring (but never releasing) it, making + # sure that the util.idle_add() call below is only ever called once. + only_once = threading.Semaphore(1) + + def handle_event(item, event=None): + if only_once.acquire(False): + util.idle_add(callback, *args) + + item.connect('button-press-event', handle_event) + item.connect('activate', handle_event) + def treeview_available_show_context_menu(self, treeview, event=None): model, paths = self.treeview_handle_context_menu_click(treeview, event) if not paths: @@ -1732,9 +1736,8 @@ submenus = {} for label, callback in result: key, sep, title = label.rpartition('/') - item = gtk.MenuItem(title) - item.connect('activate', lambda item, callback: - callback(episodes), callback) + item = gtk.ImageMenuItem(title) + self._submenu_item_activate_hack(item, callback, episodes) if key: if key not in submenus: sub_menu = self._add_sub_menu(menu, key) @@ -1752,12 +1755,12 @@ item = gtk.ImageMenuItem(_('Local folder')) item.set_image(gtk.image_new_from_stock(gtk.STOCK_DIRECTORY, gtk.ICON_SIZE_MENU)) - item.connect('button-press-event', lambda w, ee: self.save_episodes_as_file(episodes)) + self._submenu_item_activate_hack(item, self.save_episodes_as_file, episodes) share_menu.append(item)
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/model.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/model.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -415,7 +415,7 @@ self.C_VIEW_SHOW_UNPLAYED, view_show_unplayed, \ self.C_DESCRIPTION, description, \ self.C_TOOLTIP, tooltip, \ - self.C_TIME, episode.get_play_info_string(duration_only=True), \ + self.C_TIME, episode.get_play_info_string(), \ self.C_TIME_VISIBLE, bool(episode.total_time), \ self.C_TOTAL_TIME, episode.total_time, \ self.C_LOCKED, episode.archive, \
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/opml.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/opml.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/services.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/services.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/shownotes.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/shownotes.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -33,6 +33,7 @@ logger = logging.getLogger(__name__) from gpodder import util +from gpodder.gtkui.draw import draw_text_box_centered try: @@ -48,21 +49,76 @@ class gPodderShownotes: - def __init__(self, scrolled_window): - self.scrolled_window = scrolled_window + def __init__(self, shownotes_pane): + self.shownotes_pane = shownotes_pane + + self.scrolled_window = gtk.ScrolledWindow() + self.scrolled_window.set_shadow_type(gtk.SHADOW_IN) + self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.scrolled_window.add(self.init()) self.scrolled_window.show_all() - def set_episode(self, episode): - if episode is None: - self.clear() + self.da_message = gtk.DrawingArea() + self.da_message.connect('expose-event', \ + self.on_shownotes_message_expose_event) + self.shownotes_pane.add(self.da_message) + self.shownotes_pane.add(self.scrolled_window) + + self.set_complain_about_selection(True) + self.hide_pane() + + # Either show the shownotes *or* a message, 'Please select an episode' + def set_complain_about_selection(self, message=True): + if message: self.scrolled_window.hide() + self.da_message.show() else: - heading = episode.title - subheading = _('from %s') % (episode.channel.title) - self.update(heading, subheading, episode) + self.da_message.hide() self.scrolled_window.show() + def set_episodes(self, selected_episodes): + if self.pane_is_visible: + if len(selected_episodes) == 1: + episode = selected_episodes[0] + heading = episode.title + subheading = _('from %s') % (episode.channel.title) + self.update(heading, subheading, episode) + self.set_complain_about_selection(False) + else: + self.set_complain_about_selection(True) + + def show_pane(self, selected_episodes): + self.pane_is_visible = True + self.set_episodes(selected_episodes) + self.shownotes_pane.show() + + def hide_pane(self): + self.pane_is_visible = False + self.shownotes_pane.hide() + + def toggle_pane_visibility(self, selected_episodes): + if self.pane_is_visible: + self.hide_pane() + else: + self.show_pane(selected_episodes) + + def on_shownotes_message_expose_event(self, drawingarea, event): + ctx = event.window.cairo_create() + ctx.rectangle(event.area.x, event.area.y, \ + event.area.width, event.area.height) + ctx.clip() + + # paint the background white + colormap = event.window.get_colormap() + gc = event.window.new_gc(foreground=colormap.alloc_color('white')) + event.window.draw_rectangle(gc, True, event.area.x, event.area.y, \ + event.area.width, event.area.height) + + x, y, width, height, depth = event.window.get_geometry() + text = _('Please select an episode') + draw_text_box_centered(ctx, drawingarea, width, height, text, None, None) + return False + class gPodderShownotesText(gPodderShownotes): def init(self): @@ -78,9 +134,6 @@ gtk.gdk.color_parse('#ffffff')) return self.text_view - def clear(self): - self.text_buffer.set_text('') - def update(self, heading, subheading, episode): self.text_buffer.set_text('') self.text_buffer.insert_with_tags_by_name(self.text_buffer.get_end_iter(), heading, 'heading') @@ -124,9 +177,6 @@ else: decision.ignore() - def clear(self): - self.html_view.load_html_string('', '') - def update(self, heading, subheading, episode): html = self.SHOWNOTES_HTML_TEMPLATE % ( cgi.escape(heading),
View file
gpodder-3.5.0.tar.gz/src/gpodder/gtkui/widgets.py -> gpodder-3.7.0.tar.gz/src/gpodder/gtkui/widgets.py
Changed
@@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/jsonconfig.py -> gpodder-3.7.0.tar.gz/src/gpodder/jsonconfig.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/log.py -> gpodder-3.7.0.tar.gz/src/gpodder/log.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/minidb.py -> gpodder-3.7.0.tar.gz/src/gpodder/minidb.py
Changed
@@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/model.py -> gpodder-3.7.0.tar.gz/src/gpodder/model.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # Copyright (c) 2011 Neal H. Walfield # # gPodder is free software; you can redistribute it and/or modify @@ -687,7 +687,7 @@ @property def sortdate(self): - return self.published_datetime().strftime('%F') + return self.published_datetime().strftime('%Y-%m-%d') @property def pubdate_day(self): @@ -717,6 +717,8 @@ duration = util.format_time(self.total_time) if duration_only and self.total_time > 0: return duration + elif self.is_finished(): + return '%s (%s)' % (_('Finished'), duration) elif self.current_position > 0 and \ self.current_position != self.total_time: position = util.format_time(self.current_position) @@ -805,6 +807,17 @@ else: logger.warn('Cannot set strategy to %d', download_strategy) + def rewrite_url(self, new_url): + new_url = util.normalize_feed_url(new_url) + if new_url is None: + return None + + self.url = new_url + self.http_etag = None + self.http_last_modified = None + self.save() + return new_url + def check_download_folder(self): """Check the download folder for externally-downloaded files @@ -818,6 +831,10 @@ for episode in self.get_episodes(gpodder.STATE_DOWNLOADED): if episode.was_downloaded(): filename = episode.local_filename(create=False) + if filename is None: + # No filename has been determined for this episode + continue + if not os.path.exists(filename): # File has been deleted by the user - simulate a # delete event (also marks the episode as deleted) @@ -1349,6 +1366,7 @@ def load_podcast(self, url, create=True, authentication_tokens=None, max_episodes=0): + assert all(url != podcast.url for podcast in self.get_podcasts()) return self.PodcastClass.load(self, url, create, authentication_tokens, max_episodes)
View file
gpodder-3.5.0.tar.gz/src/gpodder/my.py -> gpodder-3.7.0.tar.gz/src/gpodder/my.py
Changed
@@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -326,7 +326,9 @@ return self._config.mygpo.device.uid def can_access_webservice(self): - return self._config.mygpo.enabled and self._config.mygpo.device.uid + return self._config.mygpo.enabled and \ + self._config.mygpo.username and \ + self._config.mygpo.device.uid def set_subscriptions(self, urls): if self.can_access_webservice(): @@ -426,8 +428,9 @@ else: must_retry = True - if not must_retry: - # No more pending actions. Ready to quit. + if not must_retry or not self.can_access_webservice(): + # No more pending actions, or no longer enabled. + # Ready to quit. break logger.debug('Worker thread finished.') @@ -501,7 +504,7 @@ # Save the "since" value for later use self._store.update(since_o, since=changes.since) - except MissingCredentials: + except (MissingCredentials, mygpoclient.http.Unauthorized): # handle outside raise @@ -527,8 +530,8 @@ logger.debug('Episode actions have been uploaded to the server.') return True - except MissingCredentials: - logger.warn('No credentials configured. Disabling gpodder.net.') + except (MissingCredentials, mygpoclient.http.Unauthorized): + logger.warn('Invalid credentials. Disabling gpodder.net.') self._config.mygpo.enabled = False return False @@ -592,8 +595,8 @@ logger.debug('All actions have been uploaded to the server.') return True - except MissingCredentials: - logger.warn('No credentials configured. Disabling gpodder.net.') + except (MissingCredentials, mygpoclient.http.Unauthorized): + logger.warn('Invalid credentials. Disabling gpodder.net.') self._config.mygpo.enabled = False return False @@ -609,8 +612,8 @@ logger.debug('Device settings uploaded.') return True - except MissingCredentials: - logger.warn('No credentials configured. Disabling gpodder.net.') + except (MissingCredentials, mygpoclient.http.Unauthorized): + logger.warn('Invalid credentials. Disabling gpodder.net.') self._config.mygpo.enabled = False return False @@ -625,8 +628,8 @@ try: devices = self._client.get_devices() - except MissingCredentials: - logger.warn('No credentials configured. Disabling gpodder.net.') + except (MissingCredentials, mygpoclient.http.Unauthorized): + logger.warn('Invalid credentials. Disabling gpodder.net.') self._config.mygpo.enabled = False raise
View file
gpodder-3.5.0.tar.gz/src/gpodder/opml.py -> gpodder-3.7.0.tar.gz/src/gpodder/opml.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/pipe/__init__.py -> gpodder-3.7.0.tar.gz/src/gpodder/pipe/__init__.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/player.py -> gpodder-3.7.0.tar.gz/src/gpodder/player.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/plugins/__init__.py -> gpodder-3.7.0.tar.gz/src/gpodder/plugins/__init__.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/plugins/soundcloud.py -> gpodder-3.7.0.tar.gz/src/gpodder/plugins/soundcloud.py
Changed
@@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/qmlui/__init__.py -> gpodder-3.7.0.tar.gz/src/gpodder/qmlui/__init__.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -140,6 +140,7 @@ self._busy = False self.updating_podcasts = 0 self.current_episode = None + self._subscribe_in_progress = False # Upcalls to the GUI @@ -297,6 +298,9 @@ return count = len(selected) + # JS/QML/PySide might convert the array of indices to an array of floats, + # so we need to convert these floats back to integers (bug 1802) + selected = map(int, selected) episodes = map(lambda idx: self.root.episode_model._filtered[idx], selected) def delete(): @@ -522,6 +526,13 @@ return episode return None + @Slot(QObject) + def updatePodcast(self, podcast): + if not self.request_connection(): + return + if not podcast.pause_subscription: + podcast.qupdate(finished_callback=self.update_subset_stats) + @Slot() def updateAllPodcasts(self): if not self.request_connection(): @@ -577,11 +588,8 @@ assert index < len(self.context_menu_actions) action = self.context_menu_actions[index] if action.action == 'update': - if not self.request_connection(): - return podcast = action.target - if not podcast.pause_subscription: - podcast.qupdate(finished_callback=self.update_subset_stats) + self.updatePodcast(podcast) elif action.action == 'force-update': action.target.qupdate(force=True, \ finished_callback=self.update_subset_stats) @@ -598,6 +606,9 @@ # Remove queued episodes for this specific podcast self.removeQueuedEpisodesForPodcast.emit(action.target) + # Update statistics in "All episodes" + self.update_subset_stats() + self.root.podcast_model.remove_object(action.target) self.root.mygpo_client.on_unsubscribe([action.target.url]) self.root.mygpo_client.flush() @@ -754,7 +765,16 @@ @Slot('QVariant') def addSubscriptions(self, urls): + if self._subscribe_in_progress: + logger.warn('addSubscriptions call ignored (already subscribing)') + return + + self._subscribe_in_progress = True + def not_yet_subscribed(url): + if not url: + return False + for podcast in self.root.podcast_model.get_objects(): if isinstance(podcast, model.EpisodeSubsetView): continue @@ -765,14 +785,14 @@ return True - urls = map(util.normalize_feed_url, urls) - urls = filter(not_yet_subscribed, urls) + urls = filter(not_yet_subscribed, map(util.normalize_feed_url, urls)) - def subscribe_proc(self, urls): + @util.run_in_background + def subscribe_proc(): self.startProgress.emit(_('Adding podcasts...')) + failed = [] try: for idx, url in enumerate(urls): - print idx, url self.startProgress.emit(_('Adding podcasts...') + ' (%d/%d)' % (idx, len(urls))) try: podcast = self.root.model.load_podcast(url=url, create=True, @@ -780,12 +800,21 @@ podcast.save() self.root.insert_podcast(model.QPodcast(podcast)) except Exception, e: - logger.warn('Cannot add pocast: %s', e) - # XXX: Visual feedback in the QML UI + logger.warn('Cannot add podcast: %s', url, exc_info=True) + failed.append((url, str(e))) finally: self.endProgress.emit() + self._subscribe_in_progress = False + self.update_subset_stats() + + def format_error(failed): + yield _('Could not add some podcasts:') + yield '' + for url, error in failed: + yield ': '.join((url, error)) if error else url - util.run_in_background(lambda: subscribe_proc(self, urls)) + if failed: + self.showMessage.emit('\n'.join(format_error(failed))) @Slot(QObject) def currentEpisodeChanging(self, episode): @@ -1037,6 +1066,7 @@ self.tracker_miner_config) root_context.setContextProperty('podcastModel', self.podcast_model) root_context.setContextProperty('episodeModel', self.episode_model) + root_context.setContextProperty('isSailfish', gpodder.ui.sailfish) for folder in gpodder.ui_folders: if gpodder.ui.sailfish:
View file
gpodder-3.5.0.tar.gz/src/gpodder/qmlui/helper.py -> gpodder-3.7.0.tar.gz/src/gpodder/qmlui/helper.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/qmlui/images.py -> gpodder-3.7.0.tar.gz/src/gpodder/qmlui/images.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/qmlui/model.py -> gpodder-3.7.0.tar.gz/src/gpodder/qmlui/model.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/query.py -> gpodder-3.7.0.tar.gz/src/gpodder/query.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/schema.py -> gpodder-3.7.0.tar.gz/src/gpodder/schema.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,6 +25,9 @@ import time import shutil +import logging +logger = logging.getLogger(__name__) + EpisodeColumns = ( 'podcast_id', 'title', @@ -281,3 +284,10 @@ new_db.commit() new_db.close() +def check_data(db): + # All episodes must be assigned to a podcast + orphan_episodes = db.get('SELECT COUNT(id) FROM episode ' + 'WHERE podcast_id NOT IN (SELECT id FROM podcast)') + if orphan_episodes > 0: + logger.error('Orphaned episodes found in database') +
View file
gpodder-3.5.0.tar.gz/src/gpodder/services.py -> gpodder-3.7.0.tar.gz/src/gpodder/services.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/sync.py -> gpodder-3.7.0.tar.gz/src/gpodder/sync.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -41,15 +41,13 @@ # pymtp_available = False -gpod_available = False +gpod_available = True +try: + import gpod +except: + gpod_available = False + logger.warning('Could not find gpod') -#gpod_available = True -#try: -# import gpod -#except: -# gpod_available = False -# logger.warning('Could not find gpod') -# #pymtp_available = True #try: # import gpodder.gpopymtp as pymtp @@ -58,9 +56,9 @@ # logger.warning('Could not load gpopymtp (libmtp not installed?).') try: - import eyeD3 + import eyed3.mp3 except: - logger.warning('Could not find eyeD3') + logger.warning('Could not find eyed3.mp3') import os.path import glob @@ -114,8 +112,11 @@ def open_device(gui): config = gui._config device_type = gui._config.device_sync.device_type - - if device_type == 'filesystem': + if device_type == 'ipod': + return iPodDevice(config, + gui.download_status_model, + gui.download_queue_manager) + elif device_type == 'filesystem': return MP3PlayerDevice(config, gui.download_status_model, gui.download_queue_manager) @@ -133,10 +134,10 @@ logger.info('Please install MPlayer for track length detection.') try: - eyed3_info = eyeD3.Mp3AudioFile(filename) - return int(eyed3_info.getPlayTime()*1000) - except: - pass + mp3file = eyed3.mp3.Mp3AudioFile(filename) + return int(mp3file.info.time_secs * 1000) + except Exception, e: + logger.warn('Could not determine length: %s', filename, exc_info=True) return int(60*60*1000*3) # Default is three hours (to be on the safe side) @@ -202,7 +203,7 @@ logger.warning('Not syncing disks. Unmount your device before unplugging.') return True - def add_sync_tasks(self,tracklist, force_played=False): + def add_sync_tasks(self,tracklist, force_played=False, done_callback=None): for track in list(tracklist): # Filter tracks that are not meant to be synchronized does_not_exist = not track.was_downloaded(and_exists=True) @@ -229,6 +230,9 @@ else: logger.warning("No episodes to sync") + if done_callback: + done_callback() + return True def remove_tracks(self, tracklist): @@ -263,11 +267,14 @@ return None class iPodDevice(Device): - def __init__(self, config): + def __init__(self, config, + download_status_model, + download_queue_manager): Device.__init__(self, config) - self.mountpoint = str(self._config.ipod_mount) - + self.mountpoint = self._config.device_sync.device_folder + self.download_status_model = download_status_model + self.download_queue_manager = download_queue_manager self.itdb = None self.podcast_playlist = None @@ -397,13 +404,15 @@ gpod.itdb_track_unlink(track) util.delete_file(filename) - def add_track(self, episode): + def add_track(self, episode,reporthook=None): self.notify('status', _('Adding %s') % episode.title) - for track in gpod.sw_get_playlist_tracks(self.podcasts_playlist): - if episode.url == track.podcasturl: - # Mark as played on iPod if played locally (and set podcast flags) - self.set_podcast_flags(track, episode) - return True + tracklist = gpod.sw_get_playlist_tracks(self.podcasts_playlist) + podcasturls=[track.podcasturl for track in tracklist] + + if episode.url in podcasturls: + # Mark as played on iPod if played locally (and set podcast flags) + self.set_podcast_flags(tracklist[podcasturls.index(episode.url)], episode) + return True original_filename = episode.local_filename(create=False) # The file has to exist, if we ought to transfer it, and therefore, @@ -419,7 +428,7 @@ self.cancelled = True return False - local_filename = self.convert_track(episode) + local_filename = episode.local_filename(create=False) (fn, extension) = os.path.splitext(local_filename) if extension.lower().endswith('ogg'): @@ -428,17 +437,17 @@ track = gpod.itdb_track_new() - # Add release time to track if pubdate has a valid value - if episode.pubdate > 0: + # Add release time to track if episode.published has a valid value + if episode.published > 0: try: # libgpod>= 0.5.x uses a new timestamp format - track.time_released = gpod.itdb_time_host_to_mac(int(episode.pubdate)) + track.time_released = gpod.itdb_time_host_to_mac(int(episode.published)) except: # old (pre-0.5.x) libgpod versions expect mactime, so # we're going to manually build a good mactime timestamp here :) # # + 2082844800 for unixtime => mactime (1970 => 1904) - track.time_released = int(episode.pubdate + 2082844800) + track.time_released = int(episode.published + 2082844800) track.title = str(episode.title) track.album = str(episode.channel.title) @@ -464,9 +473,7 @@ gpod.itdb_playlist_add_track(self.master_playlist, track, -1) gpod.itdb_playlist_add_track(self.podcasts_playlist, track, -1) copied = gpod.itdb_cp_track_to_ipod(track, str(local_filename), None) - - if copied and gpodder.user_hooks is not None: - gpodder.user_hooks.on_file_copied_to_ipod(self, local_filename) + reporthook(episode.file_size, 1, episode.file_size) # If the file has been converted, delete the temporary file here if local_filename != original_filename: @@ -510,32 +517,28 @@ return False - def add_track(self, episode,reporthook=None): - self.notify('status', _('Adding %s') % episode.title.decode('utf-8', 'ignore')) - + def get_episode_folder_on_device(self, episode): if self._config.device_sync.one_folder_per_podcast: # Add channel title as subfolder folder = episode.channel.title # Clean up the folder name for use on limited devices folder = util.sanitize_filename(folder, - self._config.device_sync.max_filename_length) + self._config.device_sync.max_filename_length) folder = os.path.join(self.destination, folder) else: folder = self.destination - folder = util.sanitize_encoding(folder) + return util.sanitize_encoding(folder) - filename = episode.local_filename(create=False) - # The file has to exist, if we ought to transfer it, and therefore, - # local_filename(create=False) must never return None as filename - assert filename is not None -
View file
gpodder-3.5.0.tar.gz/src/gpodder/test/__init__.py -> gpodder-3.7.0.tar.gz/src/gpodder/test/__init__.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/test/model.py -> gpodder-3.7.0.tar.gz/src/gpodder/test/model.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/unittests.py -> gpodder-3.7.0.tar.gz/src/gpodder/unittests.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/util.py -> gpodder-3.7.0.tar.gz/src/gpodder/util.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # Copyright (c) 2011 Neal H. Walfield # # gPodder is free software; you can redistribute it and/or modify @@ -209,7 +209,6 @@ 'fb:': 'http://feeds.feedburner.com/%s', 'yt:': 'http://www.youtube.com/rss/user/%s/videos.rss', 'sc:': 'http://soundcloud.com/%s', - 'fm4od:': 'http://onapp1.orf.at/webcam/fm4/fod/%s.xspf', # YouTube playlists. To get a list of playlists per-user, use: # https://gdata.youtube.com/feeds/api/users/<username>/playlists 'ytpl:': 'http://gdata.youtube.com/feeds/api/playlists/%s', @@ -1685,7 +1684,7 @@ process = subprocess.Popen(['ifconfig'], stdout=subprocess.PIPE) stdout, _ = process.communicate() for i in re.split('\n(?!\t)', stdout, re.MULTILINE): - b = re.match('(\\w+):.*status: active$', i, re.MULTILINE | re.DOTALL) + b = re.match('(\\w+):.*status: (active|associated)$', i, re.MULTILINE | re.DOTALL) if b: yield b.group(1) @@ -1759,3 +1758,10 @@ return (False, None) +def delete_empty_folders(top): + for root, dirs, files in os.walk(top, topdown=False): + for name in dirs: + dirname = os.path.join(root, name) + if not os.listdir(dirname): + os.rmdir(name) +
View file
gpodder-3.5.0.tar.gz/src/gpodder/vimeo.py -> gpodder-3.7.0.tar.gz/src/gpodder/vimeo.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,11 +30,20 @@ import logging logger = logging.getLogger(__name__) +try: + # For Python < 2.6, we use the "simplejson" add-on module + import simplejson as json +except ImportError: + # Python 2.6 already ships with a nice "json" module + import json + import re VIMEOCOM_RE = re.compile(r'http://vimeo\.com/(\d+)$', re.IGNORECASE) MOOGALOOP_RE = re.compile(r'http://vimeo\.com/moogaloop\.swf\?clip_id=(\d+)$', re.IGNORECASE) SIGNATURE_RE = re.compile(r'"timestamp":(\d+),"signature":"([^"]+)"') +DATA_CONFIG_RE = re.compile(r'data-config-url="([^"]+)"') + class VimeoError(BaseException): pass @@ -49,23 +58,28 @@ web_url = 'http://vimeo.com/%s' % video_id web_data = util.urlopen(web_url).read() - sig_pair = SIGNATURE_RE.search(web_data) - - if sig_pair is None: - raise VimeoError('Cannot get signature pair from Vimeo') - - timestamp, signature = sig_pair.groups() - params = '&'.join('%s=%s' % i for i in [ - ('clip_id', video_id), - ('sig', signature), - ('time', timestamp), - ('quality', quality), - ('codecs', codecs), - ('type', 'moogaloop_local'), - ('embed_location', ''), - ]) - player_url = 'http://player.vimeo.com/play_redirect?%s' % params - return player_url + data_config_frag = DATA_CONFIG_RE.search(web_data) + + if data_config_frag is None: + raise VimeoError('Cannot get data config from Vimeo') + + data_config_url = data_config_frag.group(1).replace('&', '&') + + def get_urls(data_config_url): + data_config_data = util.urlopen(data_config_url).read().decode('utf-8') + data_config = json.loads(data_config_data) + for fileinfo in data_config['request']['files'].values(): + if not isinstance(fileinfo, dict): + continue + + for fileformat, keys in fileinfo.items(): + if not isinstance(keys, dict): + continue + + yield (fileformat, keys['url']) + + for quality, url in get_urls(data_config_url): + return url def get_vimeo_id(url): result = MOOGALOOP_RE.match(url)
View file
gpodder-3.5.0.tar.gz/src/gpodder/webui/__init__.py -> gpodder-3.7.0.tar.gz/src/gpodder/webui/__init__.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/src/gpodder/youtube.py -> gpodder-3.7.0.tar.gz/src/gpodder/youtube.py
Changed
@@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -111,12 +111,12 @@ # Try to find the best video format available for this video # (http://forum.videohelp.com/topic336882-1800.html#1912972) def find_urls(page): - r4 = re.search('.*&url_encoded_fmt_stream_map=([^&]+)&.*', page) + r4 = re.search('url_encoded_fmt_stream_map=([^&]+)', page) if r4 is not None: fmt_url_map = urllib.unquote(r4.group(1)) for fmt_url_encoded in fmt_url_map.split(','): video_info = parse_qs(fmt_url_encoded) - yield int(video_info['itag'][0]), video_info['url'][0] + "&signature=" + video_info['sig'][0] + yield int(video_info['itag'][0]), video_info['url'][0] else: error_info = parse_qs(page) error_message = util.remove_html_tags(error_info['reason'][0])
View file
gpodder-3.5.0.tar.gz/tools/generate-ubuntu-source.sh -> gpodder-3.7.0.tar.gz/tools/generate-ubuntu-source.sh
Changed
@@ -7,7 +7,7 @@ FOLDER=`echo $SOURCEFILE | sed -e 's/\([^_]*\)_.*/\1/g'`-${VERSION} # See https://wiki.ubuntu.com/DevelopmentCodeNames -UBUNTU_RELEASES="maverick natty oneiric precise quantal" +UBUNTU_RELEASES="precise quantal raring saucy trusty utopic" echo "SOURCEFILE = $SOURCEFILE" echo "VERSION = $VERSION"
View file
gpodder-3.5.0.tar.gz/tools/mac-osx/makefile -> gpodder-3.7.0.tar.gz/tools/mac-osx/makefile
Changed
@@ -1,6 +1,6 @@ # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/tools/win32-launcher/gpodder.c -> gpodder-3.7.0.tar.gz/tools/win32-launcher/gpodder.c
Changed
@@ -1,7 +1,7 @@ /** * gPodder - A media aggregator and podcast client - * Copyright (c) 2005-2013 Thomas Perl and the gPodder Team + * Copyright (c) 2005-2014 Thomas Perl and the gPodder Team * * gPodder is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by
View file
gpodder-3.5.0.tar.gz/tools/win32-launcher/makefile -> gpodder-3.7.0.tar.gz/tools/win32-launcher/makefile
Changed
@@ -1,6 +1,6 @@ # # gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2013 Thomas Perl and the gPodder Team +# Copyright (c) 2005-2014 Thomas Perl and the gPodder Team # # gPodder is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.