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 24
View file
gpodder3.changes
Changed
@@ -1,4 +1,51 @@ ------------------------------------------------------------------- +Mon Apr 19 07:50:18 UTC 2021 - Fridrich Strba <fridrich.strba@bluewin.ch> + +- Update to 3.10.19 + * New features + + #897 add 'Always show new episodes' toggle to view menu + + #966 add combined duration and size columns to episode list + + #971 make sections selectable + filter episodes on channel + search pattern + * Improvements + + #843 use the requests package (compressed feeds, redirects, + and more) + + #919 log youtube-dl version and warn if known to have issues + + #930 prevent 'add podcast' text entry from expanding + vertically + + #931 refactor shownotes + + #933 get correct window size when saving UI state + + #933 do not save or restore window position + + #943 set episode selector title before creating window + + #946 narrow down About dialog, pack items vertically + + #952 don't reset last folder to home if cancel is selected in + 'Send to' dialog + + #951 skip episode media with 'application/*' mime type, if + there is video or audio + + #953 make layouting calculations clearer in draw_text_pill() + + #957 strip HTML tags from channel descriptions + + #965 disable context menu item if channel or episode has no + website + + #962 remove deprecated gtk elements in preferences dialog + + remove config.player and config.videoplayer from legacy + settings + + #968 show URL that caused invalid feed error + + #984 require either DISPLAY or WAYLAND_DISPLAY being set + * Bug fixes + + fix macOS dependencies + + revert window position save and restore code + + fix #608 308 redirects + + fix #905 HTTPS_PROXY + + #910, #913, #915 fix windows installer build script + + #927 don't leak kernel version in user-agent + + #940 fix uncaught exception on channel list key navigation + + fix gtk warnings in mass unsubscribe dialog when podcast title + contains ampersand, etc. + + #954 fix unit tests + + #970 fix warning on non-200 status codes in coverart + + #975 fix connectivity checking + +------------------------------------------------------------------- Mon Nov 23 09:19:34 UTC 2020 - Fridrich Strba <fridrich.strba@bluewin.ch> - Update to 3.10.17
View file
gpodder3.spec
Changed
@@ -18,7 +18,7 @@ Name: gpodder3 -Version: 3.10.17 +Version: 3.10.19 Release: 0 Summary: A free podcast aggregator for Linux License: GPL-3.0-or-later
View file
3.10.17.tar.gz/po/tr_TR.po
Deleted
@@ -1,2435 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: gPodder\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\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/" -"language/tr_TR/)\n" -"Language: tr_TR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: src/gpodder/config.py:54 -#, python-format -msgid "gPodder on %s" -msgstr "" - -#: src/gpodder/deviceplaylist.py:98 -#, python-format -msgid "Folder %s could not be created." -msgstr "" - -#: src/gpodder/deviceplaylist.py:98 -msgid "Error writing playlist" -msgstr "" - -#: src/gpodder/directory.py:97 -msgid "gpodder.net search" -msgstr "" - -#: src/gpodder/directory.py:107 -msgid "OPML from web" -msgstr "" - -#: src/gpodder/directory.py:117 -msgid "OPML file" -msgstr "" - -#: src/gpodder/directory.py:127 share/gpodder/ui/gtk/gpodderwelcome.ui.h:1 -msgid "Getting started" -msgstr "" - -#: src/gpodder/directory.py:137 -msgid "gpodder.net Top 50" -msgstr "" - -#: src/gpodder/directory.py:147 -msgid "gpodder.net Tags" -msgstr "" - -#: src/gpodder/directory.py:160 -msgid "Soundcloud search" -msgstr "" - -#: src/gpodder/directory.py:174 -msgid "Imported OPML file" -msgstr "" - -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 -msgid "Added" -msgstr "" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 -msgid "Queued" -msgstr "" - -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 -msgid "Downloading" -msgstr "" - -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 -msgid "Finished" -msgstr "" - -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 -msgid "Failed" -msgstr "" - -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 -msgid "Cancelled" -msgstr "" - -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 -msgid "Paused" -msgstr "" - -#: src/gpodder/download.py:931 -msgid "Missing content from server" -msgstr "" - -#: src/gpodder/download.py:937 -#, python-format -msgid "I/O Error: %(error)s: %(filename)s" -msgstr "" - -#: src/gpodder/download.py:944 -#, python-format -msgid "HTTP Error %(code)s: %(message)s" -msgstr "" - -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 -#, python-format -msgid "Error: %s" -msgstr "" - -#: src/gpodder/extensions.py:55 -msgid "Desktop Integration" -msgstr "" - -#: src/gpodder/extensions.py:56 -msgid "Interface" -msgstr "" - -#: src/gpodder/extensions.py:57 -msgid "Post download" -msgstr "" - -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 -msgid "Other" -msgstr "" - -#: src/gpodder/extensions.py:100 -msgid "No description for this extension." -msgstr "" - -#: src/gpodder/extensions.py:220 -#, python-format -msgid "Command not found: %(command)s" -msgstr "" - -#: src/gpodder/extensions.py:236 -#, python-format -msgid "Need at least one of the following commands: %(list_of_commands)s" -msgstr "" - -#: src/gpodder/extensions.py:273 -#, python-format -msgid "Python module not found: %(module)s" -msgstr "" - -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 -msgid "No description available" -msgstr "" - -#: src/gpodder/model.py:715 -msgid "unknown" -msgstr "" - -#: src/gpodder/model.py:786 -msgid "Default" -msgstr "" - -#: src/gpodder/model.py:787 -msgid "Only keep latest" -msgstr "" - -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 -#: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 -msgid "Video" -msgstr "" - -#: src/gpodder/model.py:1230 -msgid "Audio" -msgstr "" - -#: src/gpodder/model.py:1409 -#, python-format -msgid "" -"Warning: path to gPodder home (%(root)s) is very long and can result in " -"failure to download files.\n" -msgstr "" - -#: src/gpodder/model.py:1411 -msgid "You're advised to set it to a shorter path." -msgstr "" - -#: src/gpodder/my.py:179 -#, python-format -msgid "Add %s" -msgstr "" - -#: src/gpodder/my.py:181 -#, python-format -msgid "Remove %s"
View file
3.10.17.tar.gz/pytest.ini
Deleted
@@ -1,2 +0,0 @@ -[pytest] -addopts = --doctest-modules src/gpodder \ No newline at end of file
View file
3.10.17.tar.gz/src/gpodder/escapist_videos.py
Deleted
@@ -1,185 +0,0 @@ -# -*- coding: utf-8 -*- -# -# gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2018 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/>. -# - -# -# gpodder.escapist - Escapist Videos download magic -# somini <somini29@yandex.com>; 2014-09-14 -# - - -import json -import logging -import re -import urllib.error -import urllib.parse -import urllib.request - -import gpodder -from gpodder import registry, util - -logger = logging.getLogger(__name__) - - -# This matches the more reliable URL -ESCAPIST_NUMBER_RE = re.compile(r'http://www.escapistmagazine.com/videos/view/(\d+)', re.IGNORECASE) -# This matches regular URL, mainly those that come in the RSS feeds -ESCAPIST_REGULAR_RE = re.compile(r'http://www.escapistmagazine.com/videos/view/([\w-]+)/(\d+)-', re.IGNORECASE) -# This finds the RSS for a given URL -DATA_RSS_RE = re.compile(r'http://www.escapistmagazine.com/rss/videos/list/([1-9][0-9]*)\.xml') -# This matches the "configuration". The important part is the JSON between the parens -DATA_CONFIG_RE = re.compile(r'imsVideo\.play\((.*)\)\;\<\/script\>', re.IGNORECASE) -# This matches the cover art for an RSS. We shouldn't parse XML with regex. -DATA_COVERART_RE = re.compile(r'<url>(http:.+\.jpg)</url>') - - -class EscapistError(BaseException): pass - - -@registry.download_url.register -def escapist_real_download_url(unused_config, episode, allow_partial): - res = get_real_download_url(episode.url) - return None if res == episode.url else res - - -def get_real_download_url(url): - video_id = get_escapist_id(url) - if video_id is None: - return url - - web_data = get_escapist_web(video_id) - - data_config_frag = DATA_CONFIG_RE.search(web_data) - - data_config_url = get_escapist_config_url(data_config_frag.group(1)) - - if data_config_url is None: - raise EscapistError('Cannot parse configuration from the site') - - logger.debug('Config URL: %s', data_config_url) - - data_config_data = util.urlopen(data_config_url).read().decode('utf-8') - - # TODO: This second argument should get a real name - real_url = get_escapist_real_url(data_config_data, data_config_frag.group(1)) - - if real_url is None: - raise EscapistError('Cannot get MP4 URL from The Escapist') - elif "sales-marketing/" in real_url: - raise EscapistError('Oops, seems The Escapist blocked this IP. Wait a few days/weeks to get it unblocked') - else: - return real_url - - -def get_escapist_id(url): - result = ESCAPIST_NUMBER_RE.match(url) - if result is not None: - return result.group(1) - - result = ESCAPIST_REGULAR_RE.match(url) - if result is not None: - return result.group(2) - - return None - - -def is_video_link(url): - return (get_escapist_id(url) is not None) - - -def get_real_channel_url(url): - video_id = get_escapist_id(url) - if video_id is None: - return url - - web_data = get_escapist_web(video_id) - - data_config_frag = DATA_RSS_RE.search(web_data) - if data_config_frag is None: - raise EscapistError('Cannot get RSS URL from The Escapist') - return data_config_frag.group(0) - - -def get_real_cover(url): - rss_url = get_real_channel_url(url) - if rss_url is None: - return None - - # FIXME: can I be sure to decode it as utf-8? - rss_data = util.urlopen(rss_url).read() - rss_data_frag = DATA_COVERART_RE.search(rss_data) - - if rss_data_frag is None: - return None - - return rss_data_frag.group(1) - - -def get_escapist_web(video_id): - if video_id is None: - return None - - # FIXME: must check if it's utf-8 - web_url = 'http://www.escapistmagazine.com/videos/view/%s' % video_id - return util.urlopen(web_url).read() - - -def get_escapist_config_url(data): - if data is None: - return None - - query_string = urllib.parse.urlencode(json.loads(data)) - - return 'http://www.escapistmagazine.com/videos/vidconfig.php?%s' % query_string - - -def get_escapist_real_url(data, config_json): - if data is None: - return None - - config_data = json.loads(config_json) - if config_data is None: - return None - - # The data is scrambled, unscramble - # Direct port from 'imsVideos.prototype.processRequest' from the file 'ims_videos.min.js' - - one_hash = config_data["hash"] - # Turn the string into numbers - hash_n = [ord(x) for x in one_hash] - # Split the data into 2char strings - hex_hashes = [data[x:(x + 2)] for x in range(0, len(data), 2)] - # Turn the strings into numbers, considering the hex value - num_hashes = [int(h, 16) for h in hex_hashes] - # Characters again, from the value - # str_hashes = [ unichr(n) for n in num_hashes ] - - # Bitwise XOR num_hashes and the hash - result_num = [] - for idx in range(0, len(num_hashes)): - result_num.append(num_hashes[idx] ^ hash_n[idx % len(hash_n)]) - - # At last, Numbers back into characters - result = ''.join([chr(x) for x in result_num]) - # A wild JSON appears... - # You use "Master Ball"... - escapist_cfg = json.loads(result) - # It's super effective! - - # TODO: There's a way to choose different video types, for now just pick MP4@480p - return escapist_cfg["files"]["videos"][2]["src"]
View file
3.10.17.tar.gz/src/gpodder/test
Deleted
-(directory)
View file
3.10.17.tar.gz/src/gpodder/unittests.py
Deleted
@@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -# -# gPodder - A media aggregator and podcast client -# Copyright (c) 2005-2018 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/>. -# - - -# Run Doctests and Unittests for gPodder modules -# 2009-02-25 Thomas Perl <thp@gpodder.org> - - -import doctest -import sys -import unittest - -try: - # Unused here locally, but we import it to be able to give an early - # warning about this missing dependency in order to avoid bogus errors. - import minimock -except ImportError as e: - print(""" - Error: Unit tests require the "minimock" module (python-minimock). - Please install it before running the unit tests. - """, file=sys.stderr) - sys.exit(2) - -# Main package and test package (for modules in main package) -package = 'gpodder' -test_package = '.'.join((package, 'test')) - -suite = unittest.TestSuite() -coverage_modules = [] - - -# Modules (in gpodder) for which doctests exist -# ex: Doctests embedded in "gpodder.util", coverage reported for "gpodder.util" -doctest_modules = ['util', 'jsonconfig'] - -for module in doctest_modules: - doctest_mod = __import__('.'.join((package, module)), fromlist=[module]) - - suite.addTest(doctest.DocTestSuite(doctest_mod)) - coverage_modules.append(doctest_mod) - - -# Modules (in gpodder) for which unit tests (in gpodder.test) exist -# ex: Tests are in "gpodder.test.model", coverage reported for "gpodder.model" -test_modules = ['model'] - -for module in test_modules: - test_mod = __import__('.'.join((test_package, module)), fromlist=[module]) - coverage_mod = __import__('.'.join((package, module)), fromlist=[module]) - - suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(test_mod)) - coverage_modules.append(coverage_mod) - -try: - # If you want a HTML-based test report, install HTMLTestRunner from: - # http://tungwaiyip.info/software/HTMLTestRunner.html - import HTMLTestRunner - REPORT_FILENAME = 'test_report.html' - runner = HTMLTestRunner.HTMLTestRunner(stream=open(REPORT_FILENAME, 'w')) - print(""" - HTML Test Report will be written to %s - """ % REPORT_FILENAME) -except ImportError: - runner = unittest.TextTestRunner(verbosity=2) - -try: - import coverage -except ImportError: - coverage = None - -if __name__ == '__main__': - if coverage is not None: - cov = coverage.Coverage() - cov.erase() - cov.start() - - result = runner.run(suite) - - if not result.wasSuccessful(): - sys.exit(1) - - if coverage is not None: - cov.stop() - cov.report(coverage_modules) - cov.erase() - else: - print(""" - No coverage reporting done (Python module "coverage" is missing) - Please install the python-coverage package to get coverage reporting. - """, file=sys.stderr)
View file
3.10.17.tar.gz/.appveyor.yml -> 3.10.19.tar.gz/.appveyor.yml
Changed
@@ -22,6 +22,10 @@ - bash -lc "pacman --noconfirm -U msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz" # remove precisely conflicting packages - bash -lc "pacman --noconfirm --ask 20 --remove mingw-w64-x86_64-gcc-ada mingw-w64-x86_64-gcc-objc mingw-w64-i686-gcc-ada mingw-w64-i686-gcc-objc" + # https://www.msys2.org/news/#2020-12-26-zstd-exemption-for-core-packages-removed + - bash -lc "pacman --noconfirm -U 'http://repo.msys2.org/msys/x86_64/libzstd-1.4.4-2-x86_64.pkg.tar.xz'" + - bash -lc "pacman --noconfirm -U 'http://repo.msys2.org/msys/x86_64/zstd-1.4.4-2-x86_64.pkg.tar.xz'" + - bash -lc "pacman --noconfirm -U 'http://repo.msys2.org/msys/x86_64/pacman-5.2.1-6-x86_64.pkg.tar.xz'" # workaround updating msys2-runtime breaks all programs until last one exited - bash -lc "pacman -Syuu --noconfirm" - Powershell.exe "Stop-Process -name dirmngr -Erroraction silentlycontinue; echo killing_dirmng"
View file
3.10.17.tar.gz/.circleci/config.yml -> 3.10.19.tar.gz/.circleci/config.yml
Changed
@@ -6,7 +6,7 @@ # important: must be same as mac bundle's python - image: python:3.8 environment: - - BUNDLE_TAG: base-5.2.2 + - BUNDLE_TAG: base-5.2.4 shell: /bin/bash --login -o pipefail steps: - checkout
View file
3.10.17.tar.gz/.gitignore -> 3.10.19.tar.gz/.gitignore
Changed
@@ -3,6 +3,7 @@ *~ *.in.h *.ui.h +.coverage src/podcastparser.py src/mygpoclient src/dbus
View file
3.10.17.tar.gz/.travis.yml -> 3.10.19.tar.gz/.travis.yml
Changed
@@ -1,12 +1,12 @@ language: python -dist: trusty +dist: focal sudo: required python: - - "3.5" + - "3.8" install: - sudo apt-get update -q - sudo apt-get install intltool desktop-file-utils - - pip3 install coverage==4.5.4 minimock pycodestyle isort + - pip3 install pytest-cov minimock pycodestyle isort requests pytest pytest-httpserver - python3 tools/localdepends.py script: - make lint
View file
3.10.17.tar.gz/README.md -> 3.10.19.tar.gz/README.md
Changed
@@ -29,6 +29,7 @@ - [Python 3.5](http://python.org/) or newer - [Podcastparser](http://gpodder.org/podcastparser/) 0.6.0 or newer - [mygpoclient](http://gpodder.org/mygpoclient/) 1.7 or newer +- [requests](https://requests.readthedocs.io) 2.24.0 or newer - Python D-Bus bindings As an alternative to python-dbus on Mac OS X and Windows, you can use @@ -66,7 +67,9 @@ ### Test Dependencies - python-minimock -- python-coverage +- pytest +- pytest-httpserver +- pytest-cov - desktop-file-utils ## Testing @@ -85,9 +88,8 @@ - [unittests](http://docs.python.org/3/library/unittest.html) If you want to add doctests, simply write the doctest and make sure that -the module appears in "doctest_modules" in src/gpodder/unittests.py. For -example, the doctests in src/gpodder/util.py are added as 'util' (the -"gpodder" prefix must not be specified there). +the module appears after `--doctest-modules` in `pytest.ini`. If you +add tests to any module in `src/gpodder` you have nothing to do. If you want to add unit tests for a specific module (ex: gpodder.model), you should add the tests as gpodder.test.model, or in other words:
View file
3.10.17.tar.gz/bin/gpo -> 3.10.19.tar.gz/bin/gpo
Changed
@@ -96,13 +96,13 @@ readline = None try: - import termios import fcntl import struct + import termios except ImportError: - termios = None fcntl = None struct = None + termios = None # A poor man's argparse/getopt - but it works for our use case :) verbose = False
View file
3.10.17.tar.gz/bin/gpodder -> 3.10.19.tar.gz/bin/gpodder
Changed
@@ -124,6 +124,12 @@ from gpodder import log log.setup(options.verbose, options.quiet) + if (not (gpodder.ui.win32 or gpodder.ui.osx) and + os.environ.get('DISPLAY', '') == '' and + os.environ.get('WAYLAND_DISPLAY', '') == ''): + logger.error('Cannot start gPodder: $DISPLAY or $WAYLAND_DISPLAY is not set.') + sys.exit(1) + if have_dbus: # Try to find an already-running instance of gPodder session_bus = dbus.SessionBus() @@ -148,10 +154,6 @@ except dbus.exceptions.DBusException as dbus_exception: logger.info('Cannot connect to remote object.', exc_info=True) - if not gpodder.ui.win32 and os.environ.get('DISPLAY', '') == '': - logger.error('Cannot start gPodder: $DISPLAY is not set.') - sys.exit(1) - if gpodder.ui.gtk: from gpodder.gtkui import app gpodder.ui_folders.insert(0, os.path.join(ui_folder, 'gtk'))
View file
3.10.17.tar.gz/makefile -> 3.10.19.tar.gz/makefile
Changed
@@ -53,6 +53,8 @@ PYTHON ?= python3 HELP2MAN ?= help2man +PYTEST ?= $(shell which pytest || which pytest-3) + ########################################################################## help: @@ -61,12 +63,13 @@ ########################################################################## unittest: - LC_ALL=C PYTHONPATH=src/ $(PYTHON) -m gpodder.unittests + LC_ALL=C PYTHONPATH=src/ $(PYTEST) --ignore=tests --ignore=src/gpodder/utilwin32ctypes.py --doctest-modules src/gpodder/util.py src/gpodder/jsonconfig.py + LC_ALL=C PYTHONPATH=src/ $(PYTEST) tests --ignore=src/gpodder/utilwin32ctypes.py --ignore=src/mygpoclient --cov=gpodder -ISORTOPTS := -rc -c share src/gpodder tools bin/* *.py +ISORTOPTS := -c share src/gpodder tools bin/* *.py lint: pycodestyle share src/gpodder tools bin/* *.py - isort -q $(ISORTOPTS) || isort -df $(ISORTOPTS) + isort -q $(ISORTOPTS) || isort --df $(ISORTOPTS) release: distclean
View file
3.10.17.tar.gz/po/ca.po -> 3.10.19.tar.gz/po/ca.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -64,53 +64,59 @@ msgid "Imported OPML file" msgstr "" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "" @@ -127,8 +133,8 @@ msgid "Post download" msgstr "" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "" @@ -151,41 +157,41 @@ msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -324,10 +330,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "" @@ -339,47 +345,47 @@ msgid "Error writing playlist files" msgstr "" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "" msgstr[1] "" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "" msgstr[1] "" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format
View file
3.10.17.tar.gz/po/cs.po -> 3.10.19.tar.gz/po/cs.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -72,57 +72,63 @@ msgid "Imported OPML file" msgstr "Export do OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 #, fuzzy msgid "Added" msgstr "Pokročilé" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Zařazeno do fronty" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 #, fuzzy msgid "Downloading" msgstr "stahování" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 #, fuzzy msgid "Failed" msgstr "Filtr:" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 #, fuzzy msgid "Cancelled" msgstr "Zrušit" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, fuzzy, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Chyba otevírání %s: %s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, fuzzy, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Chyba otevírání %s: %s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, fuzzy, python-format msgid "Error: %s" msgstr "Chyba otevírání %s: %s" @@ -141,8 +147,8 @@ msgid "Post download" msgstr "_Zrušit stahování" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "" @@ -166,42 +172,42 @@ msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Popis není dostupný" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 #, fuzzy msgid "unknown" msgstr "(neznámý)" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -351,10 +357,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Epizoda" @@ -367,7 +373,7 @@ msgid "Error writing playlist files" msgstr "Chyba při konverzi souboru" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" @@ -375,19 +381,19 @@ msgstr[1] "" msgstr[2] "" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Dnes" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Včera" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(neznámý)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds"
View file
3.10.17.tar.gz/po/cs_CZ.po -> 3.10.19.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: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -77,53 +77,60 @@ msgid "Imported OPML file" msgstr "Importovat z OPML souboru" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Špatné jméno/heslo" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Přidáno" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Zařazeno do fronty" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Stahování" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Dokončeno" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Selhalo" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Zrušeno" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Pozastaveno" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Poznámky" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Chyba syntaxe: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Chyba vstupu/výstupu: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Chyba HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Chyba: %s" @@ -140,8 +147,8 @@ msgid "Post download" msgstr "Příspěvek ke stažení" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Jiný" @@ -164,41 +171,41 @@ msgid "Python module not found: %(module)s" msgstr "Python modul %(module)s nebyl nalezen" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Popis není k dispozici" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "neznámý" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Výchozí" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Zachovat pouze poslední" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Video" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -342,10 +349,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Epizoda" @@ -358,7 +365,7 @@ msgid "Error writing playlist files" msgstr "Chyba při převádění souboru" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" @@ -366,19 +373,19 @@ msgstr[1] "Před %(count)d dny" msgstr[2] "Před %(count)d dny" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Dnes" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Včera" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(neznámo)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" @@ -386,7 +393,7 @@ msgstr[1] "%(count)d sekundy" msgstr[2] "%(count)d sekund"
View file
3.10.17.tar.gz/po/da.po -> 3.10.19.tar.gz/po/da.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -76,53 +76,59 @@ msgid "Imported OPML file" msgstr "Importér fra OPML-fil" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Forkert brugernavn/adgangskode" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Tilføjet" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Sat i kø" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Downloader" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Afsluttet" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Fejlet" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Annulleret" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Sat på pause" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Manglende data fra server" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "I/O-fejl: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP-fejl: %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Fejl: %s" @@ -141,8 +147,8 @@ msgid "Post download" msgstr "Sæt download på pause" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Andet" @@ -166,41 +172,41 @@ msgid "Python module not found: %(module)s" msgstr "Python-modulet \"%s\" er ikke installeret" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Ingen tilgængelig beskrivelse" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "ukendt" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Video" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Lyd" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -345,10 +351,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episode" @@ -361,47 +367,47 @@ msgid "Error writing playlist files" msgstr "Filkonverteringsfejl." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "I dag" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "I går" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(ukendt)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d sekund" msgstr[1] "%(count)d sekunder" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format
View file
3.10.17.tar.gz/po/de.po -> 3.10.19.tar.gz/po/de.po
Changed
@@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" -"PO-Revision-Date: 2020-11-10 16:12+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" +"PO-Revision-Date: 2021-01-02 02:30+0100\n" "Last-Translator: TZocker\n" "Language-Team: German (http://www.transifex.com/projects/p/gpodder/language/" "de/)\n" @@ -18,7 +18,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 2.3\n" #: src/gpodder/config.py:54 #, python-format @@ -66,53 +66,61 @@ msgid "Imported OPML file" msgstr "Importierte OPML-Datei" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Falscher Benutzername/Passwort" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Hinzugefügt" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Eingereiht" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Herunterladen" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Fertig" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Fehlgeschlagen" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Abgebrochen" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Pause" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Fehlender Inhalt vom Server" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" +"Es konnte keine Verbindung mit dem Server %(host)s:%(port)s hergestellt " +"werden" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "Anforderungsfehler: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "I/O Fehler: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP-Fehler %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Fehler: %s" @@ -129,8 +137,8 @@ msgid "Post download" msgstr "Nach dem Download" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Andere" @@ -153,34 +161,34 @@ msgid "Python module not found: %(module)s" msgstr "Python-Modul nicht gefunden: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Keine Beschreibung verfügbar" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "unbekannt" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Standard" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Nur aktuellste behalten" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Video" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " @@ -189,7 +197,7 @@ "Warnung: Der Pfad zum gPodder Homeverzeichnis (%(root)s) ist sehr lang und " "kann dazu führen, dass Dateien nicht heruntergeladen werden können.\n" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "Es wird empfohlen, einen kürzeren Pfad festzulegen." @@ -334,10 +342,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "Die Wiedergabeliste auf Ihrem MP3-Player wurde aktualisiert." -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episode" @@ -349,47 +357,47 @@ msgid "Error writing playlist files" msgstr "Fehler beim Schreiben der Wiedergabe-Liste" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Heute" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Gestern" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568
View file
3.10.17.tar.gz/po/el.po -> 3.10.19.tar.gz/po/el.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -75,53 +75,60 @@ msgid "Imported OPML file" msgstr "Εισαγωγή από αρχείο OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Λάθος όνομα χρήστη/κωδικός πρόσβασης" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Προστέθηκε" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Σε αναμονή" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Λήψη" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Τελείωσε" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Απέτυχε" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Ακυρώθηκε" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Παύση" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Λείπει περιεχόμενο από τον διακομιστή" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Συντακτικό λάθος: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Σφάλμα I/O: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Σφάλμα HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Σφάλμα: %s" @@ -140,8 +147,8 @@ msgid "Post download" msgstr "Παύση λήψης" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Άλλο" @@ -164,41 +171,41 @@ msgid "Python module not found: %(module)s" msgstr "Το python module \"%s\" δεν είναι εγκατεστημένο" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Δεν υπάρχει διαθέσιμη περιγραφή" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "άγνωστο" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Βίντεο" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Ήχος" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -345,10 +352,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Επεισόδιο" @@ -361,47 +368,47 @@ msgid "Error writing playlist files" msgstr "Σφάλμα κατά τη μετατροπή του αρχείου." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "Πριν από %(count)d ημέρα" msgstr[1] "Πριν από %(count)d ημέρες" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Σήμερα" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Χθες" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(άγνωστο)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d δευτερόλεπτο" msgstr[1] "%(count)d δευτερόλεπτα" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/es.po -> 3.10.19.tar.gz/po/es.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -75,53 +75,60 @@ msgid "Imported OPML file" msgstr "Importar de OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Nombre de usuario/contraseña incorrectos" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Agregado" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Puesto en cola" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Descargando" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Terminado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Fallado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Cancelado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Pausado" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Falta contenido en el servidor" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Error de sintaxis: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Error de Entrada/Salida: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Error HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Error: %s" @@ -141,8 +148,8 @@ msgid "Post download" msgstr "Cancelar descarga" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Otro" @@ -165,42 +172,42 @@ msgid "Python module not found: %(module)s" msgstr "Módulo python \"%s\" no instalado" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "No hay una descripción disponible" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "desconocido" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 #, fuzzy msgid "Default" msgstr "Color predeterminado" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Vídeo" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -346,10 +353,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Capítulo" @@ -362,47 +369,47 @@ msgid "Error writing playlist files" msgstr "Error al convertir archivo." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Hoy" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Ayer" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(desconocido)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, 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:1397
View file
3.10.17.tar.gz/po/es_ES.po -> 3.10.19.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: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -75,53 +75,60 @@ msgid "Imported OPML file" msgstr "Importar desde archivo OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Nombre de usuario/contraseña incorrecto" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Añadido" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "En cola" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Descargando" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Finalizado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Fallido" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Cancelado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "En pausa" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Falta el contenido del servidor" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Error de sintaxis: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Error de E/S: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Error HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Error: %s" @@ -138,8 +145,8 @@ msgid "Post download" msgstr "Después de la descarga" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Otros" @@ -162,41 +169,41 @@ msgid "Python module not found: %(module)s" msgstr "Módulo Python no encontrado: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Sin descripción disponible" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "desconocido" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Predeterminado" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Solo mantener los últimos" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Vídeo" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -338,10 +345,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episodio" @@ -354,47 +361,47 @@ msgid "Error writing playlist files" msgstr "Error al convertir el archivo." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Hoy" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Ayer" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(desconocido)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, 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:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/es_MX.po -> 3.10.19.tar.gz/po/es_MX.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -72,53 +72,60 @@ msgid "Imported OPML file" msgstr "Importar desde archivo OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Usuario y/o contraseña incorrectos" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Agregado" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "En espera" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Descargando" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Terminado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Falló" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Cancelado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "En pausa" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Falta el contenido del servidor" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Error de sintaxis: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Error de E/S: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Error HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Error: %s" @@ -135,8 +142,8 @@ msgid "Post download" msgstr "Post-descarga" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Otro" @@ -160,41 +167,41 @@ msgid "Python module not found: %(module)s" msgstr "El siguiente módulo de Python no fue encontrado: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "No hay descripción disponible" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "desconocido" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Por defecto" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Conservar únicamente el más reciente" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Video" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -339,10 +346,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "La lista de reproducción en su reproductor MP3 ha sido actualizada." -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episodio" @@ -354,47 +361,47 @@ msgid "Error writing playlist files" msgstr "Error al escribir los archivos de la lista de reproducción" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Hoy" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Ayer" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(desconocido)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, 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:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/eu.po -> 3.10.19.tar.gz/po/eu.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -73,53 +73,60 @@ msgid "Imported OPML file" msgstr "Inportatu OPML fitxategitik" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Erabiltzaile-izen/pasahitz okerra" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Gehituta" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Ilaran" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Deskargatzen" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Amaituta" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Huts egin du" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Bertan behera utzita" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Pausarazita" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Edukia ez dago zerbitzarian" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Sintaxi errorea: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "I/O Errorea: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP Errorea %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Errorea: %s" @@ -138,8 +145,8 @@ msgid "Post download" msgstr "Hautatu erreproduzitutakoak" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Bestelakoak" @@ -162,41 +169,41 @@ msgid "Python module not found: %(module)s" msgstr "Ez da Python modulua aurkitu: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Ez dago deskribapenik eskuragarri" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "ezezaguna" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Lehenetsia" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Mantendu azkena soilik" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Bideoa" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audioa" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -342,10 +349,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Atala" @@ -358,47 +365,47 @@ msgid "Error writing playlist files" msgstr "Errorea fitxategia bihurtzean." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Gaur" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Atzo" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(ezezaguna)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "Segundu %(count)d" msgstr[1] "%(count)d segundu" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/fa_IR.po -> 3.10.19.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: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -67,53 +67,59 @@ msgid "Imported OPML file" msgstr "" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "نام کاربری/گذر واژه اشتباه" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "اضافه شد" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "در صف قرار گرفت" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "در حال دانلود" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "اتمام یافته" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "نا موفق" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "لغو شده" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "متوقف شده" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "خطا: %s" @@ -131,8 +137,8 @@ msgid "Post download" msgstr "" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "دیگر" @@ -155,41 +161,41 @@ msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "هیچ توضیحی مهیا نیست" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "ناشناخه" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "ویدئو" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "صوت" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -329,10 +335,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "قسمت" @@ -345,43 +351,43 @@ msgid "Error writing playlist files" msgstr "خطا در تبدیل پرونده." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "امروز" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "دیروز" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(نامعلوم)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format msgid "%(count)d hour" msgid_plural "%(count)d hours"
View file
3.10.17.tar.gz/po/fi.po -> 3.10.19.tar.gz/po/fi.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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" @@ -73,53 +73,59 @@ msgid "Imported OPML file" msgstr "Tuo OPML-tiedostosta" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Virheellinen käyttäjätunnus tai salasana" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Lisätty" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Jonossa" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Ladataan" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Valmis" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Epäonnistui" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Peruttu" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Tauolla" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Palvelimelta puuttuu sisältöä" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Siirräntävirhe: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP-virhe: %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Virhe: %s" @@ -138,8 +144,8 @@ msgid "Post download" msgstr "Pysäytä lataus" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Muu" @@ -163,41 +169,41 @@ msgid "Python module not found: %(module)s" msgstr "Python-moduulia ”%s” ei ole asennettu" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Kuvausta ei ole saatavilla" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "tuntematon" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -344,10 +350,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Jakso" @@ -360,47 +366,47 @@ msgid "Error writing playlist files" msgstr "Virhe tiedoston muuntamisessa." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Tänään" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Eilen" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(tuntematon)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d sekunti" msgstr[1] "%(count)d sekuntia" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format
View file
3.10.17.tar.gz/po/fr.po -> 3.10.19.tar.gz/po/fr.po
Changed
@@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" -"PO-Revision-Date: 2020-11-10 16:09+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" +"PO-Revision-Date: 2021-03-27 14:15+0100\n" "Last-Translator: Eric Le Lay <elelay@macports.org>\n" "Language-Team: French (http://www.transifex.com/projects/p/gpodder/language/" "fr/)\n" @@ -67,53 +67,59 @@ msgid "Imported OPML file" msgstr "Importer depuis un fichier OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Mauvais nom d'utilisateur / mot de passe" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Ajouté" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Mis en file d'attente" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "En train de télécharger" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Terminé" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Echoué" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Annulé" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "En pause" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Contenu manquant sur le serveur" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "Erreur HTTP : %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Erreur E/S : %(error)s :%(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Erreur HTTP %(code)s :%(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Erreur : %s" @@ -130,8 +136,8 @@ msgid "Post download" msgstr "Suite au téléchargement" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Autre" @@ -154,34 +160,34 @@ msgid "Python module not found: %(module)s" msgstr "Module python indisponible : %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Aucune description disponible" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "inconnu" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Par défaut" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Ne conserver que le dernier" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Vidéo" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " @@ -190,7 +196,7 @@ "Attention : le chemin vers le répertoire de stockage de gPodder (%(root)s) " "est très long et peut provoquer des erreurs au téléchargement d'épisodes.\n" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "Nous vous recommandons d'utiliser un chemin plus court." @@ -340,10 +346,10 @@ msgstr "" "La liste de lecture sur votre périphérique multimédia a bien été mise à jour." -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Épisode" @@ -355,47 +361,47 @@ msgid "Error writing playlist files" msgstr "Erreur lors de l'écriture des listes de lecture" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Aujourd'hui" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Hier" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(inconnu)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d seconde" msgstr[1] "%(count)d secondes"
View file
3.10.17.tar.gz/po/gl.po -> 3.10.19.tar.gz/po/gl.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -74,53 +74,60 @@ msgid "Imported OPML file" msgstr "Importar dun ficheiro OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Nome de persoa usuaria ou contrasinal incorrecto" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Engadido" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Na fila" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Descargando" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Finalizada" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Fallou" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Cancelado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Detida" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Faltan contidos do servidor" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Erro de sintaxe: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Erro de E/S: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Erro de HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Erro: %s" @@ -140,8 +147,8 @@ msgid "Post download" msgstr "Seleccionar os descargados" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Outro" @@ -164,41 +171,41 @@ msgid "Python module not found: %(module)s" msgstr "Non se encontrou o módulo de Python: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Sen descrición dispoñíbel" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "descoñecido" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Vídeo" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -344,10 +351,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episodio" @@ -360,47 +367,47 @@ msgid "Error writing playlist files" msgstr "Erro ao converter o ficheiro." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Hoxe" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Onte" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(descoñecido)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, 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:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/he.po -> 3.10.19.tar.gz/po/he.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -75,53 +75,60 @@ msgid "Imported OPML file" msgstr "ייבא מקובץ OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "שם משתמש/ססמה שגויים" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "נוסף" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "ממתין" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "מוריד" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "הסתיים" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "נכשל" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "בוטל" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "הושהה" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "חסר תוכן מהשרת" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "שגיאת תחביר: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "שגיאת I/O: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "שגיאת HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "שגיאה: %s" @@ -141,8 +148,8 @@ msgid "Post download" msgstr "השהה הורדה" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "אחר" @@ -165,41 +172,41 @@ msgid "Python module not found: %(module)s" msgstr "מודול פייתון לא נמצא: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "אין תיאור זמין" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "לא ידוע" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "ברירת מחדל" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "שמור רק את האחרון" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "וידאו" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "שמע" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -343,10 +350,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "פרק" @@ -359,47 +366,47 @@ msgid "Error writing playlist files" msgstr "שגיאה בהמרת קובץ." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "לפני יום" msgstr[1] "לפני %(count)d ימים" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "היום" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "אתמול" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(לא ידוע)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "שנייה אחת" msgstr[1] "%(count)d שניות" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/hu.po -> 3.10.19.tar.gz/po/hu.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" "PO-Revision-Date: 2018-02-25 20:35+0100\n" "Last-Translator: Balázs Meskó <mesko.balazs@fsf.hu>\n" "Language-Team: Hungarian\n" @@ -65,53 +65,60 @@ msgid "Imported OPML file" msgstr "Importált OMPL fájl" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Hibás felhasználónév/jelszó" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Hozzáadva" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Sorbaállítva" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Letöltés" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Elkészült" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Sikertelen" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Megszakítva" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Szüneteltetve" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Hiányzik a tartalom a kiszolgálón" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Szintaktikai hiba: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "I/O hiba: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP %(code)s hiba: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Hiba: %s" @@ -128,8 +135,8 @@ msgid "Post download" msgstr "Letöltés után" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Egyéb" @@ -152,41 +159,41 @@ msgid "Python module not found: %(module)s" msgstr "A Python modul nem található: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Nem áll rendelkezésre leírás" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "ismeretlen" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Alapértelmezés" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Csak a legfrissebb megtartása" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Videó" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Hang" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -332,10 +339,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "Az MP3 lejátszó lejátszólistája frissült." -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Epizód" @@ -347,47 +354,47 @@ msgid "Error writing playlist files" msgstr "Hiba a lejátszólista fájlok írásakor" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "%(count)d napja" msgstr[1] "%(count)d napja" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Ma" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Tegnap" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(ismeretlen)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d másodperc" msgstr[1] "%(count)d másodperce" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/id_ID.po -> 3.10.19.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: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -64,53 +64,59 @@ msgid "Imported OPML file" msgstr "" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "" @@ -127,8 +133,8 @@ msgid "Post download" msgstr "" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "" @@ -151,41 +157,41 @@ msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -324,10 +330,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "" @@ -339,43 +345,43 @@ msgid "Error writing playlist files" msgstr "" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format msgid "%(count)d hour" msgid_plural "%(count)d hours"
View file
3.10.17.tar.gz/po/it.po -> 3.10.19.tar.gz/po/it.po
Changed
@@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" "PO-Revision-Date: 2020-11-11 10:31+0100\n" "Last-Translator: Maurizio Ballo <xmaurizio.13@hotmail.com>\n" "Language-Team: Italian (http://www.transifex.com/projects/p/gpodder/language/" @@ -68,53 +68,60 @@ msgid "Imported OPML file" msgstr "Importato file OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Nome utente o password errati" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Aggiunto" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "In coda" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Download in corso" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Completato" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Fallito" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Annullato" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "In pausa" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Contenuti mancanti dal server" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Errore di Sintassi: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Errore I/O: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Errore HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Errore: %s" @@ -131,8 +138,8 @@ msgid "Post download" msgstr "Dopo il download" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Altro" @@ -155,34 +162,34 @@ msgid "Python module not found: %(module)s" msgstr "Modulo Python non installato: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Nessuna descrizione disponibile" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "sconosciuto" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Predefinito" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Tieni solo i più recenti" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Video" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " @@ -191,7 +198,7 @@ "Attenzione: il percorso verso la home di gPodder (%(root)s) è molto lungo è " "può provocare il fallimento dello scaricamento di file.\n" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "Si consiglia di accorciare il percorso." @@ -336,10 +343,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "La playlist sul lettore MP3 è stata aggiornata." -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episodio" @@ -351,47 +358,47 @@ msgid "Error writing playlist files" msgstr "Errore di scrittura playlist" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Oggi" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Ieri" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(sconosciuto)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d secondo" msgstr[1] "%(count)d secondi" -#: src/gpodder/util.py:1397
View file
3.10.17.tar.gz/po/kk.po -> 3.10.19.tar.gz/po/kk.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -73,53 +73,60 @@ msgid "Imported OPML file" msgstr "OPML файлынан импорттау" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Қате тіркелгі/пароль" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Қосылған" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Кезекте" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Жүктелуде" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Аяқталған" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Сәтсіз аяқталды" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Бас тартылған" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Аялдатылған" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Серверден құрама жоқ" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Синтаксис қатесі: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Е/Ш қатесі: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP қатесі %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Қате: %s" @@ -139,8 +146,8 @@ msgid "Post download" msgstr "Жүктемені аялдату" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Басқа" @@ -163,41 +170,41 @@ msgid "Python module not found: %(module)s" msgstr "Python модулі табылмады: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Анықтамасы жоқ" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "белгісіз" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Видео" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Аудио" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -341,10 +348,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Эпизод" @@ -357,43 +364,43 @@ msgid "Error writing playlist files" msgstr "Файлды түрлендіру қатемен аяқталды." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "%(count)d күн бұрын" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Бүгін" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Кеше" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(белгісіз)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d секунд" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format msgid "%(count)d hour"
View file
3.10.17.tar.gz/po/ko_KR.po -> 3.10.19.tar.gz/po/ko_KR.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" "PO-Revision-Date: 2016-01-01 21:09+0900\n" "Last-Translator: \n" "Language-Team: \n" @@ -64,53 +64,60 @@ msgid "Imported OPML file" msgstr "가져온 파일" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "잘못된 사용자이름/암호" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "추가" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "대기중" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "다운로드중" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "완료" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "실패" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "취소됨" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "잠시멈춤" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "서버에서 컨텐츠를 찾을 수 없음" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Syntax 에러: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "I/O 에러: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP 에러 %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "에러: %s" @@ -128,8 +135,8 @@ msgid "Post download" msgstr "Post download" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "다른" @@ -153,41 +160,41 @@ msgid "Python module not found: %(module)s" msgstr "파이썬 모듈을 찾지 못했습니다: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "사용가능한 설명이 없습니다" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "알수없는" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "기본" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "최신으로 유지" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "비디오" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "오디오" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -330,10 +337,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "MP3 플레이어에 있는 플레이리스트를 업데이트 했습니다" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "에피소드" @@ -345,43 +352,43 @@ msgid "Error writing playlist files" msgstr "플레이리스트 저장중 에러" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "%(count)d 일 전" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "오늘" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "어제" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "알수없는" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d 초" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format msgid "%(count)d hour"
View file
3.10.17.tar.gz/po/messages.pot -> 3.10.19.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: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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" @@ -64,53 +64,59 @@ msgid "Imported OPML file" msgstr "" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "" @@ -127,8 +133,8 @@ msgid "Post download" msgstr "" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "" @@ -151,41 +157,41 @@ msgid "Python module not found: %(module)s" msgstr "" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -324,10 +330,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "" @@ -339,47 +345,47 @@ msgid "Error writing playlist files" msgstr "" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "" msgstr[1] "" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "" msgstr[1] "" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format
View file
3.10.17.tar.gz/po/nb.po -> 3.10.19.tar.gz/po/nb.po
Changed
@@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -77,53 +77,59 @@ msgid "Imported OPML file" msgstr "Importer fra OPML-fil" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Feil brukernavn/passord" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Lagt til" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "I kø" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Laster ned" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Ferdig" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Feilet" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Avbrutt" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Pauset" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Manglende innhold fra tjener" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "I/O feil: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP feil %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Feil: %s" @@ -142,8 +148,8 @@ msgid "Post download" msgstr "Pause nedlasting" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Annet" @@ -167,41 +173,41 @@ msgid "Python module not found: %(module)s" msgstr "Python modul «%s» er ikke installert" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Ingen beskrivelse tilgjengelig" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "ukjent" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Video" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -346,10 +352,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episode" @@ -362,47 +368,47 @@ msgid "Error writing playlist files" msgstr "Feil under konvertering av fil." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Idag" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Igår" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(ukjent)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d sekund" msgstr[1] "%(count)d sekunder" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format
View file
3.10.17.tar.gz/po/nl.po -> 3.10.19.tar.gz/po/nl.po
Changed
@@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" -"PO-Revision-Date: 2020-11-10 16:12+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" +"PO-Revision-Date: 2021-03-29 16:56+0200\n" "Last-Translator: Heimen Stoffels <vistausss@outlook.com>\n" "Language-Team: Dutch (http://www.transifex.com/projects/p/gpodder/language/" "nl/)\n" @@ -21,7 +21,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.4.1\n" +"X-Generator: Poedit 2.4.2\n" #: src/gpodder/config.py:54 #, python-format @@ -69,53 +69,59 @@ msgid "Imported OPML file" msgstr "OPML-bestand geïmporteerd" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Onjuiste gebruikersnaam/wachtwoord" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Toegevoegd" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "In wachtrij" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Bezig met downloaden" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Afgerond" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Mislukt" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Geannuleerd" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Gepauzeerd" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Ontbrekende serverinhoud" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "Kan niet verbinden met server %(host)s:%(port)s" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "Verzoekfout: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "In-/Uitvoerfout: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP-fout %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Fout: %s" @@ -132,8 +138,8 @@ msgid "Post download" msgstr "Vóór het downloaden" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Overig" @@ -156,34 +162,34 @@ msgid "Python module not found: %(module)s" msgstr "Python-module niet aangetroffen: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Geen omschrijving beschikbaar" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "onbekend" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Standaard" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Alleen nieuwste behouden" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Video" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " @@ -192,7 +198,7 @@ "Waarschuwing: het pad naar de gPodder-locatie (%(root)s) is erg lang en kan " "leiden tot mislukte downloads.\n" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "Wij raden een korter pad aan." @@ -336,10 +342,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "De afspeellijst op je mp3-speler is bijgewerkt." -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Aflevering" @@ -351,47 +357,47 @@ msgid "Error writing playlist files" msgstr "Fout bij wegschrijven van afspeellijstbestanden" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Vandaag" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Gisteren" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(onbekend)"
View file
3.10.17.tar.gz/po/nn.po -> 3.10.19.tar.gz/po/nn.po
Changed
@@ -4,13 +4,13 @@ # Translators: # Thomas Perl <thp@perli.net>, 2006. # Torstein Adolf Winterseth <kvikende@fsfe.org>, 2009, 2010. -# Karl Ove Hufthammer <karl@huftis.org>, 2019, 2020. +# Karl Ove Hufthammer <karl@huftis.org>, 2019, 2020, 2021. msgid "" msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" -"PO-Revision-Date: 2020-11-11 21:29+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" +"PO-Revision-Date: 2021-03-28 19:18+0200\n" "Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n" "Language-Team: Norwegian Nynorsk <l10n-no@lister.huftis.org>\n" "Language: nn\n" @@ -18,7 +18,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 20.08.2\n" +"X-Generator: Lokalize 20.12.3\n" #: src/gpodder/config.py:54 #, python-format @@ -66,53 +66,59 @@ msgid "Imported OPML file" msgstr "Importert OPML-fil" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Feil brukarnamn/passord" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Lagd til" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Lagd i kø" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Lastar ned" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Fullført" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Mislukka" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Avbroten" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Sett på pause" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Manglar innhald frå tenaren" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "Klarte ikkje kopla til tenaren %(host)s:%(port)s" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "Feil ved førespurnad: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "I/U-feil: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP-feil %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Feil: %s" @@ -131,8 +137,8 @@ msgstr "Etter nedlasting" # Noko anna enn video eller lyd. -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Anna" @@ -155,34 +161,34 @@ msgid "Python module not found: %(module)s" msgstr "Fann ikkje Python-modul: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Inga skildring tilgjengeleg" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "ukjend" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Standard" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Behald berre nyaste episodar" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Video" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Lyd" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " @@ -191,7 +197,7 @@ "Åtvaring: Adressa til gPodder-mappa (%(root)s) er veldig lang, noko som kan " "føra til feil ved nedlasting av filer.\n" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "Du bør flytta mappa for å gjera adressa kortare." @@ -335,10 +341,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "Spelelista på MP3-spelaren er no oppdatert." -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episode" @@ -350,47 +356,47 @@ msgid "Error writing playlist files" msgstr "Feil ved lagring av spelelistefiler" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "%(count)d dag sidan" msgstr[1] "%(count)d dagar sidan" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "I dag" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday"
View file
3.10.17.tar.gz/po/pl.po -> 3.10.19.tar.gz/po/pl.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" "PO-Revision-Date: 2019-09-11 14:42+0200\n" "Last-Translator: Karol Bieńkowski <karolbienkowski@protonmail.com>\n" "Language-Team: Polish <>\n" @@ -67,53 +67,60 @@ msgid "Imported OPML file" msgstr "Zaimportowano plik OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Nieprawidłowa nazwa użytkownika lub hasło" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Dodane" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "W kolejce" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Pobieranie" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Ukończone" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Nieudane" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Anulowane" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Wstrzymane" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Brak zawartości na serwerze" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Błąd składni: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Błąd we/wy: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Błąd HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Błąd: %s" @@ -130,8 +137,8 @@ msgid "Post download" msgstr "Po ściągnięciu" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Inne" @@ -154,34 +161,34 @@ msgid "Python module not found: %(module)s" msgstr "Nie znaleziono modułu Pythona: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Opis niedostępny" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "nieznany" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Domyślnie" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Zachowaj tylko najnowsze" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Wideo" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Audio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " @@ -190,7 +197,7 @@ "Uwaga: ścieżka domowa gPoddera (%(root)s) jest bardzo długa, co może " "skutkować niepowodzeniem przy pobieraniu plików.\n" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "Radzimy ustawić ją na krótszą ścieżkę." @@ -335,10 +342,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "Playlista na twoim odtwarzaczu została zaktualizowana." -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Odcinek" @@ -350,7 +357,7 @@ msgid "Error writing playlist files" msgstr "Błąd podczas zapisywania plików playlisty" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" @@ -358,19 +365,19 @@ msgstr[1] "%(count)d dni temu" msgstr[2] "%(count)d dni temu" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Dzisiaj" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Wczoraj" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(nieznane)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" @@ -378,7 +385,7 @@ msgstr[1] "%(count)d sekundy" msgstr[2] "%(count)d sekund"
View file
3.10.17.tar.gz/po/pt.po -> 3.10.19.tar.gz/po/pt.po
Changed
@@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -75,53 +75,60 @@ msgid "Imported OPML file" msgstr "Importar de ficheiro OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Utilizador/senha inválida" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Adicionado" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Na fila" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "A transferir" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Concluído" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Falhou" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Cancelado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Pausado" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "O conteúdo não existe no servidor" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Erro de sintaxe: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Erro E/S: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Erro HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Erro: %s" @@ -138,8 +145,8 @@ msgid "Post download" msgstr "Enviar transferência" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Outros" @@ -162,41 +169,41 @@ msgid "Python module not found: %(module)s" msgstr "Módulo python não encontrado: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Sem descrição" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "desconhecido" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Padrão" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Manter última" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Vídeo" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Áudio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -341,10 +348,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episódio" @@ -357,47 +364,47 @@ msgid "Error writing playlist files" msgstr "Erro ao converter ficheiro" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Hoje" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Ontem" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(desconhecido)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, 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:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/pt_BR.po -> 3.10.19.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: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -78,53 +78,60 @@ msgid "Imported OPML file" msgstr "Importar de um arquivo OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Login/Password inválidos" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Adicionado" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Em espera" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Downloading" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Terminados" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Falhou" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Cancelado" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Pausado" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Conteúdo do servidor esta faltando" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Erro de sintáxe: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Erro de I/O: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Erro de HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Erro: %s" @@ -141,8 +148,8 @@ msgid "Post download" msgstr "Pós-Download" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Outro" @@ -165,41 +172,41 @@ msgid "Python module not found: %(module)s" msgstr "Módulo python não foi encontrado: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Descrição não disponível" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "desconhecido" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "Padrão" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Apenas manter as últimas" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Vídeo" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Áudio" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -343,10 +350,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episódio" @@ -359,47 +366,47 @@ msgid "Error writing playlist files" msgstr "Erro ao converter o aquivo" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Hoje" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Ontem" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(desconhecido)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, 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:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/ro.po -> 3.10.19.tar.gz/po/ro.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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" @@ -73,53 +73,59 @@ msgid "Imported OPML file" msgstr "Importă din fișier OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Numele sau parola este greșită" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Adăugat" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Adăugat în coada de așteptare" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Se descarcă" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Gata" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Eșuat" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Sa renunțat" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Întrerupt temporar" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Conținutul lipseste de pe server" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Eroare I/O: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Eroare HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Eroare: %s" @@ -138,8 +144,8 @@ msgid "Post download" msgstr "Întrerupe descărcarea" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Altele" @@ -163,41 +169,41 @@ msgid "Python module not found: %(module)s" msgstr "Modulul Python \"%s\" nu este instalat" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Nu există descriere" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "necunoscut" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -344,10 +350,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Episod" @@ -360,7 +366,7 @@ msgid "Error writing playlist files" msgstr "Eroare de conversie a fișierului." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" @@ -368,19 +374,19 @@ msgstr[1] "" msgstr[2] "" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Astăzi" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Ieri" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(necunoscut)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" @@ -388,7 +394,7 @@ msgstr[1] "" msgstr[2] "" -#: src/gpodder/util.py:1397
View file
3.10.17.tar.gz/po/ru.po -> 3.10.19.tar.gz/po/ru.po
Changed
@@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: gPodder 2.10+git\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" -"PO-Revision-Date: 2019-02-13 22:16+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" +"PO-Revision-Date: 2021-02-01 22:56+0700\n" "Last-Translator: mrKaban <КонтинентСвободы.рф>\n" "Language-Team: \n" "Language: ru\n" @@ -17,7 +17,7 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.2.1\n" +"X-Generator: Poedit 2.4.2\n" #: src/gpodder/config.py:54 #, python-format @@ -65,53 +65,60 @@ msgid "Imported OPML file" msgstr "Импорт из OPML" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Неверное имя пользователя/пароль" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Добавлено" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "В очереди" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Загрузка" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Завершено" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Ошибка" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Отменено" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Остановлено" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Отсутствуют данные с сервера" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Синтаксическая ошибка %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Ошибка ввода/вывода: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "Ошибка HTTP %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Ошибка: %s" @@ -128,8 +135,8 @@ msgid "Post download" msgstr "После загрузки" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Другое" @@ -152,34 +159,34 @@ msgid "Python module not found: %(module)s" msgstr "Модуль Python не найден: %(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Описание недоступно" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "неизвестно" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "По умолчанию" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "Сохранять только последний" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Видео" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Аудио" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " @@ -188,7 +195,7 @@ "Предупреждение: путь к папке gPodder (%(root)s) слишком длинный и может " "привести ксбою загрузки файлов.\n" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "Рекомендуем выбрать более короткий путь." @@ -335,10 +342,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "Плейлист на вашем MP3 плеере обновлен." -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Выпуск" @@ -350,7 +357,7 @@ msgid "Error writing playlist files" msgstr "Ошибка записи файлов плейлиста" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" @@ -358,19 +365,19 @@ msgstr[1] "%(count)d дня назад" msgstr[2] "%(count)d дней назад" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Сегодня" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Вчера" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568
View file
3.10.17.tar.gz/po/sv.po -> 3.10.19.tar.gz/po/sv.po
Changed
@@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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/" @@ -77,53 +77,60 @@ msgid "Imported OPML file" msgstr "Importera från OPML fil" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Fel användarnamn/lösenord." - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Tillagt" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "Köad" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Laddar ner" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Klar" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Misslyckad" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Avbruten" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Pausad" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "Innehåll från server saknas" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "Syntax error: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "I/O Fel: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP Fel: %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Fel: %s" @@ -143,8 +150,8 @@ msgid "Post download" msgstr "Pausa nedladdning" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Annan" @@ -167,41 +174,41 @@ msgid "Python module not found: %(module)s" msgstr "Python modul \"%s\" ej installerad" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Ingen beskrivning tillgänglig" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "okänt" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "Video" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "Ljud" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -348,10 +355,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Avsnitt" @@ -364,47 +371,47 @@ msgid "Error writing playlist files" msgstr "Fel vid konvertering av fil." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, 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/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Idag" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Igår" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(okänt)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d sekund" msgstr[1] "%(count)d sekunder" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391
View file
3.10.17.tar.gz/po/tr.po -> 3.10.19.tar.gz/po/tr.po
Changed
@@ -1,207 +1,207 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -# Translators: -# <sunder67@hotmail.com>, 2011. msgid "" msgstr "" -"Project-Id-Version: gPodder\n" +"Project-Id-Version: gPodder 3.10.15\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\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/" -"tr/)\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" +"PO-Revision-Date: 2021-03-12 18:39+0300\n" +"Last-Translator: Serkan ÖNDER <serkanonder@outlook.com>\n" +"Language-Team: \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.3\n" #: src/gpodder/config.py:54 #, python-format msgid "gPodder on %s" -msgstr "" +msgstr "%s üzerinde gPodder" #: src/gpodder/deviceplaylist.py:98 #, python-format msgid "Folder %s could not be created." -msgstr "" +msgstr "%s klasörü oluşturulamadı." #: src/gpodder/deviceplaylist.py:98 msgid "Error writing playlist" -msgstr "" +msgstr "Oynatma listesi yazılırken hata oluştu" #: src/gpodder/directory.py:97 -#, fuzzy msgid "gpodder.net search" -msgstr "gpodder.net" +msgstr "gpodder.net araması" #: src/gpodder/directory.py:107 -#, fuzzy msgid "OPML from web" -msgstr "OPML dosyaları" +msgstr "Web'den OPML" #: src/gpodder/directory.py:117 -#, fuzzy msgid "OPML file" -msgstr "OPML dosyaları" +msgstr "OPML dosyası" #: src/gpodder/directory.py:127 share/gpodder/ui/gtk/gpodderwelcome.ui.h:1 -#, fuzzy msgid "Getting started" -msgstr "Ayar" +msgstr "Başlarken" #: src/gpodder/directory.py:137 -#, fuzzy msgid "gpodder.net Top 50" -msgstr "gpodder.net" +msgstr "gpodder.net İlk 50" #: src/gpodder/directory.py:147 -#, fuzzy msgid "gpodder.net Tags" -msgstr "gpodder.net" +msgstr "gpodder.net Etiket" #: src/gpodder/directory.py:160 msgid "Soundcloud search" -msgstr "" +msgstr "Soundcloud araması" #: src/gpodder/directory.py:174 -#, fuzzy msgid "Imported OPML file" -msgstr "OPML dosyaları" - -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "" +msgstr "İçe aktarılan OPML dosyası" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" -msgstr "" +msgstr "Eklendi" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" -msgstr "" +msgstr "Kuyrukta" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" -msgstr "" +msgstr "İndiriliyor" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" -msgstr "" +msgstr "Tamamlandı" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" -msgstr "" +msgstr "Başarısız" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" -msgstr "İptal Edildi" +msgstr "Vazgeçildi" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" -msgstr "Durduruldu" +msgstr "Duraklatıldı" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" -msgstr "" +msgstr "Sunucudan eksik içerik" + +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "Sunucuya bağlanılamadı %(host)s:%(port)s" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "Hata İste: %(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" -msgstr "" +msgstr "G/Ç Hatası: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" -msgstr "" +msgstr "HTTP Hatası %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Hata: %s" #: src/gpodder/extensions.py:55 msgid "Desktop Integration" -msgstr "" +msgstr "Masaüstü Entegrasyonu" #: src/gpodder/extensions.py:56 msgid "Interface" -msgstr "" +msgstr "Arayüz" #: src/gpodder/extensions.py:57 -#, fuzzy msgid "Post download" -msgstr "Seçilmedi" +msgstr "İndirme sonrası" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Diğer" #: src/gpodder/extensions.py:100
View file
3.10.17.tar.gz/po/uk.po -> 3.10.19.tar.gz/po/uk.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: gPodder\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\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" @@ -74,53 +74,59 @@ msgid "Imported OPML file" msgstr "Імпортувати з OPML-файлу" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "Неправильне ім'я користувача/пароль" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "Додано" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "В черзі" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "Завантажую" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "Завершено" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "Помилка" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "Скасовано" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "Призупинено" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "На сервері немає контенту" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, python-format +msgid "Request Error: %(error)s" +msgstr "" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "Помилка вводу/виводу: %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP помилка %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "Помилка: %s" @@ -139,8 +145,8 @@ msgid "Post download" msgstr "Призупинити завантаження" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "Інше" @@ -164,41 +170,41 @@ msgid "Python module not found: %(module)s" msgstr "Модуль Python \"%s\" не встановлено" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "Опис відсутній" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "невідомий" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "" @@ -344,10 +350,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "Епізод" @@ -360,7 +366,7 @@ msgid "Error writing playlist files" msgstr "Помилка при конвертуванні файла." -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" @@ -368,19 +374,19 @@ msgstr[1] "%(count)d дні тому" msgstr[2] "%(count)d днів тому" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "Сьогодні" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "Вчора" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(невідомо)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" @@ -388,7 +394,7 @@ msgstr[1] "%(count)d секунди" msgstr[2] "%(count)d секунд" -#: src/gpodder/util.py:1397
View file
3.10.17.tar.gz/po/zh_CN.po -> 3.10.19.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: 2020-11-23 08:13+0100\n" +"POT-Creation-Date: 2021-04-15 02:02-0600\n" "PO-Revision-Date: 2020-09-20 15:54+0800\n" "Last-Translator: Thomas Perl <m@thp.io>\n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gpodder/" @@ -67,53 +67,60 @@ msgid "Imported OPML file" msgstr "导入 OPML 文件" -#: src/gpodder/download.py:370 bin/gpo:341 -msgid "Wrong username/password" -msgstr "错误的 用户名/密码" - -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Added" msgstr "已添加" -#: src/gpodder/download.py:611 src/gpodder/sync.py:974 +#: src/gpodder/download.py:538 src/gpodder/sync.py:974 msgid "Queued" msgstr "已排序" -#: src/gpodder/download.py:611 src/gpodder/gtkui/model.py:377 +#: src/gpodder/download.py:538 src/gpodder/gtkui/model.py:381 msgid "Downloading" msgstr "下载中" -#: src/gpodder/download.py:612 src/gpodder/model.py:757 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/model.py:758 src/gpodder/sync.py:975 msgid "Finished" msgstr "已完成" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Failed" msgstr "失败" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Cancelled" msgstr "取消" -#: src/gpodder/download.py:612 src/gpodder/sync.py:975 +#: src/gpodder/download.py:539 src/gpodder/sync.py:975 msgid "Paused" msgstr "暂停" -#: src/gpodder/download.py:931 +#: src/gpodder/download.py:858 msgid "Missing content from server" msgstr "服务端缺失内容" -#: src/gpodder/download.py:937 +#: src/gpodder/download.py:864 +#, python-format +msgid "Couldn't connect to server %(host)s:%(port)s" +msgstr "" + +#: src/gpodder/download.py:873 +#, fuzzy, python-format +#| msgid "Syntax error: %(error)s" +msgid "Request Error: %(error)s" +msgstr "格式错误:%(error)s" + +#: src/gpodder/download.py:879 #, python-format msgid "I/O Error: %(error)s: %(filename)s" msgstr "I/O错误 %(error)s: %(filename)s" -#: src/gpodder/download.py:944 +#: src/gpodder/download.py:886 #, python-format msgid "HTTP Error %(code)s: %(message)s" msgstr "HTTP错误 %(code)s: %(message)s" -#: src/gpodder/download.py:948 src/gpodder/sync.py:1130 +#: src/gpodder/download.py:890 src/gpodder/sync.py:1130 #, python-format msgid "Error: %s" msgstr "错误 %s" @@ -130,8 +137,8 @@ msgid "Post download" msgstr "Post 下载" -#: src/gpodder/extensions.py:59 src/gpodder/model.py:821 -#: src/gpodder/model.py:1234 +#: src/gpodder/extensions.py:59 src/gpodder/model.py:822 +#: src/gpodder/model.py:1236 msgid "Other" msgstr "其他" @@ -154,41 +161,41 @@ msgid "Python module not found: %(module)s" msgstr "Python 模块未找到:%(module)s" -#: src/gpodder/model.py:481 src/gpodder/youtube.py:444 -#: src/gpodder/plugins/soundcloud.py:174 -#: share/gpodder/extensions/youtube-dl.py:208 +#: src/gpodder/model.py:483 src/gpodder/youtube.py:445 +#: src/gpodder/plugins/soundcloud.py:152 +#: share/gpodder/extensions/youtube-dl.py:211 msgid "No description available" msgstr "没有可用介绍" -#: src/gpodder/model.py:715 +#: src/gpodder/model.py:716 msgid "unknown" msgstr "未知" -#: src/gpodder/model.py:786 +#: src/gpodder/model.py:787 msgid "Default" msgstr "默认" -#: src/gpodder/model.py:787 +#: src/gpodder/model.py:788 msgid "Only keep latest" msgstr "保持最新" -#: src/gpodder/model.py:1217 src/gpodder/model.py:1232 +#: src/gpodder/model.py:1219 src/gpodder/model.py:1234 #: share/gpodder/ui/gtk/gpodderpreferences.ui.h:10 msgid "Video" msgstr "视频" -#: src/gpodder/model.py:1230 +#: src/gpodder/model.py:1232 msgid "Audio" msgstr "音频" -#: src/gpodder/model.py:1409 +#: src/gpodder/model.py:1411 #, python-format msgid "" "Warning: path to gPodder home (%(root)s) is very long and can result in " "failure to download files.\n" msgstr "" -#: src/gpodder/model.py:1411 +#: src/gpodder/model.py:1413 msgid "You're advised to set it to a shorter path." msgstr "建议设置短路径。" @@ -329,10 +336,10 @@ msgid "The playlist on your MP3 player has been updated." msgstr "MP3 播放列表已更新。" -#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:834 -#: src/gpodder/gtkui/main.py:997 src/gpodder/gtkui/main.py:2865 -#: src/gpodder/gtkui/main.py:3072 -#: src/gpodder/gtkui/desktop/episodeselector.py:127 +#: src/gpodder/syncui.py:270 src/gpodder/gtkui/main.py:837 +#: src/gpodder/gtkui/main.py:1016 src/gpodder/gtkui/main.py:2896 +#: src/gpodder/gtkui/main.py:3103 +#: src/gpodder/gtkui/desktop/episodeselector.py:131 msgid "Episode" msgstr "单集" @@ -344,43 +351,43 @@ msgid "Error writing playlist files" msgstr "写入播放列表错误" -#: src/gpodder/util.py:443 +#: src/gpodder/util.py:441 #, python-format msgid "%(count)d day ago" msgid_plural "%(count)d days ago" msgstr[0] "%(count)d 天之前" -#: src/gpodder/util.py:522 +#: src/gpodder/util.py:520 msgid "Today" msgstr "今天" -#: src/gpodder/util.py:524 +#: src/gpodder/util.py:522 msgid "Yesterday" msgstr "昨天" -#: src/gpodder/util.py:567 src/gpodder/util.py:570 +#: src/gpodder/util.py:565 src/gpodder/util.py:568 msgid "(unknown)" msgstr "(不明)" -#: src/gpodder/util.py:1383 src/gpodder/util.py:1405 +#: src/gpodder/util.py:1377 src/gpodder/util.py:1399 #, python-format msgid "%(count)d second" msgid_plural "%(count)d seconds" msgstr[0] "%(count)d 秒" -#: src/gpodder/util.py:1397 +#: src/gpodder/util.py:1391 #, python-format msgid "%(count)d hour"
View file
3.10.17.tar.gz/share/gpodder/extensions/episode_website_context_menu.py -> 3.10.19.tar.gz/share/gpodder/extensions/episode_website_context_menu.py
Changed
@@ -23,15 +23,21 @@ def __init__(self, container): self.container = container + def has_website(self, episodes): + for episode in episodes: + if episode.link: + return True + def open_website(self, episodes): for episode in episodes: - util.open_website(episode.link) + if episode.link: + util.open_website(episode.link) def open_channel_website(self, channel): util.open_website(channel.link) def on_episodes_context_menu(self, episodes): - return [(_('Open website'), self.open_website)] + return [(_('Open website'), self.open_website if self.has_website(episodes) else None)] - def on_channel_context_menu(self, episodes): - return [(_('Open website'), self.open_channel_website)] + def on_channel_context_menu(self, channel): + return [(_('Open website'), self.open_channel_website if channel.link else None)]
View file
3.10.17.tar.gz/share/gpodder/extensions/rockbox_convert2mp4.py -> 3.10.19.tar.gz/share/gpodder/extensions/rockbox_convert2mp4.py
Changed
@@ -15,8 +15,9 @@ import shlex import subprocess -import gpodder import kaa.metadata + +import gpodder from gpodder import util logger = logging.getLogger(__name__)
View file
3.10.17.tar.gz/share/gpodder/extensions/taskbar_progress.py -> 3.10.19.tar.gz/share/gpodder/extensions/taskbar_progress.py
Changed
@@ -26,9 +26,10 @@ c_ulong, c_ulonglong, c_ushort, c_wchar_p, sizeof) from ctypes.wintypes import tagRECT -import gpodder from comtypes import COMMETHOD, GUID, IUnknown, client, wireHWND +import gpodder + _ = gpodder.gettext
View file
3.10.17.tar.gz/share/gpodder/extensions/youtube-dl.py -> 3.10.19.tar.gz/share/gpodder/extensions/youtube-dl.py
Changed
@@ -29,6 +29,9 @@ __authors__ = 'Eric Le Lay <elelay.fr:contact>' __doc__ = 'https://gpodder.github.io/docs/extensions/youtubedl.html' +want_ytdl_version = '2020.11.12' +want_ytdl_version_msg = _('Your version of youtube-dl %(have_version)s has known issues, please upgrade to %(want_version)s or newer.') + DefaultConfig = { # youtube-dl downloads and parses each video page to get informations about it, which is very slow. # Set to False to fall back to the fast but limited (only 15 episodes) gpodder code @@ -432,6 +435,12 @@ registry.feed_handler.register(self.ytdl.fetch_channel) registry.custom_downloader.register(self.ytdl.custom_downloader) + logger.debug('Youtube-DL %s' % youtube_dl.version.__version__) + + if youtube_dl.utils.version_tuple(youtube_dl.version.__version__) < youtube_dl.utils.version_tuple(want_ytdl_version): + logger.error(want_ytdl_version_msg + % {'have_version': youtube_dl.version.__version__, 'want_version': want_ytdl_version}) + def on_unload(self): logger.info('Unregistering youtube-dl.') try: @@ -448,6 +457,11 @@ if name == 'gpodder-gtk': self.gpodder = ui_object + if youtube_dl.utils.version_tuple(youtube_dl.version.__version__) < youtube_dl.utils.version_tuple(want_ytdl_version): + ui_object.notification(want_ytdl_version_msg % + {'have_version': youtube_dl.version.__version__, 'want_version': want_ytdl_version}, + _('Old Youtube-DL'), important=True, widget=ui_object.main_window) + def on_episodes_context_menu(self, episodes): if not self.container.config.manage_downloads \ and not all(e.was_downloaded(and_exists=True) for e in episodes):
View file
3.10.17.tar.gz/share/gpodder/ui/gtk/gpodderaddpodcast.ui -> 3.10.19.tar.gz/share/gpodder/ui/gtk/gpodderaddpodcast.ui
Changed
@@ -85,7 +85,7 @@ </object> <packing> <property name="padding">0</property> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> </packing> </child>
View file
3.10.17.tar.gz/share/gpodder/ui/gtk/gpodderpreferences.ui -> 3.10.19.tar.gz/share/gpodder/ui/gtk/gpodderpreferences.ui
Changed
@@ -51,94 +51,105 @@ <property name="visible">True</property> <property name="orientation">vertical</property> <child> - <object class="GtkGrid" id="table_players"> - <property name="column_spacing">6</property> - <property name="row_spacing">6</property> + <!-- n-columns=3 n-rows=2 --> + <object class="GtkGrid"> <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="column-spacing">12</property> + <property name="row-spacing">6</property> <child> - <object class="GtkLabel" id="label_audio_player"> - <property name="label" translatable="yes">Audio player:</property> + <object class="GtkLabel" id="label_video_player"> <property name="visible">True</property> - <property name="xalign">0.0</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Video player:</property> + <property name="xalign">0</property> </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">0</property> + </packing> </child> <child> - <object class="GtkLabel" id="label_video_player"> - <property name="label" translatable="yes">Video player:</property> + <object class="GtkComboBox" id="combo_video_player_app"> <property name="visible">True</property> - <property name="xalign">0.0</property> + <property name="can-focus">False</property> + <property name="hexpand">True</property> + <signal name="changed" handler="on_combo_video_player_app_changed" swapped="no"/> </object> <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> + <property name="left-attach">1</property> + <property name="top-attach">0</property> </packing> </child> <child> - <object class="GtkComboBox" id="combo_audio_player_app"> + <object class="GtkButton" id="button_video_player"> <property name="visible">True</property> - <property name="hexpand">True</property> - <signal name="changed" handler="on_combo_audio_player_app_changed"/> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <signal name="clicked" handler="on_button_video_player_clicked" swapped="no"/> + <child> + <object class="GtkImage" id="image4"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="stock">gtk-edit</property> + </object> + </child> </object> <packing> - <property name="left_attach">1</property> + <property name="left-attach">2</property> + <property name="top-attach">0</property> </packing> </child> <child> - <object class="GtkComboBox" id="combo_video_player_app"> + <object class="GtkLabel" id="label_audio_player"> <property name="visible">True</property> - <property name="hexpand">True</property> - <signal name="changed" handler="on_combo_video_player_app_changed"/> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Audio player:</property> + <property name="xalign">0</property> </object> <packing> - <property name="left_attach">1</property> - <property name="top_attach">1</property> + <property name="left-attach">0</property> + <property name="top-attach">1</property> </packing> </child> <child> - <object class="GtkButton" id="button_audio_player"> + <object class="GtkComboBox" id="combo_audio_player_app"> <property name="visible">True</property> - <signal name="clicked" handler="on_button_audio_player_clicked"/> - <child> - <object class="GtkImage" id="image3"> - <property name="stock">gtk-edit</property> - <property name="visible">True</property> - </object> - </child> + <property name="can-focus">False</property> + <property name="hexpand">True</property> + <signal name="changed" handler="on_combo_audio_player_app_changed" swapped="no"/> </object> <packing> - <property name="left_attach">2</property> - <property name="top_attach">0</property> + <property name="left-attach">1</property> + <property name="top-attach">1</property> </packing> </child> <child> - <object class="GtkButton" id="button_video_player"> + <object class="GtkButton" id="button_audio_player"> <property name="visible">True</property> - <signal name="clicked" handler="on_button_video_player_clicked"/> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <signal name="clicked" handler="on_button_audio_player_clicked" swapped="no"/> <child> - <object class="GtkImage" id="image4"> - <property name="stock">gtk-edit</property> + <object class="GtkImage" id="image3"> <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="stock">gtk-edit</property> </object> </child> </object> <packing> - <property name="left_attach">2</property> - <property name="top_attach">1</property> + <property name="left-attach">2</property> + <property name="top-attach">1</property> </packing> </child> </object> - <packing> - <property name="expand">False</property> - </packing> </child> <child> - <object class="GtkHSeparator" id="hseparator_general"> + <object class="GtkSeparator" id="hseparator_general"> + <property name="orientation">horizontal</property> <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"> @@ -173,7 +184,7 @@ <property name="orientation">vertical</property> <child> <object class="GtkGrid" id="table_video"> - <property name="column_spacing">6</property> + <property name="column_spacing">12</property> <property name="row_spacing">6</property> <property name="visible">True</property> <child> @@ -293,144 +304,133 @@ </packing> </child> <child> - <object class="GtkTable" id="mygpo_config"> - <property name="border_width">6</property> - <property name="column_spacing">6</property> - <property name="n_columns">3</property> - <property name="n_rows">7</property> - <property name="row_spacing">6</property> + <object class="GtkBox" id="mygpo_config"> + <property name="margin">12</property> <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> <child> <object class="GtkCheckButton" id="checkbutton_enable"> <property name="label" translatable="yes">Synchronize subscriptions and episode actions</property> <property name="visible">True</property> - <signal handler="on_enabled_toggled" name="toggled"/> + <signal name="toggled" handler="on_enabled_toggled" swapped="no"/> </object> - <packing> - <property name="bottom_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label_server"> - <property name="label" translatable="yes">Server:</property> - <property name="visible">True</property> - <property name="xalign">1.0</property> - </object> - <packing> - <property name="bottom_attach">3</property> - <property name="top_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options"></property>
View file
3.10.17.tar.gz/share/gpodder/ui/gtk/gpodderwelcome.ui -> 3.10.19.tar.gz/share/gpodder/ui/gtk/gpodderwelcome.ui
Changed
@@ -19,43 +19,21 @@ <property name="visible">True</property> <property name="orientation">vertical</property> <child> - <object class="GtkTable" id="table1"> - <property name="column_spacing">6</property> - <property name="n_columns">1</property> - <property name="n_rows">2</property> - <property name="row_spacing">6</property> + <object class="GtkLabel" id="label1"> + <property name="label" translatable="yes"><big>Welcome to gPodder</big></property> + <property name="use_markup">True</property> <property name="visible">True</property> - <child> - <object class="GtkLabel" id="label1"> - <property name="label" translatable="yes"><big>Welcome to gPodder</big></property> - <property name="use_markup">True</property> - <property name="visible">True</property> - <property name="xalign">0.0</property> - <property name="yalign">1.0</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label2"> - <property name="label" translatable="yes">Your podcast list is empty.</property> - <property name="visible">True</property> - <property name="xalign">0.0</property> - <property name="yalign">0.0</property> - </object> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - </packing> - </child> + <property name="xalign">0.0</property> + <property name="yalign">1.0</property> + </object> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="label" translatable="yes">Your podcast list is empty.</property> + <property name="visible">True</property> + <property name="xalign">0.0</property> + <property name="yalign">0.0</property> </object> - <packing> - <property name="expand">False</property> - </packing> </child> <child> <object class="GtkBox" id="vbox_buttons"> @@ -86,9 +64,6 @@ </object> </child> </object> - <packing> - <property name="position">1</property> - </packing> </child> </object> <packing>
View file
3.10.17.tar.gz/share/gpodder/ui/gtk/menus.ui -> 3.10.19.tar.gz/share/gpodder/ui/gtk/menus.ui
Changed
@@ -205,6 +205,10 @@ <attribute name="action">win.viewHideBoringPodcasts</attribute> <attribute name="label" translatable="yes">Hide podcasts without episodes</attribute> </item> + <item> + <attribute name="action">win.viewAlwaysShowNewEpisodes</attribute> + <attribute name="label" translatable="yes">Always show New Episodes</attribute> + </item> </section> <submenu id="menuViewColumns"> <attribute name="label" translatable="yes">Visible columns</attribute> @@ -212,4 +216,4 @@ </submenu> </menu> </interface> -<!-- :noTabs=true:tabSize=2:indentSize=2: --> \ No newline at end of file +<!-- :noTabs=true:tabSize=2:indentSize=2: -->
View file
3.10.17.tar.gz/share/man/man1/gpo.1 -> 3.10.19.tar.gz/share/man/man1/gpo.1
Changed
@@ -1,4 +1,4 @@ -.TH GPO "1" "November 2020" "gpodder 3.10.17" "User Commands" +.TH GPO "1" "April 2021" "gpodder 3.10.19" "User Commands" .SH NAME gpo \- Text mode interface of gPodder .SH SYNOPSIS
View file
3.10.17.tar.gz/share/man/man1/gpodder.1 -> 3.10.19.tar.gz/share/man/man1/gpodder.1
Changed
@@ -1,5 +1,5 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.16. -.TH GPODDER "1" "November 2020" "gpodder 3.10.17" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.17. +.TH GPODDER "1" "April 2021" "gpodder 3.10.19" "User Commands" .SH NAME gpodder \- Media aggregator and podcast client .SH SYNOPSIS
View file
3.10.17.tar.gz/src/gpodder/__init__.py -> 3.10.19.tar.gz/src/gpodder/__init__.py
Changed
@@ -20,9 +20,9 @@ # 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.10.17' -__date__ = '2020-11-23' -__copyright__ = '© 2005-2020 The gPodder Team' +__version__ = '3.10.19' +__date__ = '2021-04-15' +__copyright__ = '© 2005-2021 The gPodder Team' __license__ = 'GNU General Public License, version 3 or later' __url__ = 'http://gpodder.org/' @@ -89,7 +89,7 @@ # The User-Agent string for downloads -user_agent = 'gPodder/%s (+%s) %s/%s' % (__version__, __url__, platform.system(), platform.release()) +user_agent = 'gPodder/%s (+%s) %s' % (__version__, __url__, platform.system()) # Are we running in GUI or console mode? @@ -143,7 +143,7 @@ SOCKET_TIMEOUT = 60 socket.setdefaulttimeout(SOCKET_TIMEOUT) del socket -del SOCKET_TIMEOUT +SOCKET_TIMEOUT # Variables reserved for GUI-specific use (will be set accordingly) ui_folders = [] @@ -185,7 +185,8 @@ old_home = new_home # force to config directory print("D: windows-portable build; forcing home to config directory %s" % new_home, file=sys.stderr) else: # ui.win32, not portable build - from gpodder.utilwin32ctypes import get_documents_folder, get_reg_current_user_string_value + from gpodder.utilwin32ctypes import ( + get_documents_folder, get_reg_current_user_string_value) try: # from old launcher, see # https://github.com/gpodder/gpodder/blob/old/gtk2/tools/win32-launcher/folderselector.c
View file
3.10.17.tar.gz/src/gpodder/config.py -> 3.10.19.tar.gz/src/gpodder/config.py
Changed
@@ -162,6 +162,7 @@ 'descriptions': True, 'view_mode': 1, 'columns': int('110', 2), # bitfield of visible columns + 'always_show_new': True, }, 'download_list': { @@ -218,8 +219,6 @@ # The sooner this goes away, the better gPodderSettings_LegacySupport = { - 'player': 'player.audio', - 'videoplayer': 'player.video', 'limit_rate': 'limit.bandwidth.enabled', 'limit_rate_value': 'limit.bandwidth.kbps', 'max_downloads_enabled': 'limit.downloads.enabled',
View file
3.10.17.tar.gz/src/gpodder/coverart.py -> 3.10.19.tar.gz/src/gpodder/coverart.py
Changed
@@ -85,7 +85,11 @@ try: logger.info('Downloading cover art: %s', cover_url) - data = util.urlopen(cover_url, timeout=self.TIMEOUT).read() + response = util.urlopen(cover_url, timeout=self.TIMEOUT) + if response.status_code != 200: + msg = '%s returned status code %d' % (cover_url, response.status_code) + raise ValueError(msg) + data = response.content except Exception as e: logger.warn('Cover art download failed: %s', e) return self._fallback_filename(title)
View file
3.10.17.tar.gz/src/gpodder/directory.py -> 3.10.19.tar.gz/src/gpodder/directory.py
Changed
@@ -89,7 +89,7 @@ def directory_entry_from_mygpo_json(url): return [DirectoryEntry(d['title'], d['url'], d['logo_url'], d['subscribers'], d['description']) - for d in json.load(util.urlopen(url))] + for d in util.urlopen(url).json()] class GPodderNetSearchProvider(Provider): @@ -152,7 +152,7 @@ return directory_entry_from_mygpo_json('http://gpodder.net/api/2/tag/%s/50.json' % urllib.parse.quote(tag)) def get_tags(self): - return [DirectoryTag(d['tag'], d['usage']) for d in json.load(util.urlopen('http://gpodder.net/api/2/tags/40.json'))] + return [DirectoryTag(d['tag'], d['usage']) for d in util.urlopen('http://gpodder.net/api/2/tags/40.json').json()] class SoundcloudSearchProvider(Provider):
View file
3.10.17.tar.gz/src/gpodder/download.py -> 3.10.19.tar.gz/src/gpodder/download.py
Changed
@@ -36,9 +36,12 @@ import threading import time import urllib.error -import urllib.parse -import urllib.request -from email.header import decode_header + +import requests +from requests.adapters import HTTPAdapter +from requests.exceptions import ConnectionError, HTTPError, RequestException +from requests.packages.urllib3.exceptions import MaxRetryError +from requests.packages.urllib3.util.retry import Retry import gpodder from gpodder import registry, util @@ -47,6 +50,8 @@ _ = gpodder.gettext +REDIRECT_RETRIES = 3 + class CustomDownload: """ abstract class for custom downloads. DownloadTask call retrieve_resume() on it """ @@ -78,30 +83,6 @@ return None -def get_header_param(headers, param, header_name): - """Extract a HTTP header parameter from a dict - - Uses the "email" module to retrieve parameters - from HTTP headers. This can be used to get the - "filename" parameter of the "content-disposition" - header for downloads to pick a good filename. - - Returns None if the filename cannot be retrieved. - """ - value = None - try: - headers_string = ['%s:%s' % (k, v) for k, v in list(headers.items())] - msg = email.message_from_string('\n'.join(headers_string)) - if header_name in msg: - raw_value = msg.get_param(param, header=header_name) - if raw_value is not None: - value = email.utils.collapse_rfc2231_value(raw_value) - except Exception as e: - logger.error('Cannot get %s from %s', param, header_name, exc_info=True) - - return value - - class ContentRange(object): # Based on: # http://svn.pythonpaste.org/Paste/WebOb/trunk/webob/byterange.py @@ -207,9 +188,6 @@ class DownloadCancelledException(Exception): pass -class AuthenticationError(Exception): pass - - class gPodderDownloadHTTPError(Exception): def __init__(self, url, error_code, error_message): self.url = url @@ -217,74 +195,38 @@ self.error_message = error_message -class DownloadURLOpener(urllib.request.FancyURLopener): - version = gpodder.user_agent +class DownloadURLOpener: # Sometimes URLs are not escaped correctly - try to fix them # (see RFC2396; Section 2.4.3. Excluded US-ASCII Characters) # FYI: The omission of "%" in the list is to avoid double escaping! ESCAPE_CHARS = dict((ord(c), '%%%x' % ord(c)) for c in ' <>#"{}|\\^[]`') - def __init__(self, channel): - self.channel = channel - self._auth_retry_counter = 0 + def __init__(self, channel, max_retries=3): super().__init__() - - def http_error(self, url, fp, errcode, errmsg, headers, data=None): - """Handle http errors. - Overriden to give retry=True to http_error_40{1,7}. - See https://github.com/python/cpython/commit/80f1b059714aeb1c6fc9f6ce1173bc8a51af7dd9 - See python issue https://bugs.python.org/issue1368368 - """ - result = False - if errcode == 401: - result = self.http_error_401(url, fp, errcode, errmsg, headers, data=data, retry=True) - elif errcode == 407: - result = self.http_error_407(url, fp, errcode, errmsg, headers, data=data, retry=True) - if result: - return result - return super().http_error(url, fp, errcode, errmsg, headers, data=data) - - def http_error_default(self, url, fp, errcode, errmsg, headers): - """ - FancyURLopener by default does not raise an exception when - there is some unknown HTTP error code. We want to override - this and provide a function to log the error and raise an - exception, so we don't download the HTTP error page here. - """ - # The following two lines are copied from urllib.URLopener's - # implementation of http_error_default - void = fp.read() - fp.close() - raise gPodderDownloadHTTPError(url, errcode, errmsg) - - def redirect_internal(self, url, fp, errcode, errmsg, headers, data): - """ This is the exact same function that's included with urllib - except with "void = fp.read()" commented out. """ - - if 'location' in headers: - newurl = headers['location'] - elif 'uri' in headers: - newurl = headers['uri'] - else: - return - - # This blocks forever(?) with certain servers (see bug #465) - # void = fp.read() - fp.close() - - # In case the server sent a relative URL, join with original: - newurl = urllib.parse.urljoin(self.type + ":" + url, newurl) - return self.open(newurl) + self.channel = channel + self.max_retries = max_retries + + def init_session(self): + """ init a session with our own retry codes + retry count """ + # I add a few retries for redirects but it means that I will allow max_retries + REDIRECT_RETRIES + # if encountering max_retries connect and REDIRECT_RETRIES read for instance + retry_strategy = Retry( + total=self.max_retries + REDIRECT_RETRIES, + connect=self.max_retries, + read=self.max_retries, + redirect=max(REDIRECT_RETRIES, self.max_retries), + status=self.max_retries, + status_forcelist=Retry.RETRY_AFTER_STATUS_CODES.union((408, 418, 504, 598, 599,))) + adapter = HTTPAdapter(max_retries=retry_strategy) + http = requests.Session() + http.mount("https://", adapter) + http.mount("http://", adapter) + return http # The following is based on Python's urllib.py "URLopener.retrieve" # Also based on http://mail.python.org/pipermail/python-list/2001-October/110069.html - def http_error_206(self, url, fp, errcode, errmsg, headers, data=None): - # The next line is taken from urllib's URLopener.open_http - # method, at the end after the line "if errcode == 200:" - return urllib.addinfourl(fp, headers, 'http:' + url) - def retrieve_resume(self, url, filename, reporthook=None, data=None): """Download files from an URL; return (headers, real_url) @@ -294,13 +236,23 @@ current_size = 0 tfp = None + headers = { + 'User-agent': gpodder.user_agent + } + + if self.channel.auth_username or self.channel.auth_password: + logger.debug('Authenticating as "%s"', self.channel.auth_username) + auth = (self.channel.auth_username, self.channel.auth_password) + else: + auth = None + if os.path.exists(filename): try: current_size = os.path.getsize(filename) tfp = open(filename, 'ab') # If the file exists, then only download the remainder if current_size > 0: - self.addheader('Range', 'bytes=%s-' % (current_size)) + headers['Range'] = 'bytes=%s-' % (current_size) except: logger.warn('Cannot resume download: %s', filename, exc_info=True) tfp = None @@ -312,47 +264,49 @@ # Fix a problem with bad URLs that are not encoded correctly (bug 549) url = url.translate(self.ESCAPE_CHARS) - fp = self.open(url, data) - headers = fp.info() - - if current_size > 0: - # We told the server to resume - see if she agrees - # See RFC2616 (206 Partial Content + Section 14.16) - # XXX check status code here, too... - range = ContentRange.parse(headers.get('content-range', '')) - if range is None or range.start != current_size:
View file
3.10.17.tar.gz/src/gpodder/extensions.py -> 3.10.19.tar.gz/src/gpodder/extensions.py
Changed
@@ -243,10 +243,10 @@ encoding = util.guess_encoding(filename) extension_py = open(filename, "r", encoding=encoding).read() - metadata = dict(re.findall("__([a-z_]+)__ = '([^']+)'", extension_py)) + metadata = dict(re.findall(r"__([a-z_]+)__ = '([^']+)'", extension_py)) # Support for using gpodder.gettext() as _ to localize text - localized_metadata = dict(re.findall("__([a-z_]+)__ = _\('([^']+)'\)", + localized_metadata = dict(re.findall(r"__([a-z_]+)__ = _\('([^']+)'\)", extension_py)) for key in localized_metadata:
View file
3.10.17.tar.gz/src/gpodder/feedcore.py -> 3.10.19.tar.gz/src/gpodder/feedcore.py
Changed
@@ -25,25 +25,15 @@ import logging import urllib.parse from html.parser import HTMLParser -from urllib.error import HTTPError +from io import BytesIO -import podcastparser +from requests.exceptions import RequestException from gpodder import util, youtube logger = logging.getLogger(__name__) -try: - # Python 2 - from rfc822 import mktime_tz - from StringIO import StringIO -except ImportError: - # Python 3 - from email.utils import mktime_tz - from io import StringIO - - class ExceptionWithData(Exception): """Base exception with additional payload""" def __init__(self, data): @@ -138,81 +128,76 @@ """ return None - def _normalize_status(self, status): - # Based on Mark Pilgrim's "Atom aggregator behaviour" article - if status in (200, 301, 302, 304, 400, 401, 403, 404, 410, 500): - return status - elif status >= 200 and status < 300: - return 200 - elif status >= 300 and status < 400: - return 302 - elif status >= 400 and status < 500: - return 400 - elif status >= 500 and status < 600: - return 500 - else: - return status - - def _check_statuscode(self, response, feed): - status = self._normalize_status(response.getcode()) - - if status == 200: - return Result(UPDATED_FEED, feed) - elif status == 301: - return Result(NEW_LOCATION, feed) - elif status == 302: - return Result(UPDATED_FEED, feed) + @staticmethod + def _check_statuscode(status, url): + if status >= 200 and status < 300: + return UPDATED_FEED elif status == 304: - return Result(NOT_MODIFIED, feed) + return NOT_MODIFIED + # redirects are handled by requests directly + # => the status should never be 301, 302, 303, 307, 308 - if status == 400: - raise BadRequest('bad request') - elif status == 401: - raise AuthenticationRequired('authentication required', feed) + if status == 401: + raise AuthenticationRequired('authentication required', url) elif status == 403: raise Unsubscribe('forbidden') elif status == 404: raise NotFound('not found') elif status == 410: raise Unsubscribe('resource is gone') - elif status == 500: + elif status >= 400 and status < 500: + raise BadRequest('bad request') + elif status >= 500 and status < 600: raise InternalServerError('internal server error') else: raise UnknownStatusCode(status) - def _parse_feed(self, url, etag, modified, autodiscovery=True, max_episodes=0): + def parse_feed(self, url, data_stream, headers, status, **kwargs): + """ + kwargs are passed from Fetcher.fetch + :param str url: real url + :param data_stream: file-like object to read from (bytes mode) + :param dict-like headers: response headers (may be empty) + :param int status: always UPDATED_FEED for now + :return Result: Result(status, model.Feed from parsed data_stream) + """ + raise NotImplementedError("Implement parse_feed()") + + def fetch(self, url, etag=None, modified=None, autodiscovery=True, **kwargs): + """ use kwargs to pass extra data to parse_feed in Fetcher subclasses """ + # handle local file first + if url.startswith('file://'): + url = url[len('file://'):] + stream = open(url) + return self.parse_feed(url, stream, {}, UPDATED_FEED, **kwargs) + + # remote feed headers = {} if modified is not None: headers['If-Modified-Since'] = modified if etag is not None: headers['If-None-Match'] = etag - if url.startswith('file://'): - is_local = True - url = url[len('file://'):] - stream = open(url) - else: - is_local = False - try: - stream = util.urlopen(url, headers) - except HTTPError as e: - return self._check_statuscode(e, e.geturl()) - - data = stream - if autodiscovery and not is_local and stream.headers.get('content-type', '').startswith('text/html'): - # Not very robust attempt to detect encoding: http://stackoverflow.com/a/1495675/1072626 - charset = stream.headers.get_param('charset') - if charset is None: - charset = 'utf-8' # utf-8 appears hard-coded elsewhere in this codebase - - # We use StringIO in case the stream needs to be read again - data = StringIO(stream.read().decode(charset)) - ad = FeedAutodiscovery(url) + stream = util.urlopen(url, headers) + + responses = stream.history + [stream] + for i, resp in enumerate(responses): + if resp.is_permanent_redirect: + # there should always be a next response when a redirect is encountered + # If max redirects is reached, TooManyRedirects is raised + # TODO: since we've got the end contents anyway, modify model.py to accept contents on NEW_LOCATION + return Result(NEW_LOCATION, responses[i + 1].url) + res = self._check_statuscode(stream.status_code, stream.url) + if res == NOT_MODIFIED: + return Result(NOT_MODIFIED, stream.url) - ad.feed(data.getvalue()) + if autodiscovery and stream.headers.get('content-type', '').startswith('text/html'): + ad = FeedAutodiscovery(url) + # response_text() will assume utf-8 if no charset specified + ad.feed(util.response_text(stream)) if ad._resolved_url and ad._resolved_url != url: try: - self._parse_feed(ad._resolved_url, None, None, False) + self.fetch(ad._resolved_url, etag=None, modified=None, autodiscovery=False, **kwargs) return Result(NEW_LOCATION, ad._resolved_url) except Exception as e: logger.warn('Feed autodiscovery failed', exc_info=True) @@ -222,21 +207,7 @@ if new_url and new_url != url: return Result(NEW_LOCATION, new_url) - # Reset the stream so podcastparser can give it a go - data.seek(0) - - try: - feed = podcastparser.parse(url, data) - feed['url'] = url - except ValueError as e: - raise InvalidFeed('Could not parse feed: {msg}'.format(msg=e)) - - if is_local: - feed['headers'] = {} - return Result(UPDATED_FEED, feed) - else: - feed['headers'] = stream.headers - return self._check_statuscode(stream, feed) - - def fetch(self, url, etag=None, modified=None, max_episodes=0): - return self._parse_feed(url, etag, modified, max_episodes) + # xml documents specify the encoding inline so better pass encoded body. + # Especially since requests will use ISO-8859-1 for content-type 'text/xml' + # if the server doesn't specify a charset. + return self.parse_feed(url, BytesIO(stream.content), stream.headers, UPDATED_FEED, **kwargs)
View file
3.10.17.tar.gz/src/gpodder/gtkui/app.py -> 3.10.19.tar.gz/src/gpodder/gtkui/app.py
Changed
@@ -203,19 +203,18 @@ dlg = Gtk.Dialog(_('About gPodder'), self.window.gPodder, Gtk.DialogFlags.MODAL) dlg.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.OK).show() - dlg.set_resizable(False) + dlg.set_resizable(True) - bg = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6) + bg = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6, margin=16) pb = GdkPixbuf.Pixbuf.new_from_file_at_size(gpodder.icon_file, 160, 160) bg.pack_start(Gtk.Image.new_from_pixbuf(pb), False, False, 0) - vb = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) - label = Gtk.Label() - label.set_alignment(0, 0.5) + label = Gtk.Label(justify=Gtk.Justification.CENTER) label.set_markup('\n'.join(x.strip() for x in """ <b>gPodder {version} ({date})</b> {copyright} - License: {license} + + {license} <a href="{url}">{tr_website}</a> · <a href="{bugs_url}">{tr_bugtracker}</a> """.format(version=gpodder.__version__, @@ -227,8 +226,7 @@ tr_website=_('Website'), tr_bugtracker=_('Bug Tracker')).strip().split('\n'))) - vb.pack_start(label, False, False, 0) - bg.pack_start(vb, False, False, 0) + bg.pack_start(label, False, False, 0) bg.pack_start(Gtk.Label(), False, False, 0) dlg.vbox.pack_start(bg, False, False, 0)
View file
3.10.17.tar.gz/src/gpodder/gtkui/config.py -> 3.10.19.tar.gz/src/gpodder/gtkui/config.py
Changed
@@ -158,6 +158,9 @@ if cfg.width != -1 and cfg.height != -1: window.resize(cfg.width, cfg.height) + + # Not all platforms can natively restore position, gPodder must handle it. + # https://github.com/gpodder/gpodder/pull/933#issuecomment-818039693 if cfg.x == -1 or cfg.y == -1: window.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) else: @@ -166,9 +169,11 @@ # Ignore events while we're connecting to the window self.__ignore_window_events = True + # Get window state, correct size comes from window.get_size(), + # see https://developer.gnome.org/SaveWindowState/ def _receive_configure_event(widget, event): - x_pos, y_pos = event.x, event.y - width_size, height_size = event.width, event.height + x_pos, y_pos = widget.get_position() + width_size, height_size = widget.get_size() maximized = bool(event.window.get_state() & Gdk.WindowState.MAXIMIZED) if not self.__ignore_window_events and not maximized: cfg.x = x_pos
View file
3.10.17.tar.gz/src/gpodder/gtkui/desktop/channel.py -> 3.10.19.tar.gz/src/gpodder/gtkui/desktop/channel.py
Changed
@@ -83,7 +83,7 @@ err = '\n\nERROR: {}'.format(self.channel._update_error) else: err = '' - b.set_text(self.channel.description + err) + b.set_text(util.remove_html_tags(self.channel.description) + err) self.channel_description.set_buffer(b) # Add Drag and Drop Support
View file
3.10.17.tar.gz/src/gpodder/gtkui/desktop/episodeselector.py -> 3.10.19.tar.gz/src/gpodder/gtkui/desktop/episodeselector.py
Changed
@@ -89,7 +89,11 @@ COLUMN_ADDITIONAL = 3 def new(self): + if hasattr(self, 'title'): + self.gPodderEpisodeSelector.set_title(self.title) + self._config.connect_gtk_window(self.gPodderEpisodeSelector, 'episode_selector', True) + if not hasattr(self, 'callback'): self.callback = None @@ -126,9 +130,6 @@ if not hasattr(self, 'columns'): self.columns = (('title_markup', None, None, _('Episode')),) - if hasattr(self, 'title'): - self.gPodderEpisodeSelector.set_title(self.title) - if hasattr(self, 'instructions'): self.labelInstructions.set_text(self.instructions) self.labelInstructions.show_all()
View file
3.10.17.tar.gz/src/gpodder/gtkui/desktop/exportlocal.py -> 3.10.19.tar.gz/src/gpodder/gtkui/desktop/exportlocal.py
Changed
@@ -71,6 +71,6 @@ folder = self.gPodderExportToLocalFolder.get_current_folder() filename = self.gPodderExportToLocalFolder.get_filename() else: - folder = None + folder = initial_directory filename = None return (notCancelled, folder, filename, allRemainingDefault)
View file
3.10.17.tar.gz/src/gpodder/gtkui/desktop/preferences.py -> 3.10.19.tar.gz/src/gpodder/gtkui/desktop/preferences.py
Changed
@@ -196,12 +196,12 @@ self.audio_player_model = self.user_apps_reader.get_model('audio') self.combo_audio_player_app.set_model(self.audio_player_model) - index = self.audio_player_model.get_index(self._config.player) + index = self.audio_player_model.get_index(self._config.player.audio) self.combo_audio_player_app.set_active(index) self.video_player_model = self.user_apps_reader.get_model('video') self.combo_video_player_app.set_model(self.video_player_model) - index = self.video_player_model.get_index(self._config.videoplayer) + index = self.video_player_model.get_index(self._config.player.video) self.combo_video_player_app.set_active(index) self.preferred_youtube_format_model = YouTubeVideoFormatListModel(self._config) @@ -484,11 +484,11 @@ def on_combo_audio_player_app_changed(self, widget): index = self.combo_audio_player_app.get_active() - self._config.player = self.audio_player_model.get_command(index) + self._config.player.audio = self.audio_player_model.get_command(index) def on_combo_video_player_app_changed(self, widget): index = self.combo_video_player_app.get_active() - self._config.videoplayer = self.video_player_model.get_command(index) + self._config.player.video = self.video_player_model.get_command(index) def on_combobox_preferred_youtube_format_changed(self, widget): index = self.combobox_preferred_youtube_format.get_active() @@ -505,21 +505,21 @@ def on_button_audio_player_clicked(self, widget): result = self.show_text_edit_dialog(_('Configure audio player'), _('Command:'), - self._config.player) + self._config.player.audio) if result: - self._config.player = result - index = self.audio_player_model.get_index(self._config.player) + self._config.player.audio = result + index = self.audio_player_model.get_index(self._config.player.audio) self.combo_audio_player_app.set_active(index) def on_button_video_player_clicked(self, widget): result = self.show_text_edit_dialog(_('Configure video player'), _('Command:'), - self._config.videoplayer) + self._config.player.video) if result: - self._config.videoplayer = result - index = self.video_player_model.get_index(self._config.videoplayer) + self._config.player.video = result + index = self.video_player_model.get_index(self._config.player.video) self.combo_video_player_app.set_active(index) def format_update_interval_value(self, scale, value):
View file
3.10.17.tar.gz/src/gpodder/gtkui/download.py -> 3.10.19.tar.gz/src/gpodder/gtkui/download.py
Changed
@@ -57,6 +57,7 @@ def _format_message(self, episode, message, podcast): episode = html.escape(episode) podcast = html.escape(podcast) + message = html.escape(message) return '%s\n<small>%s - %s</small>' % (episode, message, podcast) def request_update(self, iter, task=None):
View file
3.10.17.tar.gz/src/gpodder/gtkui/draw.py -> 3.10.19.tar.gz/src/gpodder/gtkui/draw.py
Changed
@@ -197,8 +197,11 @@ text_height = max(height_left, height_right) + left_side_width = width_left + x_border * 2 + right_side_width = width_right + x_border * 2 + image_height = int(y + text_height + border * 2) - image_width = int(x + width_left + width_right + x_border * 4 + padding_right) + image_width = int(x + left_side_width + right_side_width + padding_right) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, image_width, image_height) ctx = cairo.Context(surface) @@ -212,9 +215,6 @@ if right_text == '0': right_text = None - left_side_width = width_left + x_border * 2 - right_side_width = width_right + x_border * 2 - rect_width = left_side_width + right_side_width rect_height = text_height + border * 2 if left_text is not None:
View file
3.10.17.tar.gz/src/gpodder/gtkui/interface/common.py -> 3.10.19.tar.gz/src/gpodder/gtkui/interface/common.py
Changed
@@ -70,6 +70,10 @@ dlg.set_markup('<span weight="bold" size="larger">%s</span>\n\n%s' % (title, message)) else: dlg.set_markup('<span weight="bold" size="larger">%s</span>' % (message)) + # make message copy/pastable + for lbl in dlg.get_message_area(): + if isinstance(lbl, Gtk.Label): + lbl.set_selectable(True) dlg.run() dlg.destroy() else: @@ -130,6 +134,9 @@ def show_login_dialog(self, title, message, root_url=None, username=None, password=None, username_prompt=None, register_callback=None, register_text=None, ask_server=False): + def toggle_password_visibility(_, entry): + entry.set_visibility(not entry.get_visibility()) + if username_prompt is None: username_prompt = _('Username') @@ -181,8 +188,13 @@ password_label = Gtk.Label() password_label.set_markup('<b>' + _('Password') + ':</b>') + show_password_label = Gtk.Label() + show_password = Gtk.CheckButton.new_with_label(_('Show Password')) + show_password.connect('toggled', toggle_password_visibility, password_entry) + label_entries = [(username_label, username_entry), - (password_label, password_entry)] + (password_label, password_entry), + (show_password_label, show_password)] if ask_server: label_entries.insert(0, (server_label, server_entry))
View file
3.10.17.tar.gz/src/gpodder/gtkui/macosx.py -> 3.10.19.tar.gz/src/gpodder/gtkui/macosx.py
Changed
@@ -43,9 +43,7 @@ # Also note that it only works when gPodder is not running ! # For some reason I don't get the events afterwards... try: - from AppKit import NSObject - from AppKit import NSAppleEventManager - from AppKit import NSAppleEventDescriptor + from AppKit import NSAppleEventDescriptor, NSAppleEventManager, NSObject class gPodderEventHandler(NSObject): """ handles Apple Events for :
View file
3.10.17.tar.gz/src/gpodder/gtkui/main.py -> 3.10.19.tar.gz/src/gpodder/gtkui/main.py
Changed
@@ -29,6 +29,8 @@ import urllib.parse import dbus.service +import requests.exceptions +import urllib3.exceptions import gpodder from gpodder import (common, download, extensions, feedcore, my, opml, player, @@ -51,7 +53,7 @@ from .interface.common import BuilderWidget, TreeViewHelper from .interface.progress import ProgressIndicator from .interface.searchtree import SearchTree -from .model import EpisodeListModel, PodcastListModel +from .model import EpisodeListModel, PodcastChannelProxy, PodcastListModel from .services import CoverDownloader from .widgets import SimpleMessageArea @@ -264,6 +266,11 @@ g.add_action(action) action = Gio.SimpleAction.new_stateful( + 'viewAlwaysShowNewEpisodes', None, GLib.Variant.new_boolean(self.config.ui.gtk.episode_list.always_show_new)) + action.connect('activate', self.on_item_view_always_show_new_episodes_toggled) + g.add_action(action) + + action = Gio.SimpleAction.new_stateful( 'searchAlwaysVisible', None, GLib.Variant.new_boolean(self.config.ui.gtk.search_always_visible)) action.connect('activate', self.on_item_view_search_always_visible_toggled) g.add_action(action) @@ -698,11 +705,6 @@ # When no podcast is selected, clear the episode list model selection = self.treeChannels.get_selection() - def select_function(selection, model, path, path_currently_selected): - url = model.get_value(model.get_iter(path), PodcastListModel.C_URL) - return (url != '-') - selection.set_select_function(select_function) # full=True) - # Set up type-ahead find for the podcast list def on_key_press(treeview, event): if event.keyval == Gdk.KEY_Right: @@ -710,30 +712,31 @@ elif event.keyval in (Gdk.KEY_Up, Gdk.KEY_Down): # If section markers exist in the treeview, we want to # "jump over" them when moving the cursor up and down - selection = self.treeChannels.get_selection() - model, it = selection.get_selected() - if event.keyval == Gdk.KEY_Up: step = -1 else: step = 1 - path = model.get_path(it) - while True: - path = (path[0] + step,) + selection = self.treeChannels.get_selection() + model, it = selection.get_selected() + if it is None: + it = model.get_iter_first() + if it is None: + return False + step = 1 - if path[0] < 0: - # Valid paths must have a value >= 0 - return True + path = model.get_path(it) + path = (path[0] + step,) - try: - it = model.get_iter(path) - except ValueError: - # Already at the end of the list - return True + if path[0] < 0: + # Valid paths must have a value >= 0 + return True - if model.get_value(it, PodcastListModel.C_URL) != '-': - break + try: + it = model.get_iter(path) + except ValueError: + # Already at the end of the list + return True self.treeChannels.set_cursor(path) elif event.keyval == Gdk.KEY_Escape: @@ -862,6 +865,22 @@ releasecolumn = Gtk.TreeViewColumn(_('Released'), releasecell, text=EpisodeListModel.C_PUBLISHED_TEXT) releasecolumn.set_sort_column_id(EpisodeListModel.C_PUBLISHED) + sizetimecell = Gtk.CellRendererText() + sizetimecell.set_property('xalign', 1) + sizetimecell.set_property('alignment', Pango.Alignment.RIGHT) + sizetimecolumn = Gtk.TreeViewColumn(_('Size+')) + sizetimecolumn.pack_start(sizetimecell, True) + sizetimecolumn.add_attribute(sizetimecell, 'markup', EpisodeListModel.C_FILESIZE_AND_TIME_TEXT) + sizetimecolumn.set_sort_column_id(EpisodeListModel.C_FILESIZE_AND_TIME) + + timesizecell = Gtk.CellRendererText() + timesizecell.set_property('xalign', 1) + timesizecell.set_property('alignment', Pango.Alignment.RIGHT) + timesizecolumn = Gtk.TreeViewColumn(_('Duration+')) + timesizecolumn.pack_start(timesizecell, True) + timesizecolumn.add_attribute(timesizecell, 'markup', EpisodeListModel.C_TIME_AND_SIZE) + timesizecolumn.set_sort_column_id(EpisodeListModel.C_TOTAL_TIME_AND_SIZE) + namecolumn.set_reorderable(True) self.treeAvailable.append_column(namecolumn) @@ -869,7 +888,7 @@ if not self.config.ui.gtk.state.main_window.episode_column_sort_id: self.config.ui.gtk.state.main_window.episode_column_sort_id = EpisodeListModel.C_PUBLISHED - for itemcolumn in (sizecolumn, timecolumn, releasecolumn): + for itemcolumn in (sizecolumn, timecolumn, releasecolumn, sizetimecolumn, timesizecolumn): itemcolumn.set_reorderable(True) self.treeAvailable.append_column(itemcolumn) TreeViewHelper.register_column(self.treeAvailable, itemcolumn) @@ -1241,7 +1260,8 @@ def _on_config_changed(self, name, old_value, new_value): if name == 'ui.gtk.toolbar': self.toolbar.set_property('visible', new_value) - elif name == 'ui.gtk.episode_list.descriptions': + elif name in ('ui.gtk.episode_list.descriptions', + 'ui.gtk.episode_list.always_show_new'): self.update_episode_list_model() elif name in ('auto.update.enabled', 'auto.update.frequency'): self.restart_auto_update_timer() @@ -1311,16 +1331,17 @@ box.add(Gtk.HSeparator()) + channel_description = util.remove_html_tags(channel.description) if channel._update_error is not None: description = _('ERROR: %s') % channel._update_error - elif len(channel.description) < 500: - description = channel.description + elif len(channel_description) < 500: + description = channel_description else: - pos = channel.description.find('\n\n') + pos = channel_description.find('\n\n') if pos == -1 or pos > 500: - description = channel.description[:498] + '[...]' + description = channel_description[:498] + '[...]' else: - description = channel.description[:pos] + description = channel_description[:pos] description = Gtk.Label(label=description) description.set_max_width_chars(60) @@ -1704,7 +1725,10 @@ menu.append(Gtk.SeparatorMenuItem()) for label, callback in result: item = Gtk.MenuItem(label) - item.connect('activate', lambda item, callback: callback(self.active_channel), callback) + if callback: + item.connect('activate', lambda item, callback: callback(self.active_channel), callback) + else: + item.set_sensitive(False) menu.append(item) menu.append(Gtk.SeparatorMenuItem()) @@ -1913,7 +1937,10 @@ for label, callback in result: key, sep, title = label.rpartition('/') item = Gtk.ImageMenuItem(title) - self._submenu_item_activate_hack(item, callback, episodes) + if callback: + self._submenu_item_activate_hack(item, callback, episodes) + else: + item.set_sensitive(False) if key: if key not in submenus: sub_menu = self._add_sub_menu(menu, key) @@ -2020,12 +2047,12 @@ def episode_player(self, episode): file_type = episode.file_type() - if file_type == 'video' and self.config.videoplayer and \ - self.config.videoplayer != 'default': - player = self.config.videoplayer - elif file_type == 'audio' and self.config.player and \ - self.config.player != 'default': - player = self.config.player + if file_type == 'video' and self.config.player.video \ + and self.config.player.video != 'default': + player = self.config.player.video + elif file_type == 'audio' and self.config.player.audio \ + and self.config.player.audio != 'default': + player = self.config.player.audio else: player = 'default' return player @@ -2040,7 +2067,7 @@ if episode:
View file
3.10.17.tar.gz/src/gpodder/gtkui/model.py -> 3.10.19.tar.gz/src/gpodder/gtkui/model.py
Changed
@@ -28,6 +28,7 @@ import os import re import time +from itertools import groupby from gi.repository import GdkPixbuf, GObject, Gtk @@ -65,10 +66,10 @@ length_str = '' return ('<b>%s</b>\n<small>%s' + _('released %s') + '; ' + _('from %s') + '</small>') % ( - html.escape(re.sub('\s+', ' ', self.title)), + html.escape(re.sub(r'\s+', ' ', self.title)), html.escape(length_str), html.escape(self.pubdate_prop), - html.escape(re.sub('\s+', ' ', self.channel.title))) + html.escape(re.sub(r'\s+', ' ', self.channel.title))) @property def markup_delete_episodes(self): @@ -95,6 +96,11 @@ EpisodeClass = GEpisode + @property + def title_markup(self): + """ escaped title for the mass unsubscribe dialog """ + return html.escape(self.title) + class Model(model.Model): PodcastClass = GPodcast @@ -106,9 +112,6 @@ class SeparatorMarker(object): pass -class SectionMarker(object): pass - - class BackgroundUpdate(object): def __init__(self, model, episodes, include_description): self.model = model @@ -153,7 +156,8 @@ C_VIEW_SHOW_UNDELETED, C_VIEW_SHOW_DOWNLOADED, \ C_VIEW_SHOW_UNPLAYED, C_FILESIZE, C_PUBLISHED, \ C_TIME, C_TIME_VISIBLE, C_TOTAL_TIME, \ - C_LOCKED = list(range(17)) + C_LOCKED, \ + C_TIME_AND_SIZE, C_TOTAL_TIME_AND_SIZE, C_FILESIZE_AND_TIME_TEXT, C_FILESIZE_AND_TIME = list(range(21)) VIEW_ALL, VIEW_UNDELETED, VIEW_DOWNLOADED, VIEW_UNPLAYED = list(range(4)) @@ -169,7 +173,7 @@ Gtk.ListStore.__init__(self, str, str, str, object, str, str, str, str, bool, bool, bool, GObject.TYPE_INT64, GObject.TYPE_INT64, str, bool, - GObject.TYPE_INT64, bool) + GObject.TYPE_INT64, bool, str, GObject.TYPE_INT64, str, GObject.TYPE_INT64) self._config = config @@ -185,8 +189,8 @@ self._search_term_eql = None self._filter.set_visible_func(self._filter_visible_func) - # Are we currently showing the "all episodes" view? - self._all_episodes_view = False + # Are we currently showing "all episodes"/section or a single channel? + self._section_view = False self.ICON_AUDIO_FILE = 'audio-x-generic' self.ICON_VIDEO_FILE = 'video-x-generic' @@ -286,7 +290,7 @@ if include_description: yield '\n' - if self._all_episodes_view: + if self._section_view: yield _('from %s') % html.escape(episode.channel.title) else: description = episode.one_line_description() @@ -305,7 +309,7 @@ # Remove old episodes in the list store self.clear() - self._all_episodes_view = getattr(channel, 'ALL_EPISODES_PROXY', False) + self._section_view = isinstance(channel, PodcastChannelProxy) # Avoid gPodder bug 1291 if channel is None: @@ -390,7 +394,7 @@ elif episode.state == gpodder.STATE_NORMAL and \ episode.is_new: tooltip.append(_('New episode')) - view_show_downloaded = True + view_show_downloaded = self._config.ui.gtk.episode_list.always_show_new view_show_unplayed = True elif episode.state == gpodder.STATE_DOWNLOADED: tooltip = [] @@ -472,6 +476,13 @@ (self.C_LOCKED, episode.archive), (self.C_FILESIZE_TEXT, self._format_filesize(episode)), (self.C_FILESIZE, episode.file_size), + + (self.C_TIME_AND_SIZE, "%s\n<small>%s</small>" + % (episode.get_play_info_string(), self._format_filesize(episode) if episode.file_size > 0 else "")), + (self.C_TOTAL_TIME_AND_SIZE, episode.total_time), + (self.C_FILESIZE_AND_TIME_TEXT, "%s\n<small>%s</small>" + % (self._format_filesize(episode) if episode.file_size > 0 else "", episode.get_play_info_string())), + (self.C_FILESIZE_AND_TIME, episode.file_size), ) def update_by_iter(self, iter, include_description=False): @@ -480,20 +491,26 @@ self.set(iter, *(x for pair in self.get_update_fields(episode, include_description) for x in pair)) -class PodcastChannelProxy(object): - ALL_EPISODES_PROXY = True - - def __init__(self, db, config, channels): +class PodcastChannelProxy: + """ a bag of podcasts: 'All Episodes' or each section """ + def __init__(self, db, config, channels, section, model): + self.ALL_EPISODES_PROXY = not bool(section) self._db = db self._config = config self.channels = channels - self.title = _('All episodes') - self.description = _('from all podcasts') + if self.ALL_EPISODES_PROXY: + self.title = _('All episodes') + self.description = _('from all podcasts') + self.url = '' + self.cover_file = coverart.CoverDownloader.ALL_EPISODES_ID + else: + self.title = section + self.description = '' + self.url = '-' + self.cover_file = None # self.parse_error = '' - self.url = '' - self.section = '' + self.section = section self.id = None - self.cover_file = coverart.CoverDownloader.ALL_EPISODES_ID self.cover_url = None self.auth_username = None self.auth_password = None @@ -501,17 +518,35 @@ self.sync_to_mp3_player = False self.cover_thumb = None self.auto_archive_episodes = False + self.model = model self._update_error = None def get_statistics(self): - # Get the total statistics for all channels from the database - return self._db.get_podcast_statistics() + if self.ALL_EPISODES_PROXY: + # Get the total statistics for all channels from the database + return self._db.get_podcast_statistics() + else: + # Calculate the stats over all podcasts of this section + if len(self.channels) == 0: + total = deleted = new = downloaded = unplayed = 0 + else: + total, deleted, new, downloaded, unplayed = list(map(sum, + list(zip(*[c.get_statistics() for c in self.channels])))) + return total, deleted, new, downloaded, unplayed def get_all_episodes(self): """Returns a generator that yields every episode""" - return Model.sort_episodes_by_pubdate((e for c in self.channels - for e in c.get_all_episodes()), True) + if self.model._search_term is not None: + def matches(channel): + columns = (getattr(channel, c) for c in PodcastListModel.SEARCH_ATTRS) + return any((key in c.lower() for c in columns if c is not None)) + key = self.model._search_term + else: + def matches(e): + return True + return Model.sort_episodes_by_pubdate((e for c in self.channels if matches(c) + for e in c.get_all_episodes()), True) def save(self): pass @@ -525,6 +560,7 @@ C_DOWNLOADS, C_COVER_VISIBLE, C_SECTION = list(range(16)) SEARCH_COLUMNS = (C_TITLE, C_DESCRIPTION, C_SECTION) + SEARCH_ATTRS = ('title', 'description', 'group_by') @classmethod def row_separator_func(cls, model, iter): @@ -553,7 +589,7 @@
View file
3.10.17.tar.gz/src/gpodder/gtkui/shownotes.py -> 3.10.19.tar.gz/src/gpodder/gtkui/shownotes.py
Changed
@@ -18,6 +18,7 @@ # import html import logging +import re from urllib.parse import urlparse import gpodder @@ -57,14 +58,10 @@ def __init__(self, shownotes_pane): self.shownotes_pane = shownotes_pane - self.text_view = Gtk.TextView() - self.text_view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) - self.text_view.set_border_width(10) - self.text_view.set_editable(False) - self.text_buffer = Gtk.TextBuffer() - self.text_buffer.create_tag('heading', scale=1.2, weight=Pango.Weight.BOLD) - self.text_buffer.create_tag('subheading', scale=1.0) - self.text_view.set_buffer(self.text_buffer) + self.scrolled_window = Gtk.ScrolledWindow() + self.scrolled_window.set_shadow_type(Gtk.ShadowType.IN) + self.scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + self.scrolled_window.add(self.init()) self.status = Gtk.Label.new() self.status.set_halign(Gtk.Align.START) @@ -78,13 +75,20 @@ self.link_color = None self.visited_color = None - self.scrolled_window = Gtk.ScrolledWindow() - # main_component is the scrolled_window, except for gPodderShownotesText - # where it's an overlay, to show hyperlink targets - self.main_component = self.scrolled_window - self.scrolled_window.set_shadow_type(Gtk.ShadowType.IN) - self.scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) - self.scrolled_window.add(self.init()) + self.overlay = Gtk.Overlay() + self.overlay.add(self.scrolled_window) + # need an EventBox for an opaque background behind the label + box = Gtk.EventBox() + self.status_bg = box + box.add(self.status) + box.set_hexpand(False) + box.set_vexpand(False) + box.set_valign(Gtk.Align.END) + box.set_halign(Gtk.Align.START) + self.overlay.add_overlay(box) + self.overlay.set_overlay_pass_through(box, True) + + self.main_component = self.overlay self.main_component.show_all() self.da_message = Gtk.DrawingArea() @@ -109,9 +113,7 @@ 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.update(episode) self.set_complain_about_selection(False) else: self.set_complain_about_selection(True) @@ -157,38 +159,43 @@ # ([(Gtk.Window, 'background', ''), (Gtk.TextView, 'view', '')], self.text_view), # ([(Gtk.Window, 'background', ''), (Gtk.TextView, 'view', 'text')], self.text_view), # ]) - self.background_color = get_background_color(Gtk.StateFlags.NORMAL, widget=self.text_view) or Gdk.RGBA() - self.foreground_color = get_foreground_color(Gtk.StateFlags.NORMAL, widget=self.text_view) or Gdk.RGBA(0, 0, 0) - self.link_color = (get_foreground_color(state=Gtk.StateFlags.LINK, widget=self.text_view) or Gdk.RGBA(0, 0, 0)) - self.visited_color = (get_foreground_color(state=Gtk.StateFlags.VISITED, widget=self.text_view) or self.link_color) + dummy_tv = Gtk.TextView() + self.background_color = get_background_color(Gtk.StateFlags.NORMAL, + widget=dummy_tv) or Gdk.RGBA() + self.foreground_color = get_foreground_color(Gtk.StateFlags.NORMAL, + widget=dummy_tv) or Gdk.RGBA(0, 0, 0) + self.link_color = get_foreground_color(state=Gtk.StateFlags.LINK, + widget=dummy_tv) or Gdk.RGBA(0, 0, 0) + self.visited_color = get_foreground_color(state=Gtk.StateFlags.VISITED, + widget=dummy_tv) or self.link_color + del dummy_tv + self.status_bg.override_background_color(Gtk.StateFlags.NORMAL, self.background_color) - self.text_buffer.create_tag('hyperlink', - foreground=self.link_color.to_string(), - underline=Pango.Underline.SINGLE) + if hasattr(self, "text_buffer"): + self.text_buffer.create_tag('hyperlink', + foreground=self.link_color.to_string(), + underline=Pango.Underline.SINGLE) class gPodderShownotesText(gPodderShownotes): def init(self): + self.text_view = Gtk.TextView() + self.text_view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) + self.text_view.set_border_width(10) + self.text_view.set_editable(False) + self.text_buffer = Gtk.TextBuffer() + self.text_buffer.create_tag('heading', scale=1.2, weight=Pango.Weight.BOLD) + self.text_buffer.create_tag('subheading', scale=1.0) + self.text_view.set_buffer(self.text_buffer) self.text_view.set_property('expand', True) self.text_view.connect('button-release-event', self.on_button_release) self.text_view.connect('key-press-event', self.on_key_press) self.text_view.connect('motion-notify-event', self.on_hover_hyperlink) - self.overlay = Gtk.Overlay() - self.overlay.add(self.scrolled_window) - # need an EventBox for an opaque background behind the label - box = Gtk.EventBox() - self.status_bg = box - box.add(self.status) - box.set_hexpand(False) - box.set_vexpand(False) - box.set_valign(Gtk.Align.END) - box.set_halign(Gtk.Align.START) - self.overlay.add_overlay(box) - self.overlay.set_overlay_pass_through(box, True) - self.main_component = self.overlay return self.text_view - def update(self, heading, subheading, episode): + def update(self, episode): + heading = episode.title + subheading = _('from %s') % (episode.channel.title) self.define_colors() hyperlinks = [(0, None)] self.text_buffer.set_text('') @@ -267,22 +274,11 @@ self.html_view.connect('context-menu', self.on_context_menu) self.html_view.connect('decide-policy', self.on_decide_policy) self.html_view.connect('authenticate', self.on_authenticate) - # give the vertical space to the html view! - self.text_view.set_property('hexpand', True) - grid = Gtk.Grid() - self.status_bg = grid - grid.attach(self.text_view, 0, 0, 1, 1) - grid.attach(self.html_view, 0, 1, 1, 1) - grid.attach(self.status, 0, 2, 1, 1) - return grid - - def update(self, heading, subheading, episode): - self.define_colors() - self.text_buffer.set_text('') - self.text_buffer.insert_with_tags_by_name(self.text_buffer.get_end_iter(), heading, 'heading') - self.text_buffer.insert_at_cursor('\n') - self.text_buffer.insert_with_tags_by_name(self.text_buffer.get_end_iter(), subheading, 'subheading') + return self.html_view + + def update(self, episode): + self.define_colors() if episode.has_website_link(): self._base_uri = episode.link @@ -298,14 +294,16 @@ stylesheet = self.get_stylesheet() if stylesheet: self.manager.add_style_sheet(stylesheet) + heading = html.escape(episode.title) + subheading = _('from %s') % (html.escape(episode.channel.title)) + header_html = _('<div id="gpodder-title">\n<h3>%s</h3>\n<p>%s</p>\n</div>\n') % (heading, subheading) description_html = episode.description_html - if description_html: - # uncomment to prevent background override in html shownotes - # self.manager.remove_all_style_sheets () - logger.debug("base uri: %s (chan:%s)", self._base_uri, episode.channel.url) - self.html_view.load_html(description_html, self._base_uri) - else: - self.html_view.load_plain_text(episode.description) + if not description_html: + description_html = re.sub(r'\n', '<br>\n', episode.description) + # uncomment to prevent background override in html shownotes + # self.manager.remove_all_style_sheets () + logger.debug("base uri: %s (chan:%s)", self._base_uri, episode.channel.url) + self.html_view.load_html(header_html + description_html, self._base_uri) # uncomment to show web inspector # self.html_view.get_inspector().show() self.episode = episode @@ -408,7 +406,9 @@ if self.stylesheet is None: style = ("html { background: %s; color: %s;}" " a { color: %s; }" - " a:visited { color: %s; }") % \ + " a:visited { color: %s; }" + " #gpodder-title h3, #gpodder-title p { margin: 0}" + " #gpodder-title {margin-block-end: 1em;}") % \ (self.background_color.to_string(), self.foreground_color.to_string(), self.link_color.to_string(), self.visited_color.to_string()) self.stylesheet = WebKit2.UserStyleSheet(style, 0, 1, None, None)
View file
3.10.17.tar.gz/src/gpodder/model.py -> 3.10.19.tar.gz/src/gpodder/model.py
Changed
@@ -38,8 +38,7 @@ import podcastparser import gpodder -from gpodder import (coverart, escapist_videos, feedcore, registry, schema, - util, vimeo, youtube) +from gpodder import coverart, feedcore, registry, schema, util, vimeo, youtube logger = logging.getLogger(__name__) @@ -183,37 +182,40 @@ url = self.feed['paged_feed_next'] logger.debug("get_next_page: feed has next %s", url) url = channel.authenticate_url(url) - res = self.fetcher.fetch(url, max_episodes=max_episodes) - if res.status == feedcore.UPDATED_FEED: - res.feed = PodcastParserFeed(res.feed, self.fetcher, max_episodes) - return res + return self.fetcher.fetch(url, autodiscovery=False, max_episodes=max_episodes) return None class gPodderFetcher(feedcore.Fetcher): """ - This class extends the feedcore Fetcher with the gPodder User-Agent and the - Proxy handler based on the current settings in gPodder. + This class implements fetching a channel from custom feed handlers + or the default using podcastparser """ def fetch_channel(self, channel, max_episodes): custom_feed = registry.feed_handler.resolve(channel, None, max_episodes) if custom_feed is not None: return custom_feed + # TODO: revisit authenticate_url: pass auth as kwarg # If we have a username or password, rebuild the url with them included # Note: using a HTTPBasicAuthHandler would be pain because we need to # know the realm. It can be done, but I think this method works, too url = channel.authenticate_url(channel.url) - res = self.fetch(url, channel.http_etag, channel.http_last_modified, max_episodes) - if res.status == feedcore.UPDATED_FEED: - res.feed = PodcastParserFeed(res.feed, self, max_episodes) - return res + return self.fetch(url, channel.http_etag, channel.http_last_modified, max_episodes=max_episodes) def _resolve_url(self, url): url = youtube.get_real_channel_url(url) url = vimeo.get_real_channel_url(url) - url = escapist_videos.get_real_channel_url(url) return url + def parse_feed(self, url, data_stream, headers, status, max_episodes=0, **kwargs): + try: + feed = podcastparser.parse(url, data_stream) + feed['url'] = url + feed['headers'] = headers + return feedcore.Result(status, PodcastParserFeed(feed, self, max_episodes)) + except ValueError as e: + raise feedcore.InvalidFeed('Could not parse feed: {url}: {msg}'.format(url=url, msg=e)) + # Our podcast model: # @@ -298,8 +300,8 @@ continue # If we have audio or video available later on, skip - # 'application/octet-stream' data types (fixes Linux Outlaws) - if episode.mime_type == 'application/octet-stream' and (audio_available or video_available): + # all 'application/*' data types (fixes Linux Outlaws and peertube feeds) + if episode.mime_type.startswith('application/') and (audio_available or video_available): continue episode.url = util.normalize_feed_url(enclosure['url']) @@ -314,7 +316,7 @@ if not episode.url: return None - if any(mod.is_video_link(episode.url) for mod in (youtube, vimeo, escapist_videos)): + if any(mod.is_video_link(episode.url) for mod in (youtube, vimeo)): return episode # Check if we can resolve this link to a audio/video file @@ -398,7 +400,7 @@ # "#001: Title" -> "001: Title" if ( not self.parent._common_prefix and - re.match('^#\d+: ', self.title) and + re.match(r'^#\d+: ', self.title) and len(self.title) - 1 > LEFTOVER_MIN): return self.title[1:] @@ -476,7 +478,7 @@ def one_line_description(self): MAX_LINE_LENGTH = 120 desc = util.remove_html_tags(self.description or '') - desc = re.sub('\s+', ' ', desc).strip() + desc = re.sub(r'\s+', ' ', desc).strip() if not desc: return _('No description available') else: @@ -587,7 +589,6 @@ # Use title for YouTube, Vimeo and Soundcloud downloads if (youtube.is_video_link(self.url) or vimeo.is_video_link(self.url) or - escapist_videos.is_video_link(self.url) or episode_filename == 'stream'): episode_filename = self.title @@ -677,7 +678,7 @@ def file_type(self): # Assume all YouTube/Vimeo links are video files - if youtube.is_video_link(self.url) or vimeo.is_video_link(self.url) or escapist_videos.is_video_link(self.url): + if youtube.is_video_link(self.url) or vimeo.is_video_link(self.url): return 'video' return util.file_type_by_extension(self.extension()) @@ -948,7 +949,7 @@ @classmethod def sort_key(cls, podcast): key = util.convert_bytes(podcast.title.lower()) - return re.sub('^the ', '', key).translate(cls.UNICODE_TRANSLATE) + return re.sub(r'^the ', '', key).translate(cls.UNICODE_TRANSLATE) @classmethod def load(cls, model, url, create=True, authentication_tokens=None, max_episodes=0): @@ -1006,7 +1007,7 @@ def _consume_updated_title(self, new_title): # Replace multi-space and newlines with single space (Maemo bug 11173) - new_title = re.sub('\s+', ' ', new_title).strip() + new_title = re.sub(r'\s+', ' ', new_title).strip() # Only update the podcast-supplied title when we # don't yet have a title, or if the title is the @@ -1150,6 +1151,7 @@ if result.status == feedcore.UPDATED_FEED: self._consume_updated_feed(result.feed, max_episodes) elif result.status == feedcore.NEW_LOCATION: + # FIXME: could return the feed because in autodiscovery it is parsed already url = result.feed logger.info('New feed location: %s => %s', self.url, url) if url in set(x.url for x in self.model.get_podcasts()): @@ -1213,7 +1215,7 @@ return self.section def _get_content_type(self): - if 'youtube.com' in self.url or 'vimeo.com' in self.url or 'escapistmagazine.com' in self.url: + if 'youtube.com' in self.url or 'vimeo.com' in self.url: return _('Video') audio, video, other = 0, 0, 0
View file
3.10.17.tar.gz/src/gpodder/my.py -> 3.10.19.tar.gz/src/gpodder/my.py
Changed
@@ -287,7 +287,7 @@ The list might be empty. All these actions have to be processed. The user should confirm which of these - actions should be taken, the reest should be rejected. + actions should be taken, the rest should be rejected. Use confirm_received_actions and reject_received_actions to return and finalize the actions received by this
View file
3.10.17.tar.gz/src/gpodder/opml.py -> 3.10.19.tar.gz/src/gpodder/opml.py
Changed
@@ -34,6 +34,7 @@ or distribute gPodder's channel subscriptions. """ +import io import logging import os import os.path @@ -69,8 +70,7 @@ if os.path.exists(url): doc = xml.dom.minidom.parse(url) else: - # FIXME: is it ok to pass bytes to parseString? - doc = xml.dom.minidom.parseString(util.urlopen(url).read()) + doc = xml.dom.minidom.parse(io.BytesIO(util.urlopen(url).content)) for outline in doc.getElementsByTagName('outline'): # Make sure we are dealing with a valid link type (ignore case)
View file
3.10.17.tar.gz/src/gpodder/plugins/soundcloud.py -> 3.10.19.tar.gz/src/gpodder/plugins/soundcloud.py
Changed
@@ -54,28 +54,6 @@ return time.mktime(tuple([int(x) for x in m.groups()] + [0, 0, -1])) -def get_param(s, param='filename', header='content-disposition'): - """Get a parameter from a string of headers - - By default, this gets the "filename" parameter of - the content-disposition header. This works fine - for downloads from Soundcloud. - """ - msg = email.message_from_string(s) - if header in msg: - value = msg.get_param(param, header=header) - decoded_list = email.header.decode_header(value) - value = [] - for part, encoding in decoded_list: - if encoding: - value.append(part.decode(encoding)) - else: - value.append(str(part)) - return ''.join(value) - - return None - - def get_metadata(url): """Get file download metadata @@ -83,13 +61,13 @@ 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' - headers_s = '\n'.join('%s:%s' % (k, v) for k, v in list(headers.items())) - filename = get_param(headers_s) or os.path.basename(os.path.dirname(url)) - track_fp.close() + track_response = util.urlopen(url) + filesize = track_response.headers['content-length'] or '0' + filetype = track_response.headers['content-type'] or 'application/octet-stream' + headers_s = '\n'.join('%s:%s' % (k, v) for k, v in list(track_response.headers.items())) + filename = util.get_header_param(track_response.headers, 'filename', 'content-disposition') \ + or os.path.basename(os.path.dirname(url)) + track_response.close() return filesize, filetype, filename @@ -116,7 +94,7 @@ try: json_url = 'https://api.soundcloud.com/users/%s.json?consumer_key=%s' % (self.username, CONSUMER_KEY) - user_info = json.loads(util.urlopen(json_url).read().decode('utf-8')) + user_info = util.urlopen(json_url).json() self.cache[key] = user_info finally: self.commit_cache() @@ -146,7 +124,7 @@ "consumer_key": CONSUMER_KEY}) logger.debug("loading %s", json_url) - json_tracks = json.loads(util.urlopen(json_url).read().decode('utf-8')) + json_tracks = util.urlopen(json_url).json() tracks = [track for track in json_tracks if track['streamable'] or track['downloadable']] total_count = len(json_tracks) @@ -183,7 +161,7 @@ class SoundcloudFeed(model.Feed): - URL_REGEX = re.compile('https?://([a-z]+\.)?soundcloud\.com/([^/]+)$', re.I) + URL_REGEX = re.compile(r'https?://([a-z]+\.)?soundcloud\.com/([^/]+)$', re.I) @classmethod def fetch_channel(cls, channel, max_episodes=0): @@ -240,7 +218,7 @@ class SoundcloudFavFeed(SoundcloudFeed): - URL_REGEX = re.compile('https?://([a-z]+\.)?soundcloud\.com/([^/]+)/favorites', re.I) + URL_REGEX = re.compile(r'https?://([a-z]+\.)?soundcloud\.com/([^/]+)/favorites', re.I) def __init__(self, username): super(SoundcloudFavFeed, self).__init__(username) @@ -265,4 +243,4 @@ def search_for_user(query): json_url = 'https://api.soundcloud.com/users.json?q=%s&consumer_key=%s' % (urllib.parse.quote(query), CONSUMER_KEY) - return json.loads(util.urlopen(json_url).read().decode('utf-8')) + return util.urlopen(json_url).json()
View file
3.10.17.tar.gz/src/gpodder/util.py -> 3.10.19.tar.gz/src/gpodder/util.py
Changed
@@ -31,6 +31,7 @@ """ import collections import datetime +import email import glob import gzip import http.client @@ -55,23 +56,20 @@ import time import urllib.error import urllib.parse -import urllib.request import webbrowser import xml.dom.minidom -from html.entities import entitydefs +from html.entities import entitydefs, name2codepoint +from html.parser import HTMLParser + +import requests +import requests.exceptions +from requests.packages.urllib3.util.retry import Retry import gpodder logger = logging.getLogger(__name__) -if sys.hexversion < 0x03000000: - from html.parser import HTMLParser - from html.entities import name2codepoint -else: - from html.parser import HTMLParser - from html.entities import name2codepoint - try: import html5lib except ImportError: @@ -605,7 +603,7 @@ >>> is_html('a < b < c') False """ - html_test = re.compile('<[a-z][a-z0-9]*(?:\s.*?>|\/?>)', re.IGNORECASE | re.DOTALL) + html_test = re.compile(r'<[a-z][a-z0-9]*(?:\s.*?>|\/?>)', re.IGNORECASE | re.DOTALL) return bool(html_test.search(text)) @@ -619,18 +617,18 @@ return None # If we would want more speed, we could make these global - re_strip_tags = re.compile('<[^>]*>') - re_unicode_entities = re.compile('&#(\d{2,4});') - re_html_entities = re.compile('&(.{2,8});') - re_newline_tags = re.compile('(<br[^>]*>|<[/]?ul[^>]*>|</li>)', re.I) - re_listing_tags = re.compile('<li[^>]*>', re.I) + re_strip_tags = re.compile(r'<[^>]*>') + re_unicode_entities = re.compile(r'&#(\d{2,4});') + re_html_entities = re.compile(r'&(.{2,8});') + re_newline_tags = re.compile(r'(<br[^>]*>|<[/]?ul[^>]*>|</li>)', re.I) + re_listing_tags = re.compile(r'<li[^>]*>', re.I) result = html # Convert common HTML elements to their text equivalent result = re_newline_tags.sub('\n', result) result = re_listing_tags.sub('\n * ', result) - result = re.sub('<[Pp]>', '\n\n', result) + result = re.sub(r'<[Pp]>', '\n\n', result) # Remove all HTML/XML tags from the string result = re_strip_tags.sub('', result) @@ -642,7 +640,7 @@ result = re_html_entities.sub(lambda x: entitydefs.get(x.group(1), ''), result) # Convert more than two newlines to two newlines - result = re.sub('([\r\n]{2})([\r\n])+', '\\1', result) + result = re.sub(r'([\r\n]{2})([\r\n])+', '\\1', result) return result.strip() @@ -661,7 +659,7 @@ for target, parts in group_it: t = ''.join(text for _, text in parts if text is not None) # Remove trailing spaces - t = re.sub(' +\n', '\n', t) + t = re.sub(r' +\n', '\n', t) # Convert more than two newlines to two newlines t = t.replace('\r', '') t = re.sub(r'\n\n\n+', '\n\n', t) @@ -1187,31 +1185,27 @@ return urllib.parse.urlunsplit(url_parts) -def urlopen(url, headers=None, data=None, timeout=None): +def urlopen(url, headers=None, data=None, timeout=None, **kwargs): """ An URL opener with the User-agent set to gPodder (with version) """ - username, password = username_password_from_url(url) - if username is not None or password is not None: - url = url_strip_authentication(url) - password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() - password_mgr.add_password(None, url, username, password) - handler = urllib.request.HTTPBasicAuthHandler(password_mgr) - opener = urllib.request.build_opener(handler) - else: - opener = urllib.request.build_opener() - if headers is None: headers = {} else: headers = dict(headers) + if not timeout: + timeout = gpodder.SOCKET_TIMEOUT + + retry_strategy = Retry( + total=3, + status_forcelist=Retry.RETRY_AFTER_STATUS_CODES.union((408, 418, 504, 598, 599,))) + s = requests.Session() + a = requests.adapters.HTTPAdapter(max_retries=retry_strategy) + s.mount('http://', a) + s.mount('https://', a) headers.update({'User-agent': gpodder.user_agent}) - request = urllib.request.Request(url, data=data, headers=headers) - if timeout is None: - return opener.open(request) - else: - return opener.open(request, timeout=timeout) + return s.get(url, headers=headers, data=data, timeout=timeout, **kwargs) def get_real_url(url): @@ -1219,7 +1213,7 @@ Gets the real URL of a file and resolves all redirects. """ try: - return urlopen(url).geturl() + return urlopen(url).url except: logger.error('Getting real url for %s', url, exc_info=True) return url @@ -1805,8 +1799,7 @@ (False, '3.0.5', '2012-02-29', 10) """ url = 'https://api.github.com/repos/gpodder/gpodder/releases/latest' - data = urlopen(url).read().decode('utf-8') - info = json.loads(data) + info = urlopen(url).json() latest_version = info.get('tag_name', '').replace('gpodder-', '') release_date = info['published_at'] @@ -1831,17 +1824,22 @@ def linux_get_active_interfaces(): - """Get active network interfaces using 'ip link' + """Get active network interfaces using 'ip addr' - Returns a list of active network interfaces or an - empty list if the device is offline. The loopback - interface is not included. + A generator function yielding network interface + names with an inet (or inet6) and a broadcast + address, indicating an active network connection """ - process = Popen(['ip', 'link'], close_fds=True, stdout=subprocess.PIPE) - data, _ = process.communicate() - for interface, _ in re.findall(r'\d+: ([^:]+):.*state (UP|DORMANT|UNKNOWN)', data.decode(locale.getpreferredencoding())): - if interface != 'lo': - yield interface + process = Popen( + ['ip', 'addr', 'show', 'scope', 'global', 'up'], + close_fds=True, stdout=subprocess.PIPE) + data, x = process.communicate() + for record in re.split(r'^\d+: ', + data.decode(locale.getpreferredencoding()), + flags=re.MULTILINE): + mo = re.match(r'^([^:]*):.*inet.*brd', record, flags=re.DOTALL) + if mo: + yield mo.group(1) def osx_get_active_interfaces(): @@ -1853,8 +1851,8 @@ """ process = Popen(['ifconfig'], close_fds=True, stdout=subprocess.PIPE) stdout, _ = process.communicate() - for i in re.split('\n(?!\t)', stdout.decode('utf-8'), re.MULTILINE): - b = re.match('(\\w+):.*status: (active|associated)$', i, re.MULTILINE | re.DOTALL) + for i in re.split(r'\n(?!\t)', stdout.decode('utf-8'), re.MULTILINE): + b = re.match(r'(\w+):.*status: (active|associated)$', i, re.MULTILINE | re.DOTALL) if b: yield b.group(1) @@ -1868,8 +1866,8 @@ """ process = Popen(['ifconfig'], close_fds=True, stdout=subprocess.PIPE) stdout, _ = process.communicate()
View file
3.10.17.tar.gz/src/gpodder/vimeo.py -> 3.10.19.tar.gz/src/gpodder/vimeo.py
Changed
@@ -65,8 +65,7 @@ data_config_url = 'https://player.vimeo.com/video/%s/config' % (video_id,) 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) + data_config = util.urlopen(data_config_url).json() for fileinfo in list(data_config['request']['files'].values()): if not isinstance(fileinfo, list): continue
View file
3.10.17.tar.gz/src/gpodder/youtube.py -> 3.10.19.tar.gz/src/gpodder/youtube.py
Changed
@@ -20,6 +20,7 @@ # Justin Forest <justin.forest@gmail.com> 2008-10-13 # +import io import json import logging import re @@ -240,7 +241,7 @@ manifest = manifest.decode().splitlines() urls = [line for line in manifest if line[0] != '#'] - itag_re = re.compile('/itag/([0-9]+)/') + itag_re = re.compile(r'/itag/([0-9]+)/') for url in urls: itag = itag_re.search(url).group(1) yield int(itag), [url, None] @@ -262,7 +263,7 @@ if error_message is not None: raise YouTubeError('Cannot download video: %s' % error_message) - r4 = re.search('url_encoded_fmt_stream_map=([^&]+)', page) + r4 = re.search(r'url_encoded_fmt_stream_map=([^&]+)', page) if r4 is not None: fmt_url_map = urllib.parse.unquote(r4.group(1)) for fmt_url_encoded in fmt_url_map.split(','): @@ -272,7 +273,7 @@ fmt_id_url_map = sorted(find_urls(page), reverse=True) if not fmt_id_url_map: - drm = re.search('%22(cipher|signatureCipher)%22%3A', page) + drm = re.search(r'%22(cipher|signatureCipher)%22%3A', page) if drm is not None: raise YouTubeError('Unsupported DRM content found for video ID "%s"' % vid) raise YouTubeError('No formats found for video ID "%s"' % vid) @@ -281,7 +282,7 @@ fmt_id_url_map = dict(fmt_id_url_map) for id in preferred_fmt_ids: - if re.search('\+', str(id)): + if re.search(r'\+', str(id)): # skip formats that contain a + (136+140) continue id = int(id) @@ -303,15 +304,15 @@ def get_youtube_id(url): - r = re.compile('http[s]?://(?:[a-z]+\.)?youtube\.com/v/(.*)\.swf', re.IGNORECASE).match(url) + r = re.compile(r'http[s]?://(?:[a-z]+\.)?youtube\.com/v/(.*)\.swf', re.IGNORECASE).match(url) if r is not None: return r.group(1) - r = re.compile('http[s]?://(?:[a-z]+\.)?youtube\.com/watch\?v=([^&]*)', re.IGNORECASE).match(url) + r = re.compile(r'http[s]?://(?:[a-z]+\.)?youtube\.com/watch\?v=([^&]*)', re.IGNORECASE).match(url) if r is not None: return r.group(1) - r = re.compile('http[s]?://(?:[a-z]+\.)?youtube\.com/v/(.*)[?]', re.IGNORECASE).match(url) + r = re.compile(r'http[s]?://(?:[a-z]+\.)?youtube\.com/v/(.*)[?]', re.IGNORECASE).match(url) if r is not None: return r.group(1) @@ -334,13 +335,13 @@ func() returns None, return fallback_result. """ CHANNEL_MATCH_PATTERNS = [ - 'http[s]?://(?:[a-z]+\.)?youtube\.com/user/([a-z0-9]+)', - 'http[s]?://(?:[a-z]+\.)?youtube\.com/profile?user=([a-z0-9]+)', - 'http[s]?://(?:[a-z]+\.)?youtube\.com/rss/user/([a-z0-9]+)/videos\.rss', - 'http[s]?://(?:[a-z]+\.)?youtube\.com/channel/([-_a-z0-9]+)', - 'http[s]?://(?:[a-z]+\.)?youtube\.com/feeds/videos.xml\?channel_id=([-_a-z0-9]+)', - 'http[s]?://gdata.youtube.com/feeds/users/([^/]+)/uploads', - 'http[s]?://gdata.youtube.com/feeds/base/users/([^/]+)/uploads', + r'http[s]?://(?:[a-z]+\.)?youtube\.com/user/([a-z0-9]+)', + r'http[s]?://(?:[a-z]+\.)?youtube\.com/profile?user=([a-z0-9]+)', + r'http[s]?://(?:[a-z]+\.)?youtube\.com/rss/user/([a-z0-9]+)/videos\.rss', + r'http[s]?://(?:[a-z]+\.)?youtube\.com/channel/([-_a-z0-9]+)', + r'http[s]?://(?:[a-z]+\.)?youtube\.com/feeds/videos.xml\?channel_id=([-_a-z0-9]+)', + r'http[s]?://gdata.youtube.com/feeds/users/([^/]+)/uploads', + r'http[s]?://gdata.youtube.com/feeds/base/users/([^/]+)/uploads', ] for pattern in CHANNEL_MATCH_PATTERNS: @@ -366,8 +367,8 @@ if 'youtube.com' in url: try: channel_url = '' - raw_xml_data = util.urlopen(url).read().decode('utf-8') - xml_data = xml.etree.ElementTree.fromstring(raw_xml_data) + raw_xml_data = io.BytesIO(util.urlopen(url).content) + xml_data = xml.etree.ElementTree.parse(raw_xml_data) channel_id = xml_data.find("{http://www.youtube.com/xml/schemas/2015}channelId").text channel_url = 'https://www.youtube.com/channel/{}'.format(channel_id) return channel_url @@ -402,7 +403,7 @@ try: channel_url = get_channel_id_url(url) - html_data = util.urlopen(channel_url).read().decode('utf-8') + html_data = util.response_text(util.urlopen(channel_url)) parser = YouTubeHTMLCoverParser() parser.feed(html_data) if parser.url: @@ -433,7 +434,7 @@ try: channel_url = get_channel_id_url(url) - html_data = util.urlopen(channel_url).read().decode('utf-8') + html_data = util.response_text(util.urlopen(channel_url)) parser = YouTubeHTMLDesc() parser.feed(html_data) if parser.description:
View file
3.10.19.tar.gz/tests
Added
+(directory)
View file
3.10.19.tar.gz/tests/__init__.py
Changed
(renamed from src/gpodder/test/__init__.py)
View file
3.10.19.tar.gz/tests/model.py
Changed
(renamed from src/gpodder/test/model.py)
View file
3.10.19.tar.gz/tests/test_feedcore.py
Added
@@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- +# +# gPodder - A media aggregator and podcast client +# Copyright (c) 2005-2023 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/>. +# +import io + +import pytest +import requests.exceptions + +from gpodder.feedcore import Fetcher, Result, NEW_LOCATION, NOT_MODIFIED, UPDATED_FEED + + +class MyFetcher(Fetcher): + def parse_feed(self, url, data_stream, headers, status, **kwargs): + return Result(status, { + 'parse_feed': { + 'url': url, + 'data_stream': data_stream, + 'headers': headers, + 'extra_args': dict(**kwargs), + }, + }) + + +SIMPLE_RSS = """ +<rss> + <channel> + <title>Feed Name</title> + <item> + <title>Some Episode Title</title> + <guid>urn:test/ep1</guid> + <pubDate>Sun, 25 Nov 2018 17:28:03 +0000</pubDate> + <enclosure + url="/ep1.ogg" + type="audio/ogg" + length="100000"/> + </item> + </channel> +</rss> +""" + +def test_easy(httpserver): + res_data = SIMPLE_RSS + httpserver.expect_request('/feed').respond_with_data(SIMPLE_RSS, content_type='text/xml') + res = MyFetcher().fetch(httpserver.url_for('/feed'), custom_key='value') + assert res.status == UPDATED_FEED + args = res.feed['parse_feed'] + assert args['headers']['content-type'] == 'text/xml' + assert isinstance(args['data_stream'], io.BytesIO) + assert args['data_stream'].getvalue().decode('utf-8') == SIMPLE_RSS + assert args['url'] == httpserver.url_for('/feed') + assert args['extra_args']['custom_key'] == 'value' + +def test_redirect(httpserver): + res_data = SIMPLE_RSS + httpserver.expect_request('/endfeed').respond_with_data(SIMPLE_RSS, content_type='text/xml') + redir_headers = { + 'Location': '/endfeed', + } + # temporary redirect + httpserver.expect_request('/feed').respond_with_data(status=302, headers=redir_headers) + httpserver.expect_request('/permanentfeed').respond_with_data(status=301, headers=redir_headers) + + res = MyFetcher().fetch(httpserver.url_for('/feed')) + assert res.status == UPDATED_FEED + args = res.feed['parse_feed'] + assert args['headers']['content-type'] == 'text/xml' + assert isinstance(args['data_stream'], io.BytesIO) + assert args['data_stream'].getvalue().decode('utf-8') == SIMPLE_RSS + assert args['url'] == httpserver.url_for('/feed') + + res = MyFetcher().fetch(httpserver.url_for('/permanentfeed')) + assert res.status == NEW_LOCATION + assert res.feed == httpserver.url_for('/endfeed') + + +def test_redirect_loop(httpserver): + """ verify that feedcore fetching will not loop indefinitely on redirects """ + redir_headers = { + 'Location': '/feed', # it loops + } + httpserver.expect_request('/feed').respond_with_data(status=302, headers=redir_headers) + + with pytest.raises(requests.exceptions.TooManyRedirects): + res = MyFetcher().fetch(httpserver.url_for('/feed')) + assert res.status == UPDATED_FEED + args = res.feed['parse_feed'] + assert args['headers']['content-type'] == 'text/xml' + assert isinstance(args['data_stream'], io.BytesIO) + assert args['data_stream'].getvalue().decode('utf-8') == SIMPLE_RSS + assert args['url'] == httpserver.url_for('/feed') + +def test_temporary_error_retry(httpserver): + httpserver.expect_ordered_request('/feed').respond_with_data(status=503) + res_data = SIMPLE_RSS + httpserver.expect_ordered_request('/feed').respond_with_data(SIMPLE_RSS, content_type='text/xml') + res = MyFetcher().fetch(httpserver.url_for('/feed')) + assert res.status == UPDATED_FEED + args = res.feed['parse_feed'] + assert args['headers']['content-type'] == 'text/xml' + assert args['url'] == httpserver.url_for('/feed') \ No newline at end of file
View file
3.10.17.tar.gz/tools/github_release.py -> 3.10.19.tar.gz/tools/github_release.py
Changed
@@ -8,7 +8,7 @@ import re import sys -import magic +import magic # use python-magic (not compatible with filemagic) import requests from github3 import login from jinja2 import Template @@ -16,12 +16,11 @@ def debug_requests(): """ turn requests debug on """ - import logging - # These two lines enable debugging at httplib level (requests->urllib3->http.client) # You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA. # The only thing missing will be the response.body which is not logged. import http.client as http_client + import logging http_client.HTTPConnection.debuglevel = 1 # You must initialize logging, otherwise you'll not see debug output. @@ -166,15 +165,16 @@ else: error_exit("E: updating release description") print("D: uploading items\n - %s" % "\n - ".join(items)) - with magic.Magic(flags=magic.MAGIC_MIME_TYPE) as m: - for itm in items: - content_type = m.id_filename(itm) - print("I: uploading %s..." % itm) - with open(os.path.join("_build", itm), "rb") as f: - try: - asset = release.upload_asset(content_type, itm, f) - except Exception as e: - error_exit("Error uploading asset '%s' (%r)" % (itm, e)) + m = magic.Magic(mime=True) + for itm in items: + filename = os.path.join("_build", itm) + content_type = m.from_file(filename) + print("I: uploading %s..." % itm) + with open(filename, "rb") as f: + try: + asset = release.upload_asset(content_type, itm, f) + except Exception as e: + error_exit("Error uploading asset '%s' (%r)" % (itm, e)) print("I: upload success")
View file
3.10.17.tar.gz/tools/test-auth-server.py -> 3.10.19.tar.gz/tools/test-auth-server.py
Changed
@@ -11,6 +11,7 @@ import re import sys import threading +import time USERNAME = 'user@example.com' # Username used for HTTP Authentication PASSWORD = 'secret' # Password used for HTTP Authentication @@ -24,8 +25,10 @@ FEEDNAME = sys.argv[0] # The title of the RSS feed REDIRECT = 'redirect.rss' # The path for a redirection +REDIRECT_TO_BAD_HOST = 'redirect_bad' # The path for a redirection FEEDFILE = 'feed.rss' # The "filename" of the feed on the server EPISODES = 'episode' # Base name for the episode files +TIMEOUT = 'timeout' # The path to never return EPISODES_EXT = '.mp3' # Extension for the episode files EPISODES_MIME = 'audio/mpeg' # Mime type for the episode files EP_COUNT = 7 # Number of episodes in the feed @@ -64,6 +67,36 @@ type="%(EPISODES_MIME)s" length="%(SIZE)s"/> </item>""" % dict(list(locals().items()) + list(globals().items())) + ITEMS += """ + <item> + <title>Server Timeout Episode</title> + <guid>tag:test.gpodder.org,2012:timeout</guid> + <pubDate>Sun, 25 Nov 2018 17:28:03 +0000</pubDate> + <enclosure + url="%(URL)s/%(TIMEOUT)s" + type="%(EPISODES_MIME)s" + length="%(SIZE)s"/> + </item>""" % dict(list(locals().items()) + list(globals().items())) + ITEMS += """ + <item> + <title>Bad Host Episode</title> + <guid>tag:test.gpodder.org,2012:timeout</guid> + <pubDate>Sun, 25 Nov 2018 17:28:03 +0000</pubDate> + <enclosure + url="%(URL)s/%(REDIRECT_TO_BAD_HOST)s" + type="%(EPISODES_MIME)s" + length="%(SIZE)s"/> + </item>""" % dict(list(locals().items()) + list(globals().items())) + ITEMS += """ + <item> + <title>Space in url Episode</title> + <guid>tag:test.gpodder.org,2012:timeout</guid> + <pubDate>Sun, 25 Nov 2018 17:28:03 +0000</pubDate> + <enclosure + url="%(URL)s/%(EPISODES)s with space%(EPISODES_EXT)s" + type="%(EPISODES_MIME)s" + length="%(SIZE)s"/> + </item>""" % dict(list(locals().items()) + list(globals().items())) return """ <rss> @@ -76,13 +109,15 @@ def mkdata(size=SIZE): """Generate dummy data of a given size (in bytes)""" - return b''.join(chr(32 + (i % (127 - 32))) for i in range(size)) + return bytes([32 + (i % (127 - 32)) for i in range(size)]) class AuthRequestHandler(http.server.BaseHTTPRequestHandler): FEEDFILE_PATH = '/%s' % FEEDFILE EPISODES_PATH = '/%s' % EPISODES REDIRECT_PATH = '/%s' % REDIRECT + REDIRECT_TO_BAD_HOST_PATH = '/%s' % REDIRECT_TO_BAD_HOST + TIMEOUT_PATH = '/%s' % TIMEOUT def do_GET(self): authorized = False @@ -113,6 +148,16 @@ self.send_header('Location', '%s/%s' % (URL, FEEDFILE)) self.end_headers() return + elif self.path.startswith(self.REDIRECT_TO_BAD_HOST_PATH): + print('Redirect request => bad host.') + self.send_response(302) + self.send_header('Location', '//notthere.gpodder.io/%s' % (FEEDFILE)) + self.end_headers() + return + elif self.path == self.TIMEOUT_PATH: + # will need to restart the server or wait 80s before next request + time.sleep(80) + return if not authorized: print('Not authorized - sending WWW-Authenticate header.') @@ -144,6 +189,7 @@ print(""" Feed URL: %(URL)s/%(FEEDFILE)s Redirect URL: http://%(HOST)s:%(RPORT)d/%(REDIRECT)s + Timeout URL: %(URL)s/%(TIMEOUT)s Username: %(USERNAME)s Password: %(PASSWORD)s """ % locals())
View file
3.10.17.tar.gz/tools/win_installer/_base.sh -> 3.10.19.tar.gz/tools/win_installer/_base.sh
Changed
@@ -86,12 +86,17 @@ PIP_REQUIREMENTS="\ podcastparser==0.6.6 mygpoclient==1.8 -git+https://github.com/enthought/pywin32-ctypes.git@f27d6a0 +git+https://github.com/jaraco/pywin32-ctypes.git@f27d6a0 html5lib==1.1 webencodings==0.5.1 certifi==2020.11.8 mutagen==1.45.1 -youtube_dl==2020.11.21.1 +youtube_dl==2021.03.25 +requests==2.25.0 +urllib3==1.26.4 +chardet==4.0.0 +idna==3.1 +PySocks==1.7.1 " function install_deps { @@ -117,9 +122,8 @@ # replace ca-certificates with certifi's build_pacman --noconfirm -Rdds mingw-w64-"${ARCH}"-ca-certificates || true mkdir -p ${MINGW_ROOT}/ssl - site_packages=$(build_python -c 'import sys;print(next(c for c in sys.path if "site-packages" in c))') + site_packages=$(build_python -c 'import sys;print(next(c for c in sys.path if "site-packages" in c and ".local" not in c))') cp -v ${site_packages}/certifi/cacert.pem ${MINGW_ROOT}/ssl/cert.pem - build_pip uninstall -y certifi build_pacman --noconfirm -Rdds mingw-w64-"${ARCH}"-python3-pip || true } @@ -144,8 +148,8 @@ GPO_VERSION_DESC="$GPO_VERSION" if [ "$1" = "master" ] then - local GIT_REV=$(git rev-list --count HEAD) - local GIT_HASH=$(git rev-parse --short HEAD) + local GIT_REV=$(cd "${REPO_CLONE}" && git rev-list --count HEAD) + local GIT_HASH=$(cd "${REPO_CLONE}" && git rev-parse --short HEAD) GPO_VERSION_DESC="$GPO_VERSION-rev$GIT_REV-$GIT_HASH" fi @@ -155,7 +159,7 @@ "${GPO_VERSION}" "${MINGW_ROOT}"/bin # install fake dbus - site_packages=$(build_python -c 'import sys;print(next(c for c in sys.path if "site-packages" in c))') + site_packages=$(build_python -c 'import sys;print(next(c for c in sys.path if "site-packages" in c and ".local" not in c))') site_packages_unix=$(echo "/$site_packages" | sed -e 's/\\/\//g' -e 's/://') rsync -arv --delete "${REPO_CLONE}"/tools/fake-dbus-module/dbus "${site_packages_unix}/" @@ -438,7 +442,7 @@ cp "${REPO_CLONE}"/src/gpodder/build_info.py "$BUILDPY" echo 'BUILD_TYPE = u"windows"' >> "$BUILDPY" echo "BUILD_VERSION = $BUILD_VERSION" >> "$BUILDPY" - (cd "$REPO_CLONE" && echo "BUILD_INFO = u\"$(git rev-parse --short HEAD)\"" >> "$BUILDPY") + (cd "$REPO_CLONE" && echo "BUILD_INFO = u\"$(cd "${REPO_CLONE}" && git rev-parse --short HEAD)\"" >> "$BUILDPY") (cd $(dirname "$BUILDPY") && build_compileall -d "" -q -f -l .) rm -f "$BUILDPY" @@ -453,7 +457,7 @@ cp "${REPO_CLONE}"/src/gpodder/build_info.py "$BUILDPY" echo 'BUILD_TYPE = u"windows-portable"' >> "$BUILDPY" echo "BUILD_VERSION = $BUILD_VERSION" >> "$BUILDPY" - (cd "$REPO_CLONE" && echo "BUILD_INFO = u\"$(git rev-parse --short HEAD)\"" >> "$BUILDPY") + (cd "$REPO_CLONE" && echo "BUILD_INFO = u\"$(cd "${REPO_CLONE}" && git rev-parse --short HEAD)\"" >> "$BUILDPY") (cd $(dirname "$BUILDPY") && build_compileall -d "" -q -f -l .) rm -f "$BUILDPY"
View file
3.10.17.tar.gz/tools/win_installer/bootstrap.sh -> 3.10.19.tar.gz/tools/win_installer/bootstrap.sh
Changed
@@ -24,9 +24,6 @@ mingw-w64-i686-python3-cairo \ mingw-w64-i686-python3-pip - pip3 install --user podcastparser mygpoclient \ - pywin32-ctypes \ - html5lib webencodings six } main;
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
.