Compare commits

...

222 Commits
3.4.0 ... 3.5.3

Author SHA1 Message Date
Safihre
bca9f3b753 Set version to 3.5.3 2022-03-17 14:29:50 +01:00
Safihre
cad8a9a5d3 Merge branch '3.5.x' 2022-03-17 14:12:55 +01:00
Safihre
f5f36d21e8 Update text files 3.5.3 2022-03-17 14:12:40 +01:00
Safihre
c51435c114 Revert "Notify users of Prowl/Pushover/Pushbullet to switch to nzb-notify"
This reverts commit 56fe140ebf.
2022-03-15 21:52:16 +01:00
Safihre
2a7f1780b4 Update text files for 3.5.3RC1 2022-03-13 13:26:18 +01:00
Safihre
98a44e40fb Jobs waiting to fetch get stuck indefinitely upon restart
Closes #2114
2022-03-11 16:29:28 +01:00
Safihre
65cf6fa9a1 Prevent Direct Unpack proceeding faster than it should, locking files
Relates to #2113
2022-03-11 16:29:19 +01:00
Safihre
b2e32d1720 Log also the OSError.winerror just to be sure 2022-03-11 16:29:11 +01:00
Safihre
f0bfedbe8e Revert "Revert "Disable buffering when writing files in assembler""
This reverts commit 03b380f90b.
2022-03-11 16:29:04 +01:00
Safihre
fd4e059c13 Set version to 3.5.2 2022-03-09 14:33:48 +01:00
Safihre
a53575e154 Merge branch '3.5.x' 2022-03-09 14:24:26 +01:00
Safihre
4a73484603 Update text files for 3.5.2 2022-03-09 14:24:13 +01:00
Safihre
03b380f90b Revert "Disable buffering when writing files in assembler"
This reverts commit 3c3aeac93c.

It turns out this causes problems!
2022-03-03 15:44:15 +01:00
Safihre
a2bd3b2dfe RSS filters At most/least were broken 2022-03-01 08:42:31 +01:00
Safihre
56fe140ebf Notify users of Prowl/Pushover/Pushbullet to switch to nzb-notify
Relates to #2093
2022-02-24 16:47:44 +01:00
Safihre
4fafcce740 Set version to 3.5.1 2022-02-20 19:47:55 +01:00
Safihre
02352c4ae6 Merge branch '3.5.x' 2022-02-20 19:37:50 +01:00
Safihre
4b74aab335 Update text files for 3.5.1 2022-02-20 19:36:51 +01:00
Safihre
2d67ac189d Add Debug logging when applying permissions failed 2022-02-16 13:08:12 +01:00
Safihre
8ece62e23d Add small delay to test_download check of result file
To prevent zip-test-failures on Windows.
2022-02-16 12:48:53 +01:00
Safihre
56c2bdd77d Allow chmod failures if no custom permissions are set
This is the same as before 3.5.0!
2022-02-16 11:32:15 +01:00
Safihre
1f555f1930 Update text files for 3.5.1RC2 2022-02-14 09:22:45 +01:00
Wolfgang Scherer
8496432c14 Do not fail if attribute subject is missing in NZB file-section (#2075)
* Use attribute poster of file element, if attribute subject ist missing

* Don't fail, if subject is missing.

* Textual change

Co-authored-by: Safihre <safihre@sabnzbd.org>
2022-02-14 09:16:29 +01:00
jcfp
1672ffa670 set log level of "completed not on fat" to debug 2022-02-14 09:16:23 +01:00
Safihre
6aab199f12 Wait before removing the temporary directory in binary test 2022-02-09 14:58:17 +01:00
Safihre
46d0c379a4 Fix version of more dependencies 2022-02-09 14:58:12 +01:00
Safihre
99240f145a Restore correct display of Direct Unpack progress 2022-02-07 15:27:54 +01:00
Safihre
3c9079d73c Correctly handle the transition from download to active post-processing 2022-02-07 15:22:58 +01:00
Safihre
0eb98b9a6c Use nzo.deleted instead of nzo.is_gone to prevent assembly during pp
Relates to #2059, #2054 and #1509.
2022-02-07 12:14:00 +01:00
Safihre
76bfd98b77 Prevent Direct Unpack crash on obfuscated posts
Closes #2060
2022-02-07 11:57:55 +01:00
Safihre
3348640c88 Correct undefined function remove_data 2022-02-05 09:51:36 +01:00
Safihre
d81c64fd2b Use notarytool on macOS to do notarization 2022-02-04 22:28:46 +01:00
Safihre
8b4c919617 Test starting of binary during release building 2022-02-04 21:53:04 +01:00
Safihre
76c58953df Pin even more requirements
Closes #2056
2022-02-04 10:09:53 +01:00
thezoggy
4ddc5caa49 pin builder setuptools to deal with breakage on pyinstaller 4.8 2022-02-04 09:08:51 +01:00
Safihre
694663bd95 Update text files for 3.5.1RC1 2022-02-03 20:09:38 +01:00
Safihre
62aba5844e Add small delay between volumes in Direct Unpack to prevent UnRar error 2022-01-31 12:23:38 +01:00
Safihre
d0d60cef05 Disable buffering when writing files in assembler 2022-01-31 12:23:31 +01:00
Safihre
3d293fdcb0 RSS feeds with HTML-chars in the feed name would result in crash 2022-01-31 12:23:23 +01:00
Safihre
96e9528046 Fix dependencies in requirements.txt and configure dependabot 2022-01-30 10:52:52 +01:00
Safihre
4ea24b3203 Black formatting update 2022-01-30 09:43:31 +01:00
Safihre
a756eea25a Set version to 3.5.0 2022-01-28 11:47:15 +01:00
Safihre
210020e489 Merge branch '3.5.x' 2022-01-28 11:42:22 +01:00
Safihre
e586ead024 Update text files for 3.5.0 2022-01-28 11:39:21 +01:00
Safihre
14c80bf1dc Reduce par2cmdline output log in Debug mode 2022-01-28 11:35:59 +01:00
Safihre
bdd56e794a Prevent extra error when no 7zip is available
Closes #2036, #2035
2022-01-23 13:41:26 +01:00
Safihre
a544548934 Set Python for macOS release to 3.10.2 2022-01-21 16:53:29 +01:00
Safihre
e06c1d61fb Update text files for 3.5.0RC4 2022-01-18 09:41:26 +01:00
Safihre
600c5209c6 HTML-sanitizer would sanitize the source data
Closes #2026
2022-01-17 14:08:08 +01:00
Safihre
bee90366ee Update text files for 3.5.0RC3 2022-01-16 19:02:50 +01:00
Safihre
e9bc4e9417 Sort sevenset so x.7z.001 is always the first file 2022-01-15 17:09:21 +01:00
Safihre
f01ff15761 Failed 7zip unpack was not reported in the history 2022-01-15 17:05:03 +01:00
Safihre
356ada159d Update text files for 3.5.0RC2 2022-01-13 14:48:30 +01:00
Safihre
623cac6220 Use new env-variable to force PyInstaller bootloader from sources 2022-01-13 11:40:26 +01:00
SABnzbd Automation
ad558b4984 Update translatable texts 2022-01-11 10:20:49 +00:00
Safihre
ae0ba59f67 Only update interface settings in the config after fetching them
Closes #2012
2022-01-11 11:19:33 +01:00
Safihre
fd28a8b427 Escape all HTML on template-based pages 2022-01-10 12:14:05 +01:00
Sander
b390e5de98 Do not deobfuscate/rename anything if there is a typical DVD or Bluray directory (#2022)
* Do not deobfuscate/rename anything if there is a typical DVD or Bluray directory

* Do not deobfuscate/rename anything if there is a typical DVD or Bluray directory

* Do not deobfuscate/rename anything if there is a typical DVD or Bluray directory

* Do not deobfuscate/rename anything if there is a typical DVD or Bluray directory

* Do not deobfuscate/rename anything if there is a typical DVD or Bluray directory
2022-01-10 09:26:59 +01:00
Sander
82402abe43 Dont run deobfuscate if dvd or bluray typical directory name (#2020)
* detect DVD/Bluray structure, and do not run deobfuscate on that

* detect DVD/Bluray structure, and do not run deobfuscate on that

* detect DVD/Bluray structure, and do not run deobfuscate on that

* detect DVD/Bluray structure, and do not run deobfuscate on that

* detect IGNORED_MOVIE_FOLDERS in filelist

* detect IGNORED_MOVIE_FOLDERS in filelist

* better code

* better code

* better code

* better code

* better code

* use one-liner

* wording in comment

* unittest for VIDEO_TS

* unittest for VIDEO_TS
2022-01-09 16:25:13 +01:00
SABnzbd Automation
78da7ddb55 Update translatable texts 2022-01-08 13:22:06 +00:00
Safihre
1dd48743c2 Refactor location of functions from __init__ 2022-01-08 14:21:23 +01:00
Safihre
015417d640 Only run macOS universal2-check when running on GitHub or releasing 2022-01-08 13:16:41 +01:00
Safihre
94de00b14c Automatically release latest snap when building a tag 2022-01-08 10:41:45 +01:00
Safihre
4d237c4328 Add unit tests for format_time_left 2022-01-08 09:49:44 +01:00
SABnzbd Automation
b7f721e869 Update translatable texts 2022-01-08 08:46:01 +00:00
Safihre
49ba555fc0 Revert "Change timeleft format from 0:00:00 to 0:00"
Reverts 1d3a922a7b
2022-01-08 09:45:20 +01:00
SABnzbd Automation
cd1b25ec2b Update translatable texts 2022-01-07 08:30:46 +00:00
Safihre
109725fafe Update text files for 3.5.0RC1 2022-01-07 09:29:57 +01:00
Safihre
9c7b61070b Update copyright year to 2022 2022-01-07 09:29:32 +01:00
SABnzbd Automation
8b5a1fef51 Update translatable texts 2022-01-06 21:11:39 +00:00
Safihre
72f8dd5b3a Show an estimated time-left indicator for par2-repair and unrar 2022-01-06 22:10:55 +01:00
Safihre
1d3a922a7b Change timeleft format from 0:00:00 to 0:00 2022-01-06 22:10:55 +01:00
Safihre
ab2b145556 Literal is not supported on Python 3.7 2022-01-06 13:42:52 +01:00
SABnzbd Automation
8960ff5a4d Update translatable texts 2022-01-06 12:10:55 +00:00
Safihre
06b41b1b5a Create directories before moving to new path 2022-01-06 12:53:39 +01:00
Safihre
4277ac65a4 Add ".ssa" as common extension 2022-01-06 12:53:39 +01:00
Safihre
6ed815f1ac Refactor 7zip handling similar to unrar and skip extra join step 2022-01-06 12:53:39 +01:00
Sander
4ebfa6a3d0 more known extensions (#2016)
* more known extensions, based on mime-type extensions

* put NZB detection first
2022-01-06 12:08:08 +01:00
Safihre
529f75467b Multipar does repair broken parts of joinables 2022-01-05 13:43:03 +01:00
Safihre
062895c7ca Catch ValueError for publicipv4 lookup
Closes #2008
2022-01-04 15:13:34 +01:00
SABnzbd Automation
7b174ac498 Update translatable texts 2022-01-04 13:52:51 +00:00
Safihre
beb8f627ee Add unit tests for par2 filejoin 2022-01-04 14:40:44 +01:00
Safihre
1badbaa182 Refactor of postproc and newsunpack functions 2022-01-04 10:47:07 +01:00
Safihre
75f2930f53 Refactor of newsunpacking functions 2022-01-04 10:16:21 +01:00
Safihre
60b746e4dd Refactor par2cmdline processing 2022-01-04 10:16:21 +01:00
Safihre
dbef9af0df Add unit tests for Multipar and par2cmdline processing 2022-01-04 10:16:21 +01:00
SABnzbd Automation
2a5cdf49ad Update translatable texts 2022-01-03 09:44:33 +00:00
Safihre
0bb5432223 Do not apply permissions if not requested by the user, but remove xbits (#2004)
* Do not apply permissions if not requested by the user, but remove xbits

* Verify umask and user-permissions and warn for potential access problems

* Correctly name umask/permissions options

* Apply permissions only on download_dir creation

* Refactor some permissions related actions

* Block setting permissions=0 and only stat when no custom_permissions
2022-01-03 10:43:57 +01:00
SABnzbd Automation
f565a50e90 Update translatable texts 2022-01-01 15:04:17 +00:00
Safihre
0a840228b2 No longer throw warnings/errors during unpacking, only set job status 2022-01-01 16:03:11 +01:00
SABnzbd Automation
37c1964991 Update translatable texts 2022-01-01 14:48:07 +00:00
Sander
f3cd5b06fa 7z password detection relocation (#2009)
* coding style for 7z unpacking

* coding style: better order

* make black happy

* make black happy

* make black happy

* make black happy

* make black happy

* make black happy

* use two standard message so no translations needed

* use two standard message so no translations needed

* setname_from_path(sevenset)

* setname_from_path(sevenset)

* anything ret > 0 is one case
2022-01-01 15:47:33 +01:00
Sander
c735ad5110 to avoid exception when no 7z/7za was found/defined (#2013)
Co-authored-by: SanderJo <sand.e.rjonkers+github@gmail.com>
2022-01-01 10:16:18 +01:00
Graham Morrison
51b27cb002 snap: 7z env and path fix for outdated deb (#2011) 2021-12-31 14:44:12 +01:00
Safihre
0406f1df01 In multi-set fail_msg should only be set for full fail 2021-12-30 14:54:12 +01:00
Safihre
a72401a529 On Retry the number of downloaded bytes could exceed the total bytes 2021-12-30 09:40:40 +01:00
Safihre
406c4d20cf When Retrying a job, finished par2's were still counted as available 2021-12-27 21:54:43 +01:00
SABnzbd Automation
49ef9ae85d Update translatable texts 2021-12-27 14:00:41 +00:00
Safihre
d65eacea41 Correctly parse helpful_warning in extract_pot 2021-12-27 14:59:50 +01:00
SABnzbd Automation
347904297e Update translatable texts 2021-12-27 10:26:41 +00:00
Safihre
404aeb026d Correctly name the helpful_warning function and option
Yes, this will break current users of the old name. Too bad.
2021-12-27 11:25:52 +01:00
Safihre
29df51a4b0 Standardize 7zip version detection 2021-12-27 11:17:55 +01:00
Sander
397cde2be2 bugfix with 7z if ionice is set: command must be a list (#2007) 2021-12-26 22:13:20 +01:00
Sander
a848283d59 Detect another obfuscation pattern (#2005)
* this is obfuscated now: "[BlaBla] something [More] something 5937bc5e32146e.bef89a622e4a23f07b0d3757ad5e8a.a02b264e [Brrr]"

* this is obfuscated now: "[BlaBla] something [More] something 5937bc5e32146e.bef89a622e4a23f07b0d3757ad5e8a.a02b264e [Brrr]"
2021-12-26 17:38:24 +01:00
SABnzbd Automation
80b4582e81 Update translatable texts 2021-12-25 20:08:19 +00:00
Sander
9d5c7d3317 if too little disk space reported by 7z unzipping, report so in GUI (#2000)
* if too little disk space reported by 7z unzipping, report so in GUI

* comment about 7z version needed

* find and print 7z version at startup

* feedback from safihre

* change to existing wording, so no translations needed

* change to existing wording, so no translations needed

* even better wording: re-use existing error message
2021-12-25 21:07:47 +01:00
SABnzbd Automation
b860741ab8 Update translatable texts 2021-12-23 12:50:31 +00:00
Safihre
792825bdaa Update text files for 3.5.0 Beta 3 2021-12-23 13:48:19 +01:00
Graham Morrison
ad2371dc9a snap build fix for snap/snapcraft.yaml (#1998)
* updated snapcraft.yaml.

* snap: updated target builds
2021-12-17 07:45:44 +01:00
Safihre
dfb771a51e Add basic tests of nzbparser 2021-12-16 12:49:16 +01:00
SABnzbd Automation
14a0dbbd5c Update translatable texts 2021-12-16 09:59:55 +00:00
Safihre
bb1c63cc92 Unrar logging of Direct Unpack was not log if it was aborted 2021-12-16 10:58:55 +01:00
Safihre
38ca26e6f3 Basic tests for SevenZip-code 2021-12-12 17:55:42 +01:00
SABnzbd Automation
285d5688f5 Update translatable texts 2021-12-12 14:29:24 +00:00
Safihre
26cdfc2279 Rework adding of NZB's to use filehandlers (#1994)
* Rework adding of NZB's to use filehandlers

* Use zf.open() instead of zf.read()

* Make SevenZip-class compatible with file handler approach

* Do not attempt to overwrite existing admin-NZB

* Reset pointer when checking for incomplete NZB

* No longer check for incomplete NZB

* Refactor of archived NZB handling
2021-12-12 15:28:46 +01:00
Safihre
d915dfc941 NZO URL property was incorrectly filled with filename 2021-12-09 14:55:43 +01:00
puzzledsab
d29bd65f97 Read NZB from file using iterparse (#1992)
* Read XML from file using iterparse

* Ignore XML namespace

* Minor cleanup

* More tweaking

* Small improvements to the NZB-backup process

* Add type-hint and logging of backup

* Don't remove nzo data after failed import

Co-authored-by: Safihre <safihre@sabnzbd.org>
2021-12-08 08:58:30 +01:00
Safihre
81d378498e Automatically retry newswrapper tests 2021-12-06 15:39:30 +01:00
Safihre
d32630c759 Improve stability of the test_newswrapper test 2021-12-03 09:03:43 +01:00
puzzledsab
b8d7ec0723 Add option to preserve paused state after restart (#1990)
* Add option to preserve Downloader run state

* Add updating to set_paused_state

* Restore set_paused_state call

* Messed up again

* Requested changes

* Missed one
2021-12-02 22:09:52 +01:00
Safihre
207c5430c1 Make sure the test-server in test_newswrapper is shut down 2021-12-01 16:35:25 +01:00
Safihre
b922274b61 Update text files for 3.5.0 Beta 2 2021-11-30 16:49:50 +01:00
Safihre
863c0e5eb7 Add unittests for the NNTP SSL/cipher settings 2021-11-30 16:19:16 +01:00
Safihre
46f9956791 Force TLSv1.2 when setting custom ciphers 2021-11-30 16:19:16 +01:00
Safihre
879a6f2552 Always set SSL ciphers to allow TLSv1.2 connections 2021-11-30 16:19:16 +01:00
Safihre
5e3d237c99 HappyEyeBalls used SSL even though it wasn't needed 2021-11-30 16:19:16 +01:00
puzzledsab
1eb83e4eb0 Print low level Windows status error on IOError (#1986)
* Print low level Windows status error on assembler IOError

* Include error code in renamer OSError message
2021-11-30 08:06:11 +01:00
puzzledsab
194c0e6708 Add all passwords to list every time (#1985) 2021-11-28 08:28:10 +01:00
Safihre
a87d38c61f Full Apple M1 compatibility
Closes #1711 (see for more details!)
2021-11-27 16:28:08 +01:00
Safihre
ed0e5bbf9b Add placeholder for SOCKS5 Proxy input 2021-11-22 16:54:19 +01:00
Safihre
2249b623e6 Restore CI functional tests
Use build-in Chrome and ChromeDriver, we shouldn't try to be smarter than GitHub Actions 😉
2021-11-21 13:58:00 +01:00
SABnzbd Automation
854ca5f5d4 Update translatable texts 2021-11-21 08:06:35 +00:00
Safihre
a0a8029c36 Set the minimum supported TLS version the new way 2021-11-21 09:06:00 +01:00
Safihre
e7eec8e4f1 Check for PySocks at start-up to give a nice error 2021-11-21 08:54:21 +01:00
Safihre
a354c1984b Update text files for 3.5.0 Beta 1 2021-11-20 09:49:11 +01:00
Safihre
34799c397c Force compile all Python modules on macOS 2021-11-20 09:31:56 +01:00
Safihre
2c88dddc1e Set selenium-requirement to fix tests 2021-11-20 09:31:41 +01:00
SABnzbd Automation
64b0216ba9 Update translatable texts 2021-11-20 06:06:10 +00:00
puzzledsab
f950520475 Compare variable with int, not string (#1981) 2021-11-20 07:05:34 +01:00
SABnzbd Automation
60f3de2a91 Update translatable texts 2021-11-19 13:39:58 +00:00
puzzledsab
06e13483bd SOCKS 5 support (#1894)
* Add testable socks support

* Messed up merge

* Use proxy for urllib.request.urlopen

* Reset socket before trying to get public IP

* Add socks requirement

* PySocks, not socks?

* Use only PySocks

* Clean up and reduce number of new translations

* Move configuration to special variable socks5_proxy_url

* Remove useless dereferencing

* Catch OSError on proxy preconnect

* Try only setting socks proxy once

* Missed some spots

* Catch all errors for IPv6 checks

* Move proxy initialization up before threads are started

* No special `sock.connect` required for Socks5

* Revert "No special `sock.connect` required for Socks5"

This reverts commit 5e901f8b58.

* Remove callback and ORIGINAL_SOCKET variable

* Move all `sock.connect` code

* Create SSLContext only once for each server

It is re-created if server-settings are updated.

* Add SOCKS5 proxy configuration to General page

* Show if proxy is active in Status-window

Co-authored-by: Safihre <safihre@sabnzbd.org>
2021-11-19 14:39:23 +01:00
Safihre
f00cbe89bc Refactor HappyEyeBalls 2021-11-18 20:27:49 +01:00
SABnzbd Automation
e450f5744b Update translatable texts 2021-11-18 14:27:05 +00:00
jcfp
255242eca5 disable randomisation of directory listings in pyfakefs (#1978) 2021-11-18 15:26:26 +01:00
Safihre
cbeab4dd55 Force rebuild for binary pip-packages 2021-11-16 21:56:10 +01:00
Safihre
6b8506c986 Set target-arch to universal2 for macOS 2021-11-16 21:40:42 +01:00
Safihre
d5d5647b7c Add hidden import of guessit.data 2021-11-16 21:24:35 +01:00
Safihre
1a76de1ca3 Build PyInstaller bootloader from sources to support macOS 10.9 2021-11-16 20:40:24 +01:00
Safihre
1913109623 Add freeze support for multiprocessing
See https://github.com/pyinstaller/pyinstaller/issues/6368
2021-11-16 13:58:12 +01:00
Safihre
e76b4395a7 Remove specific macOS version check
Old macOS versions just have to deal with it
2021-11-15 21:41:31 +01:00
Safihre
6670156397 Correct Scheduler Wiki-URL 2021-11-08 13:15:13 +01:00
Safihre
37b7a77b70 Update snapcraft build 2021-11-07 09:08:43 +01:00
Safihre
ddb5a007a5 Update snapcraft base to Ubuntu 20.04 2021-11-07 08:50:06 +01:00
SABnzbd Automation
8568df4552 Update translatable texts 2021-11-05 06:57:19 +00:00
jcfp
493a5f715c Reintroduce uu support (#1969)
* reintroduce uu support

* housekeeping, bug fixes

* add tests for decode_uu()

* simplify, fix typo

* remove leftover debugging; housekeeping

* oops

* add non-ascii input for test_broken_uu
2021-11-05 07:56:39 +01:00
Safihre
a61b27992e Update code-format to 3.7
No changes really
2021-11-05 07:50:55 +01:00
Safihre
798eec7aa8 Drop (official) Python 3.6 support and run fully on 3.10
Probably still runs, we just don't test it.
2021-11-05 07:45:24 +01:00
Safihre
0d29603e2b portable.cmd was no longer included in Windows release
Closes sabnzbd/sabnzbd.github.io/176
2021-11-03 21:06:28 +01:00
SABnzbd Automation
48882220d6 Update translatable texts 2021-11-02 10:32:30 +00:00
Safihre
b4ad292ec5 Build release using 3.10
Closes #1958
2021-11-02 11:31:43 +01:00
Safihre
b59a14f6b7 Correct "Remove even more unused imports"
My fault.
2021-10-22 10:04:35 +02:00
SABnzbd Automation
80ed385a41 Update translatable texts 2021-10-22 07:52:02 +00:00
Safihre
04cd67b98b Remove even more unused imports 2021-10-22 09:51:24 +02:00
jcfp
68eded2c0c remove unused imports (#1966) 2021-10-19 19:29:54 +02:00
Safihre
cc831e16d8 Set version to 3.4.2 2021-10-15 08:28:14 +02:00
Safihre
b8dc46ad01 Merge branch '3.4.x' 2021-10-15 08:24:21 +02:00
Safihre
d8ab19087d Update text files for 3.4.2 2021-10-15 08:19:00 +02:00
Safihre
389a0d3afa Revert to using regex based sample detection
Closes #1964
2021-10-13 18:24:55 +02:00
Safihre
ec8a79eedd Revert to using regex based sample detection
Closes #1964
2021-10-13 18:24:48 +02:00
Safihre
5a3e4a28fe Solve deprecation warnings 2021-10-12 11:20:33 +02:00
SABnzbd Automation
66b5629a31 Update translatable texts 2021-10-12 07:30:17 +00:00
Safihre
eae77eb236 Prevent double guessit parsing 2021-10-12 09:29:38 +02:00
Safihre
f1e2a8e9d8 Prevent double guessit parsing 2021-10-12 09:02:03 +02:00
Safihre
4042a5fe5d Update text files for 3.4.2RC3 2021-10-08 10:41:27 +02:00
Safihre
5f44ec8a0d Correct behavior of Sorter when no filename and/or extension is supplied
Closes #1962, #1957
2021-10-08 10:35:06 +02:00
Safihre
9d8c62de6b Only fail jobs if the sorter should have renamed 2021-10-08 10:35:06 +02:00
Safihre
3229fd8d28 Use general detection of RAR-files in file-extension correction
Correct file_extension test
2021-10-08 10:35:06 +02:00
SABnzbd Automation
fdee789637 Update translatable texts 2021-10-08 08:34:20 +00:00
Safihre
a4752751ed Fix tavern for Python 3.6 and run tests on Python 3.10 (Linux-only) 2021-10-08 10:34:14 +02:00
Safihre
c762dda1b1 Fix tavern for Python 3.6 and run tests on Python 3.10 (Linux-only) 2021-10-08 10:33:37 +02:00
Safihre
e23ecf46d1 Correct behavior of Sorter when no filename and/or extension is supplied
Closes #1962, #1957
2021-10-08 10:24:44 +02:00
Safihre
70a8c597a6 Only fail jobs if the sorter should have renamed 2021-10-08 09:58:17 +02:00
Safihre
fa639bdb53 Use general detection of RAR-files in file-extension correction
Correct file_extension test
2021-10-08 09:58:17 +02:00
Safihre
233bdd5b1d Update text files for 3.4.2RC2 2021-10-06 15:00:44 +02:00
Safihre
a0ab6d35c7 Require at least 1 category to be set for Sorting and warn if not set
Before 3.4.0, only for TV sorting we allowed to set 0 categories. But for Movies and Date Sorting we did require at least 1 category to be set. This was harmonized in 3.4.0, breaking existing setups. Added warning for those users.
The Sorting behavior is different from Notifications: in Notifications selecting Default only(!) means to apply it to all categories.
However, that has never been the case for Sorting. So for now added a bit more help texts to the Affected categories box on both pages.
2021-10-06 14:50:00 +02:00
Sander
bd29680ce7 make .cbz a well-known extension, so that no extension is added (#1960) 2021-10-06 14:49:54 +02:00
SABnzbd Automation
c5c8b902c4 Update translatable texts 2021-10-06 12:36:55 +00:00
Safihre
ee255a5042 Require at least 1 category to be set for Sorting and warn if not set
Before 3.4.0, only for TV sorting we allowed to set 0 categories. But for Movies and Date Sorting we did require at least 1 category to be set. This was harmonized in 3.4.0, breaking existing setups. Added warning for those users.
The Sorting behavior is different from Notifications: in Notifications selecting Default only(!) means to apply it to all categories.
However, that has never been the case for Sorting. So for now added a bit more help texts to the Affected categories box on both pages.
2021-10-06 14:34:15 +02:00
Sander
3952965632 make .cbz a well-known extension, so that no extension is added (#1960) 2021-10-05 22:00:30 +02:00
Safihre
85db706bbe Always require TLS1.2 or higher for NNTP connections 2021-10-05 17:32:39 +02:00
Safihre
ea570442c6 Update Wiki-URL to 3.5 2021-10-05 17:21:29 +02:00
Safihre
9c109b803d Do not fail all jobs if one job fails in order to locate the failing job 2021-10-05 12:29:37 +02:00
Safihre
86f77f8064 Only run Transifex if the TX_TOKEN is set 2021-10-05 12:26:34 +02:00
Sander
7139e92554 make .cbr a well-known extension, so that no extension (".rar") is added (#1959) 2021-10-05 12:19:55 +02:00
Sander
81c33d65e4 make .cbr a well-known extension, so that no extension (".rar") is added (#1959) 2021-10-05 10:11:52 +02:00
Safihre
897df53466 Check for puremagic and guessit first and add comments about cherrypy 2021-10-04 08:57:58 +02:00
Safihre
58281711f6 Always show number of MB missing
https://forums.sabnzbd.org/viewtopic.php?f=2&t=25573
2021-10-04 08:57:51 +02:00
SABnzbd Automation
a1cf822141 Update translatable texts 2021-10-03 08:06:24 +00:00
Safihre
ce48a9697a Check for puremagic and guessit first and add comments about cherrypy 2021-10-03 10:05:39 +02:00
Safihre
9b22c4b23c Always show number of MB missing
https://forums.sabnzbd.org/viewtopic.php?f=2&t=25573
2021-10-03 09:59:26 +02:00
Safihre
6283b0460a Job failure due to Sorting-problems was not shown in the interface 2021-10-01 15:43:13 +02:00
Safihre
b524383aa3 Job failure due to Sorting-problems was not shown in the interface 2021-10-01 15:35:09 +02:00
Safihre
75a16e3588 Update text files for 3.4.2RC1 2021-09-30 09:04:12 +02:00
Safihre
1453032ad6 rXX files are popular extensions and don't need renames
Closes #1955
2021-09-29 13:53:47 +02:00
Safihre
824ab4afad Do not search whole file when checking if txt or nzb file 2021-09-29 13:53:37 +02:00
Safihre
73dd41c67f Only run process_unpacked_par2 when cleanup happened
Relates to https://forums.sabnzbd.org/viewtopic.php?f=1&t=25552
2021-09-29 13:53:32 +02:00
Safihre
59ee77355d Make add_parfile return if it could actually add the file
Maybe it was long finished, which could result in crashes.
Closes #1953
2021-09-29 13:53:20 +02:00
Safihre
5c758773ad Do not rename in decode_par2 if the filename didn't change
Closes #1952
2021-09-29 13:53:14 +02:00
Safihre
4fe977fa47 rXX files are popular extensions and don't need renames
Closes #1955
2021-09-29 09:17:19 +02:00
SABnzbd Automation
f188e55692 Update translatable texts 2021-09-29 06:37:30 +00:00
Safihre
f5487ed932 Do not search whole file when checking if txt or nzb file 2021-09-29 08:36:48 +02:00
Safihre
c69b25ff0d Only run process_unpacked_par2 when cleanup happened
Relates to https://forums.sabnzbd.org/viewtopic.php?f=1&t=25552
2021-09-29 08:24:27 +02:00
SABnzbd Automation
b608af640f Update translatable texts 2021-09-27 18:22:43 +00:00
puzzledsab
315f1ff3bc Add required server option (#1948)
* Add required server option

* Use plan_resume() instead of the resume_task system

* Retry articles on required servers after connection failure

* Update comment to match new code

* Remove unnecessary try
2021-09-27 20:22:02 +02:00
Safihre
b6c2ac194b Set version information to 3.5.0-develop 2021-09-24 13:41:12 +02:00
Safihre
00570d2089 Make add_parfile return if it could actually add the file
Maybe it was long finished, which could result in crashes.
Closes #1953
2021-09-24 08:57:53 +02:00
Safihre
56375b16fe Do not rename in decode_par2 if the filename didn't change
Closes #1952
2021-09-23 10:00:19 +02:00
Safihre
46de49df06 Set version to 3.4.1 2021-09-23 09:21:11 +02:00
Safihre
d1c54a9a74 Merge branch 'develop' 2021-09-23 08:50:17 +02:00
Safihre
447a7b684c Update text files for 3.4.1 2021-09-23 08:50:04 +02:00
Safihre
82379481dd Revert "Un-pin version of PyInstaller"
This reverts commit a95714710b.
2021-09-23 08:44:44 +02:00
puzzledsab
06f9e28170 Don't show undefined if metric is bytes in speedometer slider (#1951) 2021-09-22 13:52:57 +02:00
205 changed files with 6227 additions and 4906 deletions

14
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/builder"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/builder/osx"
schedule:
interval: "weekly"

View File

@@ -17,6 +17,6 @@ jobs:
builder
tests
--line-length=120
--target-version=py36
--target-version=py37
--check
--diff

View File

@@ -2,19 +2,21 @@ name: Build binaries and source distribution
on: [push, pull_request]
env:
AUTOMATION_GITHUB_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
jobs:
build_windows:
name: Build Windows binary
runs-on: windows-latest
env:
AUTOMATION_GITHUB_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
timeout-minutes: 15
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.9 (64bit)
- name: Set up Python 3.10 (64bit)
uses: actions/setup-python@v2
with:
python-version: 3.9
architecture: x64
python-version: "3.10"
architecture: "x64"
- name: Install Python dependencies (64bit)
run: |
python --version
@@ -43,8 +45,8 @@ jobs:
- name: Set up Python 3.8 (32bit and legacy)
uses: actions/setup-python@v2
with:
python-version: 3.8
architecture: x86
python-version: "3.8"
architecture: "x86"
- name: Install Python dependencies (32bit and legacy)
run: |
python --version
@@ -64,17 +66,19 @@ jobs:
build_macos:
name: Build macOS binary
runs-on: macos-latest
runs-on: macos-11
timeout-minutes: 15
env:
SIGNING_AUTH: ${{ secrets.SIGNING_AUTH }}
NOTARIZATION_USER: ${{ secrets.NOTARIZATION_USER }}
NOTARIZATION_PASS: ${{ secrets.NOTARIZATION_PASS }}
AUTOMATION_GITHUB_TOKEN: ${{ secrets.AUTOMATION_GITHUB_TOKEN }}
# We need the official Python, because the GA ones only support newer macOS versions
# The deployment target is picked up by the Python build tools automatically
# If updated, make sure to also set LSMinimumSystemVersion in SABnzbd.spec
PYTHON_VERSION: 3.9.7
MACOSX_DEPLOYMENT_TARGET: 10.9
PYTHON_VERSION: "3.10.2"
MACOSX_DEPLOYMENT_TARGET: "10.9"
# We need to force compile for universal2 support
CFLAGS: -arch arm64 -arch x86_64
steps:
- uses: actions/checkout@v2
- name: Cache Python download
@@ -85,15 +89,31 @@ jobs:
key: macOS-Python-${{ env.PYTHON_VERSION }}
- name: Get Python
if: steps.cache-python-download.outputs.cache-hit != 'true'
run: curl https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-macosx10.9.pkg -o ~/python.pkg
run: curl https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-macos11.pkg -o ~/python.pkg
- name: Install Python
run: sudo installer -pkg ~/python.pkg -target /
- name: Install Python dependencies
# We have to manually install a few packages:
# 1. cffi will pick up the single-arch libffi from Homebrew, while Apple provides universal2-version
# of libffi with XCode. So we forcefully have to remove the Homebrew one.
# 2. Because building cryptography is hard, and we cannot force pip to fetch universal2 version we
# first install the x86 version (and it's dependencies) and then manually fetch the universal2 build
# https://github.com/pyca/cryptography/issues/5918
# 3. We need to build the PyInstaller bootloader from sources:
# https://github.com/pyinstaller/pyinstaller/issues/6235
run: |
python3 --version
pip3 install --upgrade pip wheel
pip3 install --upgrade -r requirements.txt
pip3 install --upgrade -r builder/requirements.txt
brew uninstall libffi --ignore-dependencies
ARCHFLAGS="-arch x86_64 -arch arm64" pip3 install --upgrade cffi --no-binary cffi
pip3 install --upgrade -r requirements.txt --no-binary sabyenc3
pip3 uninstall cryptography -y
pip3 download -r builder/osx/requirements.txt --platform macosx_10_10_universal2 --only-binary :all: --no-deps --dest .
pip3 install -r builder/osx/requirements.txt --no-cache-dir --no-index --find-links .
PYINSTALLER_COMPILE_BOOTLOADER=1 pip3 install --upgrade -r builder/requirements.txt --no-binary pyinstaller
- name: Import macOS codesign certificates
uses: apple-actions/import-codesign-certs@v1
if: env.SIGNING_AUTH
@@ -111,4 +131,22 @@ jobs:
name: macOS binary (not notarized)
- name: Prepare official release
if: env.AUTOMATION_GITHUB_TOKEN && startsWith(github.ref, 'refs/tags/')
run: python3 builder/package.py release
run: python3 builder/package.py release
release_snap:
name: Release Snap
runs-on: ubuntu-latest
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
env:
SNAP_TOKEN: ${{ secrets.SNAP_TOKEN }}
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: "3.x"
- name: Release latest available Snap
run: |
sudo snap install snapcraft --classic
echo "${SNAP_TOKEN}" | snapcraft login --with -
python3 snap/local/release_snap.py

View File

@@ -6,17 +6,20 @@ jobs:
test:
name: Test ${{ matrix.name }} - Python ${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
python-version: [3.6, 3.7, 3.8, 3.9]
python-version: ["3.7", "3.8", "3.9", "3.10"]
os: [ubuntu-20.04]
include:
# TODO: Update to 3.10 when all packages are available, currently lxml is missing
- name: macOS
os: macos-latest
python-version: 3.9
python-version: "3.10"
- name: Windows
os: windows-latest
python-version: 3.9
python-version: "3.10"
steps:
- uses: actions/checkout@v2
@@ -26,11 +29,11 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install system dependencies
if: runner.os == 'Linux'
run: sudo apt-get install unrar p7zip-full par2 chromium-chromedriver
run: sudo apt-get install unrar p7zip-full par2
- name: Install Python dependencies
run: |
python --version
pip install --upgrade pip
pip install --upgrade pip wheel
pip install --upgrade -r requirements.txt
pip install --upgrade -r tests/requirements.txt
- name: Test SABnzbd

View File

@@ -8,27 +8,30 @@ on:
jobs:
translations:
runs-on: ubuntu-latest
env:
TX_TOKEN: ${{ secrets.TX_TOKEN }}
steps:
- uses: actions/checkout@v2
- name: Generate translatable texts
run: |
python3 tools/extract_pot.py
- name: Install Transifex client
if: env.TX_TOKEN
# Sudo is needed to link the "tx"-command
run: |
sudo -H python3 -m pip install setuptools wheel
sudo -H python3 -m pip install transifex-client
- name: Push/pull Transifex translations
if: env.TX_TOKEN
run: |
tx push --source --parallel
tx pull --all --force --parallel
env:
TX_TOKEN: ${{ secrets.TX_TOKEN }}
- name: Compile translations to validate them
run: |
python3 tools/make_mo.py
- name: Push translatable and translated texts back to repo
uses: stefanzweifel/git-auto-commit-action@v4.5.1
if: env.TX_TOKEN
with:
commit_message: Update translatable texts
commit_user_name: SABnzbd Automation

View File

@@ -21,4 +21,3 @@ minimum_perc = 0
source_file = po/nsis/SABnsis.pot
source_lang = en
type = PO

View File

@@ -1,5 +1,5 @@
(c) Copyright 2007-2021 by "The SABnzbd-team" <team@sabnzbd.org>
(c) Copyright 2007-2022 by "The SABnzbd-team" <team@sabnzbd.org>
The SABnzbd-team is:

View File

@@ -4,7 +4,7 @@
0) LICENSE
-------------------------------------------------------------------------------
(c) Copyright 2007-2021 by "The SABnzbd-team" <team@sabnzbd.org>
(c) Copyright 2007-2022 by "The SABnzbd-team" <team@sabnzbd.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -52,7 +52,7 @@ Specific guides to install from source are available for Windows and macOS:
https://sabnzbd.org/wiki/installation/install-macos
https://sabnzbd.org/wiki/installation/install-from-source-windows
Only Python 3.6 and above is supported.
Only Python 3.7 and above is supported.
On Linux systems you need to install:
par2 unrar unzip python3-setuptools python3-pip

View File

@@ -1,4 +1,4 @@
(c) Copyright 2007-2021 by "The SABnzbd-team" <team@sabnzbd.org>
(c) Copyright 2007-2022 by "The SABnzbd-team" <team@sabnzbd.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License

View File

@@ -1,7 +1,7 @@
Metadata-Version: 1.0
Name: SABnzbd
Version: 3.4.0
Summary: SABnzbd-3.4.0
Version: 3.5.3
Summary: SABnzbd-3.5.3
Home-page: https://sabnzbd.org
Author: The SABnzbd Team
Author-email: team@sabnzbd.org

View File

@@ -18,7 +18,7 @@ If you want to know more you can head over to our website: https://sabnzbd.org.
SABnzbd has a few dependencies you'll need before you can get running. If you've previously run SABnzbd from one of the various Linux packages, then you likely already have all the needed dependencies. If not, here's what you're looking for:
- `python` (Python 3.6 and higher, often called `python3`)
- `python` (Python 3.7 and above, often called `python3`)
- Python modules listed in `requirements.txt`. Install with `python3 -m pip install -r requirements.txt -U`
- `par2` (Multi-threaded par2 installation guide can be found [here](https://sabnzbd.org/wiki/installation/multicore-par2))
- `unrar` (make sure you get the "official" non-free version of unrar)

View File

@@ -1,29 +1,53 @@
Release Notes - SABnzbd 3.4.0
Release Notes - SABnzbd 3.5.3
=========================================================
## Changes since 3.3.1
- Extended `Deobfuscate final filenames` to attempt to set the correct
file extension based on the file signature if the file extension is
not present or meaningless.
- Added additional pattern keys that can be used in the `Sort String`
for Sorting, by using the `guessit` package internally for parsing.
- If unpacked files contain `.par2` files they will always be read and
used to rename any matching files.
- Regular expressions can be used to specify `Unwanted extensions`.
- Not all passwords will be tried if a matching one was found.
- Some interface-only options were added as API-call.
- The Plush skin has been removed.
## Bugfix since 3.5.0
- Prevent disk errors due to Direct Unpack being too aggressive.
- URL's waiting to fetch get stuck indefinitely upon restart.
## Bugfixes since 3.3.1
- Duplicate check based on `.nzb` MD5 was performed before it was calculated.
- Enforce `local_ranges` for broadcasts (Bonjour/SSDP).
- Correctly parse the filename in `Content-Disposition` header.
- `Warning` instead of `Info` when there is a restart due to crashed thread.
- Only run Direct Unpack if `enable_unrar` is enabled.
## Changes and bugfixes since 3.5.0
- Prevent permissions errors on systems that do not support them.
- Small changes in file assembly and Direct Unpack processing.
- Changes to the transition from download to active post-processing.
- Malformed NZB files could result in a crash.
- Prevent crash in Direct Unpack for obfuscated posts.
- RSS feeds with HTML-characters in the name resulted in crashes.
- macOS: failed to start on older macOS versions.
## Changes since 3.4.2
- Removed Python 3.6 support.
- SOCKS5 proxy support for all outgoing connections.
- Restored support for UUencoded jobs.
- `Required` server option: in case of connection failures, the queue
will be paused for a few minutes instead of skipping the server.
- Added Special option to preserve paused state after a restart.
- Show an estimated time-left indicator for repair and unpacking.
- Require TLS version 1.2 or higher for SSL news server connections.
- Setting custom ciphers forces the maximum TLS version to 1.2.
- Reduced memory usage during and after parsing `.nzb` files.
- Handle multiple passwords stored in NZB-file.
- macOS/Linux: `Permissions` are only applied if any are set.
- macOS/Windows: updated to Python 3.10.2.
- macOS: run native on M1 systems. However, included tools
(`par2`, `unrar` and `7za`) still require Rosetta emulation.
- Snap: updated to `core20` base and restore 7zip support.
## Bugfixes since 3.4.2
- Global interface settings would not always be applied correctly.
- Email notification setting was not shown correctly.
- Improvements and fixes for `Defobfuscate final filenames`.
- `Post-Process Only Verified Jobs` would not always work as intended.
- Correctly detect too little disk space when unpacking 7zip's.
- Improvements to handling of repair by MultiPar and par2cmdline.
- HTML characters in configuration fields were shown incorrectly.
- On Retry the number of downloaded bytes could exceed the total bytes.
- `unrar` logging of Direct Unpack was not logged if it was aborted.
- Windows: `portable.cmd` was not included in the release.
- Windows: print low-level Windows error on `IOError`.
## Upgrade notices
- The download statistics file `totals10.sab` is updated in 3.2.x
version. If you downgrade to 3.1.x or lower, detailed download
- The download statistics file `totals10.sab` is updated in 3.2.x
version. If you downgrade to 3.1.x or lower, detailed download
statistics will be lost.
## Known problems and solutions
@@ -36,4 +60,4 @@ Release Notes - SABnzbd 3.4.0
that automatically verify, repair, extract and clean up posts downloaded
from Usenet.
(c) Copyright 2007-2021 by "The SABnzbd-team" \<team@sabnzbd.org\>
(c) Copyright 2007-2022 by "The SABnzbd-team" \<team@sabnzbd.org\>

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -17,8 +17,8 @@
import sys
if sys.hexversion < 0x03060000:
print("Sorry, requires Python 3.6 or above")
if sys.hexversion < 0x03070000:
print("Sorry, requires Python 3.7 or above")
print("You can read more at: https://sabnzbd.org/wiki/installation/install-off-modules")
sys.exit(1)
@@ -32,6 +32,7 @@ import signal
import socket
import platform
import subprocess
import multiprocessing
import ssl
import time
import re
@@ -46,6 +47,9 @@ try:
import portend
import cryptography
import chardet
import guessit
import puremagic
import socks
except ImportError as e:
print("Not all required Python modules are available, please check requirements.txt")
print("Missing module:", e.name)
@@ -87,12 +91,13 @@ from sabnzbd.misc import (
is_localhost,
is_lan_addr,
ip_in_subnet,
helpful_warning,
set_https_verification,
)
from sabnzbd.filesystem import get_ext, real_path, long_path, globber_full, remove_file
from sabnzbd.panic import panic_tmpl, panic_port, panic_host, panic, launch_a_browser
import sabnzbd.config as config
import sabnzbd.cfg
import sabnzbd.downloader
import sabnzbd.notifier as notifier
import sabnzbd.zconfig
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6
@@ -106,11 +111,10 @@ try:
import win32event
import win32service
import win32ts
import pywintypes
import servicemanager
from win32com.shell import shell, shellcon
from sabnzbd.utils.apireg import get_connection_info, set_connection_info, del_connection_info
from sabnzbd.utils.apireg import get_connection_info, set_connection_info
import sabnzbd.sabtray
win32api.SetConsoleCtrlHandler(sabnzbd.sig_handler, True)
@@ -129,16 +133,6 @@ def guard_loglevel():
LOG_FLAG = True
def warning_helpful(*args, **kwargs):
"""Wrapper to ignore helpfull warnings if desired"""
if sabnzbd.cfg.helpfull_warnings():
return logging.warning(*args, **kwargs)
return logging.info(*args, **kwargs)
logging.warning_helpful = warning_helpful
class GUIHandler(logging.Handler):
"""Logging handler collects the last warnings/errors/exceptions
to be displayed in the web-gui
@@ -246,7 +240,7 @@ def print_version():
"""
%s-%s
Copyright (C) 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
Copyright (C) 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
SABnzbd comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. It is licensed under the
@@ -331,7 +325,7 @@ def identify_web_template(key, defweb, wdir):
full_main = real_path(full_dir, DEF_MAIN_TMPL)
if not os.path.exists(full_main):
logging.warning_helpful(T("Cannot find web template: %s, trying standard template"), full_main)
helpful_warning(T("Cannot find web template: %s, trying standard template"), full_main)
full_dir = real_path(sabnzbd.DIR_INTERFACES, DEF_STDINTF)
full_main = real_path(full_dir, DEF_MAIN_TMPL)
if not os.path.exists(full_main):
@@ -463,9 +457,7 @@ def print_modules():
if sabnzbd.newsunpack.RAR_PROBLEM:
have_str = "%.2f" % (float(sabnzbd.newsunpack.RAR_VERSION) / 100)
want_str = "%.2f" % (float(sabnzbd.constants.REC_RAR_VERSION) / 100)
logging.warning_helpful(
T("Your UNRAR version is %s, we recommend version %s or higher.<br />"), have_str, want_str
)
helpful_warning(T("Your UNRAR version is %s, we recommend version %s or higher.<br />"), have_str, want_str)
elif not (sabnzbd.WIN32 or sabnzbd.DARWIN):
logging.info("UNRAR binary version %.2f", (float(sabnzbd.newsunpack.RAR_VERSION) / 100))
else:
@@ -474,8 +466,10 @@ def print_modules():
sabnzbd.NO_DOWNLOADING = True
# If available, we prefer 7zip over unzip
if sabnzbd.newsunpack.SEVEN_COMMAND:
logging.info("7za binary... found (%s)", sabnzbd.newsunpack.SEVEN_COMMAND)
if sabnzbd.newsunpack.SEVENZIP_COMMAND:
logging.info("7za binary... found (%s)", sabnzbd.newsunpack.SEVENZIP_COMMAND)
if not (sabnzbd.WIN32 or sabnzbd.DARWIN):
logging.info("7za binary version %s", sabnzbd.newsunpack.SEVENZIP_VERSION)
else:
logging.info(T("7za binary... NOT found!"))
@@ -635,7 +629,7 @@ def get_webhost(cherryhost, cherryport, https_port):
logging.info("IPV6 has priority on this system, potential Firefox issue")
if ipv6 and ipv4 and cherryhost == "" and sabnzbd.WIN32:
logging.warning_helpful(T("Please be aware the 0.0.0.0 hostname will need an IPv6 address for external access"))
helpful_warning(T("Please be aware the 0.0.0.0 hostname will need an IPv6 address for external access"))
if cherryhost == "localhost" and not sabnzbd.WIN32 and not sabnzbd.DARWIN:
# On the Ubuntu family, localhost leads to problems for CherryPy
@@ -688,9 +682,9 @@ def is_sabnzbd_running(url):
try:
url = "%s&mode=version" % url
# Do this without certificate verification, few installations will have that
prev = sabnzbd.set_https_verification(False)
prev = set_https_verification(False)
ver = get_from_url(url)
sabnzbd.set_https_verification(prev)
set_https_verification(prev)
return ver and (re.search(r"\d+\.\d+\.", ver) or ver.strip() == sabnzbd.__version__)
except:
return False
@@ -718,10 +712,10 @@ def check_for_sabnzbd(url, upload_nzbs, allow_browser=True):
if is_sabnzbd_running(url):
# Upload any specified nzb files to the running instance
if upload_nzbs:
prev = sabnzbd.set_https_verification(False)
prev = set_https_verification(False)
for f in upload_nzbs:
upload_file_to_sabnzbd(url, f)
sabnzbd.set_https_verification(prev)
set_https_verification(prev)
else:
# Launch the web browser and quit since sabnzbd is already running
# Trim away everything after the final slash in the URL
@@ -993,12 +987,6 @@ def main():
logger.setLevel(logging.WARNING)
logger.addHandler(gui_log)
# Detect CPU architecture and Windows variant
# Use .machine as .processor is not always filled
cpu_architecture = platform.uname().machine
if sabnzbd.WIN32:
sabnzbd.WIN64 = cpu_architecture == "AMD64"
if inifile:
# INI file given, simplest case
inifile = evaluate_inipath(inifile)
@@ -1192,7 +1180,7 @@ def main():
logging.info("Arguments = %s", sabnzbd.CMDLINE)
logging.info("Python-version = %s", sys.version)
logging.info("Dockerized = %s", sabnzbd.DOCKER)
logging.info("CPU architecture = %s", cpu_architecture)
logging.info("CPU architecture = %s", platform.uname().machine)
try:
logging.info("Platform = %s - %s", os.name, platform.platform())
@@ -1205,13 +1193,20 @@ def main():
# On Linux/FreeBSD/Unix "UTF-8" is strongly, strongly adviced:
if not sabnzbd.WIN32 and not sabnzbd.DARWIN and not ("utf-8" in sabnzbd.encoding.CODEPAGE.lower()):
logging.warning_helpful(
helpful_warning(
T(
"SABnzbd was started with encoding %s, this should be UTF-8. Expect problems with Unicoded file and directory names in downloads."
),
sabnzbd.encoding.CODEPAGE,
)
# Verify umask, we need at least 700
if not sabnzbd.WIN32 and sabnzbd.ORG_UMASK > int("077", 8):
sabnzbd.misc.helpful_warning(
T("Current umask (%o) might deny SABnzbd access to the files and folders it creates."),
sabnzbd.ORG_UMASK,
)
# SSL Information
logging.info("SSL version = %s", ssl.OPENSSL_VERSION)
@@ -1439,12 +1434,11 @@ def main():
try:
cherrypy.engine.start()
except:
# Since the webserver is started by cherrypy in a separate thread, we can't really catch any
# start-up errors. This try/except only catches very few errors, the rest is only shown in the console.
logging.error(T("Failed to start web-interface: "), exc_info=True)
abort_and_show_error(browserhost, cherryport)
# Wait for server to become ready
cherrypy.engine.wait(cherrypy.process.wspbus.states.STARTED)
if sabnzbd.WIN32:
if enable_https:
mode = "s"
@@ -1468,6 +1462,9 @@ def main():
if sabnzbd.NO_DOWNLOADING:
return
# Apply proxy, if configured, before main requests are made
sabnzbd.misc.set_socks5_proxy()
# Start all SABnzbd tasks
logging.info("Starting %s-%s", sabnzbd.MY_NAME, sabnzbd.__version__)
try:
@@ -1479,7 +1476,7 @@ def main():
# Upload any nzb/zip/rar/nzb.gz/nzb.bz2 files from file association
if upload_nzbs:
for upload_nzb in upload_nzbs:
sabnzbd.add_nzbfile(upload_nzb)
sabnzbd.nzbparser.add_nzbfile(upload_nzb)
# Set URL for browser
if enable_https:
@@ -1560,7 +1557,7 @@ def main():
# 30 sec polling tasks
if not timer % 10:
# Keep OS awake (if needed)
sabnzbd.keep_awake()
sabnzbd.misc.keep_awake()
# Restart scheduler (if needed)
sabnzbd.Scheduler.restart(plan_restart=False)
# Save config (if needed)
@@ -1739,6 +1736,9 @@ def handle_windows_service():
if __name__ == "__main__":
# Require for freezing
multiprocessing.freeze_support()
# We can only register these in the main thread
signal.signal(signal.SIGINT, sabnzbd.sig_handler)
signal.signal(signal.SIGTERM, sabnzbd.sig_handler)

View File

@@ -41,6 +41,7 @@ RELEASE_VERSION = pkginfo.Develop(".").version
# Add hidden imports
extra_hiddenimports = ["Cheetah.DummyTransaction", "cheroot.ssl.builtin", "certifi"]
extra_hiddenimports.extend(collect_submodules("babelfish.converters"))
extra_hiddenimports.extend(collect_submodules("guessit.data"))
# Add platform specific stuff
if sys.platform == "darwin":
@@ -66,6 +67,7 @@ else:
# Windows
extra_hiddenimports.append("win32timezone")
extra_folders += ["win/multipar/", "win/unrar/", "win/7zip/"]
extra_files += ["portable.cmd"]
# Parse the version info
version_regexed = re.search(r"(\d+)\.(\d+)\.(\d+)([a-zA-Z]*)(\d*)", RELEASE_VERSION)
@@ -135,6 +137,7 @@ exe = EXE(
append_pkg=False,
icon="icons/sabnzbd.ico",
version=version_info,
target_arch="universal2",
)
coll = COLLECT(exe, pyi_analysis.binaries, pyi_analysis.zipfiles, pyi_analysis.datas, name="SABnzbd")

View File

@@ -0,0 +1,3 @@
# Special requirements for macOS universal2 binary release
# This way dependabot can auto-update them
cryptography==36.0.1

View File

@@ -20,13 +20,16 @@ import platform
import re
import sys
import os
import tempfile
import time
import shutil
import subprocess
import tarfile
import urllib.request
import urllib.error
import configobj
import pkginfo
import github
from distutils.dir_util import copy_tree
VERSION_FILE = "sabnzbd/version.py"
@@ -115,6 +118,62 @@ def patch_version_file(release_name):
ver.write(version_file)
def test_sab_binary(binary_path: str):
"""Wrapper to have a simple start-up test for the binary"""
with tempfile.TemporaryDirectory() as config_dir:
sabnzbd_process = subprocess.Popen(
[binary_path, "--browser", "0", "--logging", "2", "--config", config_dir],
text=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
# Wait for SAB to respond
base_url = "http://127.0.0.1:8080/"
for _ in range(10):
try:
urllib.request.urlopen(base_url, timeout=1).read()
break
except urllib.error.URLError:
time.sleep(1)
else:
raise urllib.error.URLError("Could not connect to SABnzbd")
# Open a number of API calls and pages, to see if we are really up
pages_to_test = [
"",
"wizard",
"config",
"config/server",
"config/categories",
"config/scheduling",
"config/rss",
"config/general",
"config/folders",
"config/switches",
"config/sorting",
"config/notify",
"config/special",
"api?mode=version",
]
for url in pages_to_test:
print("Testing: %s%s" % (base_url, url))
if b"500 Internal Server Error" in urllib.request.urlopen(base_url + url, timeout=1).read():
raise RuntimeError("Crash in %s" % url)
# Parse API-key so we can do a graceful shutdown
sab_config = configobj.ConfigObj(os.path.join(config_dir, "sabnzbd.ini"))
urllib.request.urlopen(base_url + "shutdown/?apikey=" + sab_config["misc"]["api_key"], timeout=10)
sabnzbd_process.wait()
# Print logs for verification
with open(os.path.join(config_dir, "logs", "sabnzbd.log"), "r") as log_file:
print(log_file.read())
# So we have time to print the file before the directory is removed
time.sleep(1)
if __name__ == "__main__":
# Was any option supplied?
if len(sys.argv) < 2:
@@ -147,6 +206,7 @@ if __name__ == "__main__":
patch_version_file(RELEASE_VERSION)
# To draft a release or not to draft a release?
ON_GITHUB_ACTIONS = os.environ.get("CI", False)
RELEASE_THIS = "refs/tags/" in os.environ.get("GITHUB_REF", "")
# Rename release notes file
@@ -185,8 +245,7 @@ if __name__ == "__main__":
# Run PyInstaller and check output
run_external_command([sys.executable, "-O", "-m", "PyInstaller", "SABnzbd.spec"])
# Use special distutils function to merge the main and console directories
copy_tree("dist/SABnzbd-console", "dist/SABnzbd")
shutil.copytree("dist/SABnzbd-console", "dist/SABnzbd", dirs_exist_ok=True)
safe_remove("dist/SABnzbd-console")
# Remove unwanted DLL's
@@ -227,11 +286,14 @@ if __name__ == "__main__":
)
# Rename the folder
os.rename("dist/SABnzbd", RELEASE_NAME)
shutil.copytree("dist/SABnzbd", RELEASE_NAME)
# Create the archive
run_external_command(["win/7zip/7za.exe", "a", RELEASE_BINARY, RELEASE_NAME])
# Test the release, as the very last step to not mess with any release code
test_sab_binary("dist/SABnzbd/SABnzbd.exe")
if "app" in sys.argv:
# Must be run on macOS
if sys.platform != "darwin":
@@ -245,6 +307,15 @@ if __name__ == "__main__":
# Run PyInstaller and check output
run_external_command([sys.executable, "-O", "-m", "PyInstaller", "SABnzbd.spec"])
# Make sure we created a fully universal2 release when releasing or during CI
if RELEASE_THIS or ON_GITHUB_ACTIONS:
for bin_to_check in glob.glob("dist/SABnzbd.app/Contents/MacOS/**/*.so", recursive=True):
print("Checking if binary is universal2: %s" % bin_to_check)
file_output = run_external_command(["file", bin_to_check])
# Make sure we have both arm64 and x86
if not ("x86_64" in file_output and "arm64" in file_output):
raise RuntimeError("Non-universal2 binary found!")
# Only continue if we can sign
if authority:
files_to_sign = [
@@ -288,50 +359,24 @@ if __name__ == "__main__":
# Upload to Apple
print("Sending zip to Apple notarization service")
upload_process = run_external_command(
upload_result = run_external_command(
[
"xcrun",
"altool",
"--notarize-app",
"-t",
"osx",
"-f",
"notarytool",
"submit",
notarization_zip,
"--primary-bundle-id",
"org.sabnzbd.sabnzbd",
"-u",
"--apple-id",
notarization_user,
"-p",
"--team-id",
authority,
"--password",
notarization_pass,
"--wait",
],
)
# Extract the notarization ID
m = re.match(".*RequestUUID = (.*?)\n", upload_process, re.S)
if not m:
raise RuntimeError("No UUID created")
uuid = m.group(1)
print("Checking notarization of UUID: %s (every 30 seconds)" % uuid)
notarization_in_progress = True
while notarization_in_progress:
time.sleep(30)
check_status = run_external_command(
[
"xcrun",
"altool",
"--notarization-info",
uuid,
"-u",
notarization_user,
"-p",
notarization_pass,
],
)
notarization_in_progress = "Status: in progress" in check_status
# Check if success
if "Status: success" not in check_status:
if "status: accepted" not in upload_result.lower():
raise RuntimeError("Failed to notarize..")
# Staple the notarization!
@@ -344,6 +389,9 @@ if __name__ == "__main__":
else:
print("Signing skipped, missing SIGNING_AUTH.")
# Test the release, as the very last step to not mess with any release code
test_sab_binary("dist/SABnzbd.app/Contents/MacOS/SABnzbd")
if "source" in sys.argv:
# Prepare Source distribution package.
# We assume the sources are freshly cloned from the repo
@@ -361,7 +409,7 @@ if __name__ == "__main__":
# Copy all folders and files to the new folder
for source_folder in extra_folders:
copy_tree(source_folder, os.path.join(src_folder, source_folder))
shutil.copytree(source_folder, os.path.join(src_folder, source_folder), dirs_exist_ok=True)
# Copy all files
for source_file in extra_files:

View File

@@ -1,9 +1,18 @@
# Basic build requirements
pyinstaller
setuptools
pkginfo
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
pyinstaller==4.8
pyinstaller-hooks-contrib==2022.0
altgraph==0.17.2
wrapt==1.13.3
setuptools==60.6.0
pkginfo==1.8.2
PyGithub==1.55
charset-normalizer==2.0.11
certifi
pygithub
# For the OSX build specific
dmgbuild; sys_platform == 'darwin'
# For the macOS build
dmgbuild==1.5.2; sys_platform == 'darwin'
mac-alias==2.2.0; sys_platform == 'darwin'
macholib==1.15.2; sys_platform == 'darwin'
ds-store==1.3.0; sys_platform == 'darwin'
PyNaCl==1.5.0; sys_platform == 'darwin'

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="Config"#-->
<!--#set global $help_uri="configuration/3.4/configure"#-->
<!--#set global $help_uri="configuration/3.5/configure"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<!--#from sabnzbd.encoding import CODEPAGE#-->
@@ -124,7 +124,7 @@
<div class="colmask">
<div class="padding alt">
<h5 class="copyright">Copyright &copy; 2007-2021 The SABnzbd Team &lt;<a href="mailto:team@sabnzbd.org">team@sabnzbd.org</a>&gt;</h5>
<h5 class="copyright">Copyright &copy; 2007-2022 The SABnzbd Team &lt;<a href="mailto:team@sabnzbd.org">team@sabnzbd.org</a>&gt;</h5>
<p class="copyright"><small>$T('yourRights')</small></p>
</div>

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="Categories"#-->
<!--#set global $help_uri="configuration/3.4/categories"#-->
<!--#set global $help_uri="configuration/3.5/categories"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<div class="colmask">
<div class="section">

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="Folders"#-->
<!--#set global $help_uri="configuration/3.4/folders"#-->
<!--#set global $help_uri="configuration/3.5/folders"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<div class="colmask">

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="General"#-->
<!--#set global $help_uri="configuration/3.4/general"#-->
<!--#set global $help_uri="configuration/3.5/general"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<div class="colmask">
@@ -179,6 +179,11 @@
<input type="checkbox" name="enable_https_verification" id="enable_https_verification" value="1" <!--#if int($enable_https_verification) > 0 then 'checked="checked"' else ""#--> <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#--> />
<span class="desc">$T('explain-enable_https_verification')</span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="socks5_proxy_url">$T('opt-socks5_proxy_url')</label>
<input type="text" name="socks5_proxy_url" id="socks5_proxy_url" value="$socks5_proxy_url" placeholder="socks5://username:password@hostname:port" />
<span class="desc">$T('explain-socks5_proxy_url') <br/>$T('readwiki')</span>
</div>
<div class="field-pair">
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
</div>

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="Email"#-->
<!--#set global $help_uri="configuration/3.4/notifications"#-->
<!--#set global $help_uri="configuration/3.5/notifications"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<!--#def show_notify_checkboxes($section_label)#-->
@@ -22,6 +22,7 @@
<option value="$ct" <!--#if $ct in $getVar($section_label + '_cats') then 'selected="selected"' else ""#-->>$Tspec($ct)</option>
<!--#end for#-->
</select>
<p>$T('defaultNotifiesAll')</p>
</div>
<!--#end def#-->
@@ -40,6 +41,7 @@
<option value="$ct" <!--#if $ct in $email_cats then 'selected="selected"' else ""#-->>$Tspec($ct)</option>
<!--#end for#-->
</select>
<p>$T('defaultNotifiesAll')</p>
</div>
</div>
<div class="col1">
@@ -47,9 +49,9 @@
<div class="field-pair">
<label class="config" for="email_endjob">$T('opt-email_endjob')</label>
<select name="email_endjob" id="email_endjob">
<option value="0" <!--#if int($email_endjob) == "0" then 'selected="selected"' else ""#--> >$T('email-never')</option>
<option value="1" <!--#if int($email_endjob) == "1" then 'selected="selected"' else ""#--> >$T('email-always')</option>
<option value="2" <!--#if int($email_endjob) == "2" then 'selected="selected"' else ""#--> >$T('email-errorOnly')</option>
<option value="0" <!--#if int($email_endjob) == 0 then 'selected="selected"' else ""#--> >$T('email-never')</option>
<option value="1" <!--#if int($email_endjob) == 1 then 'selected="selected"' else ""#--> >$T('email-always')</option>
<option value="2" <!--#if int($email_endjob) == 2 then 'selected="selected"' else ""#--> >$T('email-errorOnly')</option>
</select>
</div>
<div class="field-pair">

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="RSS"#-->
<!--#set global $help_uri="configuration/3.4/rss"#-->
<!--#set global $help_uri="configuration/3.5/rss"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<!--#import html#-->
<div class="colmask">
@@ -53,7 +53,7 @@
</td>
<td class="title">
<a href="?feed=$rss[$feed_item]['link']" class="subscription-title path feed <!--#if int($rss[$feed_item]['enable']) != 0 then 'feed_enabled' else 'feed_disabled'#-->">
$feed_item
$feed_item_html
</a>
</td>
<td class="controls">
@@ -102,7 +102,7 @@
</div>
<!--#end if#-->
<!--#if $active_feed#-->
<!--#set $feed = $active_feed#-->
<!--#set $feed = html.unescape($active_feed)#-->
<div class="section rss-section">
<div class="padTable">
<a class="main-helplink" href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
@@ -113,12 +113,12 @@
<!--#if $error#-->
<div class="alert alert-danger">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<!--#echo html.escape($error)#-->
$error
</div>
<!--#end if#-->
<form action="upd_rss_feed" method="post">
<input type="hidden" name="apikey" value="$apikey" />
<input type="hidden" name="feed" value="$feed" />
<input type="hidden" name="feed" value="$active_feed" />
<input type="hidden" name="uri" value="$rss[$feed]['uris']" />
<table class="catTable">
<thead>
@@ -210,7 +210,7 @@
<form action="upd_rss_filter" method="post">
<input type="hidden" name="apikey" value="$apikey" />
<input type="hidden" name="index" value="$rss[$feed]['filtercount']" />
<input type="hidden" name="feed" value="$feed" />
<input type="hidden" name="feed" value="$active_feed" />
<table class="catTable">
<tbody>
<tr>
@@ -286,7 +286,7 @@
<form action="upd_rss_filter" method="post" autocomplete="off">
<input type="hidden" name="apikey" value="$apikey" />
<input type="hidden" name="index" value="$fnum" />
<input type="hidden" name="feed" value="$feed" />
<input type="hidden" name="feed" value="$active_feed" />
<table class="catTable">
<tbody>
<tr class="<!--#if $odd then " alt " else " "#--> <!--#if $filter[3]!="A" and $filter[3]!="S" then 'disabled_options_rule' else ""#-->">
@@ -302,8 +302,8 @@
<option value="M" <!--#if $filter[3]=="M" then 'selected="selected"' else ""#-->> $T('rss-must')</option>
<option value="R" <!--#if $filter[3]=="R" then 'selected="selected"' else ""#-->> $T('rss-reject')</option>
<option value="C" <!--#if $filter[3]=="C" then 'selected="selected"' else ""#-->> $T('rss-mustcat')</option>
<option value=">" <!--#if $filter[3]==">" then 'selected="selected"' else ""#-->> $T('rss-atleast')</option>
<option value="<" <!--#if $filter[3]=="<" then 'selected="selected"' else ""#-->> $T('rss-atmost')</option>
<option value=">" <!--#if $filter[3]=="&gt;" then 'selected="selected"' else ""#-->> $T('rss-atleast')</option>
<option value="<" <!--#if $filter[3]=="&lt;" then 'selected="selected"' else ""#-->> $T('rss-atmost')</option>
<option value="F" <!--#if $filter[3]=="F" then 'selected="selected"' else ""#-->> $T('rss-from')</option>
<option value="S" <!--#if $filter[3]=="S" then 'selected="selected"' else ""#-->> $T('rss-from-show') ($T('rss-accept'))</option>
</select>
@@ -363,13 +363,13 @@
<!--#end for#-->
<form action="download_rss_feed" method="post">
<input type="hidden" name="apikey" value="$apikey" />
<input type="hidden" name="feed" value="$feed" />
<input type="hidden" name="feed" value="$active_feed" />
<div class="padding">
<button type="button" class="btn btn-default testFeed" rel="$feed"><span class="glyphicon glyphicon-sort"></span> $T('button-preFeed')</button>
<button type="button" class="btn btn-default testFeed" rel="$active_feed"><span class="glyphicon glyphicon-sort"></span> $T('button-preFeed')</button>
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-forward"></span> $T('button-forceFeed')</button>
<button type="button" class="btn btn-default cleanFeed"><span class="glyphicon glyphicon-trash"></span> $T('button-clear') $T('rss-done')</button>
<!--#if $evalButton#-->
<button type="button" class="btn btn-default evalFeed" rel="$feed"><span class="glyphicon glyphicon-ok-circle"></span> $T('button-evalFeed')</button>
<button type="button" class="btn btn-default evalFeed" rel="$active_feed"><span class="glyphicon glyphicon-ok-circle"></span> $T('button-evalFeed')</button>
<!--#end if#-->
</div>
</form>
@@ -402,7 +402,7 @@
<tr class="infoTableSeperator">
<td>
<form action="download" method="get">
<input type="hidden" value="$feed" name="feed" />
<input type="hidden" value="$active_feed" name="feed" />
<input type="hidden" name="apikey" value="$apikey" />
<input type="hidden" name="url" value="$job['url']" />
<input type="hidden" name="nzbname" value="$job['nzbname']" />
@@ -446,7 +446,7 @@
<tr class="infoTableSeperator">
<td>
<form action="download" method="get">
<input type="hidden" value="$feed" name="feed" />
<input type="hidden" value="$active_feed" name="feed" />
<input type="hidden" name="apikey" value="$apikey" />
<input type="hidden" name="url" value="$job['url']" />
<input type="hidden" name="nzbname" value="$job['nzbname']" />
@@ -475,7 +475,7 @@
<div class="tab-pane padTable" id="rss-tab-done">
<!--#if $downloaded#-->
<form action="clean_rss_jobs" method="post">
<input type="hidden" value="$feed" name="feed" />
<input type="hidden" value="$active_feed" name="feed" />
<input type="hidden" name="apikey" value="$apikey" />
<table class="catTable">
<thead>

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="Scheduling"#-->
<!--#set global $help_uri="configuration/3.4s/scheduling"#-->
<!--#set global $help_uri="configuration/3.5/scheduling"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<%

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="Servers"#-->
<!--#set global $help_uri="configuration/3.4/servers"#-->
<!--#set global $help_uri="configuration/3.5/servers"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<!--#import json#-->
@@ -103,6 +103,11 @@
<input type="checkbox" name="send_group" id="send_group" value="1" />
<span class="desc">$T('srv-explain-send_group')</span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="required">$T('srv-required')</label>
<input type="checkbox" name="required" id="required" value="1" />
<span class="desc">$T('explain-required')</span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="optional">$T('srv-optional')</label>
<input type="checkbox" name="optional" id="optional" value="1" />
@@ -225,6 +230,11 @@
<span class="desc">$T('explain-ssl_ciphers') <br>$T('readwiki')
<a href="${helpuri}advanced/ssl-ciphers" target="_blank">${helpuri}advanced/ssl-ciphers</a></span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="required$cur">$T('srv-required')</label>
<input type="checkbox" name="required" id="required$cur" value="1" <!--#if int($server['required']) != 0 then 'checked="checked"' else ""#--> />
<span class="desc">$T('explain-required')</span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="optional$cur">$T('srv-optional')</label>
<input type="checkbox" name="optional" id="optional$cur" value="1" <!--#if int($server['optional']) != 0 then 'checked="checked"' else ""#--> />

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="Sorting"#-->
<!--#set global $help_uri="configuration/3.4/sorting"#-->
<!--#set global $help_uri="configuration/3.5/sorting"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<div class="colmask">
@@ -11,12 +11,13 @@
<h3>$T('seriesSorting') <a href="$helpuri$help_uri#toc0" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
<p>
<b>$T('affectedCat')</b><br/>
<select name="tv_categories" multiple="multiple" class="multiple_cats">
<select name="tv_categories" multiple="multiple" class="multiple_cats" required="required">
<!--#for $ct in $categories#-->
<option value="$ct" <!--#if $ct in $tv_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
<!--#end for#-->
</select>
</p>
<p>$T('selectOneCat')</p>
</div>
<!-- /col2 -->
<div class="col1">
@@ -223,12 +224,13 @@
<h3>$T('movieSort') <a href="$helpuri$help_uri#toc6" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
<p>
<b>$T('affectedCat')</b><br/>
<select name="movie_categories" multiple="multiple" class="multiple_cats">
<select name="movie_categories" multiple="multiple" class="multiple_cats" required="required">
<!--#for $ct in $categories#-->
<option value="$ct" <!--#if $ct in $movie_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
<!--#end for#-->
</select>
</p>
<p>$T('selectOneCat')</p>
</div>
<!-- /col2 -->
<div class="col1">
@@ -419,12 +421,13 @@
<h3>$T('dateSorting') <a href="$helpuri$help_uri#toc9" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
<p>
<b>$T('affectedCat')</b><br/>
<select name="date_categories" multiple="multiple" class="multiple_cats">
<select name="date_categories" multiple="multiple" class="multiple_cats" required="required">
<!--#for $ct in $categories#-->
<option value="$ct" <!--#if $ct in $date_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
<!--#end for#-->
</select>
</p>
<p>$T('selectOneCat')</p>
</div>
<!-- /col2 -->
<div class="col1">

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="Special"#-->
<!--#set global $help_uri="configuration/3.4/special"#-->
<!--#set global $help_uri="configuration/3.5/special"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<div class="colmask">

View File

@@ -1,5 +1,5 @@
<!--#set global $pane="Switches"#-->
<!--#set global $help_uri="configuration/3.4/switches"#-->
<!--#set global $help_uri="configuration/3.5/switches"#-->
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
<div class="colmask">

View File

@@ -85,6 +85,11 @@
</ul>
<div class="tab-content">
<div class="tab-pane fade in active" id="options-status">
<div class="row" data-bind="visible: statusInfo.active_socks5_proxy">
<div class="col-sm-6">$T('opt-socks5_proxy_url') &nbsp </div>
<div class="col-sm-6" data-bind="visible: hasStatusInfo, text: statusInfo.active_socks5_proxy"></div>
<div class="col-sm-6 col-loading" data-bind="visible: !hasStatusInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
</div>
<div class="row">
<div class="col-sm-6">$T('dashboard-localIP4') &nbsp; </div>
<div class="col-sm-6" data-bind="visible: hasStatusInfo, text: !statusInfo.localipv4() ? '$T('dashboard-connectionError')' : statusInfo.localipv4(), css: { 'options-bad-status' : !statusInfo.localipv4() }"></div>
@@ -348,7 +353,6 @@
</select>
</div>
</div>
<div class="options-switch"></div>
<div class="form-group">
<label class="col-sm-6 control-label">$T('Glitter-dateFormat')</label>
<div class="col-sm-4">

View File

@@ -21,7 +21,7 @@ function ViewModel() {
self.extraQueueColumns = ko.observableArray([]).extend({ persist: 'extraColumns' });
self.extraHistoryColumns = ko.observableArray([]).extend({ persist: 'extraHistoryColumns' });
self.showActiveConnections = ko.observable(false).extend({ persist: 'showActiveConnections' });
self.speedMetrics = { K: "KB/s", M: "MB/s", G: "GB/s" };
self.speedMetrics = { '': "B/s", K: "KB/s", M: "MB/s", G: "GB/s" };
// Set information varibales
self.title = ko.observable();
@@ -55,6 +55,7 @@ function ViewModel() {
self.statusInfo = {};
self.statusInfo.folders = ko.observableArray([]);
self.statusInfo.servers = ko.observableArray([]);
self.statusInfo.active_socks5_proxy = ko.observable();
self.statusInfo.localipv4 = ko.observable();
self.statusInfo.publicipv4 = ko.observable();
self.statusInfo.ipv6 = ko.observable();
@@ -596,37 +597,6 @@ function ViewModel() {
}
})
// Save the rest in config if global-settings
var saveInterfaceSettings = function(newValue) {
if(self.useGlobalOptions()) {
var interfaceSettings = {
"dateFormat": self.dateFormat,
"extraQueueColumns": self.extraQueueColumns,
"extraHistoryColumns": self.extraHistoryColumns,
"displayCompact": self.displayCompact,
"displayFullWidth": self.displayFullWidth,
"displayTabbed": self.displayTabbed,
"confirmDeleteQueue": self.confirmDeleteQueue,
"confirmDeleteHistory": self.confirmDeleteHistory
};
callAPI({
mode: "set_config",
section: "misc",
keyword: "interface_settings",
value: ko.toJSON(interfaceSettings)
})
}
}
self.dateFormat.subscribe(saveInterfaceSettings);
self.extraQueueColumns.subscribe(saveInterfaceSettings);
self.extraHistoryColumns.subscribe(saveInterfaceSettings);
self.displayCompact.subscribe(saveInterfaceSettings);
self.displayFullWidth.subscribe(saveInterfaceSettings);
self.displayTabbed.subscribe(saveInterfaceSettings);
self.confirmDeleteQueue.subscribe(saveInterfaceSettings);
self.confirmDeleteHistory.subscribe(saveInterfaceSettings);
/***
Add NZB's
***/
@@ -773,6 +743,7 @@ function ViewModel() {
self.statusInfo.completedirspeed(data.status.completedirspeed)
self.statusInfo.internetbandwidth(data.status.internetbandwidth)
self.statusInfo.dnslookup(data.status.dnslookup)
self.statusInfo.active_socks5_proxy(data.status.active_socks5_proxy)
self.statusInfo.localipv4(data.status.localipv4)
self.statusInfo.publicipv4(data.status.publicipv4)
self.statusInfo.ipv6(data.status.ipv6 || glitterTranslate.noneText)
@@ -1079,6 +1050,26 @@ function ViewModel() {
}
}
// Save the rest in config if global-settings
var saveInterfaceSettings = function(newValue) {
var interfaceSettings = {
"dateFormat": self.dateFormat,
"extraQueueColumns": self.extraQueueColumns,
"extraHistoryColumns": self.extraHistoryColumns,
"displayCompact": self.displayCompact,
"displayFullWidth": self.displayFullWidth,
"displayTabbed": self.displayTabbed,
"confirmDeleteQueue": self.confirmDeleteQueue,
"confirmDeleteHistory": self.confirmDeleteHistory
};
callAPI({
mode: "set_config",
section: "misc",
keyword: "interface_settings",
value: ko.toJSON(interfaceSettings)
})
}
// Get the speed-limit, refresh rate and server names
callAPI({
mode: 'get_config'
@@ -1107,6 +1098,16 @@ function ViewModel() {
self.confirmDeleteQueue(interfaceSettings['confirmDeleteQueue']);
self.confirmDeleteHistory(interfaceSettings['confirmDeleteHistory']);
}
// Only subscribe now to prevent collisions between localStorage and config settings updates
self.dateFormat.subscribe(saveInterfaceSettings);
self.extraQueueColumns.subscribe(saveInterfaceSettings);
self.extraHistoryColumns.subscribe(saveInterfaceSettings);
self.displayCompact.subscribe(saveInterfaceSettings);
self.displayFullWidth.subscribe(saveInterfaceSettings);
self.displayTabbed.subscribe(saveInterfaceSettings);
self.confirmDeleteQueue.subscribe(saveInterfaceSettings);
self.confirmDeleteHistory.subscribe(saveInterfaceSettings);
}
// Set bandwidth limit
@@ -1116,6 +1117,9 @@ function ViewModel() {
// Save servers (for reporting functionality of OZnzb)
self.servers = response.config.servers;
// Already set if we are using a proxy
if(response.config.misc.socks5_proxy_url) self.statusInfo.active_socks5_proxy(true)
// Update message
if(newRelease) {
self.allMessages.push({
@@ -1231,4 +1235,4 @@ function ViewModel() {
// Activate tooltips
if(!isMobile) $('[data-tooltip="true"]').tooltip({ trigger: 'hover', container: 'body' })
}
}

View File

@@ -531,11 +531,10 @@ function QueueModel(parent, data) {
return self.name()
})
self.missingText = ko.pureComputed(function() {
// Check for missing data, the value is arbitrary! (1%)
if(self.missingMB()/self.totalMB() > 0.01) {
// Check for missing data, can show 0 if article-size is smaller than 500K, but we accept that
if(self.missingMB()) {
return self.missingMB().toFixed(0) + ' MB ' + glitterTranslate.misingArt
}
return;
})
self.statusText = ko.computed(function() {
// Checking

View File

@@ -1,6 +1,6 @@
#
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
msgid ""

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
msgid ""

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file EMAIL
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,6 +1,6 @@
#
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
msgid ""
@@ -86,6 +86,11 @@ msgstr ""
msgid "SABnzbd was started with encoding %s, this should be UTF-8. Expect problems with Unicoded file and directory names in downloads."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Current umask (%o) might deny SABnzbd access to the files and folders it creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -124,35 +129,6 @@ msgstr ""
msgid "Fatal error at saving state"
msgstr ""
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr ""
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr ""
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr ""
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr ""
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr ""
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr ""
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -309,6 +285,14 @@ msgstr ""
msgid "Quota spent, pausing downloading"
msgstr ""
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr ""
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr ""
@@ -321,6 +305,19 @@ msgstr ""
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Permissions setting of %s might deny SABnzbd access to the files and folders it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr ""
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -341,22 +338,6 @@ msgstr ""
msgid "Incorrectly encoded password %s"
msgstr ""
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr ""
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr ""
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr ""
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr ""
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -387,10 +368,6 @@ msgstr ""
msgid "Decoder failure: Out of memory"
msgstr ""
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -541,7 +518,7 @@ msgid "No recipients given, no email sent"
msgstr ""
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr ""
@@ -591,6 +568,21 @@ msgstr ""
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr ""
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -800,11 +792,6 @@ msgstr ""
msgid "Trying unrar with password \"%s\""
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr ""
@@ -813,50 +800,24 @@ msgstr ""
msgid "Unpacking failed, unable to find %s"
msgstr ""
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr ""
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgid "Unpacking failed, archive requires a password"
msgstr ""
#: sabnzbd/newsunpack.py
@@ -884,12 +845,9 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr ""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr ""
#: sabnzbd/newsunpack.py
@@ -969,11 +927,11 @@ msgid "Disk full"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgid "Checking extra files"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgid "Verifying"
msgstr ""
#. PP status
@@ -985,6 +943,10 @@ msgstr ""
msgid "Trying SFV verification"
msgstr ""
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr ""
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr ""
@@ -1096,9 +1058,9 @@ msgstr ""
msgid "Failed to send Windows notification"
msgstr ""
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgid "Cannot create temp file for %s"
msgstr ""
#. Error message
@@ -1111,6 +1073,11 @@ msgstr ""
msgid "Error removing %s"
msgstr ""
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr ""
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1127,7 +1094,7 @@ msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
@@ -1471,11 +1438,6 @@ msgstr ""
msgid "Post Processing Failed for %s (%s)"
msgstr ""
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr ""
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1681,6 +1643,11 @@ msgstr ""
msgid "Schedule for non-existing server %s"
msgstr ""
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr ""
#. Queue status "download" - Post processing pick list - Config->RSS button "download item"
#: sabnzbd/skintext.py
msgid "Download"
@@ -3454,6 +3421,14 @@ msgstr ""
msgid "Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr ""
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr ""
@@ -3686,6 +3661,15 @@ msgstr ""
msgid "0 is highest priority, 100 is the lowest priority"
msgstr ""
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid "In case of connection failures, the download queue will be paused for a few minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -3862,6 +3846,10 @@ msgstr ""
msgid "Read All Feeds Now"
msgstr ""
#: sabnzbd/skintext.py
msgid "If only the <em>Default</em> category is selected, notifications are enabled for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr ""
@@ -4132,7 +4120,13 @@ msgstr ""
msgid "X"
msgstr ""
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr ""
@@ -4160,7 +4154,8 @@ msgstr ""
msgid "Example"
msgstr ""
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr ""
@@ -4312,7 +4307,8 @@ msgstr ""
msgid "No folders"
msgstr ""
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr ""
@@ -4424,10 +4420,6 @@ msgstr ""
msgid "Selection"
msgstr ""
#: sabnzbd/skintext.py
msgid "left"
msgstr ""
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr ""
@@ -4813,6 +4805,10 @@ msgstr ""
msgid "URL Fetching failed; %s"
msgstr ""
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr ""
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr ""

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,15 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
# Safihre <safihre@sabnzbd.org>, 2021
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-develop\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2021\n"
"Language-Team: Danish (https://www.transifex.com/sabnzbd/teams/111101/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -102,6 +102,13 @@ msgstr ""
"SABnzbd blev startet med kodning %s, dette bør være UTF-8. Forvent problemer"
" med Unicoded fil- og mappenavne i downloads."
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -140,35 +147,6 @@ msgstr "Signal %s modtaget, gemmer og lukker..."
msgid "Fatal error at saving state"
msgstr "Fatal fejl ved lagring af state"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Forsøger at hente NZB fra %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Gemmes %s mislykkedes"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Kan ikke oprette temp fil for %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Forsøger at sætte status på ikke eksisterende server %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Fejl i tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Downloadning af %s mislykkedes"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -333,6 +311,14 @@ msgstr "nøgleord"
msgid "Quota spent, pausing downloading"
msgstr "Kvote brugt, pause downloading"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Fejl parameter"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC søgning \"%s\" er ikke tilladt her"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s er ikke en godkendt e-mail adresse"
@@ -345,6 +331,21 @@ msgstr "Kræver serveradresse"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s er ikke et korrekt ciffer værdi"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Fejl: Køen er ikke tom, kan ikke skifte mappe."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -365,22 +366,6 @@ msgstr "Kan ikke oprette backup fil for %s"
msgid "Incorrectly encoded password %s"
msgstr "Forkert kodet adgangskode%s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Fejl parameter"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s er ikke et korrekt ciffer værdi"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC søgning \"%s\" er ikke tilladt her"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Fejl: Køen er ikke tom, kan ikke skifte mappe."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -411,10 +396,6 @@ msgstr "Forkert logning i historiken av %s"
msgid "Decoder failure: Out of memory"
msgstr "Dekoder fejl: Ikke mere hukommelse"
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -570,8 +551,7 @@ msgid "No recipients given, no email sent"
msgstr "Ingen modtagere givet, ingen e-mail sendt"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Kan ikke læse %s"
@@ -631,6 +611,21 @@ msgstr "Det lykkedes ikke at flytte %s til %s"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Fejl i tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Gemmes %s mislykkedes"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Downloadning af %s mislykkedes"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -857,11 +852,6 @@ msgstr "Fjernelse af %s mislykkedes!"
msgid "Trying unrar with password \"%s\""
msgstr "Forsøger unrar med adgangskode \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Udpakning mislykkedes, arkivet kræver adgangskode"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Udpakker"
@@ -870,51 +860,25 @@ msgstr "Udpakker"
msgid "Unpacking failed, unable to find %s"
msgstr "Udpakning mislykkedes, kunne ikke finde %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "FEJL: lykkedes ikke at finde \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Udpakning mislykkedes, CRC-fejl"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "FEJL: CRC mislykkedes i \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr "Udpakningen fejlede, da filen er for stor til filsystemet (FAT?)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr "FEJL: Fil for stor til filsystem (%s)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "Udpakning mislykkedes, skrivefejl eller disken fuld?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "FEJL: skrivefejll (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Udpakningen mislykkedes, stien er for lang"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "FEJL: stien for lang (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "FEJL: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Udpakning mislykkedes, arkivet kræver adgangskode"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -941,13 +905,10 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr "Forsøger 7zip med adgangskode \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "7ZIP sæt \"%s\" er ufuldstændig, kan ikke udpakke"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Kan ikke udpakke %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "se logfil"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1030,14 +991,14 @@ msgstr ""
msgid "Disk full"
msgstr "Disk fuld"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Bekræfter"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr "Tjekker ekstra filer"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Bekræfter"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1047,6 +1008,10 @@ msgstr "Kontrollerer"
msgid "Trying SFV verification"
msgstr "Forsøger SFV verifikation"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "tilbage"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Denne server tillader ikke SSL på denne port"
@@ -1163,10 +1128,10 @@ msgstr "Notification scriptet \"%s\" findes ikke"
msgid "Failed to send Windows notification"
msgstr "Det lykkedes ikke at sende Windows notification"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Det lykkedes ikke at importere %s filer fra %s"
msgid "Cannot create temp file for %s"
msgstr "Kan ikke oprette temp fil for %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1178,6 +1143,11 @@ msgstr "Det lykkedes ikke at tilføje %s, slette"
msgid "Error removing %s"
msgstr "Fejl ved fjernelse af %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Det lykkedes ikke at importere %s filer fra %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1194,8 +1164,8 @@ msgstr "NZB tilføjet i køen"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Ødelagt NZB fil %s, springer over (årsag=%s, linje=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr "Ødelagt NZB fil %s, springer over (årsag=%s)"
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1573,11 +1543,6 @@ msgstr "Mere"
msgid "Post Processing Failed for %s (%s)"
msgstr "Efterbehandling mislykkedes for %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "se logfil"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1787,6 +1752,11 @@ msgstr "Ukendt handling: %s"
msgid "Schedule for non-existing server %s"
msgstr "Tidsplan for ikke-eksisterende server %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Forsøger at sætte status på ikke eksisterende server %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3701,6 +3671,14 @@ msgstr ""
"Kontroller certifikater, når du opretter forbindelse til indeksører og RSS-"
"kilder ved hjælp HTTPS."
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Server"
@@ -3949,6 +3927,17 @@ msgstr "Streng"
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 er højeste prioritet, 100 er den laveste prioritet"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4134,6 +4123,12 @@ msgstr "Hentet"
msgid "Read All Feeds Now"
msgstr "Læs alle Feeds nu"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "E-mail påmindelse når job er fuldført"
@@ -4416,7 +4411,13 @@ msgstr "Indekseringen kategorier/grupper"
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Serie sortering"
@@ -4444,7 +4445,8 @@ msgstr "Forudindstillinger"
msgid "Example"
msgstr "Eksempel"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr "Film sortering"
@@ -4596,7 +4598,8 @@ msgstr "I mappe"
msgid "No folders"
msgstr "Ingen mappe"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Dato sortering"
@@ -4716,10 +4719,6 @@ msgstr "Emne"
msgid "Selection"
msgstr "Udvælgelse"
#: sabnzbd/skintext.py
msgid "left"
msgstr "tilbage"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Ledig diskplads"
@@ -5123,6 +5122,10 @@ msgstr "Fejl, Ubrugelig arkivfil"
msgid "URL Fetching failed; %s"
msgstr "URL hentning mislykkedes; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Forsøger at hente NZB fra %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Værtsnavnet er ikke indstillet."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -7,14 +7,17 @@
# Nikolai Bohl <n.kay01@gmail.com>, 2020
# reloxx13 <reloxx@interia.pl>, 2021
# Ben Hecht <benjamin.hecht@me.com>, 2021
# Safihre <safihre@sabnzbd.org>, 2021
# Manuel C. Senn, 2021
# Andreas Kames, 2021
# Safihre <safihre@sabnzbd.org>, 2021
# Simon W., 2021
# Nils Briggen, 2022
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-develop\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Manuel C. Senn, 2021\n"
"Last-Translator: Nils Briggen, 2022\n"
"Language-Team: German (https://www.transifex.com/sabnzbd/teams/111101/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -111,6 +114,15 @@ msgstr ""
"sein. Es werden Probleme mit Unicode codierten Dateien und "
"Ordnerbezeichnungen in Downloads erwartet."
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
"Die aktuellen Zugriffseinstellungen (%o) könnte SABnzbd den Zugriff auf die "
"erstellten Dateien und Ordner von SABnzbd verweigern."
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -150,35 +162,6 @@ msgstr "Signal %s erkannt. Wird gespeichert und beendet …"
msgid "Fatal error at saving state"
msgstr "Schwerer Fehler beim Speichern des Zustands"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "NZB-Datei wird versucht von %s abzurufen"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Fehler beim Speichern von %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Temporäre Datei für %s konnte nicht angelegt werden"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Status für nicht vorhandenen Server wird versucht %s einzustellen"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Fehler in tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Fehler beim Laden von %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -346,6 +329,14 @@ msgstr "Schlüsselwörter"
msgid "Quota spent, pausing downloading"
msgstr "Kontingent aufgebraucht, Downloads werden angehalten"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Fehlerhafter Parameter"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-Pfad \"%s\" ist hier nicht erlaubt"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s ist keine gültige E-Mail-Adresse"
@@ -358,6 +349,25 @@ msgstr "Server-Adresse wird benötigt"
msgid "%s is not a valid script"
msgstr "%s ist kein gültiges Script"
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s ist kein gültiger Oktal-Wert"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
"Die aktuellen Zugriffseinstellungen (%s) könnte SABnzbd den Zugriff auf die "
"erstellten Dateien und Ordner von SABnzbd verweigern."
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr ""
"Fehler: Ordner kann nicht geändert werden, da die Warteschlange nicht leer "
"ist."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -379,24 +389,6 @@ msgstr "Kann keine Sicherungsdatei erstellen für %s"
msgid "Incorrectly encoded password %s"
msgstr "Ungültig kodiertes Passwort %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Fehlerhafter Parameter"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s ist kein gültiger Oktal-Wert"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-Pfad \"%s\" ist hier nicht erlaubt"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr ""
"Fehler: Ordner kann nicht geändert werden, da die Warteschlange nicht leer "
"ist."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -429,10 +421,6 @@ msgstr "Ungültiges Stufen-Protokoll im Verlauf für %s"
msgid "Decoder failure: Out of memory"
msgstr "Decoder Fehler: Nicht genügend Speicher"
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr "UUencode erkannt, aber nur yEnc encoding ist untertützt [%s]"
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -538,7 +526,7 @@ msgstr "Wird beendet …"
#. Warning message
#: sabnzbd/downloader.py
msgid "Server %s is expiring in %s day(s)"
msgstr "Server %s läuft in %s tag(en) ab"
msgstr "Server %s läuft in %s Tag(en) ab"
#. Warning message
#: sabnzbd/downloader.py
@@ -591,8 +579,7 @@ msgid "No recipients given, no email sent"
msgstr "Keine E-Mail gesendet da keine Empfänger angegeben"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "%s kann nicht gelesen werden"
@@ -654,6 +641,21 @@ msgstr "Verschieben von %s nach %s fehlgeschlagen"
msgid "Blocked attempt to create directory %s"
msgstr "Versuch das Verzeichnis %s zu erstellen wurde blockiert"
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Fehler in tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Fehler beim Speichern von %s"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Fehler beim Laden von %s"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr "Abgelehnte Verbindung von:"
@@ -889,11 +891,6 @@ msgstr "Löschen von %s fehlgeschlagen!"
msgid "Trying unrar with password \"%s\""
msgstr "Versuche entpacken mit Passwort \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Entpacken fehlgeschlagen. Archiv benötigt ein Passwort."
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Entpacken"
@@ -902,53 +899,27 @@ msgstr "Entpacken"
msgid "Unpacking failed, unable to find %s"
msgstr "Entpacken fehlgeschlagen. Konnte %s nicht finden."
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "FEHLER: »%s« kann nicht gefunden werden."
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Entpacken fehlgeschlagen. CRC-Fehler"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "FEHLER: CRC in »%s« fehlgeschlagen."
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
"Entpacken fehlgeschlagen - Datei zu groß für Dateisystem (Formatierung FAT?)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr "Fehler: Datei zu groß für Dateisystem (%s)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr ""
"Entpacken fehlgeschlagen. Fehler beim Schreiben oder volle Festplatte?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "FEHLER: Schreibfehler %s"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Entpacken fehlgeschlagen, Pfad ist zu lang"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "FEHLER: Pfad ist zu lang (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "FEHLER: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Entpacken fehlgeschlagen. Archiv benötigt ein Passwort."
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -975,13 +946,10 @@ msgstr "Keine 7za Binary gefunden, entpacken von \"%s\" nicht möglich"
msgid "Trying 7zip with password \"%s\""
msgstr "Versuche 7zip mit Passwort \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "Das 7zip-Set \"%s\" ist unvollständig, kann nicht entpackt werden"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Konnte nicht entpacken %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "Beachten Sie die Protokolldatei"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1066,14 +1034,14 @@ msgstr "Überprüfe Reparatur"
msgid "Disk full"
msgstr "Festplatte voll"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Überprüfen"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr "Überprüfe zusätzliche Dateien"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Überprüfen"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1083,6 +1051,10 @@ msgstr "Wird überprüft"
msgid "Trying SFV verification"
msgstr "Versuche SFV-Überprüfung"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "rest"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Dieser Server erlaubt kein SSL auf diesem Port"
@@ -1202,10 +1174,10 @@ msgstr "Benachrichtigungsskript \"%s\" existiert nicht"
msgid "Failed to send Windows notification"
msgstr "Windows Benachrichtigung konnte nicht gesendet werden"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Importieren von %s Dateien von %s fehlgeschlagen"
msgid "Cannot create temp file for %s"
msgstr "Temporäre Datei für %s konnte nicht angelegt werden"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1217,6 +1189,11 @@ msgstr "Fehler beim Hinzufügen von %s. Entferne."
msgid "Error removing %s"
msgstr "Fehler beim Entfernen von %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Importieren von %s Dateien von %s fehlgeschlagen"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1233,8 +1210,8 @@ msgstr "NZB zur Warteschlange hinzugefügt"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Ungültige NZB-Datei %s wird übersprungen: %s auf Zeile %s"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr "Ungültige NZB-Datei %s wird übersprungen: %s "
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1627,11 +1604,6 @@ msgstr "Mehr"
msgid "Post Processing Failed for %s (%s)"
msgstr "Nachbearbeitung von %s fehlgeschlagen (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "Beachten Sie die Protokolldatei"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr "Nachbearbeitung wurde abgebrochen"
@@ -1688,7 +1660,7 @@ msgstr "RAR-Datei konnten nicht überprüft werden"
#: sabnzbd/postproc.py
msgid "Trying RAR renamer"
msgstr "Versuche RAR Umbenenner"
msgstr "Versuche RAR-Umbenenner"
#. Warning message
#: sabnzbd/postproc.py
@@ -1841,6 +1813,11 @@ msgstr "Unbekannte Aktion: %s"
msgid "Schedule for non-existing server %s"
msgstr "Regel für nicht existierenden Server %s."
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Status für nicht vorhandenen Server wird versucht %s einzustellen"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3818,6 +3795,15 @@ msgstr ""
"Überprüfe Zertifikate bei Verbindungen zu Indexern und RSS-Quellen über "
"HTTPS."
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr "SOCKS5 Proxy"
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
"Benutze den angegebenen SOCKS5 Proxy für alle ausgehenden Verbindungen."
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Server"
@@ -4077,6 +4063,19 @@ msgstr "Strikt"
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 ist die höchste, 99 die niedrigste Priorität"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr "Benötigt"
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
"Im Fall von Verbindungsausfällen wird die Downloadwarteschlange für ein paar"
" Minuten pausiert, statt diesen Server zu überspringen"
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4194,7 +4193,7 @@ msgstr "Bearbeiten"
#. Config->RSS when will be the next RSS scan
#: sabnzbd/skintext.py
msgid "Next scan at"
msgstr "Nächster scan um"
msgstr "Nächster Scan um"
#. Config->RSS table column header
#: sabnzbd/skintext.py
@@ -4261,6 +4260,14 @@ msgstr "Heruntergeladen"
msgid "Read All Feeds Now"
msgstr "Jetzt alle Feeds lesen"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
"Wenn nur die <em>Standart</em> Kategorie ausgewählt ist werden die "
"Benachrichtigungen für Jobs in allen Kategorien aktiviert. "
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Email-Benachrichtigung beim Fertigstellen von Aufträgen"
@@ -4547,7 +4554,13 @@ msgstr "Indexer Kategorien/Gruppen"
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr "Wähle mindestens 1 Kategorie"
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Sortieren von TV-Serien"
@@ -4575,7 +4588,8 @@ msgstr "Voreinstellungen"
msgid "Example"
msgstr "Beispiel"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr "Film Sortierung"
@@ -4727,7 +4741,8 @@ msgstr "In Ordnern"
msgid "No folders"
msgstr "Keine Ordner"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Sortieren nach Datum"
@@ -4766,15 +4781,15 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "GuessIt Property"
msgstr ""
msgstr "GuessIt Property"
#: sabnzbd/skintext.py
msgid "GuessIt.Property"
msgstr ""
msgstr "GuessIt.Property"
#: sabnzbd/skintext.py
msgid "GuessIt_Property"
msgstr ""
msgstr "GuessIt_Property"
#: sabnzbd/skintext.py
msgid ""
@@ -4847,10 +4862,6 @@ msgstr "Betreff"
msgid "Selection"
msgstr "Auswahl"
#: sabnzbd/skintext.py
msgid "left"
msgstr "rest"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Freier Speicherplatz"
@@ -4925,7 +4936,7 @@ msgstr "Weitere Warteschlangen Spalten"
#: sabnzbd/skintext.py
msgid "Extra history columns"
msgstr "Weitere Verlauf Spalten"
msgstr "Weitere Verlaufspalten"
#: sabnzbd/skintext.py
msgid "page"
@@ -5009,7 +5020,7 @@ msgstr "Skript-Protokoll anzeigen"
#: sabnzbd/skintext.py
msgid "Renaming the job will abort Direct Unpack."
msgstr ""
msgstr "Das Umbenennen des Jobs wird das direkte entpacken abbrechen."
#: sabnzbd/skintext.py
msgid ""
@@ -5257,6 +5268,10 @@ msgstr "Ungültige NZB-Datei."
msgid "URL Fetching failed; %s"
msgstr "Abrufen der URL fehlgeschlagen; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "NZB-Datei wird versucht von %s abzurufen"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Der Hostname wurde nicht angegeben"

View File

@@ -1,17 +1,17 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
# Ester Molla Aragones <moarages@gmail.com>, 2020
# Safihre <safihre@sabnzbd.org>, 2020
# 1024mb <angelb2203@gmail.com>, 2020
# Safihre <safihre@sabnzbd.org>, 2021
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-develop\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: 1024mb <angelb2203@gmail.com>, 2020\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2021\n"
"Language-Team: Spanish (https://www.transifex.com/sabnzbd/teams/111101/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -108,6 +108,13 @@ msgstr ""
"UTF-8. Habrá problemas con el archivo en Unicode y con los nombres de "
"directorio en las descargas."
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -148,35 +155,6 @@ msgstr "Señal %s capturado, guardando y saliendo..."
msgid "Fatal error at saving state"
msgstr "Error grave al guardar estado"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Tratando de buscar NZB de %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Guardar de %s no se pudo completar."
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "No se puede crear el archivo temporal para %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Intentando cambiar el estado de servidor inexistente %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Fallo en tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Cargar de %s no se pudo completar."
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -347,6 +325,14 @@ msgstr "palabras clave"
msgid "Quota spent, pausing downloading"
msgstr "Quota gastado, pausando cola"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Parámetro incorrecto"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "Ruta de acceso UNC \"%s\" no permitido aqui"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s no es una dirección de correo electrónico válida."
@@ -359,6 +345,21 @@ msgstr "Se necesita la dirección del servidor"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s no es un valor octal correcto"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Error: Cola no esta vacía, no se puede cambiar el directorio"
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -379,22 +380,6 @@ msgstr "No se puede crear copia de seguridad del archivo %s"
msgid "Incorrectly encoded password %s"
msgstr "Contraseña incorrectamente codificado %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Parámetro incorrecto"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s no es un valor octal correcto"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "Ruta de acceso UNC \"%s\" no permitido aqui"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Error: Cola no esta vacía, no se puede cambiar el directorio"
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -428,10 +413,6 @@ msgstr "Registro de etapa invalido para transferencia terminada %s"
msgid "Decoder failure: Out of memory"
msgstr "Fallo del decodificador: no hay memoria"
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr "Se ha detectado UUencode, solo se permite codificación yEnc [%s]"
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -591,8 +572,7 @@ msgid "No recipients given, no email sent"
msgstr "Sin destinatarios no se pudo enviar el email"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "No se puede leer %s"
@@ -652,6 +632,21 @@ msgstr "Error al mover %s a %s"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Fallo en tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Guardar de %s no se pudo completar."
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Cargar de %s no se pudo completar."
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -886,11 +881,6 @@ msgstr "¡Error al eliminar %s!"
msgid "Trying unrar with password \"%s\""
msgstr "Intentado descomprimir rar con contraseña \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Error al descomprimir; El archivo está protegido por contraseña"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Descomprimiendo"
@@ -899,55 +889,28 @@ msgstr "Descomprimiendo"
msgid "Unpacking failed, unable to find %s"
msgstr "Error al descomprimir; Imposible encontrar %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "ERROR: Imposible encontrar \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Error de CRC al descomprimir"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "ERROR: Ha fallado la comprobación CRC sobre \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
"La descompresión ha fallado, el archivo es demasiado grande para el sistema "
"de archivos (FAT?)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
"ERROR: el archivo es demasiado grande para el sistema de archivos (%s)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr ""
"Error al descomprimir; ¿Error de escritura, o tal vez el disco está lleno?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "ERROR: Error de escritura (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Aperture de archivo fallo, la via es muy larga"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "ERROR: via es muy larga (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "ERROR: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Error al descomprimir; El archivo está protegido por contraseña"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -974,13 +937,10 @@ msgstr "No se ha encontrado el binario 7za, no se puede descomprimir \"%s\""
msgid "Trying 7zip with password \"%s\""
msgstr "Tratando 7zip con la contraseña \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "7ZIP conjunto \"%s\" es incompleta, no puede desempaquetar"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "No se pudo descomprimir %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "ver fichero de log"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1065,14 +1025,14 @@ msgstr "Reparación de verificación"
msgid "Disk full"
msgstr "Disco lleno"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verificando"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr "Comprobando archivos extra"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verificando"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1082,6 +1042,10 @@ msgstr "Verificando"
msgid "Trying SFV verification"
msgstr "Intentando verificación por SFV"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "Restante"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Este servidor no permite SSL en este puerto"
@@ -1205,10 +1169,10 @@ msgstr "El script de notificación \"%s\" no existe"
msgid "Failed to send Windows notification"
msgstr "Fallo al mandar la notificación de Windows"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Error al importar %s ficheros desde %s"
msgid "Cannot create temp file for %s"
msgstr "No se puede crear el archivo temporal para %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1220,6 +1184,11 @@ msgstr "Error al añadir %s, eliminando"
msgid "Error removing %s"
msgstr "Error al quitar %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Error al importar %s ficheros desde %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1237,8 +1206,8 @@ msgstr "NZB añadido a la cola"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Fichero NBZ inválido: %s, omitiendo (razón=%s, línea=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr "Fichero NBZ inválido: %s, omitiendo (razón=%s)"
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1627,11 +1596,6 @@ msgstr "Más"
msgid "Post Processing Failed for %s (%s)"
msgstr "Error al post-procesar %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "ver fichero de log"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1845,6 +1809,11 @@ msgstr "Acción desconocida: %s"
msgid "Schedule for non-existing server %s"
msgstr "Planificación para servidor %s inexistente"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Intentando cambiar el estado de servidor inexistente %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3802,6 +3771,14 @@ msgstr ""
"Verificar certificados al conectarse a indexadores y fuentes RSS usando "
"HTTPS."
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Servidor"
@@ -4059,6 +4036,17 @@ msgstr "Estricto"
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 El prioridad más alta, 99 es la prioridad más baja"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4245,6 +4233,12 @@ msgstr "Descargado"
msgid "Read All Feeds Now"
msgstr "Leer todas las fuentes ahora"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Notificación por email al terminar"
@@ -4531,7 +4525,13 @@ msgstr "Categorías Indexer / Grupos"
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Ordenación de Series"
@@ -4559,7 +4559,8 @@ msgstr "Preajustes"
msgid "Example"
msgstr "Ejemplo"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr "Clasificación de películas"
@@ -4711,7 +4712,8 @@ msgstr "En directorios"
msgid "No folders"
msgstr "Sin Directorios"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Ordenar por fecha"
@@ -4831,10 +4833,6 @@ msgstr "Asunto"
msgid "Selection"
msgstr "Selección"
#: sabnzbd/skintext.py
msgid "left"
msgstr "Restante"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Espacio libre"
@@ -5244,6 +5242,10 @@ msgstr "Archivo NZB inusable"
msgid "URL Fetching failed; %s"
msgstr "Error al recuperar la URL; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Tratando de buscar NZB de %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "El hostname no está definido."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -102,6 +102,13 @@ msgstr ""
"Unicode-merkkejä tiedosto- ja kansionimissä sisältävät lataukset voivat "
"aiheuttaa ongelmia."
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -141,35 +148,6 @@ msgstr "Signaali %s kaapattu, tallennetaan ja lopetetaan..."
msgid "Fatal error at saving state"
msgstr "Vakava virhe tallennettaessa tilaa"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Yritetään noutaa NZB osoitteesta %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Kohteen %s tallentaminen epäonnistui"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Väliaikaistiedostoa ei voida luoda kohteelle %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Yritettiin asettaa tila ei olemassa olevalle palvelimelle %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Virhe tiedostossa tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Kohteen %s lataaminen epäonnistui"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -330,6 +308,14 @@ msgstr "avainsanat"
msgid "Quota spent, pausing downloading"
msgstr "Latausrajoitus saavutettu, keskeytetään lataukset"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Virheellinen parametri"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "TUNT polku \"%s\" ei ole sallittu"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s ei ole kelvollinen sähköpostiosoite"
@@ -342,6 +328,21 @@ msgstr "Palvelimen osoite vaaditaan"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s ei ole oikea oktaalinen arvo"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Virhe: Jono ei ole tyhjä, kansiota ei voida vaihtaa."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -362,22 +363,6 @@ msgstr "Ei voitu luoda varmuuskopiotiedostoa kohteelle %s"
msgid "Incorrectly encoded password %s"
msgstr "Virheellisesti koodattu salasana %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Virheellinen parametri"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s ei ole oikea oktaalinen arvo"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "TUNT polku \"%s\" ei ole sallittu"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Virhe: Jono ei ole tyhjä, kansiota ei voida vaihtaa."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -408,10 +393,6 @@ msgstr "Virheellinen tila lokihistoriassa kohteelle %s"
msgid "Decoder failure: Out of memory"
msgstr ""
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -566,8 +547,7 @@ msgid "No recipients given, no email sent"
msgstr "Vastaanottajaa ei määritelty, sähköpostia ei lähetetty"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Ei voida lukea %s"
@@ -627,6 +607,21 @@ msgstr "Kohteen %s siirtäminen kohteeseen %s epäonnistui"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Virhe tiedostossa tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Kohteen %s tallentaminen epäonnistui"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Kohteen %s lataaminen epäonnistui"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -853,11 +848,6 @@ msgstr "Kohteen %s poisto epäonnistui!"
msgid "Trying unrar with password \"%s\""
msgstr "Yritetään purkaa rar arkistoa salasanalla \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Purkaminen epäonnistui, arkisto vaatii salasanan"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Puretaan"
@@ -866,51 +856,25 @@ msgstr "Puretaan"
msgid "Unpacking failed, unable to find %s"
msgstr "Purkaminen epäonnistui, %s ei löydy"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "VIRHE: kohdetta \"%s\" ei löydy"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Purkaminen epäonnistui, CRC virhe"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "VIRHE: CRC epäonnistui kohteessa \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "Purkaminen epäonnistui, kirjoitusvirhe tai levy täynnä?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "VIRHE: kirjoitusvirhe (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Purkaminen epäonnistui, polku on liian pitkä"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "VIRHE: polku liian pitkä (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "VIRHE: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Purkaminen epäonnistui, arkisto vaatii salasanan"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -937,13 +901,10 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr "Yritetään purkaa 7zip arkistoa salasanalla \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "7ZIP setti \"%s\" on puutteellinen, ei voida purkaa"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Ei voitu purkaa %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "katso lokitiedosto"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1023,14 +984,14 @@ msgstr ""
msgid "Disk full"
msgstr "Levy täynnä"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Varmennetaan"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Varmennetaan"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1040,6 +1001,10 @@ msgstr "Tarkistetaan"
msgid "Trying SFV verification"
msgstr "Yritetään SFV varmennusta"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "jäljellä"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Tämä palvelin ei salli SSL yhteyksiä tähän porttiin"
@@ -1156,10 +1121,10 @@ msgstr "Ilmoitusskriptiä \"%s\" ei ole olemassa"
msgid "Failed to send Windows notification"
msgstr "Windows-ilmoituksen lähetys epäonnistui"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Virhe tuotaessa %s tiedostoa kohteesta %s"
msgid "Cannot create temp file for %s"
msgstr "Väliaikaistiedostoa ei voida luoda kohteelle %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1171,6 +1136,11 @@ msgstr "Virhe lisättäessä %s, poistetaan"
msgid "Error removing %s"
msgstr "Virhe poistettaessa %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Virhe tuotaessa %s tiedostoa kohteesta %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1187,8 +1157,8 @@ msgstr "NZB lisätty jonoon"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Virheellinen NZB tiedosto %s, ohitetaan (syy=%s, rivi=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1566,11 +1536,6 @@ msgstr "Lisää"
msgid "Post Processing Failed for %s (%s)"
msgstr "Jälkikäsittely epäonnistui kohteelle %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "katso lokitiedosto"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1778,6 +1743,11 @@ msgstr "Tuntematon toiminto: %s"
msgid "Schedule for non-existing server %s"
msgstr "Ajastettu tuntemattomalle palvelimelle %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Yritettiin asettaa tila ei olemassa olevalle palvelimelle %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3703,6 +3673,14 @@ msgstr ""
"Varmenna sertifikaatit yhdistettäessä indeksoijiin ja RSS-lähteisiin HTTPS "
"protokollan avulla."
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Palvelin"
@@ -3950,6 +3928,17 @@ msgstr "Tiukka"
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 on suurin prioriteetti, 99 on pienin prioriteetti"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4134,6 +4123,12 @@ msgstr "Ladattu"
msgid "Read All Feeds Now"
msgstr "Lue kaikki syötteet nyt"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Sähköposti-ilmoitus onnistuneesta latauksesta"
@@ -4416,7 +4411,13 @@ msgstr "Indeksoijan kategoriat / ryhmä"
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Sarjojen lajittelu"
@@ -4444,7 +4445,8 @@ msgstr "Esiasetukset"
msgid "Example"
msgstr "Esimerkki"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr ""
@@ -4596,7 +4598,8 @@ msgstr "Kansioissa"
msgid "No folders"
msgstr "Ei kansioita"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Päivämäärän lajittelu"
@@ -4717,10 +4720,6 @@ msgstr "Otsikko"
msgid "Selection"
msgstr "Valinta"
#: sabnzbd/skintext.py
msgid "left"
msgstr "jäljellä"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Vapaa tila"
@@ -5127,6 +5126,10 @@ msgstr "NZB tiedostoa ei voida käyttää"
msgid "URL Fetching failed; %s"
msgstr "Osoitteen nouto epäonnistui; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Yritetään noutaa NZB osoitteesta %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Isäntänimeä ei ole asetettu."

View File

@@ -1,16 +1,16 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
# Fred L <88com88@gmail.com>, 2021
# Fred L <88com88@gmail.com>, 2022
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-develop\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Fred L <88com88@gmail.com>, 2021\n"
"Last-Translator: Fred L <88com88@gmail.com>, 2022\n"
"Language-Team: French (https://www.transifex.com/sabnzbd/teams/111101/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -109,6 +109,15 @@ msgstr ""
"Attendez-vous à des problèmes avec les noms de fichiers et de répertoires "
"Unicode dans les téléchargements."
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
"L'umask actuel (%o) pourrait refuser à SABnzbd l'accès aux fichiers et "
"dossiers qu'il crée."
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -149,35 +158,6 @@ msgstr "Signal %s intercepté, enregistrement et fermeture en cours..."
msgid "Fatal error at saving state"
msgstr "Erreur fatale lors de l'enregistrement"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Essai de récupération du NZB depuis %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "L'enregistrement de %s a échoué"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Impossible de créer le fichier temporaire pour %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Test de l'état du serveur inexistant %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Échec dans tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Echec du chargement de %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -348,6 +328,14 @@ msgstr "mots-clés"
msgid "Quota spent, pausing downloading"
msgstr "Quota atteint, téléchargement mis en pause"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Paramètre incorrect"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "Le chemin UNC \"%s\" n'est pas autorisé ici"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s n'est pas une adresse email valide"
@@ -360,6 +348,24 @@ msgstr "Adresse du serveur requise"
msgid "%s is not a valid script"
msgstr "%s n'est pas un script valide"
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s n'est pas une valeur octale correcte"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
"Le réglage des permissions de %s pourrait refuser à SABnzbd l'accès aux "
"fichiers et dossiers qu'il crée."
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr ""
"Erreur : La file d'attente n'est pas vide, impossible de changer le dossier."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -380,23 +386,6 @@ msgstr "Impossible de créer le fichier de sauvegarde pour %s"
msgid "Incorrectly encoded password %s"
msgstr "Encodage mot de passe incorrect %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Paramètre incorrect"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s n'est pas une valeur octale correcte"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "Le chemin UNC \"%s\" n'est pas autorisé ici"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr ""
"Erreur : La file d'attente n'est pas vide, impossible de changer le dossier."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -429,10 +418,6 @@ msgstr "Étape de journalisation invalide dans l'historique pour %s"
msgid "Decoder failure: Out of memory"
msgstr "Échec du décodeur : mémoire insuffisante"
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr "UUencode détecté, seul l'encodage yEnc est pris en charge [%s]"
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -593,8 +578,7 @@ msgid "No recipients given, no email sent"
msgstr "Aucun destinataire déterminé, aucun email envoyé"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Impossible de lire %s"
@@ -654,6 +638,21 @@ msgstr "Échec lors du déplacement de %s vers %s"
msgid "Blocked attempt to create directory %s"
msgstr "Tentative bloquée de création du répertoire %s"
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Échec dans tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "L'enregistrement de %s a échoué"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Echec du chargement de %s"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr "Connexion refusée de:"
@@ -890,11 +889,6 @@ msgstr "Impossible de supprimer %s !"
msgid "Trying unrar with password \"%s\""
msgstr "Tentative d'extraction avec le mot de passe \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Échec de l'extraction, l'archive nécessite un mot de passe"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Extraction"
@@ -903,55 +897,28 @@ msgstr "Extraction"
msgid "Unpacking failed, unable to find %s"
msgstr "Échec de l'extraction, %s n'a pas été trouvé"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "ERREUR : impossible de trouver \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Échec de l'extraction, erreur CRC"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "ERREUR : échec CRC pour \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
"La décompression a échoué, le fichier est trop volumineux pour le système de"
" fichiers (FAT ?)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
"ERREUR : le fichier est trop volumineux pour le système de fichiers (%s)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr ""
"Échec de l'extraction, erreur d'écriture ou espace disque insuffisant ?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "ERREUR : erreur d'écriture (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Extraction échoué, le chemin est trop long"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "ERREUR : chemin trop long (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "ERREUR : %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Échec de l'extraction, l'archive nécessite un mot de passe"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -978,14 +945,10 @@ msgstr "Aucun binaire 7za trouvé, impossible de décompresser \"%s\""
msgid "Trying 7zip with password \"%s\""
msgstr "Tentative 7zip avec le mot de passe \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr ""
"La collection 7ZIP \"%s\" est incomplète, impossible d'extraire les fichiers"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Impossible de décompresser %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "voir le journal"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1067,14 +1030,14 @@ msgstr "Vérification de la réparation"
msgid "Disk full"
msgstr "Disque plein"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Vérification en cours"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr "Vérification des fichiers supplémentaires"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Vérification en cours"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1084,6 +1047,10 @@ msgstr "Vérification"
msgid "Trying SFV verification"
msgstr "Essai vérification SFV"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "restant"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Ce serveur n'authorise pas de connexion SSL sur ce port"
@@ -1203,10 +1170,10 @@ msgstr "Le script de notification \"%s\" est introuvable"
msgid "Failed to send Windows notification"
msgstr "Echec d'envoi de la notification Windows"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Echec de l'importation des fichiers %s depuis %s"
msgid "Cannot create temp file for %s"
msgstr "Impossible de créer le fichier temporaire pour %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1218,6 +1185,11 @@ msgstr "Erreur lors de l'ajout de %s, suppression"
msgid "Error removing %s"
msgstr "Erreur lors de la suppression de %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Echec de l'importation des fichiers %s depuis %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1234,8 +1206,8 @@ msgstr "NZB ajouté à la file d'attente"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Fichier NZB invalide %s, ignoré (raison=%s, ligne=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr "Fichier NZB %s invalide, sera ignoré (erreur : %s)"
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1625,11 +1597,6 @@ msgstr "Plus"
msgid "Post Processing Failed for %s (%s)"
msgstr "Échec du post-traitement pour %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "voir le journal"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr "Le post-traitement a été interrompu"
@@ -1840,6 +1807,11 @@ msgstr "Action inconnue : %s"
msgid "Schedule for non-existing server %s"
msgstr "Planification pour un serveur non existant %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Test de l'état du serveur inexistant %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3821,6 +3793,15 @@ msgstr ""
"Vérifier les certificats lors de la connexion aux indexeurs et sources RSS "
"utilisant HTTPS."
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr "Proxy SOCKS5"
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
"Utiliser le proxy SOCKS5 spécifié pour toutes les connexions sortantes."
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Serveur"
@@ -4080,6 +4061,19 @@ msgstr "Strict"
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 est la priorité la plus élevée, 99 est la priorité la plus faible"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr "Obligatoire"
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
"En cas d'échecs de connexion, la file d'attente des téléchargements sera "
"mise en pause pendant quelques minutes au lieu de passer au serveur suivant."
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4267,6 +4261,14 @@ msgstr "Téléchargé"
msgid "Read All Feeds Now"
msgstr "Lire tous les flux maintenant"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
"Si seule la catégorie <em>Défaut</em> est sélectionnée, les notifications "
"seront activées pour les tâches de toutes les catégories."
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Notification par email lorsque des téléchargements sont terminés"
@@ -4555,7 +4557,13 @@ msgstr "Catégories de l'indexeur / Groupes"
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr "Sélectionnez au moins une catégorie."
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Tri des séries"
@@ -4583,7 +4591,8 @@ msgstr "Modèles prédéfinis"
msgid "Example"
msgstr "Exemple"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr "Tri des films"
@@ -4736,7 +4745,8 @@ msgstr "Dans les dossiers"
msgid "No folders"
msgstr "Pas de dossiers"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Tri par date"
@@ -4856,10 +4866,6 @@ msgstr "Sujet"
msgid "Selection"
msgstr "Sélection"
#: sabnzbd/skintext.py
msgid "left"
msgstr "restant"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Espace libre"
@@ -5271,6 +5277,10 @@ msgstr "Fichier NZB inutilisable"
msgid "URL Fetching failed; %s"
msgstr "Échec de récupération de l'URL ; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Essai de récupération du NZB depuis %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Le nom d'hôte n'est pas défini."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -98,6 +98,13 @@ msgstr ""
"SABnzbd הותחל עם קידוד %s, הוא אמור להיות UTF-8. צפה לבעיות עם שמות Unicoded"
" של קבצים וסיפריות בהורדות."
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -136,35 +143,6 @@ msgstr "אות %s נתפס, שומר ויוצא…"
msgid "Fatal error at saving state"
msgstr "שגיאה חמורה במצב שמירה"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "מנסה למשוך קובץ NZB מן %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "שמירת %s נכשלה"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "לא ניתן ליצור קובץ זמני עבור %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "מנסה לקבוע מעמד של שרת בלתי קיים %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "כישלון ב־tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "טעינת %s נכשלה"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -326,6 +304,14 @@ msgstr "מילות מפתח"
msgid "Quota spent, pausing downloading"
msgstr "מכסה נוצלה, משהה הורדה"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "פרמטר שגוי"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "נתיב UNC \"%s\" אינו מותר כאן"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s אינה כתובת דוא״ל תקפה"
@@ -338,6 +324,21 @@ msgstr "כתובת שרת דרושה"
msgid "%s is not a valid script"
msgstr "%s הוא לא תסריט תקף"
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s אינו ערך אוקטלי נכון"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "שגיאה: התור אינו ריק, לא ניתן לשנות תיקייה."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -358,22 +359,6 @@ msgstr "לא ניתן ליצור קובץ גיבוי עבור %s"
msgid "Incorrectly encoded password %s"
msgstr "סיסמה מקודדת באופן שגוי %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "פרמטר שגוי"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s אינו ערך אוקטלי נכון"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "נתיב UNC \"%s\" אינו מותר כאן"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "שגיאה: התור אינו ריק, לא ניתן לשנות תיקייה."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -404,10 +389,6 @@ msgstr "רישום של אירוע בלתי תקף בהיסטוריה עבור %
msgid "Decoder failure: Out of memory"
msgstr "כישלון מפענח: אין זיכרון"
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr "UUencode התגלה, רק קידוד yEnc נתמך [%s]"
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -563,8 +544,7 @@ msgid "No recipients given, no email sent"
msgstr "נמענים לא ניתנו, דוא״ל לא נשלח"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "לא ניתן לקרוא את %s"
@@ -624,6 +604,21 @@ msgstr "נכשל בהעברת %s אל %s"
msgid "Blocked attempt to create directory %s"
msgstr "ניסיון נחסם ליצור תיקייה %s"
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "כישלון ב־tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "שמירת %s נכשלה"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "טעינת %s נכשלה"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr "חיבור מסורב מאת:"
@@ -852,11 +847,6 @@ msgstr "מחיקת %s נכשלה!"
msgid "Trying unrar with password \"%s\""
msgstr "מנסה לחלץ עם הסיסמה \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "פריקה נכשלה, ארכיון דורש סיסמה"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "פורק"
@@ -865,51 +855,25 @@ msgstr "פורק"
msgid "Unpacking failed, unable to find %s"
msgstr "פריקה נכשלה, לא היה ניתן למצוא את %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "שגיאה: לא היה ניתן למצוא את \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "פריקה נכשלה, שגיאת CRC"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "שגיאה: CRC נכשל ב־\"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr "פריקה נכשלה, קובץ גדול מדי עבור מערכת הקבצים (FAT?)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr "שגיאה: קובץ גדול מדי עבור מערכת הקבצים (%s)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "פריקה נכשלה, שגיאת כתיבה או דיסק מלא?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "שגיאה: שגיאת כתיבה (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "פריקה נכשלה, נתיב ארוך מדי"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "שגיאה: נתיב ארוך מדי (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "שגיאה: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "פריקה נכשלה, ארכיון דורש סיסמה"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -936,13 +900,10 @@ msgstr "בינארי 7za לא נמצא, לא ניתן לפרוק את \"%s\""
msgid "Trying 7zip with password \"%s\""
msgstr "מנסה 7zip עם הסיסמה \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "ערכות 7ZIP בשם \"%s\" אינה שלמה, לא ניתן לפרוק"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "לא היה ניתן לפרוק את %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "ראה קובץ יומן"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1021,14 +982,14 @@ msgstr "מוודא תיקון"
msgid "Disk full"
msgstr "דיסק מלא"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "מוודא"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr "בודק קבצי תוספת"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "מוודא"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1038,6 +999,10 @@ msgstr "בודק"
msgid "Trying SFV verification"
msgstr "מנסה וידוא SFV"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "נותר"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "שרת זה אינו מתיר SSL על פתחה זו"
@@ -1156,10 +1121,10 @@ msgstr "תסריט ההתראה \"%s\" אינו קיים"
msgid "Failed to send Windows notification"
msgstr "נכשל בשליחת התראת Windows"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "נכשל ביבוא %s קבצים מן %s"
msgid "Cannot create temp file for %s"
msgstr "לא ניתן ליצור קובץ זמני עבור %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1171,6 +1136,11 @@ msgstr "שגיאה בזמן הוספת %s, מסיר"
msgid "Error removing %s"
msgstr "שגיאה בהסרת %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "נכשל ביבוא %s קבצים מן %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1187,8 +1157,8 @@ msgstr "NZB התווסף לתור"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "קובץ NZB בלתי תקף %s, מדלג (סיבה=%s, שורה=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr "קובץ NZB בלתי תקף %s, מדלג (שגיאה: %s)"
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1570,11 +1540,6 @@ msgstr "עוד"
msgid "Post Processing Failed for %s (%s)"
msgstr "בתר־עיבוד נכשל עבור %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "ראה קובץ יומן"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr "בתר־עיבוד בוטל"
@@ -1782,6 +1747,11 @@ msgstr "פעולה בלתי ידועה: %s"
msgid "Schedule for non-existing server %s"
msgstr "תזמן עבור שרת בלתי קיים %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "מנסה לקבוע מעמד של שרת בלתי קיים %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3699,6 +3669,14 @@ msgid ""
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr "וודא תעודות בעת התחברות אל מדדנים ומקורות RSS ע״י שימוש ב־HTTPS."
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr "ייפוי כוח SOCKS5"
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr "השתמש בייפוי הכוח SOCKS5 המצוין עבור כל החיבורים היוצאים."
#: sabnzbd/skintext.py
msgid "Server"
msgstr "שרת"
@@ -3950,6 +3928,19 @@ msgstr "קפדני"
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 הוא העדיפות הגבוהה ביותר, 100 הוא העדיפות הנמוכה ביותר"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr "דרוש"
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
"במקרה של כישלונות חיבור, תור ההורדות יושהה למשך כמה דקות במקום דילוג על השרת"
" הזה"
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4133,6 +4124,14 @@ msgstr "הוּרד"
msgid "Read All Feeds Now"
msgstr "קרא את כל ההזנות כעת"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
"אם רק קטגורית <em>ברירת המחדל</em> נבחרת, התראות מאופשרות עבור עבודות בכל "
"הקטגוריות."
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "התראת דוא״ל בעת השלמת עבודה"
@@ -4413,7 +4412,13 @@ msgstr "קטגוריות / קבוצות של מדדן"
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr "בחר קטגוריה 1 לפחות."
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "מיון סדרות"
@@ -4441,7 +4446,8 @@ msgstr "קדם־קביעות"
msgid "Example"
msgstr "דוגמה"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr "מיון סרטים"
@@ -4593,7 +4599,8 @@ msgstr "בתיקיות"
msgid "No folders"
msgstr "אין תיקיות"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "מיון תאריכים"
@@ -4712,10 +4719,6 @@ msgstr "נושא"
msgid "Selection"
msgstr "בחירה"
#: sabnzbd/skintext.py
msgid "left"
msgstr "נותר"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "שטח פנוי"
@@ -5121,6 +5124,10 @@ msgstr "קובץ NZB בלתי שמיש"
msgid "URL Fetching failed; %s"
msgstr "משיכת כתובת נכשלה; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "מנסה למשוך קובץ NZB מן %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "שם המארח לא נקבע."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -100,6 +100,13 @@ msgstr ""
"SABnzbd ble startet med koding %s, dette burde være UTF-8. Forvent problemer"
" med Unicode filer- og katalognavn i nedlastinger."
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -138,35 +145,6 @@ msgstr "Signal %s mottatt, lagrer og avslutter..."
msgid "Fatal error at saving state"
msgstr "Kritisk feil ved lagring av tilstand"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Forsøker å hente NZB fra %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Lagring av %s mislyktes"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Kan ikke lage midlertidig fil for %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Forsøker å sette status på ikke-eksisterende server %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Feil i tempfil.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Lasting av %s mislyktes"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -327,6 +305,14 @@ msgstr "nøkkelord"
msgid "Quota spent, pausing downloading"
msgstr "Kvote oppbrukt, setter nedlasting på pause"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Feil parameter"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-sti \"%s\" er ikke tillatt her"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s er ikke en godkjent e-post-adresse"
@@ -339,6 +325,21 @@ msgstr "Krever server-adresse"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s er ikke en korrekt oktal verdi"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Feil: Køen er ikke tom, kan ikke bytte mappe."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -359,22 +360,6 @@ msgstr "Kan ikke sikkerhetskopiere fil %s"
msgid "Incorrectly encoded password %s"
msgstr "Feil kodet passord %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Feil parameter"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s er ikke en korrekt oktal verdi"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-sti \"%s\" er ikke tillatt her"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Feil: Køen er ikke tom, kan ikke bytte mappe."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -405,10 +390,6 @@ msgstr "Ugyldig scenen logging i historien for %s"
msgid "Decoder failure: Out of memory"
msgstr ""
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -562,8 +543,7 @@ msgid "No recipients given, no email sent"
msgstr "Ingen mottaker oppgitt, e-post ikke sendt"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Kan ikke lese %s"
@@ -623,6 +603,21 @@ msgstr "Kunne ikke flytte %s til %s"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Feil i tempfil.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Lagring av %s mislyktes"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Lasting av %s mislyktes"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -849,11 +844,6 @@ msgstr "Fjerning av %s mislyktes!"
msgid "Trying unrar with password \"%s\""
msgstr "Prøver unrar med passord \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Utpakking mislyktes, arkivet krever passord"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Utpakker"
@@ -862,51 +852,25 @@ msgstr "Utpakker"
msgid "Unpacking failed, unable to find %s"
msgstr "Utpakking mislyktes, kunne ikke finne %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "FEIL: kunne ikke finne \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Utpakking mislyktes, CRC-feil"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "FEIL: CRC mislyktes i \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr "Utpakking feilet, filen er for stor for filsystemet (FAT?)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr "FEIL: Filen er for stor for filsystemet (%s)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "Utpakking mislyktes, skrivefeil eller er disken full?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "FEIL: skrive feil (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Utpakking feilet, stien er for lang"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "FEIL: sti er for lang (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "FEIL: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Utpakking mislyktes, arkivet krever passord"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -933,13 +897,10 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr "Prøver 7zip med password \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "7ZIP set \"%s\" er ikke komplett, kan ikke pakke ut"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Kunne ikke pakke ut %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "se loggfil"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1020,14 +981,14 @@ msgstr ""
msgid "Disk full"
msgstr "Harddisken er full"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verifiserer"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verifiserer"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1037,6 +998,10 @@ msgstr "Undersøker"
msgid "Trying SFV verification"
msgstr "Prøver SFV-verifisering"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "gjenstår"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Denne serveren tillater ikke SSL på denne porten"
@@ -1153,10 +1118,10 @@ msgstr ""
msgid "Failed to send Windows notification"
msgstr "Klarte ikke å sende Windows melding"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Kunne ikke importere %s filer fra %s"
msgid "Cannot create temp file for %s"
msgstr "Kan ikke lage midlertidig fil for %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1168,6 +1133,11 @@ msgstr "Kunne ikke legge til %s, tar bort"
msgid "Error removing %s"
msgstr "Feil ved fjerning av %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Kunne ikke importere %s filer fra %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1184,8 +1154,8 @@ msgstr "NZB er lagt til i køen"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Feilaktig NZB fil %s, hopper over (årsak=%s, linje=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1563,11 +1533,6 @@ msgstr "Mer"
msgid "Post Processing Failed for %s (%s)"
msgstr "Etterbehandling mislyktes for %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "se loggfil"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1775,6 +1740,11 @@ msgstr "Ukjent handling: %s"
msgid "Schedule for non-existing server %s"
msgstr "Skjema for ikke eksisterende server %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Forsøker å sette status på ikke-eksisterende server %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3679,6 +3649,14 @@ msgid ""
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr ""
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Server"
@@ -3927,6 +3905,17 @@ msgstr ""
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 er høyeste prioritet, 99 er laveste prioritet"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4111,6 +4100,12 @@ msgstr "Nedlastet"
msgid "Read All Feeds Now"
msgstr "Les alle kilder nå"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "E-Post varsling når nedlasting er ferdig"
@@ -4389,7 +4384,13 @@ msgstr ""
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Seriesortering"
@@ -4417,7 +4418,8 @@ msgstr "For innstillinger"
msgid "Example"
msgstr "Eksempel"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr ""
@@ -4569,7 +4571,8 @@ msgstr "I mappe"
msgid "No folders"
msgstr "Ingen mappe"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Dato sortering"
@@ -4689,10 +4692,6 @@ msgstr "Emvne"
msgid "Selection"
msgstr "Utvalg"
#: sabnzbd/skintext.py
msgid "left"
msgstr "gjenstår"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Ledig plass"
@@ -5098,6 +5097,10 @@ msgstr "Feil, Ubrukelig akrivfil"
msgid "URL Fetching failed; %s"
msgstr "URL henting mislyktes; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Forsøker å hente NZB fra %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Du har ikke stilt inn vertsnavn."

View File

@@ -1,15 +1,16 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2021
# Rik Brouwer, 2022
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-develop\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2021\n"
"Last-Translator: Rik Brouwer, 2022\n"
"Language-Team: Dutch (https://www.transifex.com/sabnzbd/teams/111101/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -104,6 +105,15 @@ msgstr ""
"bij het downloaden, problemen krijgen met Unicode namen van bestanden en "
"mappen."
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
"Huidige umask (%o) zou kunnen beletten dat SABnzbd toegang heeft tot de "
"aangemaakte bestanden en mappen."
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -142,35 +152,6 @@ msgstr "Signaal %s ontvangen, opslaan en afsluiten..."
msgid "Fatal error at saving state"
msgstr "Onherstelbare fout bij opslaan status"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Probeer NZB op te halen van %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Opslaan van %s lukt niet"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Kan geen tijdelijk bestand maken voor %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Poging de status van niet-bestaande server %s in te stellen"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Probleem met tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Inlezen van %s mislukt"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -339,6 +320,14 @@ msgstr "trefwoorden"
msgid "Quota spent, pausing downloading"
msgstr "Quotum verbruikt, download is gestopt"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Incorrecte parameter"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-pad '%s' hier niet toegestaan."
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s is geen geldig e-mailadres"
@@ -351,6 +340,23 @@ msgstr "Serveradres verplicht"
msgid "%s is not a valid script"
msgstr "%s is geen geldig script."
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s is geen correct octaal getal"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
"Ingestelde rechten van %s zouden kunnen beletten dat SABnzbd toegang heeft "
"tot de aangemaakte bestanden en mappen."
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Fout: Wachtrij is niet leeg, andere map kiezen niet mogelijk."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -371,22 +377,6 @@ msgstr "Backupbestand maken voor %s niet mogelijk"
msgid "Incorrectly encoded password %s"
msgstr "Foutief gecodeerd wachtwoord %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Incorrecte parameter"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s is geen correct octaal getal"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-pad '%s' hier niet toegestaan."
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Fout: Wachtrij is niet leeg, andere map kiezen niet mogelijk."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -420,10 +410,6 @@ msgstr "Ongeldig loggen van fase in geschiedenis voor %s"
msgid "Decoder failure: Out of memory"
msgstr "Decoder fout: onvoldoende geheugen"
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr "UUencode gevonden, alleen yEnc codering wordt ondersteund [%s]"
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -582,8 +568,7 @@ msgid "No recipients given, no email sent"
msgstr "Geen geadresseerden opgegeven, e-mail niet verstuurd"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "%s kan niet gelezen worden"
@@ -643,6 +628,21 @@ msgstr "Verplaatsen van %s naar %s mislukt"
msgid "Blocked attempt to create directory %s"
msgstr "Poging om map %s aan te maken geblokkeerd"
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Probleem met tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Opslaan van %s lukt niet"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Inlezen van %s mislukt"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr "Verbinding geweigerd van: "
@@ -876,11 +876,6 @@ msgstr "Verwijderen van %s mislukt."
msgid "Trying unrar with password \"%s\""
msgstr "Unrar proberen met wachtwoord \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Uitpakken mislukt, archief vereist wachtwoord"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Uitpakken"
@@ -889,51 +884,25 @@ msgstr "Uitpakken"
msgid "Unpacking failed, unable to find %s"
msgstr "Uitpakken mislukt, kan %s niet vinden"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "FOUT: \"%s\" niet te vinden"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Uitpakken mislukt, CRC-fout"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "FOUT: onjuiste CRC in \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr "Uitplakken mislukt, bestand te groot voor het bestandssysteem (FAT?)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr "FOUT: bestand te groot voor het bestandssysteem (%s)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "Uitpakken mislukt, schrijffout of schijf vol?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "FOUT: schrijffout (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Uitpakken mislukt, bestandspad is te lang"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "FOUT: bestandspad is te lang (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "FOUT: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Uitpakken mislukt, archief vereist wachtwoord"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -960,13 +929,10 @@ msgstr "Geen 7za-programma gevonden, kan \"%s\" niet uitpakken"
msgid "Trying 7zip with password \"%s\""
msgstr "Uitpakpoging met 7zip en wachtwoord '%s'"
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "De 7Zip-set '%s' is incompleet, uitpakken is niet mogelijk"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Uitpakken %s niet mogelijk"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "zie logbestand"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1049,14 +1015,14 @@ msgstr "Reparatie controleren"
msgid "Disk full"
msgstr "Schijf is vol"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verifiëren"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr "Controleren van extra bestanden"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verifiëren"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1066,6 +1032,10 @@ msgstr "Controleren"
msgid "Trying SFV verification"
msgstr "Probeer SFV-verificatie"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "over"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "De server staat geen SSL toe op deze poort"
@@ -1185,10 +1155,10 @@ msgstr "Meldingsscript '%s' bestaat niet"
msgid "Failed to send Windows notification"
msgstr "Versturen Windows-melding mislukt"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Importeren van %s bestanden van %s mislukt"
msgid "Cannot create temp file for %s"
msgstr "Kan geen tijdelijk bestand maken voor %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1200,6 +1170,11 @@ msgstr "Fout bij toevoegen van %s, wordt weer verwijderd"
msgid "Error removing %s"
msgstr "Fout bij verwijderen van %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Importeren van %s bestanden van %s mislukt"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1216,8 +1191,8 @@ msgstr "Download aan wachtrij toegevoegd"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Foutief NZB-bestand %s, overslaan (reden=%s, regel=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr "Corrupte NZB %s wordt overgeslagen (foutmelding: %s)"
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1600,11 +1575,6 @@ msgstr "Meer"
msgid "Post Processing Failed for %s (%s)"
msgstr "Nabewerking van %s mislukt (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "zie logbestand"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr "Nabewerking is afgebroken"
@@ -1814,6 +1784,11 @@ msgstr "Onbekende actie: %s"
msgid "Schedule for non-existing server %s"
msgstr "Taak voor niet bestaande server %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Poging de status van niet-bestaande server %s in te stellen"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3771,6 +3746,14 @@ msgstr ""
"Controleer certificaten bij beveiligde verbindingen met indexers en RSS-"
"feeds."
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr "SOCKS5 Proxy"
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr "Gebruik een SOCKS5 proxy server voor alle uitgaande verbindingen."
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Server"
@@ -4033,6 +4016,19 @@ msgstr "Strikt"
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 is de hoogste en 99 de laagste prioriteit"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr "Vereist"
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
"Het downloaden zal een aantal minuten gepauzeerd worden wanneer deze server "
"niet beschikbaar is."
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4219,6 +4215,14 @@ msgstr "Gedownload"
msgid "Read All Feeds Now"
msgstr "Alle feeds nu uitlezen"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
"Notificaties zullen worden verstuurd voor alle downloads als de "
"<em>Standaard</em> categorie geselecteerd is."
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Stuur een e-mail na het voltooien van elke download"
@@ -4505,7 +4509,13 @@ msgstr "Indexer Categorieën / Groepen"
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr "Selecteer minstens 1 categorie."
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Serie sorteren"
@@ -4533,7 +4543,8 @@ msgstr "Standaardinstellingen"
msgid "Example"
msgstr "Voorbeeld"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr "Film sorteren"
@@ -4685,7 +4696,8 @@ msgstr "In mappen"
msgid "No folders"
msgstr "Geen mappen"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Datum sorteren"
@@ -4724,7 +4736,7 @@ msgstr "eigenschap"
#: sabnzbd/skintext.py
msgid "GuessIt Property"
msgstr "GuessIt eigenschap"
msgstr "GuessIt Eigenschap"
#: sabnzbd/skintext.py
msgid "GuessIt.Property"
@@ -4805,10 +4817,6 @@ msgstr "Onderwerp"
msgid "Selection"
msgstr "Selectie"
#: sabnzbd/skintext.py
msgid "left"
msgstr "over"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Vrije ruimte"
@@ -5214,6 +5222,10 @@ msgstr "Onbruikbaar NZB-bestand"
msgid "URL Fetching failed; %s"
msgstr "URL ophalen mislukt; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Probeer NZB op te halen van %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Geen hostnaam opgegeven."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -95,6 +95,13 @@ msgid ""
"with Unicoded file and directory names in downloads."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -133,35 +140,6 @@ msgstr "Odebrano sygnał %s, zapisywanie i zamykanie programu..."
msgid "Fatal error at saving state"
msgstr "Błąd krytyczny podczas zapisywania stanu"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Próba pobrania NZB z %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Nie udało się zapisać %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Nie można utworzyć tymczasowego pliku dla %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Próba ustawienia statusu nieistniejącego serwera %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Błąd w tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Nie udało się wczytać %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -322,6 +300,14 @@ msgstr "słowa kluczowe"
msgid "Quota spent, pausing downloading"
msgstr "Przekroczono limit, wstrzymywanie pobierania"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Błędny parametr"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "Ścieżka UNC \"%s\" niedozwolona"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s nie jest prawidłowym adresem email"
@@ -334,6 +320,21 @@ msgstr "Wymagane jest podanie adresu serwera"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s nie jest prawidłową wartością w systemie ósemkowym"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Błąd: Kolejka nie jest pusta, nie można zmienić katalogu."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -354,22 +355,6 @@ msgstr "Nie można utworzyć kopii zapasowej %s"
msgid "Incorrectly encoded password %s"
msgstr "Nieprawidłowo zakodowane hasło %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Błędny parametr"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s nie jest prawidłową wartością w systemie ósemkowym"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "Ścieżka UNC \"%s\" niedozwolona"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Błąd: Kolejka nie jest pusta, nie można zmienić katalogu."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -400,10 +385,6 @@ msgstr "Nieprawidłowy log etapu w historii dla %s"
msgid "Decoder failure: Out of memory"
msgstr ""
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -561,8 +542,7 @@ msgid "No recipients given, no email sent"
msgstr "Nie podano adresatów, wiadomość nie została wysłana"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Nie można odczytać %s"
@@ -622,6 +602,21 @@ msgstr "Nie udało się przenieść %s do %s"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Błąd w tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Nie udało się zapisać %s"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Nie udało się wczytać %s"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -848,11 +843,6 @@ msgstr "Usuwanie %s nie powiodło się!"
msgid "Trying unrar with password \"%s\""
msgstr "Próba rozpakowania archiwum RAR z użyciem hasła \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Rozpakowywanie nie powiodło się, archiwum wymaga podania hasła"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Rozpakowywanie"
@@ -861,51 +851,25 @@ msgstr "Rozpakowywanie"
msgid "Unpacking failed, unable to find %s"
msgstr "Rozpakowywanie nie powiodło się, nie można znaleźć %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "BŁĄD: nie można znaleźć \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Rozpakowywanie nie powiodło się, błąd CRC"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "BŁĄD: nieprawidłowa suma kontrolna CRC w \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "Rozpakowywanie nie powiodło się, błąd zapisu lub zapełniony dysk?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "BŁĄD: błąd zapisu (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Rozpakowywanie nie powiodło się, zbyt długa ścieżka"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "BŁĄD: zbyt długa ścieżka (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "BŁĄD: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Rozpakowywanie nie powiodło się, archiwum wymaga podania hasła"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -932,13 +896,10 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr "Próba rozpakowania archiwum 7zip z użyciem hasła \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "Zestaw 7zip \"%s\" jest niekompletny, nie można rozpakować"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Nie można rozpakować %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "sprawdź logi"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1021,14 +982,14 @@ msgstr ""
msgid "Disk full"
msgstr "Dysk pełny"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Weryfikowanie"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Weryfikowanie"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1038,6 +999,10 @@ msgstr "Sprawdzanie"
msgid "Trying SFV verification"
msgstr "Próba weryfikacji SFV"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "pozostało"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Serwer nie obsługuje SSL na tym porcie"
@@ -1154,10 +1119,10 @@ msgstr ""
msgid "Failed to send Windows notification"
msgstr ""
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Nie udało się zaimportować %s plików z %s"
msgid "Cannot create temp file for %s"
msgstr "Nie można utworzyć tymczasowego pliku dla %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1169,6 +1134,11 @@ msgstr "Błąd podczas dodawania %s, usuwanie"
msgid "Error removing %s"
msgstr "Błąd podczas usuwania %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Nie udało się zaimportować %s plików z %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1185,8 +1155,8 @@ msgstr "NZB dodany do kolejki"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Nieprawidłowy plik NZB %s, pomijam (powód=%s, linia=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1568,11 +1538,6 @@ msgstr "Więcej"
msgid "Post Processing Failed for %s (%s)"
msgstr "Przetwarzanie końcowe nie powiodło się dla %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "sprawdź logi"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1780,6 +1745,11 @@ msgstr "Nieznane działanie: %s"
msgid "Schedule for non-existing server %s"
msgstr "Harmonogram dla nieistniejącego serwera %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Próba ustawienia statusu nieistniejącego serwera %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3686,6 +3656,14 @@ msgid ""
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr ""
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Serwer"
@@ -3935,6 +3913,17 @@ msgstr ""
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 oznacza najwyższy priorytet, 99 - najniższy"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4119,6 +4108,12 @@ msgstr "Pobrane"
msgid "Read All Feeds Now"
msgstr "Czytaj teraz wszystkie kanały"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Powiadomienia email po zakończeniu zadania"
@@ -4397,7 +4392,13 @@ msgstr ""
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Sortowanie seriali"
@@ -4425,7 +4426,8 @@ msgstr "Predefiniowane"
msgid "Example"
msgstr "Przykład"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr ""
@@ -4577,7 +4579,8 @@ msgstr "W katalogach"
msgid "No folders"
msgstr "Brak katalogów"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Sortowanie według daty"
@@ -4697,10 +4700,6 @@ msgstr "Temat"
msgid "Selection"
msgstr "Zaznaczenie"
#: sabnzbd/skintext.py
msgid "left"
msgstr "pozostało"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Wolne miejsce"
@@ -5103,6 +5102,10 @@ msgstr "Bezużyteczny plik NZB"
msgid "URL Fetching failed; %s"
msgstr "Pobieranie URL nie powiodło się; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Próba pobrania NZB z %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Nie ustawiono nazwy hosta."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -99,6 +99,13 @@ msgid ""
"with Unicoded file and directory names in downloads."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -137,35 +144,6 @@ msgstr "Sinal %s encontrado. Salvando e saindo..."
msgid "Fatal error at saving state"
msgstr "Erro fatal ao salvar estado"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Tentando obter NZB de %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Falha ao salvar %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Não é possível criar um arquivo temporário para %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Tentando definir o status do servidor inexistente %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Falha em tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Falha ao carregar %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -326,6 +304,14 @@ msgstr "palavras chave"
msgid "Quota spent, pausing downloading"
msgstr "Quota esgotada, pausando o download"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Parâmetro incorreto"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "O caminho UNC \"%s\" não é permitido aqui"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s não é um endereço de e-mail válido"
@@ -338,6 +324,21 @@ msgstr "Endereço do servidor necessário"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s não é um valor octal correto"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Erro: A fila não está vazia. Não será possível mudar de pasta."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -358,22 +359,6 @@ msgstr "Não é possível criar um arquivo de backup para %s"
msgid "Incorrectly encoded password %s"
msgstr "Senha %s codificada incorretamente"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Parâmetro incorreto"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s não é um valor octal correto"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "O caminho UNC \"%s\" não é permitido aqui"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Erro: A fila não está vazia. Não será possível mudar de pasta."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -406,10 +391,6 @@ msgstr "Registro inválido de etapa no histórico para %s"
msgid "Decoder failure: Out of memory"
msgstr ""
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -565,8 +546,7 @@ msgid "No recipients given, no email sent"
msgstr "Nenhum destinário fornecido, e-mail não enviado"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Não é possível ler %s"
@@ -626,6 +606,21 @@ msgstr "Falha ao mover %s para %s"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Falha em tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Falha ao salvar %s"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Falha ao carregar %s"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -852,11 +847,6 @@ msgstr "A exclusão de %s falhou!"
msgid "Trying unrar with password \"%s\""
msgstr "Tentando descompactar com a senha \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "A descompactação falhou. O arquivo exige uma senha"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Descompactando"
@@ -865,51 +855,25 @@ msgstr "Descompactando"
msgid "Unpacking failed, unable to find %s"
msgstr "A descompactação falhou. Não foi possível encontrar %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "ERRO: Não foi possível encontrar \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "A descompactação falhou. Erro de CRC"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "ERRO: CRC falhou em \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "A descompactação falhou. Erro de escrita ou disco cheio?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "ERRO: erro de escrita (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Descompactação falhou, o caminho é muito extenso"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "ERRO: caminho muito extenso (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "ERRO: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "A descompactação falhou. O arquivo exige uma senha"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -936,13 +900,10 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr "Testando 7zip com a senha \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "O arquivo 7ZIP \"%s\" está incompleto, impossível descompactar"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Não foi possível descompactar %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "veja o arquivo de log"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1022,14 +983,14 @@ msgstr ""
msgid "Disk full"
msgstr "Disco cheio"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verificando"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verificando"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1039,6 +1000,10 @@ msgstr "Verificando"
msgid "Trying SFV verification"
msgstr "Tentando verificação SFV"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "restantes"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Este servidor não permite SSL nesta porta"
@@ -1155,10 +1120,10 @@ msgstr ""
msgid "Failed to send Windows notification"
msgstr ""
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Falha ao importar %s arquivos de %s"
msgid "Cannot create temp file for %s"
msgstr "Não é possível criar um arquivo temporário para %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1170,6 +1135,11 @@ msgstr "Erro ao adicionar %s. Removendo"
msgid "Error removing %s"
msgstr "Erro ao remover %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Falha ao importar %s arquivos de %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1186,8 +1156,8 @@ msgstr "NZB adicionado à fila"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Arquivo NZB %s inválido. Pulando (razão=%s, linha=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1570,11 +1540,6 @@ msgstr "Mais"
msgid "Post Processing Failed for %s (%s)"
msgstr "O pós-processamento falhou para %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "veja o arquivo de log"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1783,6 +1748,11 @@ msgstr "Ação desconhecida: %s"
msgid "Schedule for non-existing server %s"
msgstr "Agendamento para um servidor inexistente %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Tentando definir o status do servidor inexistente %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3691,6 +3661,14 @@ msgid ""
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr ""
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Servidor"
@@ -3939,6 +3917,17 @@ msgstr ""
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 é a prioridade mais alta, 99 é a prioridade mais baixa"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4123,6 +4112,12 @@ msgstr "Baixados"
msgid "Read All Feeds Now"
msgstr "Ler Todos os Feeds Agora"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Notificar por e-mail na conclusão da tarefa"
@@ -4401,7 +4396,13 @@ msgstr ""
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Ordenação de Séries"
@@ -4429,7 +4430,8 @@ msgstr "Predefinições"
msgid "Example"
msgstr "Exemplo"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr ""
@@ -4581,7 +4583,8 @@ msgstr "Em pastas"
msgid "No folders"
msgstr "Sem pastas"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Ordenação por data"
@@ -4701,10 +4704,6 @@ msgstr "Assunto"
msgid "Selection"
msgstr "Seleção"
#: sabnzbd/skintext.py
msgid "left"
msgstr "restantes"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Espaço Disponível"
@@ -5108,6 +5107,10 @@ msgstr "Arquivo NZB inutilizável"
msgid "URL Fetching failed; %s"
msgstr "A busca da URL falhou; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Tentando obter NZB de %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "O nome do host não foi definido."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -105,6 +105,13 @@ msgstr ""
"SABnzbd a fost pornit cu encodarea %s, aceasta trebuie să fie UTF-8. Pot "
"apărea probleme cu denumiri de fișiere și directoare Unicode în descărcări."
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -143,35 +150,6 @@ msgstr "Semnal %s prins, salvez şi ies..."
msgid "Fatal error at saving state"
msgstr "Eroare fatală la salvare"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Încerc să descarc NZB de la %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Salvarea %s nereuşită"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Nu pot crea fişier temporar pentru %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Încerc să setez starea unui server nexistent %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Eroare în tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Încărcarea %s nereuşită"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -338,6 +316,14 @@ msgstr "cuvinte cheie"
msgid "Quota spent, pausing downloading"
msgstr "Cotă epuizată, întrerupem descărcarea"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Parametru Incorect"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "cale UNC \"%s\" nu este premisă aici"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s nu este o adresă email validă"
@@ -350,6 +336,21 @@ msgstr "Adresă server necesară"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s nu este o valoare octală corectă"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Eroare: Coada nu este goală, nu pot schimba dosar."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -370,22 +371,6 @@ msgstr "Nu pot crea copie de rezervă pentru %s"
msgid "Incorrectly encoded password %s"
msgstr "Parolă %s codificată greşit"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Parametru Incorect"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s nu este o valoare octală corectă"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "cale UNC \"%s\" nu este premisă aici"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Eroare: Coada nu este goală, nu pot schimba dosar."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -417,10 +402,6 @@ msgstr "Jurnal istoric stagii invalid pentru %s"
msgid "Decoder failure: Out of memory"
msgstr "Eroare decodare: lipsă memorie"
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr "UUencode detectat, este suportată doar codarea yEnc [%s]"
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -579,8 +560,7 @@ msgid "No recipients given, no email sent"
msgstr "Destinatar necunoscut, niciun email trimis"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Nu pot citi %s"
@@ -640,6 +620,21 @@ msgstr "Mutare %s în %s nereuşită"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Eroare în tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Salvarea %s nereuşită"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Încărcarea %s nereuşită"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -872,11 +867,6 @@ msgstr "Ştergere %s nereuşită!"
msgid "Trying unrar with password \"%s\""
msgstr "Încerc unrar cu parola \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Dezarhivare nereuşită, arhiva necesită o parolă"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Dezarhivare"
@@ -885,52 +875,26 @@ msgstr "Dezarhivare"
msgid "Unpacking failed, unable to find %s"
msgstr "Dezarhivare nereuşită, nu pot găsi %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "EROARE: nu pot găsi \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Dezarhivare nereuşită, eroare CRC"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "EROARE: CRC nereuşit în \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
"Dezarhivare eșuată, fișier prea mare pentru sistemul de fișiere (FAT?)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr "EROARE: fișier prea mare pentru sistemul de fișiere (%s)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "Dezarhivare nereuşită, eroare scriere sau disc plin?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "EROARE: eroare scriere (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Dezarhivare eșuată, calea este prea lungă"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "EROARE: calea este prea lungă (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "EROARE: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Dezarhivare nereuşită, arhiva necesită o parolă"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -957,13 +921,10 @@ msgstr "Nu s-a găsit binar 7za, nu pot dezarhiva „%s”"
msgid "Trying 7zip with password \"%s\""
msgstr "Încerc 7zip cu parola \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "Setul 7ZIP \"%s\" este incomplet, nu pot dezarhiva"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Nu pot dezarahiva %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "vezi fişier jurnal"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1046,14 +1007,14 @@ msgstr "Se verifică repararea"
msgid "Disk full"
msgstr "Disc plin"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Se verifică"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr "Se verifică fișierele extra"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Se verifică"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1063,6 +1024,10 @@ msgstr "Se verifică"
msgid "Trying SFV verification"
msgstr "Încerc verificare SFV"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "rămas"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Acest server nu permite SSL pe acest port"
@@ -1181,10 +1146,10 @@ msgstr "Scriptul de notificare \"%s\" nu există"
msgid "Failed to send Windows notification"
msgstr "Nu am putut trimite notificări în Fereastră"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Importare %s a fişierelor de la %s nereuşită"
msgid "Cannot create temp file for %s"
msgstr "Nu pot crea fişier temporar pentru %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1196,6 +1161,11 @@ msgstr "Eroare adăugare %s, ştergem"
msgid "Error removing %s"
msgstr "Eroare ştergere %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Importare %s a fişierelor de la %s nereuşită"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1212,8 +1182,8 @@ msgstr "NZB adăugat în coadă"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Fişier NZB invalid %s, ignorăm (motiv=%s, line=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1599,11 +1569,6 @@ msgstr "Mai mult"
msgid "Post Processing Failed for %s (%s)"
msgstr "Post Procesare Nereuşită pentru %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "vezi fişier jurnal"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr "Post-procesarea a fost întreruptă"
@@ -1811,6 +1776,11 @@ msgstr "Acţiune necunoscută: %s"
msgid "Schedule for non-existing server %s"
msgstr "Planificare pentru un server inexistent %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Încerc să setez starea unui server nexistent %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3717,6 +3687,14 @@ msgid ""
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr ""
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Server"
@@ -3967,6 +3945,17 @@ msgid "0 is highest priority, 100 is the lowest priority"
msgstr ""
"0 este prioritatea cea mai ridicată, 99 este prioritatea cea mai scăzută"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4151,6 +4140,12 @@ msgstr "Descărcate"
msgid "Read All Feeds Now"
msgstr "Citeşte Toate Fluxurile Acum"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Notificări Email Sarcină Terminată"
@@ -4428,7 +4423,13 @@ msgstr ""
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Sortare Seriale"
@@ -4456,7 +4457,8 @@ msgstr "Presetări"
msgid "Example"
msgstr "Exemplu"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr ""
@@ -4608,7 +4610,8 @@ msgstr "În dosare"
msgid "No folders"
msgstr "Fără dosare"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Sortare Dată"
@@ -4728,10 +4731,6 @@ msgstr "Subiect"
msgid "Selection"
msgstr "Selecţie"
#: sabnzbd/skintext.py
msgid "left"
msgstr "rămas"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Spațiu liber"
@@ -5136,6 +5135,10 @@ msgstr "Fişier NZB Inutilizabil"
msgid "URL Fetching failed; %s"
msgstr "Descărcare URL nereuşită; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Încerc să descarc NZB de la %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Numele gazdei nu este setat."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -99,6 +99,13 @@ msgid ""
"with Unicoded file and directory names in downloads."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -137,35 +144,6 @@ msgstr "Получен сигнал %s. Выполняется сохранен
msgid "Fatal error at saving state"
msgstr ""
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Попытка загрузить NZB с %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Ошибка сохранения %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Не удаётся создать временный файл для %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Попытка установить статус для несуществующего сервера %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Ошибка в tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Ошибка загрузки %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -326,6 +304,14 @@ msgstr ""
msgid "Quota spent, pausing downloading"
msgstr "Квота исчерпана. Загрузка приостановлена"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Неправильный параметр"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-путь «%s» здесь не допускается"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s не является допустимым адресом электронной почты"
@@ -338,6 +324,21 @@ msgstr "Требуется адрес сервера"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s не является правильным восьмеричным значением"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Ошибка: очередь не пустая, папку нельзя изменить."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -358,22 +359,6 @@ msgstr "Не удаётся создать файл резервной копи
msgid "Incorrectly encoded password %s"
msgstr "Неправильно закодированный пароль %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Неправильный параметр"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s не является правильным восьмеричным значением"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-путь «%s» здесь не допускается"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Ошибка: очередь не пустая, папку нельзя изменить."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -404,10 +389,6 @@ msgstr "Недопустимый этап ведения журнала для %
msgid "Decoder failure: Out of memory"
msgstr ""
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -561,8 +542,7 @@ msgid "No recipients given, no email sent"
msgstr "Получатели не указаны. Электронное письмо не отправлено"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Не удаётся прочитать %s"
@@ -622,6 +602,21 @@ msgstr "Не удалось переместить %s в %s"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Ошибка в tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Ошибка сохранения %s"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Ошибка загрузки %s"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -850,11 +845,6 @@ msgstr "Не удалось удалить %s!"
msgid "Trying unrar with password \"%s\""
msgstr "Попытка распаковки RAR-архива с паролем «%s»"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Ошибка распаковки: архив защищён паролем"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Распаковка"
@@ -863,51 +853,25 @@ msgstr "Распаковка"
msgid "Unpacking failed, unable to find %s"
msgstr "Ошибка распаковки: не удаётся найти %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "ОШИБКА: не удаётся найти «%s»"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Не удалось распаковать: ошибка CRC"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "ОШИБКА: неверная CRC-сумма для %s"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "Не удалось распаковать: ошибка записи или на диске нет места?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "ОШИБКА: не удалось записать (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "ОШИБКА: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Ошибка распаковки: архив защищён паролем"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -934,13 +898,10 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr ""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "см. журнал"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1022,14 +983,14 @@ msgstr ""
msgid "Disk full"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Проверка"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Проверка"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1039,6 +1000,10 @@ msgstr "Проверка"
msgid "Trying SFV verification"
msgstr "Проверка SFV-суммы"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "осталось"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr ""
@@ -1155,10 +1120,10 @@ msgstr ""
msgid "Failed to send Windows notification"
msgstr ""
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Не удалось импортировать %s файлов из %s"
msgid "Cannot create temp file for %s"
msgstr "Не удаётся создать временный файл для %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1170,6 +1135,11 @@ msgstr "Не удалось добавить %s: удалён"
msgid "Error removing %s"
msgstr "Ошибка удаления %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Не удалось импортировать %s файлов из %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1186,8 +1156,8 @@ msgstr "NZB-файл добавлен в очередь"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Недопустимый NZB-файл %s: пропущен (причина — %s, строка — %s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1567,11 +1537,6 @@ msgstr "Подробнее"
msgid "Post Processing Failed for %s (%s)"
msgstr "Ошибка пост-обработки для %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "см. журнал"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1779,6 +1744,11 @@ msgstr "Неизвестное действие: %s"
msgid "Schedule for non-existing server %s"
msgstr "Расписание для несуществующего сервера %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Попытка установить статус для несуществующего сервера %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3681,6 +3651,14 @@ msgid ""
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr ""
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Сервер"
@@ -3928,6 +3906,17 @@ msgstr ""
msgid "0 is highest priority, 100 is the lowest priority"
msgstr ""
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4112,6 +4101,12 @@ msgstr "Загружено"
msgid "Read All Feeds Now"
msgstr "Прочитать все ленты"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Уведомление по электронной почте после завершения задания"
@@ -4396,7 +4391,13 @@ msgstr ""
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Сортировка сериалов"
@@ -4424,7 +4425,8 @@ msgstr "Готовые шаблоны"
msgid "Example"
msgstr "Пример"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr ""
@@ -4576,7 +4578,8 @@ msgstr "В папках"
msgid "No folders"
msgstr "Без папок"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Сортировка даты"
@@ -4696,10 +4699,6 @@ msgstr "Тема"
msgid "Selection"
msgstr "Выбрать"
#: sabnzbd/skintext.py
msgid "left"
msgstr "осталось"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "свободно на диске"
@@ -5105,6 +5104,10 @@ msgstr "Пустой NZB-файл"
msgid "URL Fetching failed; %s"
msgstr "Не удалось загрузить URL: %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Попытка загрузить NZB с %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Не задано имя компьютера."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -97,6 +97,13 @@ msgid ""
"with Unicoded file and directory names in downloads."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -135,35 +142,6 @@ msgstr "Signal %s primljen, snimanje i napuštanje..."
msgid "Fatal error at saving state"
msgstr "Fatalna greška pri snimanju trenutnog stanja"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Pokušaj da se učita NZB sa %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Snimanje %s neuspešno"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Nemoguće kreiranje privremene datoteke za %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Покушај постављања статуса за непостојећи сервер %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Грешка у tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Učitavanje %s neuspešno"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -324,6 +302,14 @@ msgstr "кључне речи"
msgid "Quota spent, pausing downloading"
msgstr "Kvota utrošena, pauziram preuzimanja"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Погрешан параметар"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC путања \"%s\" није дозвољена"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s nije ispravna email adresa"
@@ -336,6 +322,21 @@ msgstr "Потребна је адреса сервера"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s nije ispravna oktalna vrednost"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Грешка: ред није празан, фасцикла се не може променити."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -356,22 +357,6 @@ msgstr "Ne može se kreirati sigurnosna kopija za %s"
msgid "Incorrectly encoded password %s"
msgstr "Pogrešno šifrovana lozinka %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Погрешан параметар"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s nije ispravna oktalna vrednost"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC путања \"%s\" није дозвољена"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Грешка: ред није празан, фасцикла се не може променити."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -402,10 +387,6 @@ msgstr "Погрешне етапе извештаја можете наћи у
msgid "Decoder failure: Out of memory"
msgstr ""
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -560,8 +541,7 @@ msgid "No recipients given, no email sent"
msgstr "Нема примаоце, е-порука није послана"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Неуспешно читање %s"
@@ -621,6 +601,21 @@ msgstr "Neuspešno premeštanje %s u %s"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Грешка у tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Snimanje %s neuspešno"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Učitavanje %s neuspešno"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -845,11 +840,6 @@ msgstr "Neuspešno brisanje %s!"
msgid "Trying unrar with password \"%s\""
msgstr "Proba raspakivanja sa lozinkom \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Neuspešno raspakivanje, arhiva zahteva lozinku"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Распакивање"
@@ -858,51 +848,25 @@ msgstr "Распакивање"
msgid "Unpacking failed, unable to find %s"
msgstr "Погрешно распакивање, не може да се нађе %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "ГРЕШКА: Не могу да нађем \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Neuspešno raspakivanje, CRC greška"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "ГРЕШКА: Погрешан CRC у \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "Neuspašno raspakivanje, greška u pisanju ili je disk pun?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "ГРЕШКА: грешка писања (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Neuspešno raspakivanje, putanja je predugačka"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "ГРЕШКА: путања је превелика (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "ГРЕШКА: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Neuspešno raspakivanje, arhiva zahteva lozinku"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -929,13 +893,10 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr "Покушавам 7zip са лозинком \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "7ZIP скуп \"%s\" није потпун, не могу да издвојим"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Не могу да издвојим %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "видети извештај"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1016,14 +977,14 @@ msgstr ""
msgid "Disk full"
msgstr "Диск је пун"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Проверавање"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Проверавање"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1033,6 +994,10 @@ msgstr "Провера"
msgid "Trying SFV verification"
msgstr "Pokušaj SFV provere"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "остало"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Ovaj server ne dozvoljava SSL na ovom portu"
@@ -1149,10 +1114,10 @@ msgstr ""
msgid "Failed to send Windows notification"
msgstr ""
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Неуспешан унос %s датотеке са %s"
msgid "Cannot create temp file for %s"
msgstr "Nemoguće kreiranje privremene datoteke za %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1164,6 +1129,11 @@ msgstr "Грешка додавања %s, уклањање"
msgid "Error removing %s"
msgstr "Greška pri uklanjanju %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Неуспешан унос %s датотеке са %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1180,8 +1150,8 @@ msgstr "NZB додат у ред"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Неважећи NZB %s, прескакање (разлог=%s, линија=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1559,11 +1529,6 @@ msgstr "Више"
msgid "Post Processing Failed for %s (%s)"
msgstr "Грешка пост-процесирања за %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "видети извештај"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1771,6 +1736,11 @@ msgstr "Непозната акција: %s"
msgid "Schedule for non-existing server %s"
msgstr "Планификација за непостојећи сервер %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Покушај постављања статуса за непостојећи сервер %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3666,6 +3636,14 @@ msgid ""
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr ""
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Сервер"
@@ -3914,6 +3892,17 @@ msgstr ""
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 je najveći prioritet, 99 je najniži prioritet"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4097,6 +4086,12 @@ msgstr "Преузето"
msgid "Read All Feeds Now"
msgstr "Сада читај све фидове"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "Нотификација е-поштом при завршетку рада"
@@ -4374,7 +4369,13 @@ msgstr ""
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Сортирање серије"
@@ -4402,7 +4403,8 @@ msgstr "Предподешавања"
msgid "Example"
msgstr "Примери"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr ""
@@ -4554,7 +4556,8 @@ msgstr "У фасциклама"
msgid "No folders"
msgstr "Нема фасцикле"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Сређивање датумом"
@@ -4674,10 +4677,6 @@ msgstr "Тема"
msgid "Selection"
msgstr "Избор"
#: sabnzbd/skintext.py
msgid "left"
msgstr "остало"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Слободан простор"
@@ -5080,6 +5079,10 @@ msgstr "NZB датотека неупотребљива"
msgid "URL Fetching failed; %s"
msgstr "Погрешно учитавање УРЛ-а; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Pokušaj da se učita NZB sa %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Име хоста није унето."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -97,6 +97,13 @@ msgid ""
"with Unicoded file and directory names in downloads."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -135,35 +142,6 @@ msgstr "Signal %s mottagen, sparar och stänger..."
msgid "Fatal error at saving state"
msgstr "Kritiskt fel vid sparande av läge"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "Försöker att hämta NZB från %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "Sparar %s misslyckades"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "Kan inte skapa temp -fil för %s"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "Försöker att sätta status på icke existerande server %s"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "Fel i tempfile.mkstemp"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "Laddning av %s misslyckades"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -324,6 +302,14 @@ msgstr "nyckelord"
msgid "Quota spent, pausing downloading"
msgstr "Din kvot är uppnådd, pausar nerladdning"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Fel parameter"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC sökväg \"%s\" är inte tillåten här"
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s är inte en godkänd e-mail adress"
@@ -336,6 +322,21 @@ msgstr "Kräver serveradress"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s är inte rätt siffervärde"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Fel: Kön är inte tom, kan inte byta mapp."
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -356,22 +357,6 @@ msgstr "Kan inte skapa backup-fil för %s"
msgid "Incorrectly encoded password %s"
msgstr "Felaktigt kodat lösenord %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "Fel parameter"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s är inte rätt siffervärde"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC sökväg \"%s\" är inte tillåten här"
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "Fel: Kön är inte tom, kan inte byta mapp."
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -403,10 +388,6 @@ msgstr "Felaktig loggning i historiken av %s"
msgid "Decoder failure: Out of memory"
msgstr ""
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -560,8 +541,7 @@ msgid "No recipients given, no email sent"
msgstr "Ingen mottagare angiven, ingen e-post har skickats"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "Kan ej läsa %s"
@@ -621,6 +601,21 @@ msgstr "Det gick inte att flyta %s till %s"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "Fel i tempfile.mkstemp"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "Sparar %s misslyckades"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "Laddning av %s misslyckades"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -847,11 +842,6 @@ msgstr "Borttagning av %s misslyckades!"
msgid "Trying unrar with password \"%s\""
msgstr "Försöker att packa upp med lösenord %s"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "Uppackning misslyckades, arkivet kräver lösenord"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "Packar upp"
@@ -860,51 +850,25 @@ msgstr "Packar upp"
msgid "Unpacking failed, unable to find %s"
msgstr "Uppackning misslyckades, gick inte att hitta %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "FEL: gick inte att hitta \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "Uppackning misslyckades, CRC-fel"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "FEL: CRC misslyckades i \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "Uppackning misslyckades, skrivfel eller disken full?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "FEL: skrivningsfel (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "Uppackning misslyckades, sökvägen är för lång"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "FEL: sökvägen är för lång (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "FEL: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "Uppackning misslyckades, arkivet kräver lösenord"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -931,13 +895,10 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr "Provar 7zip med lösenord \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "7ZIP set \"%s\" är inte komplett, kan inte packa upp"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "Kunde inte packa upp %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "se loggfil"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1020,14 +981,14 @@ msgstr ""
msgid "Disk full"
msgstr "Disken är full"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verifierar"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "Verifierar"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1037,6 +998,10 @@ msgstr "Kontrollerar"
msgid "Trying SFV verification"
msgstr "Försöker verifiera SFV"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "kvar"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "Den här servern tillåter in SSL på denna port"
@@ -1153,10 +1118,10 @@ msgstr ""
msgid "Failed to send Windows notification"
msgstr ""
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Det gick inte att importera %s filer från %s"
msgid "Cannot create temp file for %s"
msgstr "Kan inte skapa temp -fil för %s"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1168,6 +1133,11 @@ msgstr "Det gick inte att lägga till %s, tar bort"
msgid "Error removing %s"
msgstr "Fel vid borttagning av %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "Det gick inte att importera %s filer från %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1184,8 +1154,8 @@ msgstr "NZB tillagd i kön"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "Felaktig NZB fil %s, hoppar över (orsak=%s, linje=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1565,11 +1535,6 @@ msgstr "Mer"
msgid "Post Processing Failed for %s (%s)"
msgstr "Efterbehandling misslyckades för %s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "se loggfil"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1777,6 +1742,11 @@ msgstr "Okänd åtgärd: %s"
msgid "Schedule for non-existing server %s"
msgstr "Schema för icke existerande server %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "Försöker att sätta status på icke existerande server %s"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3678,6 +3648,14 @@ msgid ""
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr ""
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "Server"
@@ -3926,6 +3904,17 @@ msgstr ""
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 är högst prioritet, 99 är lägst prioritet"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4110,6 +4099,12 @@ msgstr "Nedladdad"
msgid "Read All Feeds Now"
msgstr "Läsa Alla Flöden Nu"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "E-post notifiering när jobb är slutfört"
@@ -4387,7 +4382,13 @@ msgstr ""
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "Seriesortering"
@@ -4415,7 +4416,8 @@ msgstr "Förinställningar"
msgid "Example"
msgstr "Exempel"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr ""
@@ -4567,7 +4569,8 @@ msgstr "In mapp"
msgid "No folders"
msgstr "Ingen mapp"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "Datum sortering"
@@ -4687,10 +4690,6 @@ msgstr "Ämne"
msgid "Selection"
msgstr "Urval"
#: sabnzbd/skintext.py
msgid "left"
msgstr "kvar"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "Ledigt diskutrymme"
@@ -5095,6 +5094,10 @@ msgstr "Oanvändbar NZB fil"
msgid "URL Fetching failed; %s"
msgstr "URL hämtning misslyckades; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "Försöker att hämta NZB från %s"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "Adressen är inte angiven."

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
@@ -95,6 +95,13 @@ msgid ""
"with Unicoded file and directory names in downloads."
msgstr "SABnzbd 以 %s 编码启动了,正常应该是 UTF-8。会导致下载文件夹中统一标准编码的文件和文件夹名称出现问题。"
#. Warning message
#: SABnzbd.py
msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
@@ -133,35 +140,6 @@ msgstr "捕捉到 %s 信号,正在保存并退出..."
msgid "Fatal error at saving state"
msgstr "保存状态时遇到致命错误"
#: sabnzbd/__init__.py
msgid "Trying to fetch NZB from %s"
msgstr "正在尝试从 %s 装取 NZB"
#. Error message
#: sabnzbd/__init__.py
msgid "Saving %s failed"
msgstr "保存 %s 失败"
#. Error message
#: sabnzbd/__init__.py
msgid "Cannot create temp file for %s"
msgstr "无法为 %s 创建临时文件"
#. Warning message
#: sabnzbd/__init__.py
msgid "Trying to set status of non-existing server %s"
msgstr "正在尝试设置不存在的服务器 %s 的状态"
#. Error message
#: sabnzbd/__init__.py
msgid "Failure in tempfile.mkstemp"
msgstr "tempfile.mkstemp 出错"
#. Error message
#: sabnzbd/__init__.py
msgid "Loading %s failed"
msgstr "加载 %s 失败"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
@@ -322,6 +300,14 @@ msgstr "关键词"
msgid "Quota spent, pausing downloading"
msgstr "配额已耗尽,暂停下载"
#: sabnzbd/cfg.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "参数不正确"
#: sabnzbd/cfg.py
msgid "UNC path \"%s\" not allowed here"
msgstr "此处不允许使用 UNC 路径 \"%s\""
#: sabnzbd/cfg.py
msgid "%s is not a valid email address"
msgstr "%s 不是有效的电子邮箱地址"
@@ -334,6 +320,21 @@ msgstr "服务器地址必填"
msgid "%s is not a valid script"
msgstr ""
#: sabnzbd/cfg.py
msgid "%s is not a correct octal value"
msgstr "%s 不是有效的八进制值"
#. Warning message
#: sabnzbd/cfg.py
msgid ""
"Permissions setting of %s might deny SABnzbd access to the files and folders"
" it creates."
msgstr ""
#: sabnzbd/cfg.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "错误: 队列非空,无法变更文件夹。"
#. Warning message
#: sabnzbd/config.py
msgid "Configuration locked, cannot save settings"
@@ -354,22 +355,6 @@ msgstr "无法为 %s 创建备份文件"
msgid "Incorrectly encoded password %s"
msgstr "密码编码错误 %s"
#: sabnzbd/config.py, sabnzbd/interface.py
msgid "Incorrect parameter"
msgstr "参数不正确"
#: sabnzbd/config.py
msgid "%s is not a correct octal value"
msgstr "%s 不是有效的八进制值"
#: sabnzbd/config.py
msgid "UNC path \"%s\" not allowed here"
msgstr "此处不允许使用 UNC 路径 \"%s\""
#: sabnzbd/config.py
msgid "Error: Queue not empty, cannot change folder."
msgstr "错误: 队列非空,无法变更文件夹。"
#. Error message
#: sabnzbd/database.py
msgid "Cannot write to History database, check access rights!"
@@ -400,10 +385,6 @@ msgstr "%s 历史信息中 stage 日志无效"
msgid "Decoder failure: Out of memory"
msgstr "解码器失败:内存不足"
#: sabnzbd/decoder.py
msgid "UUencode detected, only yEnc encoding is supported [%s]"
msgstr ""
#. Warning message
#: sabnzbd/decoder.py
msgid "Unknown Error while decoding %s"
@@ -557,8 +538,7 @@ msgid "No recipients given, no email sent"
msgstr "未给定收件人,电子邮件未发出"
#. Error message - Warning message
#: sabnzbd/emailer.py, sabnzbd/filesystem.py, sabnzbd/nzbparser.py,
#: sabnzbd/rss.py
#: sabnzbd/emailer.py, sabnzbd/nzbparser.py, sabnzbd/rss.py
msgid "Cannot read %s"
msgstr "无法读取 %s"
@@ -618,6 +598,21 @@ msgstr "将 %s 移动到 %s 失败"
msgid "Blocked attempt to create directory %s"
msgstr ""
#. Error message
#: sabnzbd/filesystem.py
msgid "Failure in tempfile.mkstemp"
msgstr "tempfile.mkstemp 出错"
#. Error message
#: sabnzbd/filesystem.py
msgid "Saving %s failed"
msgstr "保存 %s 失败"
#. Error message
#: sabnzbd/filesystem.py
msgid "Loading %s failed"
msgstr "加载 %s 失败"
#: sabnzbd/interface.py
msgid "Refused connection from:"
msgstr ""
@@ -838,11 +833,6 @@ msgstr "删除 %s 失败!"
msgid "Trying unrar with password \"%s\""
msgstr "正在尝试 unrar使用密码 \"%s\""
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, archive requires a password"
msgstr "解压失败,压缩文件需要密码"
#: sabnzbd/newsunpack.py
msgid "Unpacking"
msgstr "正在解压"
@@ -851,51 +841,25 @@ msgstr "正在解压"
msgid "Unpacking failed, unable to find %s"
msgstr "解压失败,找不到 %s"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: unable to find \"%s\""
msgstr "错误: 无法找到 \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, CRC error"
msgstr "解压失败CRC 错误"
#. Warning message
#: sabnzbd/newsunpack.py
msgid "ERROR: CRC failed in \"%s\""
msgstr "错误: \"%s\" CRC 失败"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr "解压失败,文件太大文件系统不支持 (FAT?)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: File too large for filesystem (%s)"
msgstr "错误:文件太大文件系统不支持 (%s)"
#. Error message
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
msgstr "解压失败,写入出错或磁盘已满?"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: write error (%s)"
msgstr "错误: 写入出错 (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, path is too long"
msgstr "解压失败,路径过长"
#. Error message
#: sabnzbd/newsunpack.py
msgid "ERROR: path too long (%s)"
msgstr "*错误*: 路径过长 (%s)"
#: sabnzbd/newsunpack.py
msgid "ERROR: %s"
msgstr "错误: %s"
msgid "Unpacking failed, archive requires a password"
msgstr "解压失败,压缩文件需要密码"
#: sabnzbd/newsunpack.py
msgid "Unusable RAR file"
@@ -922,13 +886,10 @@ msgstr ""
msgid "Trying 7zip with password \"%s\""
msgstr "正在尝试 7zip密码 \"%s\""
#: sabnzbd/newsunpack.py
msgid "7ZIP set \"%s\" is incomplete, cannot unpack"
msgstr "7ZIP 分卷组 \"%s\" 不完整,无法解压"
#: sabnzbd/newsunpack.py
msgid "Could not unpack %s"
msgstr "无法解压 %s"
#. Error message
#: sabnzbd/newsunpack.py, sabnzbd/postproc.py
msgid "see logfile"
msgstr "查看日志文件"
#: sabnzbd/newsunpack.py
msgid "Quick Checking"
@@ -1007,14 +968,14 @@ msgstr ""
msgid "Disk full"
msgstr "磁盘空间已满"
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "正在验证"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr ""
#: sabnzbd/newsunpack.py
msgid "Verifying"
msgstr "正在验证"
#. PP status
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "Checking"
@@ -1024,6 +985,10 @@ msgstr "正在检查"
msgid "Trying SFV verification"
msgstr "正在尝试 SFV 验证"
#: sabnzbd/newsunpack.py, sabnzbd/skintext.py
msgid "left"
msgstr "剩余"
#: sabnzbd/newswrapper.py
msgid "This server does not allow SSL on this port"
msgstr "该服务器不允许在该端口使用 SSL"
@@ -1140,10 +1105,10 @@ msgstr "通知脚本 \"%s\" 不存在"
msgid "Failed to send Windows notification"
msgstr "无法发送 Windows 通知"
#. Warning message
#. Error message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "导入 %s 文件失败,来自 %s"
msgid "Cannot create temp file for %s"
msgstr "无法为 %s 创建临时文件"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1155,6 +1120,11 @@ msgstr "加载 %s 出错,正在移除"
msgid "Error removing %s"
msgstr "移除 %s 时出错"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "导入 %s 文件失败,来自 %s"
#. Error message
#: sabnzbd/nzbqueue.py
msgid "Incompatible queuefile found, cannot proceed"
@@ -1171,8 +1141,8 @@ msgstr "NZB 已添加到队列"
#. Warning message
#: sabnzbd/nzbstuff.py
msgid "Invalid NZB file %s, skipping (reason=%s, line=%s)"
msgstr "无效 NZB 文件 %s正在跳过 (原因=%s, 行=%s)"
msgid "Invalid NZB file %s, skipping (error: %s)"
msgstr ""
#. Warning message
#: sabnzbd/nzbstuff.py, sabnzbd/urlgrabber.py
@@ -1550,11 +1520,6 @@ msgstr "更多"
msgid "Post Processing Failed for %s (%s)"
msgstr "后期处理失败:%s (%s)"
#. Error message
#: sabnzbd/postproc.py
msgid "see logfile"
msgstr "查看日志文件"
#: sabnzbd/postproc.py
msgid "Post-processing was aborted"
msgstr ""
@@ -1762,6 +1727,11 @@ msgstr "未知操作: %s"
msgid "Schedule for non-existing server %s"
msgstr "定时任务的服务器不存在 %s"
#. Warning message
#: sabnzbd/scheduler.py
msgid "Trying to set status of non-existing server %s"
msgstr "正在尝试设置不存在的服务器 %s 的状态"
#. Queue status "download" - Post processing pick list - Config->RSS button
#. "download item"
#: sabnzbd/skintext.py
@@ -3621,6 +3591,14 @@ msgid ""
"Verify certificates when connecting to indexers and RSS-sources using HTTPS."
msgstr "当用 HTTPS 方式连接索引和RSS源时验证证书。"
#: sabnzbd/skintext.py
msgid "SOCKS5 Proxy"
msgstr ""
#: sabnzbd/skintext.py
msgid "Use the specified SOCKS5 proxy for all outgoing connections."
msgstr ""
#: sabnzbd/skintext.py
msgid "Server"
msgstr "服务器"
@@ -3864,6 +3842,17 @@ msgstr "严格"
msgid "0 is highest priority, 100 is the lowest priority"
msgstr "0 为最高优先级100 为最低优先级"
#. Server required tickbox
#: sabnzbd/skintext.py
msgid "Required"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"In case of connection failures, the download queue will be paused for a few "
"minutes instead of skipping this server"
msgstr ""
#. Server optional tickbox
#: sabnzbd/skintext.py
msgid "Optional"
@@ -4046,6 +4035,12 @@ msgstr "已下载"
msgid "Read All Feeds Now"
msgstr "立即读取全部 Feed"
#: sabnzbd/skintext.py
msgid ""
"If only the <em>Default</em> category is selected, notifications are enabled"
" for jobs in all categories."
msgstr ""
#: sabnzbd/skintext.py
msgid "Email Notification On Job Completion"
msgstr "任务完成 Email 通知"
@@ -4324,7 +4319,13 @@ msgstr "索引 Categories / Groups"
msgid "X"
msgstr "X"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Select at least 1 category."
msgstr ""
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Series Sorting"
msgstr "TV 排序"
@@ -4352,7 +4353,8 @@ msgstr "预设"
msgid "Example"
msgstr "示例"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Movie Sorting"
msgstr "电影排序"
@@ -4504,7 +4506,8 @@ msgstr "分文件夹"
msgid "No folders"
msgstr "不分文件夹"
#: sabnzbd/skintext.py
#. Warning message
#: sabnzbd/skintext.py, sabnzbd/sorting.py
msgid "Date Sorting"
msgstr "日期排序"
@@ -4622,10 +4625,6 @@ msgstr "主题"
msgid "Selection"
msgstr "选择"
#: sabnzbd/skintext.py
msgid "left"
msgstr "剩余"
#: sabnzbd/skintext.py
msgid "Free Space"
msgstr "剩余空间"
@@ -5023,6 +5022,10 @@ msgstr "不可用的 NZB 文件"
msgid "URL Fetching failed; %s"
msgstr "URL 装取失败; %s"
#: sabnzbd/urlgrabber.py
msgid "Trying to fetch NZB from %s"
msgstr "正在尝试从 %s 装取 NZB"
#: sabnzbd/utils/servertests.py
msgid "The hostname is not set."
msgstr "主机名未设置。"

View File

@@ -1,6 +1,6 @@
#
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
msgid ""

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
msgid ""

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,16 +1,16 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2020
# Ben Hecht <benjamin.hecht@me.com>, 2021
# Simon W., 2021
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-develop\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Ben Hecht <benjamin.hecht@me.com>, 2021\n"
"Last-Translator: Simon W., 2021\n"
"Language-Team: German (https://www.transifex.com/sabnzbd/teams/111101/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -52,7 +52,7 @@ msgid ""
"The installer only supports Windows 8.1 and above, use the standalone legacy"
" version to run on older Windows version."
msgstr ""
"Der Installer unterstützt nur Windows 8.1 und höher. Benutze die Standalone "
"Der Installer unterstützt nur Windows 8.1 und höher. Benutze die standalone "
"Version für ältere Windows Versionen."
#: builder/win/NSIS_Installer.nsi

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file NSIS
# Copyright 2011-2021 The SABnzbd-Team
# Copyright 2007-2022 The SABnzbd-Team
# team@sabnzbd.org
#
# Translators:

View File

@@ -1,21 +1,42 @@
sabyenc3>=4.0.0
cheetah3>=3.0.0
cryptography
feedparser>=6.0.0
configobj
cheroot
cherrypy
portend
chardet
notify2
puremagic
guessit>=3.1.0
# Main requirements
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
sabyenc3==4.0.2
cheetah3==3.2.6
cryptography==36.0.1
cffi==1.15
pycparser==2.21
feedparser==6.0.8
configobj==5.0.6
cheroot==8.6.0
six==1.16.0
cherrypy==18.6.1
jaraco.functools==3.5.0
jaraco.collections==3.5.1
jaraco.text==3.7.0
jaraco.classes==3.2.1
jaraco.context==4.1.1
more-itertools==8.12.0
zc.lockfile==2.0
python-dateutil==2.8.2
tempora==5.0.1
pytz==2021.3
sgmllib3k==1.0.0
portend==3.1.0
chardet==4.0.0
PySocks==1.7.1
puremagic==1.11
guessit==3.4.3
babelfish==0.6.0
rebulk==3.1.0
# Windows system integration
pywin32>=227; sys_platform == 'win32'
pywin32==303; sys_platform == 'win32'
# macOS system calls
pyobjc; sys_platform == 'darwin'
pyobjc==8.1; sys_platform == 'darwin'
# Linux notifications
notify2==0.3.1; sys_platform != 'win32' and sys_platform != 'darwin'
# Optional support for *nix tray icon.
# Note that pygobject depends on pycairo, which requires pkg-config and cairo headers.

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,28 +18,24 @@
import os
import logging
import datetime
import tempfile
import pickle
import ctypes.util
import gzip
import time
import socket
import cherrypy
import cherrypy._cpreqbody
import platform
import sys
import ssl
from threading import Lock, Thread, Condition
from typing import Any, AnyStr, Optional, Union
from threading import Lock, Condition
##############################################################################
# Determine platform flags
##############################################################################
WIN32 = DARWIN = FOUNDATION = WIN64 = DOCKER = False
KERNEL32 = LIBC = MACOSLIBC = None
if os.name == "nt":
WIN32 = True
WIN64 = platform.uname().machine == "AMD64"
from sabnzbd.utils.apireg import del_connection_info
try:
@@ -69,8 +65,6 @@ elif os.name == "posix":
# Parse macOS version numbers
if platform.system().lower() == "darwin":
DARWIN = True
# 12 = Sierra, 11 = ElCaptain, 10 = Yosemite, 9 = Mavericks, 8 = MountainLion
DARWIN_VERSION = int(platform.mac_ver()[0].split(".")[1])
MACOSLIBC = ctypes.CDLL(ctypes.util.find_library("c"), use_errno=True) # the MacOS C library
try:
import Foundation
@@ -121,10 +115,6 @@ from sabnzbd.constants import (
DEFAULT_PRIORITY,
VALID_ARCHIVES,
REPAIR_REQUEST,
QUEUE_FILE_NAME,
QUEUE_VERSION,
QUEUE_FILE_TMPL,
Status,
)
import sabnzbd.utils.ssdp
@@ -201,7 +191,6 @@ CMDLINE = " ".join(['"%s"' % arg for arg in sys.argv])
__INITIALIZED__ = False
__SHUTTING_DOWN__ = False
##############################################################################
# Signal Handler
##############################################################################
@@ -247,14 +236,11 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
# Optionally wait for "incomplete" to become online
if cfg.wait_for_dfolder():
wait_for_download_folder()
filesystem.wait_for_download_folder()
else:
cfg.download_dir.set(cfg.download_dir(), create=True)
cfg.download_dir.set_create(True)
# Set access rights for "incomplete" base folder
filesystem.set_permissions(cfg.download_dir.get_path(), recursive=False)
# If dirscan_dir cannot be created, set a proper value anyway.
# Maybe it's a network path that's temporarily missing.
path = cfg.dirscan_dir.get_path()
@@ -262,28 +248,29 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
filesystem.create_real_path(cfg.dirscan_dir.ident(), "", path, False)
# Set call backs for Config items
cfg.cache_limit.callback(new_limit)
cfg.cherryhost.callback(guard_restart)
cfg.cherryport.callback(guard_restart)
cfg.web_dir.callback(guard_restart)
cfg.web_color.callback(guard_restart)
cfg.username.callback(guard_restart)
cfg.password.callback(guard_restart)
cfg.log_dir.callback(guard_restart)
cfg.https_port.callback(guard_restart)
cfg.https_cert.callback(guard_restart)
cfg.https_key.callback(guard_restart)
cfg.enable_https.callback(guard_restart)
cfg.top_only.callback(guard_top_only)
cfg.pause_on_post_processing.callback(guard_pause_on_pp)
cfg.quota_size.callback(guard_quota_size)
cfg.quota_day.callback(guard_quota_dp)
cfg.quota_period.callback(guard_quota_dp)
cfg.language.callback(guard_language)
cfg.enable_https_verification.callback(guard_https_ver)
guard_https_ver()
cfg.cache_limit.callback(cfg.new_limit)
cfg.cherryhost.callback(cfg.guard_restart)
cfg.cherryport.callback(cfg.guard_restart)
cfg.web_dir.callback(cfg.guard_restart)
cfg.web_color.callback(cfg.guard_restart)
cfg.username.callback(cfg.guard_restart)
cfg.password.callback(cfg.guard_restart)
cfg.log_dir.callback(cfg.guard_restart)
cfg.https_port.callback(cfg.guard_restart)
cfg.https_cert.callback(cfg.guard_restart)
cfg.https_key.callback(cfg.guard_restart)
cfg.enable_https.callback(cfg.guard_restart)
cfg.socks5_proxy_url.callback(cfg.guard_restart)
cfg.top_only.callback(cfg.guard_top_only)
cfg.pause_on_post_processing.callback(cfg.guard_pause_on_pp)
cfg.quota_size.callback(cfg.guard_quota_size)
cfg.quota_day.callback(cfg.guard_quota_dp)
cfg.quota_period.callback(cfg.guard_quota_dp)
cfg.language.callback(cfg.guard_language)
cfg.enable_https_verification.callback(cfg.guard_https_ver)
cfg.guard_https_ver()
check_incomplete_vs_complete()
filesystem.check_incomplete_vs_complete()
# Set language files
lang.set_locale_info("SABnzbd", DIR_LANGUAGE)
@@ -291,7 +278,7 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
sabnzbd.api.clear_trans_cache()
# Set end-of-queue action
sabnzbd.change_queue_complete_action(cfg.queue_complete(), new=False)
sabnzbd.misc.change_queue_complete_action(cfg.queue_complete(), new=False)
# Convert auto-sort
if cfg.auto_sort() == "0":
@@ -304,7 +291,7 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
cfg.host_whitelist.set(socket.gethostname())
# Do repair if requested
if check_repair_request():
if misc.check_repair_request():
repair = 2
pause_downloader = True
@@ -478,95 +465,6 @@ def trigger_restart(timeout=None):
notify_shutdown_loop()
##############################################################################
# Misc Wrappers
##############################################################################
def new_limit():
"""Callback for article cache changes"""
sabnzbd.ArticleCache.new_limit(cfg.cache_limit.get_int())
def guard_restart():
"""Callback for config options requiring a restart"""
sabnzbd.RESTART_REQ = True
def guard_top_only():
"""Callback for change of top_only option"""
sabnzbd.NzbQueue.set_top_only(cfg.top_only())
def guard_pause_on_pp():
"""Callback for change of pause-download-on-pp"""
if cfg.pause_on_post_processing():
pass # Not safe to idle downloader, because we don't know
# if post-processing is active now
else:
sabnzbd.Downloader.resume_from_postproc()
def guard_quota_size():
"""Callback for change of quota_size"""
sabnzbd.BPSMeter.change_quota()
def guard_quota_dp():
"""Callback for change of quota_day or quota_period"""
sabnzbd.Scheduler.restart()
def guard_language():
"""Callback for change of the interface language"""
sabnzbd.lang.set_language(cfg.language())
sabnzbd.api.clear_trans_cache()
def set_https_verification(value):
"""Set HTTPS-verification state while returning current setting
False = disable verification
"""
prev = ssl._create_default_https_context == ssl.create_default_context
if value:
ssl._create_default_https_context = ssl.create_default_context
else:
ssl._create_default_https_context = ssl._create_unverified_context
return prev
def guard_https_ver():
"""Callback for change of https verification"""
set_https_verification(cfg.enable_https_verification())
def add_url(url, pp=None, script=None, cat=None, priority=None, nzbname=None, password=None):
"""Add NZB based on a URL, attributes optional"""
if "http" not in url:
return
if not pp or pp == "-1":
pp = None
if script and script.lower() == "default":
script = None
if cat and cat.lower() == "default":
cat = None
logging.info("Fetching %s", url)
# Add feed name if it came from RSS
msg = T("Trying to fetch NZB from %s") % url
if nzbname:
msg = "%s - %s" % (nzbname, msg)
# Generate the placeholder
future_nzo = sabnzbd.NzbQueue.generate_future(msg, pp, script, cat, url=url, priority=priority, nzbname=nzbname)
# Set password
if not future_nzo.password:
future_nzo.password = password
# Get it!
sabnzbd.URLGrabber.add(url, future_nzo)
return future_nzo.nzo_id
def save_state():
"""Save all internal bookkeeping to disk"""
config.save_config()
@@ -579,418 +477,6 @@ def save_state():
sabnzbd.RSSReader.save()
def pause_all():
"""Pause all activities than cause disk access"""
sabnzbd.PAUSED_ALL = True
sabnzbd.Downloader.pause()
logging.debug("PAUSED_ALL active")
def unpause_all():
"""Resume all activities"""
sabnzbd.PAUSED_ALL = False
sabnzbd.Downloader.resume()
logging.debug("PAUSED_ALL inactive")
##############################################################################
# NZB Saving Methods
##############################################################################
def backup_exists(filename: str) -> bool:
"""Return True if backup exists and no_dupes is set"""
path = cfg.nzb_backup_dir.get_path()
return path and os.path.exists(os.path.join(path, filename + ".gz"))
def backup_nzb(filename: str, data: AnyStr):
"""Backup NZB file"""
path = cfg.nzb_backup_dir.get_path()
if path:
save_compressed(path, filename, data)
def save_compressed(folder: str, filename: str, data: AnyStr):
"""Save compressed NZB file in folder"""
if filename.endswith(".nzb"):
filename += ".gz"
else:
filename += ".nzb.gz"
logging.info("Backing up %s", os.path.join(folder, filename))
try:
# Have to get around the path being put inside the tgz
with open(os.path.join(folder, filename), "wb") as tgz_file:
f = gzip.GzipFile(filename, fileobj=tgz_file, mode="wb")
f.write(encoding.utob(data))
f.flush()
f.close()
except:
logging.error(T("Saving %s failed"), os.path.join(folder, filename))
logging.info("Traceback: ", exc_info=True)
##############################################################################
# Unsynchronized methods
##############################################################################
def add_nzbfile(
nzbfile: Union[str, cherrypy._cpreqbody.Part],
pp: Optional[Union[int, str]] = None,
script: Optional[str] = None,
cat: Optional[str] = None,
catdir: Optional[str] = None,
priority: Optional[Union[int, str]] = DEFAULT_PRIORITY,
nzbname: Optional[str] = None,
nzo_info=None,
url: Optional[str] = None,
keep: Optional[bool] = None,
reuse: Optional[str] = None,
password: Optional[str] = None,
nzo_id: Optional[str] = None,
):
"""Add file, either a single NZB-file or an archive.
All other parameters are passed to the NZO-creation.
"""
if pp == "-1":
pp = None
if script and (script.lower() == "default" or not filesystem.is_valid_script(script)):
script = None
if cat and cat.lower() == "default":
cat = None
if isinstance(nzbfile, str):
# File coming from queue repair or local file-path
path = nzbfile
filename = os.path.basename(path)
keep_default = True
if not sabnzbd.WIN32:
# If windows client sends file to Unix server backslashes may
# be included, so convert these
path = path.replace("\\", "/")
logging.info("Attempting to add %s [%s]", filename, path)
else:
# File from file-upload object
# CherryPy mangles unicode-filenames: https://github.com/cherrypy/cherrypy/issues/1766
filename = encoding.correct_unknown_encoding(nzbfile.filename)
logging.info("Attempting to add %s", filename)
keep_default = False
try:
# We have to create a copy, because we can't re-use the CherryPy temp-file
# Just to be sure we add the extension to detect file type later on
nzb_temp_file, path = tempfile.mkstemp(suffix=filesystem.get_ext(filename))
os.write(nzb_temp_file, nzbfile.file.read())
os.close(nzb_temp_file)
except OSError:
logging.error(T("Cannot create temp file for %s"), filename)
logging.info("Traceback: ", exc_info=True)
return None
# Externally defined if we should keep the file?
if keep is None:
keep = keep_default
if filesystem.get_ext(filename) in VALID_ARCHIVES:
return nzbparser.process_nzb_archive_file(
filename,
path=path,
pp=pp,
script=script,
cat=cat,
catdir=catdir,
priority=priority,
nzbname=nzbname,
keep=keep,
reuse=reuse,
nzo_info=nzo_info,
url=url,
password=password,
nzo_id=nzo_id,
)
else:
return nzbparser.process_single_nzb(
filename,
path=path,
pp=pp,
script=script,
cat=cat,
catdir=catdir,
priority=priority,
nzbname=nzbname,
keep=keep,
reuse=reuse,
nzo_info=nzo_info,
url=url,
password=password,
nzo_id=nzo_id,
)
def enable_server(server):
"""Enable server (scheduler only)"""
try:
config.get_config("servers", server).enable.set(1)
except:
logging.warning(T("Trying to set status of non-existing server %s"), server)
return
config.save_config()
sabnzbd.Downloader.update_server(server, server)
def disable_server(server):
"""Disable server (scheduler only)"""
try:
config.get_config("servers", server).enable.set(0)
except:
logging.warning(T("Trying to set status of non-existing server %s"), server)
return
config.save_config()
sabnzbd.Downloader.update_server(server, server)
def system_shutdown():
"""Shutdown system after halting download and saving bookkeeping"""
logging.info("Performing system shutdown")
Thread(target=halt).start()
while __INITIALIZED__:
time.sleep(1.0)
if sabnzbd.WIN32:
powersup.win_shutdown()
elif DARWIN:
powersup.osx_shutdown()
else:
powersup.linux_shutdown()
def system_hibernate():
"""Hibernate system"""
logging.info("Performing system hybernation")
if sabnzbd.WIN32:
powersup.win_hibernate()
elif DARWIN:
powersup.osx_hibernate()
else:
powersup.linux_hibernate()
def system_standby():
"""Standby system"""
logging.info("Performing system standby")
if sabnzbd.WIN32:
powersup.win_standby()
elif DARWIN:
powersup.osx_standby()
else:
powersup.linux_standby()
def restart_program():
"""Restart program (used by scheduler)"""
logging.info("Scheduled restart request")
# Just set the stop flag, because stopping CherryPy from
# the scheduler is not reliable
sabnzbd.TRIGGER_RESTART = True
def change_queue_complete_action(action, new=True):
"""Action or script to be performed once the queue has been completed
Scripts are prefixed with 'script_'
When "new" is False, check whether non-script actions are acceptable
"""
_action = None
_argument = None
if action.startswith("script_") and filesystem.is_valid_script(action.replace("script_", "", 1)):
# all scripts are labeled script_xxx
_action = run_script
_argument = action.replace("script_", "", 1)
elif new or cfg.queue_complete_pers():
if action == "shutdown_pc":
_action = system_shutdown
elif action == "hibernate_pc":
_action = system_hibernate
elif action == "standby_pc":
_action = system_standby
elif action == "shutdown_program":
_action = shutdown_program
else:
action = None
else:
action = None
if new:
cfg.queue_complete.set(action or "")
config.save_config()
sabnzbd.QUEUECOMPLETE = action
sabnzbd.QUEUECOMPLETEACTION = _action
sabnzbd.QUEUECOMPLETEARG = _argument
def run_script(script):
"""Run a user script (queue complete only)"""
script_path = filesystem.make_script_path(script)
if script_path:
try:
script_output = misc.run_command([script_path])
logging.info("Output of queue-complete script %s: \n%s", script, script_output)
except:
logging.info("Failed queue-complete script %s, Traceback: ", script, exc_info=True)
def keep_awake():
"""If we still have work to do, keep Windows/macOS system awake"""
if KERNEL32 or FOUNDATION:
if sabnzbd.cfg.keep_awake():
ES_CONTINUOUS = 0x80000000
ES_SYSTEM_REQUIRED = 0x00000001
if (not sabnzbd.Downloader.is_paused() and not sabnzbd.NzbQueue.is_empty()) or (
not sabnzbd.PostProcessor.paused and not sabnzbd.PostProcessor.empty()
):
if KERNEL32:
# Set ES_SYSTEM_REQUIRED until the next call
KERNEL32.SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED)
else:
sleepless.keep_awake("SABnzbd is busy downloading and/or post-processing")
else:
if KERNEL32:
# Allow the regular state again
KERNEL32.SetThreadExecutionState(ES_CONTINUOUS)
else:
sleepless.allow_sleep()
################################################################################
# Data IO #
################################################################################
def get_new_id(prefix, folder, check_list=None):
"""Return unique prefixed admin identifier within folder
optionally making sure that id is not in the check_list.
"""
for n in range(100):
try:
if not os.path.exists(folder):
os.makedirs(folder)
fd, path = tempfile.mkstemp("", "SABnzbd_%s_" % prefix, folder)
os.close(fd)
head, tail = os.path.split(path)
if not check_list or tail not in check_list:
return tail
except:
logging.error(T("Failure in tempfile.mkstemp"))
logging.info("Traceback: ", exc_info=True)
break
# Cannot create unique id, crash the process
raise IOError
def save_data(data, _id, path, do_pickle=True, silent=False):
"""Save data to a diskfile"""
if not silent:
logging.debug("[%s] Saving data for %s in %s", misc.caller_name(), _id, path)
path = os.path.join(path, _id)
# We try 3 times, to avoid any dict or access problems
for t in range(3):
try:
with open(path, "wb") as data_file:
if do_pickle:
pickle.dump(data, data_file, protocol=pickle.HIGHEST_PROTOCOL)
else:
data_file.write(data)
break
except:
if silent:
# This can happen, probably a removed folder
pass
elif t == 2:
logging.error(T("Saving %s failed"), path)
logging.info("Traceback: ", exc_info=True)
else:
# Wait a tiny bit before trying again
time.sleep(0.1)
def load_data(data_id, path, remove=True, do_pickle=True, silent=False):
"""Read data from disk file"""
path = os.path.join(path, data_id)
if not os.path.exists(path):
logging.info("[%s] %s missing", misc.caller_name(), path)
return None
if not silent:
logging.debug("[%s] Loading data for %s from %s", misc.caller_name(), data_id, path)
try:
with open(path, "rb") as data_file:
if do_pickle:
try:
data = pickle.load(data_file, encoding=sabnzbd.encoding.CODEPAGE)
except UnicodeDecodeError:
# Could be Python 2 data that we can load using old encoding
data = pickle.load(data_file, encoding="latin1")
else:
data = data_file.read()
if remove:
filesystem.remove_file(path)
except:
logging.error(T("Loading %s failed"), path)
logging.info("Traceback: ", exc_info=True)
return None
return data
def remove_data(_id: str, path: str):
"""Remove admin file"""
path = os.path.join(path, _id)
try:
if os.path.exists(path):
filesystem.remove_file(path)
except:
logging.debug("Failed to remove %s", path)
def save_admin(data: Any, data_id: str):
"""Save data in admin folder in specified format"""
logging.debug("[%s] Saving data for %s", misc.caller_name(), data_id)
save_data(data, data_id, cfg.admin_dir.get_path())
def load_admin(data_id: str, remove=False, silent=False) -> Any:
"""Read data in admin folder in specified format"""
logging.debug("[%s] Loading data for %s", misc.caller_name(), data_id)
return load_data(data_id, cfg.admin_dir.get_path(), remove=remove, silent=silent)
def request_repair():
"""Request a full repair on next restart"""
path = os.path.join(cfg.admin_dir.get_path(), REPAIR_REQUEST)
try:
with open(path, "w") as f:
f.write("\n")
except:
pass
def check_repair_request():
"""Return True if repair request found, remove afterwards"""
path = os.path.join(cfg.admin_dir.get_path(), REPAIR_REQUEST)
if os.path.exists(path):
try:
filesystem.remove_file(path)
except:
pass
return True
return False
def check_all_tasks():
"""Check every task and restart safe ones, else restart program
Return True when everything is under control
@@ -1059,87 +545,3 @@ def pid_file(pid_path=None, pid_file=None, port=0):
filesystem.remove_file(sabnzbd.DIR_PID)
except:
logging.warning(T("Cannot access PID file %s"), sabnzbd.DIR_PID)
def check_incomplete_vs_complete():
"""Make sure download_dir and complete_dir are not identical
or that download_dir is not a subfolder of complete_dir"""
complete = cfg.complete_dir.get_path()
if filesystem.same_file(cfg.download_dir.get_path(), complete):
if filesystem.real_path("X", cfg.download_dir()) == filesystem.long_path(cfg.download_dir()):
# Abs path, so set download_dir as an abs path inside the complete_dir
cfg.download_dir.set(os.path.join(complete, "incomplete"))
else:
cfg.download_dir.set("incomplete")
return False
return True
def wait_for_download_folder():
"""Wait for download folder to become available"""
while not cfg.download_dir.test_path():
logging.debug('Waiting for "incomplete" folder')
time.sleep(2.0)
def test_ipv6():
"""Check if external IPv6 addresses are reachable"""
if not cfg.selftest_host():
# User disabled the test, assume active IPv6
return True
try:
info = sabnzbd.getipaddress.addresslookup6(cfg.selftest_host())
except:
logging.debug(
"Test IPv6: Disabling IPv6, because it looks like it's not available. Reason: %s", sys.exc_info()[0]
)
return False
try:
af, socktype, proto, canonname, sa = info[0]
with socket.socket(af, socktype, proto) as sock:
sock.settimeout(2) # 2 second timeout
sock.connect(sa[0:2])
logging.debug("Test IPv6: IPv6 test successful. Enabling IPv6")
return True
except socket.error:
logging.debug("Test IPv6: Cannot reach IPv6 test host. Disabling IPv6")
return False
except:
logging.debug("Test IPv6: Problem during IPv6 connect. Disabling IPv6. Reason: %s", sys.exc_info()[0])
return False
def test_cert_checking():
"""Test quality of certificate validation"""
# User disabled the test, assume proper SSL certificates
if not cfg.selftest_host():
return True
# Try a connection to our test-host
try:
ctx = ssl.create_default_context()
base_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ctx.wrap_socket(base_sock, server_hostname=cfg.selftest_host())
ssl_sock.settimeout(2.0)
ssl_sock.connect((cfg.selftest_host(), 443))
ssl_sock.close()
return True
except (socket.gaierror, socket.timeout):
# Non-SSL related error.
# We now assume that certificates work instead of forcing
# lower quality just because some (temporary) internet problem
logging.info("Could not determine system certificate validation quality due to connection problems")
return True
except:
# Seems something is still wrong
sabnzbd.set_https_verification(False)
return False
def history_updated():
"""To make sure we always have a fresh history"""
sabnzbd.LAST_HISTORY_UPDATE += 1
# Never go over the limit
if sabnzbd.LAST_HISTORY_UPDATE + 1 >= sys.maxsize:
sabnzbd.LAST_HISTORY_UPDATE = 1

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -59,15 +59,14 @@ from sabnzbd.misc import (
create_https_certificates,
calc_age,
opts_to_pp,
format_time_left,
)
from sabnzbd.filesystem import diskspace, get_ext, clip_path, remove_all, list_scripts
from sabnzbd.encoding import xml_name, utob
from sabnzbd.utils.servertests import test_nntp_server_dict
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6, addresslookup
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6, addresslookup, active_socks5_proxy
from sabnzbd.database import build_history_info, unpack_history_info, HistoryDB
from sabnzbd.lang import is_rtl
import sabnzbd.notifier
import sabnzbd.rss
import sabnzbd.emailer
import sabnzbd.sorting
@@ -195,7 +194,7 @@ def _api_queue_rename(value, kwargs):
def _api_queue_change_complete_action(value, kwargs):
"""API: accepts value(=action)"""
sabnzbd.change_queue_complete_action(value)
sabnzbd.misc.change_queue_complete_action(value)
return report()
@@ -307,7 +306,7 @@ def _api_options(name, kwargs):
"multipar": sabnzbd.newsunpack.MULTIPAR_COMMAND,
"rar": sabnzbd.newsunpack.RAR_COMMAND,
"zip": sabnzbd.newsunpack.ZIP_COMMAND,
"7zip": sabnzbd.newsunpack.SEVEN_COMMAND,
"7zip": sabnzbd.newsunpack.SEVENZIP_COMMAND,
"nice": sabnzbd.newsunpack.NICE_COMMAND,
"ionice": sabnzbd.newsunpack.IONICE_COMMAND,
},
@@ -331,7 +330,7 @@ def _api_addfile(name, kwargs):
# Indexer category, so do mapping
cat = cat_convert(xcat)
# Add the NZB-file
res, nzo_ids = sabnzbd.add_nzbfile(
res, nzo_ids = sabnzbd.nzbparser.add_nzbfile(
name,
pp=kwargs.get("pp"),
script=kwargs.get("script"),
@@ -386,7 +385,7 @@ def _api_addlocalfile(name, kwargs):
password = kwargs.get("password")
if get_ext(name) in VALID_ARCHIVES + VALID_NZB_FILES:
res, nzo_ids = sabnzbd.add_nzbfile(
res, nzo_ids = sabnzbd.nzbparser.add_nzbfile(
name,
pp=pp,
script=script,
@@ -553,7 +552,7 @@ def _api_history(name, kwargs):
history_db.remove_failed(search)
if special in ("all", "completed"):
history_db.remove_completed(search)
sabnzbd.history_updated()
sabnzbd.misc.history_updated()
return report()
elif value:
jobs = value.split(",")
@@ -565,7 +564,7 @@ def _api_history(name, kwargs):
history_db = sabnzbd.get_db_connection()
remove_all(history_db.get_path(job), recursive=True)
history_db.remove_history(job)
sabnzbd.history_updated()
sabnzbd.misc.history_updated()
return report()
else:
return report(_MSG_NO_VALUE)
@@ -634,7 +633,7 @@ def _api_addurl(name, kwargs):
password = kwargs.get("password", "")
if name:
nzo_id = sabnzbd.add_url(name, pp, script, cat, priority, nzbname, password)
nzo_id = sabnzbd.urlgrabber.add_url(name, pp, script, cat, priority, nzbname, password)
# Reporting a list of NZO's, for compatibility with other add-methods
return report(keyword="", data={"status": True, "nzo_ids": [nzo_id]})
else:
@@ -650,7 +649,7 @@ def _api_pause(name, kwargs):
def _api_resume(name, kwargs):
sabnzbd.Scheduler.plan_resume(0)
sabnzbd.unpause_all()
sabnzbd.downloader.unpause_all()
return report()
@@ -753,7 +752,7 @@ def _api_restart(name, kwargs):
def _api_restart_repair(name, kwargs):
logging.info("Queue repair requested by API")
sabnzbd.request_repair()
sabnzbd.misc.request_repair()
# Do the shutdown async to still send goodbye to browser
Thread(target=sabnzbd.trigger_restart, kwargs={"timeout": 1}).start()
return report()
@@ -1336,6 +1335,7 @@ def build_status(calculate_performance: bool = False, skip_dashboard: bool = Fal
# Dashboard: Connection information
if not int_conv(skip_dashboard):
info["active_socks5_proxy"] = active_socks5_proxy()
info["localipv4"] = localipv4()
info["publicipv4"] = publicipv4()
info["ipv6"] = ipv6()
@@ -1580,7 +1580,7 @@ def retry_job(job, new_nzb=None, password=None):
history_db = sabnzbd.get_db_connection()
futuretype, url, pp, script, cat = history_db.get_other(job)
if futuretype:
nzo_id = sabnzbd.add_url(url, pp, script, cat)
nzo_id = sabnzbd.urlgrabber.add_url(url, pp, script, cat)
else:
path = history_db.get_path(job)
nzo_id = sabnzbd.NzbQueue.repair_job(path, new_nzb, password)
@@ -1865,26 +1865,10 @@ def get_active_history(queue, items):
def calc_timeleft(bytesleft, bps):
"""Calculate the time left in the format HH:MM:SS"""
try:
if bytesleft <= 0:
return "0:00:00"
totalseconds = int(bytesleft / bps)
minutes, seconds = divmod(totalseconds, 60)
hours, minutes = divmod(minutes, 60)
days, hours = divmod(hours, 24)
if minutes < 10:
minutes = "0%s" % minutes
if seconds < 10:
seconds = "0%s" % seconds
if days > 0:
if hours < 10:
hours = "0%s" % hours
return "%s:%s:%s:%s" % (days, hours, minutes, seconds)
else:
return "%s:%s:%s" % (hours, minutes, seconds)
except:
"""Based on bytesleft and bps calculate the time left in the format HH:MM:SS"""
if bytesleft <= 0 or bps <= 0:
return "0:00:00"
return format_time_left(int(bytesleft / bps))
def list_cats(default=True):

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -85,9 +85,8 @@ class ArticleCache:
def save_article(self, article: Article, data: bytes):
"""Save article in cache, either memory or disk"""
nzo = article.nzf.nzo
if nzo.is_gone():
# Do not discard this article because the
# file might still be processed at this moment!!
# Skip if already post-processing or fully finished
if nzo.pp_or_finished:
return
# Register article for bookkeeping in case the job is deleted
@@ -129,7 +128,9 @@ class ArticleCache:
logging.debug("Failed to load %s from cache, probably already deleted", article)
return data
elif article.art_id:
data = sabnzbd.load_data(article.art_id, nzo.admin_path, remove=True, do_pickle=False, silent=True)
data = sabnzbd.filesystem.load_data(
article.art_id, nzo.admin_path, remove=True, do_pickle=False, silent=True
)
nzo.remove_saved_article(article)
return data
@@ -156,15 +157,12 @@ class ArticleCache:
# Could fail if already deleted by flush_articles or load_data
logging.debug("Failed to flush %s from cache, probably already deleted or written to disk", article)
elif article.art_id:
sabnzbd.remove_data(article.art_id, article.nzf.nzo.admin_path)
sabnzbd.filesystem.remove_data(article.art_id, article.nzf.nzo.admin_path)
@staticmethod
def __flush_article_to_disk(article: Article, data):
nzo = article.nzf.nzo
if nzo.is_gone():
# Don't store deleted jobs
return
# Save data, but don't complain when destination folder is missing
# because this flush may come after completion of the NZO.
sabnzbd.save_data(data, article.get_art_id(), nzo.admin_path, do_pickle=False, silent=True)
sabnzbd.filesystem.save_data(
data, article.get_art_id(), article.nzf.nzo.admin_path, do_pickle=False, silent=True
)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -24,8 +24,8 @@ import queue
import logging
import re
from threading import Thread
from time import sleep
import hashlib
import ctypes
from typing import Tuple, Optional, List
import sabnzbd
@@ -41,7 +41,6 @@ from sabnzbd.filesystem import (
from sabnzbd.constants import Status, GIGI, MAX_ASSEMBLER_QUEUE
import sabnzbd.cfg as cfg
from sabnzbd.nzbstuff import NzbObject, NzbFile
import sabnzbd.downloader
import sabnzbd.par2file as par2file
import sabnzbd.utils.rarfile as rarfile
@@ -106,99 +105,106 @@ class Assembler(Thread):
filepath = nzf.prepare_filepath()
if filepath:
logging.debug("Decoding part of %s", filepath)
try:
logging.debug("Decoding part of %s", filepath)
self.assemble(nzf, file_done)
# Continue after partly written data
if not file_done:
continue
# Clean-up admin data
logging.info("Decoding finished %s", filepath)
nzf.remove_admin()
# Do rar-related processing
if rarfile.is_rarfile(filepath):
# Encryption and unwanted extension detection
rar_encrypted, unwanted_file = check_encrypted_and_unwanted_files(nzo, filepath)
if rar_encrypted:
if cfg.pause_on_pwrar() == 1:
logging.warning(
T(
'Paused job "%s" because of encrypted RAR file (if supplied, all passwords were tried)'
),
nzo.final_name,
)
nzo.pause()
else:
logging.warning(
T(
'Aborted job "%s" because of encrypted RAR file (if supplied, all passwords were tried)'
),
nzo.final_name,
)
nzo.fail_msg = T("Aborted, encryption detected")
sabnzbd.NzbQueue.end_job(nzo)
if unwanted_file:
# Don't repeat the warning after a user override of an unwanted extension pause
if nzo.unwanted_ext == 0:
logging.warning(
T('In "%s" unwanted extension in RAR file. Unwanted file is %s '),
nzo.final_name,
unwanted_file,
)
logging.debug(T("Unwanted extension is in rar file %s"), filepath)
if cfg.action_on_unwanted_extensions() == 1 and nzo.unwanted_ext == 0:
logging.debug("Unwanted extension ... pausing")
nzo.unwanted_ext = 1
nzo.pause()
if cfg.action_on_unwanted_extensions() == 2:
logging.debug("Unwanted extension ... aborting")
nzo.fail_msg = T("Aborted, unwanted extension detected")
sabnzbd.NzbQueue.end_job(nzo)
# Add to direct unpack
nzo.add_to_direct_unpacker(nzf)
elif par2file.is_parfile(filepath):
# Parse par2 files, cloaked or not
nzo.handle_par2(nzf, filepath)
filter_output, reason = nzo_filtered_by_rating(nzo)
if filter_output == 1:
logging.warning(
T('Paused job "%s" because of rating (%s)'),
nzo.final_name,
reason,
)
nzo.pause()
elif filter_output == 2:
logging.warning(
T('Aborted job "%s" because of rating (%s)'),
nzo.final_name,
reason,
)
nzo.fail_msg = T("Aborted, rating filter matched (%s)") % reason
sabnzbd.NzbQueue.end_job(nzo)
except IOError as err:
# If job was deleted or in active post-processing, ignore error
if not nzo.deleted and not nzo.is_gone() and not nzo.pp_active:
# If job was deleted/finished or in active post-processing, ignore error
if not nzo.pp_or_finished:
# 28 == disk full => pause downloader
if err.errno == 28:
logging.error(T("Disk full! Forcing Pause"))
else:
logging.error(T("Disk error on creating file %s"), clip_path(filepath))
# Log traceback
if sabnzbd.WIN32:
logging.info(
"Winerror: %s - %s",
err.winerror,
hex(ctypes.windll.ntdll.RtlGetLastNtStatus() + 2**32),
)
logging.info("Traceback: ", exc_info=True)
# Pause without saving
sabnzbd.Downloader.pause()
continue
else:
logging.debug("Ignoring error %s for %s, already finished or in post-proc", err, filepath)
except:
logging.error(T("Fatal error in Assembler"), exc_info=True)
break
# Continue after partly written data
if not file_done:
continue
# Clean-up admin data
logging.info("Decoding finished %s", filepath)
nzf.remove_admin()
# Do rar-related processing
if rarfile.is_rarfile(filepath):
# Encryption and unwanted extension detection
rar_encrypted, unwanted_file = check_encrypted_and_unwanted_files(nzo, filepath)
if rar_encrypted:
if cfg.pause_on_pwrar() == 1:
logging.warning(
T(
'Paused job "%s" because of encrypted RAR file (if supplied, all passwords were tried)'
),
nzo.final_name,
)
nzo.pause()
else:
logging.warning(
T(
'Aborted job "%s" because of encrypted RAR file (if supplied, all passwords were tried)'
),
nzo.final_name,
)
nzo.fail_msg = T("Aborted, encryption detected")
sabnzbd.NzbQueue.end_job(nzo)
if unwanted_file:
# Don't repeat the warning after a user override of an unwanted extension pause
if nzo.unwanted_ext == 0:
logging.warning(
T('In "%s" unwanted extension in RAR file. Unwanted file is %s '),
nzo.final_name,
unwanted_file,
)
logging.debug(T("Unwanted extension is in rar file %s"), filepath)
if cfg.action_on_unwanted_extensions() == 1 and nzo.unwanted_ext == 0:
logging.debug("Unwanted extension ... pausing")
nzo.unwanted_ext = 1
nzo.pause()
if cfg.action_on_unwanted_extensions() == 2:
logging.debug("Unwanted extension ... aborting")
nzo.fail_msg = T("Aborted, unwanted extension detected")
sabnzbd.NzbQueue.end_job(nzo)
# Add to direct unpack
nzo.add_to_direct_unpacker(nzf)
elif par2file.is_parfile(filepath):
# Parse par2 files, cloaked or not
nzo.handle_par2(nzf, filepath)
filter_output, reason = nzo_filtered_by_rating(nzo)
if filter_output == 1:
logging.warning(
T('Paused job "%s" because of rating (%s)'),
nzo.final_name,
reason,
)
nzo.pause()
elif filter_output == 2:
logging.warning(
T('Aborted job "%s" because of rating (%s)'),
nzo.final_name,
reason,
)
nzo.fail_msg = T("Aborted, rating filter matched (%s)") % reason
sabnzbd.NzbQueue.end_job(nzo)
else:
sabnzbd.NzbQueue.remove(nzo.nzo_id, cleanup=False)
sabnzbd.PostProcessor.process(nzo)
@@ -213,7 +219,8 @@ class Assembler(Thread):
if not nzf.md5:
nzf.md5 = hashlib.md5()
with open(nzf.filepath, "ab") as fout:
# We write large article-sized chunks, so we can safely skip the buffering of Python
with open(nzf.filepath, "ab", buffering=0) as fout:
for article in nzf.decodetable:
# Break if deleted during writing
if nzf.nzo.status is Status.DELETED:
@@ -298,7 +305,6 @@ def check_encrypted_and_unwanted_files(nzo: NzbObject, filepath: str) -> Tuple[b
# Is it even a rarfile?
if rarfile.is_rarfile(filepath):
# Open the rar
rarfile.UNRAR_TOOL = sabnzbd.newsunpack.RAR_COMMAND
zf = rarfile.RarFile(filepath, single_file_check=True)
# Check for encryption

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -161,7 +161,7 @@ class BPSMeter:
def save(self):
"""Save admin to disk"""
sabnzbd.save_admin(
sabnzbd.filesystem.save_admin(
(
self.last_update,
self.grand_total,
@@ -203,7 +203,7 @@ class BPSMeter:
res = False
quota = self.left = cfg.quota_size.get_float() # Quota for this period
self.have_quota = bool(cfg.quota_size())
data = sabnzbd.load_admin(BYTES_FILE_NAME)
data = sabnzbd.filesystem.load_admin(BYTES_FILE_NAME)
try:
(
self.last_update,

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,7 +18,11 @@
"""
sabnzbd.cfg - Configuration Parameters
"""
import logging
import re
import argparse
from typing import List, Tuple
import sabnzbd
from sabnzbd.config import (
@@ -28,13 +32,7 @@ from sabnzbd.config import (
OptionDir,
OptionStr,
OptionList,
validate_octal,
validate_safedir,
all_lowercase,
create_api_key,
validate_notempty,
clean_nice_ionice_parameters,
validate_strip_right_slash,
)
from sabnzbd.constants import (
DEF_HOST,
@@ -48,9 +46,74 @@ from sabnzbd.constants import (
DEF_FOLDER_MAX,
)
##############################################################################
# Email validation support
# Default Validation handlers
##############################################################################
class ErrorCatchingArgumentParser(argparse.ArgumentParser):
def error(self, status=0, message=None):
# Need to override so it doesn't raise SystemExit
if status:
raise ValueError
def clean_nice_ionice_parameters(value):
"""Verify that the passed parameters are not exploits"""
if value:
parser = ErrorCatchingArgumentParser()
# Nice parameters
parser.add_argument("-n", "--adjustment", type=int)
# Ionice parameters, not supporting -p
parser.add_argument("--classdata", type=int)
parser.add_argument("-c", "--class", type=int)
parser.add_argument("-t", "--ignore", action="store_true")
try:
parser.parse_args(value.split())
except ValueError:
# Also log at start-up if invalid parameter was set in the ini
msg = "%s: %s" % (T("Incorrect parameter"), value)
logging.error(msg)
return msg, None
return None, value
def all_lowercase(value):
"""Lowercase everything!"""
if isinstance(value, list):
# If list, for each item
return None, [item.lower() for item in value]
return None, value.lower()
def validate_no_unc(root, value, default):
"""Check if path isn't a UNC path"""
# Only need to check the 'value' part
if value and not value.startswith(r"\\"):
return validate_notempty(root, value, default)
else:
return T('UNC path "%s" not allowed here') % value, None
def validate_single_tag(value: List[str]) -> Tuple[None, List[str]]:
"""Don't split single indexer tags like "TV > HD"
into ['TV', '>', 'HD']
"""
if len(value) == 3:
if value[1] == ">":
return None, [" ".join(value)]
return None, value
def validate_strip_right_slash(value):
"""Strips the right slash"""
if value:
return None, value.rstrip("/")
return None, value
RE_VAL = re.compile(r"[^@ ]+@[^.@ ]+\.[^.@ ]")
@@ -85,6 +148,43 @@ def validate_script(value):
return T("%s is not a valid script") % value, None
def validate_permissions(value: str):
"""Check the permissions for correct input"""
# Octal verification
if not value:
return None, value
try:
oct_value = int(value, 8)
# Block setting it to 0
if not oct_value:
raise ValueError
except ValueError:
return T("%s is not a correct octal value") % value, None
# Check if we at least have user-permissions
if oct_value < int("700", 8):
sabnzbd.misc.helpful_warning(
T("Permissions setting of %s might deny SABnzbd access to the files and folders it creates."), value
)
return None, value
def validate_safedir(root, value, default):
"""Allow only when queues are empty and no UNC"""
if not sabnzbd.__INITIALIZED__ or (sabnzbd.PostProcessor.empty() and sabnzbd.NzbQueue.is_empty()):
return validate_no_unc(root, value, default)
else:
return T("Error: Queue not empty, cannot change folder."), None
def validate_notempty(root, value, default):
"""If value is empty, return default"""
if value:
return None, value
else:
return None, default
##############################################################################
# Special settings
##############################################################################
@@ -139,11 +239,13 @@ nzb_key = OptionStr("misc", "nzb_key", create_api_key())
##############################################################################
# Config - Folders
##############################################################################
umask = OptionStr("misc", "permissions", validation=validate_octal)
download_dir = OptionDir("misc", "download_dir", DEF_DOWNLOAD_DIR, create=False, validation=validate_safedir)
permissions = OptionStr("misc", "permissions", validation=validate_permissions)
download_dir = OptionDir(
"misc", "download_dir", DEF_DOWNLOAD_DIR, create=False, apply_permissions=True, validation=validate_safedir
)
download_free = OptionStr("misc", "download_free")
complete_dir = OptionDir(
"misc", "complete_dir", DEF_COMPLETE_DIR, create=False, apply_umask=True, validation=validate_notempty
"misc", "complete_dir", DEF_COMPLETE_DIR, create=False, apply_permissions=True, validation=validate_notempty
)
complete_free = OptionStr("misc", "complete_free")
fulldisk_autoresume = OptionBool("misc", "fulldisk_autoresume", False)
@@ -233,7 +335,7 @@ rating_filter_pause_keywords = OptionStr("misc", "rating_filter_pause_keywords")
##############################################################################
enable_tv_sorting = OptionBool("misc", "enable_tv_sorting", False)
tv_sort_string = OptionStr("misc", "tv_sort_string")
tv_categories = OptionList("misc", "tv_categories", "")
tv_categories = OptionList("misc", "tv_categories", ["tv"])
enable_movie_sorting = OptionBool("misc", "enable_movie_sorting", False)
movie_sort_string = OptionStr("misc", "movie_sort_string")
@@ -260,6 +362,7 @@ rss_rate = OptionNumber("misc", "rss_rate", 60, 15, 24 * 60)
ampm = OptionBool("misc", "ampm", False)
replace_illegal = OptionBool("misc", "replace_illegal", True)
start_paused = OptionBool("misc", "start_paused", False)
preserve_paused_state = OptionBool("misc", "preserve_paused_state", False)
enable_par_cleanup = OptionBool("misc", "enable_par_cleanup", True)
process_unpacked_par2 = OptionBool("misc", "process_unpacked_par2", True)
enable_unrar = OptionBool("misc", "enable_unrar", True)
@@ -278,7 +381,7 @@ html_login = OptionBool("misc", "html_login", True)
osx_menu = OptionBool("misc", "osx_menu", True)
osx_speed = OptionBool("misc", "osx_speed", True)
warn_dupl_jobs = OptionBool("misc", "warn_dupl_jobs", True)
helpfull_warnings = OptionBool("misc", "helpfull_warnings", True)
helpful_warnings = OptionBool("misc", "helpful_warnings", True)
keep_awake = OptionBool("misc", "keep_awake", True)
win_menu = OptionBool("misc", "win_menu", True)
allow_incomplete_nzb = OptionBool("misc", "allow_incomplete_nzb", False)
@@ -289,7 +392,7 @@ api_warnings = OptionBool("misc", "api_warnings", True, protect=True)
disable_key = OptionBool("misc", "disable_api_key", False, protect=True)
no_penalties = OptionBool("misc", "no_penalties", False)
x_frame_options = OptionBool("misc", "x_frame_options", True)
require_modern_tls = OptionBool("misc", "require_modern_tls", False)
allow_old_ssl_tls = OptionBool("misc", "allow_old_ssl_tls", False)
num_decoders = OptionNumber("misc", "num_decoders", 3)
# Text values
@@ -311,6 +414,7 @@ local_ranges = OptionList("misc", "local_ranges", protect=True)
max_url_retries = OptionNumber("misc", "max_url_retries", 10, 1)
downloader_sleep_time = OptionNumber("misc", "downloader_sleep_time", 10, 0)
ssdp_broadcast_interval = OptionNumber("misc", "ssdp_broadcast_interval", 15, 1, 600)
socks5_proxy_url = OptionStr("misc", "socks5_proxy_url")
##############################################################################
@@ -470,3 +574,51 @@ def set_root_folders2():
https_cert.set_root(admin_dir.get_path())
https_key.set_root(admin_dir.get_path())
https_chain.set_root(admin_dir.get_path())
##############################################################################
# Callbacks for settings
##############################################################################
def new_limit():
"""Callback for article cache changes"""
sabnzbd.ArticleCache.new_limit(cache_limit.get_int())
def guard_restart():
"""Callback for config options requiring a restart"""
sabnzbd.RESTART_REQ = True
def guard_top_only():
"""Callback for change of top_only option"""
sabnzbd.NzbQueue.set_top_only(top_only())
def guard_pause_on_pp():
"""Callback for change of pause-download-on-pp"""
if pause_on_post_processing():
pass # Not safe to idle downloader, because we don't know
# if post-processing is active now
else:
sabnzbd.Downloader.resume_from_postproc()
def guard_quota_size():
"""Callback for change of quota_size"""
sabnzbd.BPSMeter.change_quota()
def guard_quota_dp():
"""Callback for change of quota_day or quota_period"""
sabnzbd.Scheduler.restart()
def guard_language():
"""Callback for change of the interface language"""
sabnzbd.lang.set_language(language())
sabnzbd.api.clear_trans_cache()
def guard_https_ver():
"""Callback for change of https verification"""
sabnzbd.misc.set_https_verification(enable_https_verification())

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -18,7 +18,7 @@
"""
sabnzbd.config - Configuration Support
"""
import argparse
import logging
import os
import re
@@ -30,7 +30,7 @@ from urllib.parse import urlparse
import configobj
import sabnzbd.misc
import sabnzbd
from sabnzbd.constants import CONFIG_VERSION, NORMAL_PRIORITY, DEFAULT_PRIORITY
from sabnzbd.decorators import synchronized
from sabnzbd.filesystem import clip_path, real_path, create_real_path, renamer, remove_file, is_writable
@@ -192,7 +192,7 @@ class OptionDir(Option):
section: str,
keyword: str,
default_val: str = "",
apply_umask: bool = False,
apply_permissions: bool = False,
create: bool = True,
validation: Optional[Callable] = None,
writable: bool = True,
@@ -200,7 +200,7 @@ class OptionDir(Option):
):
self.__validation: Optional[Callable] = validation
self.__root: str = "" # Base directory for relative paths
self.__apply_umask: bool = apply_umask
self.__apply_permissions: bool = apply_permissions
self.__create: bool = create
self.__writable: bool = writable
super().__init__(section, keyword, default_val, add=add)
@@ -220,7 +220,9 @@ class OptionDir(Option):
if value:
path = real_path(self.__root, value)
if self.__create and not os.path.exists(path):
_, path, _ = create_real_path(self.ident()[1], self.__root, value, self.__apply_umask, self.__writable)
_, path, _ = create_real_path(
self.ident()[1], self.__root, value, self.__apply_permissions, self.__writable
)
return path
def get_clipped_path(self) -> str:
@@ -253,7 +255,7 @@ class OptionDir(Option):
if not error:
if value and (self.__create or create):
res, path, error = create_real_path(
self.ident()[1], self.__root, value, self.__apply_umask, self.__writable
self.ident()[1], self.__root, value, self.__apply_permissions, self.__writable
)
if not error:
super().set(value)
@@ -399,7 +401,7 @@ class ConfigServer:
self.displayname = OptionStr(name, "displayname", add=False)
self.host = OptionStr(name, "host", add=False)
self.port = OptionNumber(name, "port", 119, 0, 2 ** 16 - 1, add=False)
self.port = OptionNumber(name, "port", 119, 0, 2**16 - 1, add=False)
self.timeout = OptionNumber(name, "timeout", 60, 20, 240, add=False)
self.username = OptionStr(name, "username", add=False)
self.password = OptionPassword(name, "password", add=False)
@@ -409,6 +411,7 @@ class ConfigServer:
self.ssl_verify = OptionNumber(name, "ssl_verify", 2, add=False)
self.ssl_ciphers = OptionStr(name, "ssl_ciphers", add=False)
self.enable = OptionBool(name, "enable", True, add=False)
self.required = OptionBool(name, "required", False, add=False)
self.optional = OptionBool(name, "optional", False, add=False)
self.retention = OptionNumber(name, "retention", 0, add=False)
self.expire_date = OptionStr(name, "expire_date", add=False)
@@ -442,6 +445,7 @@ class ConfigServer:
"ssl_ciphers",
"send_group",
"enable",
"required",
"optional",
"retention",
"expire_date",
@@ -476,6 +480,7 @@ class ConfigServer:
output_dict["ssl_verify"] = self.ssl_verify()
output_dict["ssl_ciphers"] = self.ssl_ciphers()
output_dict["enable"] = self.enable()
output_dict["required"] = self.required()
output_dict["optional"] = self.optional()
output_dict["retention"] = self.retention()
output_dict["expire_date"] = self.expire_date()
@@ -509,7 +514,7 @@ class ConfigCat:
self.pp = OptionStr(name, "pp", add=False)
self.script = OptionStr(name, "script", "Default", add=False)
self.dir = OptionDir(name, "dir", add=False, create=False)
self.newzbin = OptionList(name, "newzbin", add=False, validation=validate_single_tag)
self.newzbin = OptionList(name, "newzbin", add=False, validation=sabnzbd.cfg.validate_single_tag)
self.priority = OptionNumber(name, "priority", DEFAULT_PRIORITY, add=False)
self.set_dict(values)
@@ -1011,19 +1016,9 @@ def get_filename():
return CFG.filename
##############################################################################
# Default Validation handlers
##############################################################################
__PW_PREFIX = "!!!encoded!!!"
class ErrorCatchingArgumentParser(argparse.ArgumentParser):
def error(self, status=0, message=None):
# Need to override so it doesn't raise SystemExit
if status:
raise ValueError
def encode_password(pw):
"""Encode password in hexadecimal if needed"""
enc = False
@@ -1057,90 +1052,6 @@ def decode_password(pw, name):
return pw
def clean_nice_ionice_parameters(value):
"""Verify that the passed parameters are not exploits"""
if value:
parser = ErrorCatchingArgumentParser()
# Nice parameters
parser.add_argument("-n", "--adjustment", type=int)
# Ionice parameters, not supporting -p
parser.add_argument("--classdata", type=int)
parser.add_argument("-c", "--class", type=int)
parser.add_argument("-t", "--ignore", action="store_true")
try:
parser.parse_args(value.split())
except ValueError:
# Also log at start-up if invalid parameter was set in the ini
msg = "%s: %s" % (T("Incorrect parameter"), value)
logging.error(msg)
return msg, None
return None, value
def all_lowercase(value):
"""Lowercase everything!"""
if isinstance(value, list):
# If list, for each item
return None, [item.lower() for item in value]
return None, value.lower()
def validate_octal(value):
"""Check if string is valid octal number"""
if not value:
return None, value
try:
int(value, 8)
return None, value
except:
return T("%s is not a correct octal value") % value, None
def validate_no_unc(root, value, default):
"""Check if path isn't a UNC path"""
# Only need to check the 'value' part
if value and not value.startswith(r"\\"):
return validate_notempty(root, value, default)
else:
return T('UNC path "%s" not allowed here') % value, None
def validate_safedir(root, value, default):
"""Allow only when queues are empty and no UNC"""
if not sabnzbd.__INITIALIZED__ or (sabnzbd.PostProcessor.empty() and sabnzbd.NzbQueue.is_empty()):
return validate_no_unc(root, value, default)
else:
return T("Error: Queue not empty, cannot change folder."), None
def validate_notempty(root, value, default):
"""If value is empty, return default"""
if value:
return None, value
else:
return None, default
def validate_strip_right_slash(value):
"""Strips the right slash"""
if value:
return None, value.rstrip("/")
return None, value
def validate_single_tag(value: List[str]) -> Tuple[None, List[str]]:
"""Don't split single indexer tags like "TV > HD"
into ['TV', '>', 'HD']
"""
if len(value) == 3:
if value[1] == ">":
return None, [" ".join(value)]
return None, value
def create_api_key():
"""Return a new randomized API_KEY"""
return uuid.uuid4().hex

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -17,7 +17,6 @@
import os
from collections import namedtuple
from re import compile
CONFIG_VERSION = 19
@@ -42,9 +41,9 @@ ANFO = namedtuple("ANFO", "article_sum cache_size cache_limit")
DEF_FOLDER_MAX = 256 - 10
DEF_FILE_MAX = 255 - 10 # max filename length on modern filesystems, minus some room for extra chars later on
GIGI = float(2 ** 30)
MEBI = float(2 ** 20)
KIBI = float(2 ** 10)
GIGI = float(2**30)
MEBI = float(2**20)
KIBI = float(2**10)
BYTES_FILE_NAME_OLD = "totals9.sab"
BYTES_FILE_NAME = "totals10.sab"
@@ -121,7 +120,8 @@ VALID_NZB_FILES = (".nzb", ".gz", ".bz2")
CHEETAH_DIRECTIVES = {"directiveStartToken": "<!--#", "directiveEndToken": "#-->", "prioritizeSearchListOverSelf": True}
IGNORED_FOLDERS = ("@eaDir", ".appleDouble")
IGNORED_FILES_AND_FOLDERS = ("@eaDir", ".appleDouble", ".DS_Store")
IGNORED_MOVIE_FOLDERS = ("video_ts", "audio_ts", "bdmv")
EXCLUDED_GUESSIT_PROPERTIES = [
"part",

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -453,7 +453,7 @@ _PP_LOOKUP = {0: "", 1: "R", 2: "U", 3: "D"}
def build_history_info(nzo, workdir_complete="", postproc_time=0, script_output="", script_line="", series_info=False):
"""Collects all the information needed for the database"""
completed = int(time.time())
pp = _PP_LOOKUP.get(opts_to_pp(*nzo.repair_opts), "X")
pp = _PP_LOOKUP.get(opts_to_pp(nzo.repair, nzo.unpack, nzo.delete), "X")
if script_output:
# Compress the output of the script

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -22,12 +22,15 @@ sabnzbd.decoder - article decoder
import logging
import hashlib
import queue
import binascii
from io import BytesIO
from threading import Thread
from typing import Tuple, List, Optional
import sabnzbd
import sabnzbd.cfg as cfg
from sabnzbd.constants import SABYENC_VERSION_REQUIRED
from sabnzbd.encoding import ubtou
from sabnzbd.nzbstuff import Article
from sabnzbd.misc import match_str
@@ -45,17 +48,18 @@ except ImportError:
SABYENC_ENABLED = False
class CrcError(Exception):
def __init__(self, needcrc: int, gotcrc: int, data: bytes):
class BadData(Exception):
def __init__(self, data: bytes):
super().__init__()
self.needcrc = needcrc
self.gotcrc = gotcrc
self.data = data
class BadYenc(Exception):
def __init__(self):
super().__init__()
pass
class BadUu(Exception):
pass
class Decoder:
@@ -140,7 +144,11 @@ class DecoderWorker(Thread):
if sabnzbd.LOG_ALL:
logging.debug("Decoding %s", art_id)
decoded_data = decode(article, raw_data)
if article.nzf.type == "uu":
decoded_data = decode_uu(article, raw_data)
else:
decoded_data = decode_yenc(article, raw_data)
article_success = True
except MemoryError:
@@ -154,15 +162,20 @@ class DecoderWorker(Thread):
sabnzbd.NzbQueue.reset_try_lists(article)
continue
except CrcError as crc_error:
logging.info("CRC Error in %s" % art_id)
except BadData as error:
# Continue to the next one if we found new server
if search_new_server(article):
continue
# Store data, maybe par2 can still fix it
decoded_data = crc_error.data
decoded_data = error.data
except BadUu:
logging.info("Badly formed uu article in %s", art_id)
# Try the next server
if search_new_server(article):
continue
except (BadYenc, ValueError):
# Handles precheck and badly formed articles
@@ -170,25 +183,29 @@ class DecoderWorker(Thread):
# STAT was used, so we only get a status code
article_success = True
else:
# Examine headers (for precheck) or body (for download)
# Look for DMCA clues (while skipping "X-" headers)
# Detect potential UUencode
for line in raw_data:
lline = line.lower()
if b"message-id:" in lline:
# Try uu-decoding
if (not nzo.precheck) and article.nzf.type != "yenc":
try:
decoded_data = decode_uu(article, raw_data)
logging.debug("Found uu-encoded article %s in job %s", art_id, nzo.final_name)
article_success = True
if not lline.startswith(b"x-") and match_str(
lline, (b"dmca", b"removed", b"cancel", b"blocked")
):
article_success = False
logging.info("Article removed from server (%s)", art_id)
break
if lline.find(b"\nbegin ") >= 0:
logme = T("UUencode detected, only yEnc encoding is supported [%s]") % nzo.final_name
logging.error(logme)
nzo.fail_msg = logme
sabnzbd.NzbQueue.end_job(nzo)
break
except Exception:
pass
# Only bother with further checks if uu-decoding didn't work out
if not article_success:
# Convert the initial chunks of raw socket data to article lines,
# and examine the headers (for precheck) or body (for download).
for line in b"".join(raw_data[:2]).split(b"\r\n"):
lline = line.lower()
if lline.startswith(b"message-id:"):
article_success = True
# Look for DMCA clues (while skipping "X-" headers)
if not lline.startswith(b"x-") and match_str(
lline, (b"dmca", b"removed", b"cancel", b"blocked")
):
article_success = False
logging.info("Article removed from server (%s)", art_id)
break
# Pre-check, proper article found so just register
if nzo.precheck and article_success and sabnzbd.LOG_ALL:
@@ -218,7 +235,7 @@ class DecoderWorker(Thread):
sabnzbd.NzbQueue.register_article(article, article_success)
def decode(article: Article, raw_data: List[bytes]) -> bytes:
def decode_yenc(article: Article, raw_data: List[bytes]) -> bytes:
# Let SABYenc do all the heavy lifting
decoded_data, yenc_filename, crc, crc_expected, crc_correct = sabyenc3.decode_usenet_chunks(raw_data, article.bytes)
@@ -240,11 +257,135 @@ def decode(article: Article, raw_data: List[bytes]) -> bytes:
# CRC check
if not crc_correct:
raise CrcError(crc_expected, crc, decoded_data)
logging.info("CRC Error in %s", article.article)
raise BadData(decoded_data)
return decoded_data
def decode_uu(article: Article, raw_data: List[bytes]) -> bytes:
"""Try to uu-decode an article. The raw_data may or may not contain headers.
If there are headers, they will be separated from the body by at least one
empty line. In case of no headers, the first line seems to always be the nntp
response code (222) directly followed by the msg body."""
if not raw_data:
logging.debug("No data to decode")
raise BadUu
# Line up the raw_data
with BytesIO() as encoded_data:
for data in raw_data:
encoded_data.write(data)
raw_data = encoded_data.getvalue().split(b"\r\n")
# Index of the uu payload start in raw_data
uu_start = 0
# Limit the number of lines to check for the onset of uu data
limit = min(len(raw_data), 32) - 1
if limit < 3:
logging.debug("Article too short to contain valid uu-encoded data")
raise BadUu
# Try to find an empty line separating the body from headers or response
# code and set the expected payload start to the next line.
try:
uu_start = raw_data[:limit].index(b"") + 1
except ValueError:
# No empty line, look for a response code instead
if raw_data[0].startswith(b"222 "):
uu_start = 1
else:
# Invalid data?
logging.debug("Failed to locate start of uu payload")
raise BadUu
def is_uu_junk(line: bytes) -> bool:
"""Determine if the line is empty or contains known junk data"""
return (not line) or line == b"-- " or line.startswith(b"Posted via ")
# Check the uu 'begin' line
if article.lowest_partnum:
try:
# Make sure the line after the uu_start one isn't empty as well or
# detection of the 'begin' line won't work. For articles other than
# lowest_partnum, filtering out empty lines (and other junk) can
# wait until the actual decoding step.
for index in range(uu_start, limit):
if is_uu_junk(raw_data[index]):
uu_start = index + 1
else:
# Bingo
break
else:
# Search reached the limit
raise IndexError
uu_begin_data = raw_data[uu_start].split(b" ")
# Filename may contain spaces
uu_filename = ubtou(b" ".join(uu_begin_data[2:]).strip())
# Sanity check the 'begin' line
if (
len(uu_begin_data) < 3
or uu_begin_data[0].lower() != b"begin"
or (not int(uu_begin_data[1], 8))
or (not uu_filename)
):
raise ValueError
# Consider this enough proof to set the type, avoiding further
# futile attempts at decoding articles in this nzf as yenc.
article.nzf.type = "uu"
# Bump the pointer for the payload to the next line
uu_start += 1
except Exception:
logging.debug("Missing or invalid uu 'begin' line: %s", raw_data[uu_start] if uu_start < limit else None)
raise BadUu
# Do the actual decoding
with BytesIO() as decoded_data:
for line in raw_data[uu_start:]:
# Ignore junk
if is_uu_junk(line):
continue
# End of the article
if line in (b"`", b"end", b"."):
break
try:
decoded_line = binascii.a2b_uu(line)
except binascii.Error as msg:
try:
# Workaround for broken uuencoders by Fredrik Lundh
nbytes = (((ord(line[0]) - 32) & 63) * 4 + 5) / 3
decoded_line = binascii.a2b_uu(line[:nbytes])
except Exception as msg2:
logging.info(
"Error while uu-decoding %s: %s (line: %s; workaround: %s)", article.article, msg, line, msg2
)
raise BadData(decoded_data.getvalue())
# Store the decoded data
decoded_data.write(decoded_line)
# Mark as decoded and set the type to uu; the latter is still needed in
# case the lowest_partnum article was damaged or slow to download.
article.decoded = True
article.nzf.type = "uu"
if article.lowest_partnum:
decoded_data.seek(0)
article.nzf.md5of16k = hashlib.md5(decoded_data.read(16384)).digest()
# Handle the filename
if not article.nzf.filename_checked and uu_filename:
article.nzf.nzo.verify_nzf_filename(article.nzf, uu_filename)
return decoded_data.getvalue()
def search_new_server(article: Article) -> bool:
"""Shorthand for searching new server or else increasing bad_articles"""
# Continue to the next one if we found new server

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -36,6 +36,8 @@ import re
from sabnzbd.filesystem import get_unique_filename, renamer, get_ext
from sabnzbd.par2file import is_parfile, parse_par2_file
import sabnzbd.utils.file_extension as file_extension
from sabnzbd.misc import match_str
from sabnzbd.constants import IGNORED_MOVIE_FOLDERS
from typing import List
# Files to exclude and minimal file size for renaming
@@ -64,9 +66,9 @@ def decode_par2(parfile: str) -> List[str]:
with open(filepath, "rb") as fileToMatch:
first16k_data = fileToMatch.read(16384)
# Check if we have this hash
# Check if we have this hash and the filename is different
file_md5of16k = hashlib.md5(first16k_data).digest()
if file_md5of16k in md5of16k:
if file_md5of16k in md5of16k and fn != md5of16k[file_md5of16k]:
new_path = os.path.join(dirname, md5of16k[file_md5of16k])
# Make sure it's a unique name
unique_filename = get_unique_filename(new_path)
@@ -100,16 +102,16 @@ def recover_par2_names(filelist: List[str]) -> List[str]:
def is_probably_obfuscated(myinputfilename: str) -> bool:
"""Returns boolean if filename is likely obfuscated. Default: True
"""Returns boolean if filename is likely obfuscated. Default: True, so obfuscated
myinputfilename (string) can be a plain file name, or a full path"""
# Find filebasename
path, filename = os.path.split(myinputfilename)
filebasename, fileextension = os.path.splitext(filename)
# First fixed patterns that we know of:
logging.debug("Checking: %s", filebasename)
# First: the patterns that are certainly obfuscated:
# ...blabla.H.264/b082fa0beaa644d3aa01045d5b8d0b36.mkv is certainly obfuscated
if re.findall(r"^[a-f0-9]{32}$", filebasename):
logging.debug("Obfuscated: 32 hex digit")
@@ -121,12 +123,20 @@ def is_probably_obfuscated(myinputfilename: str) -> bool:
logging.debug("Obfuscated: starting with 40+ lower case hex digits and/or dots")
return True
# "[BlaBla] something [More] something 5937bc5e32146e.bef89a622e4a23f07b0d3757ad5e8a.a02b264e [Brrr]"
# So: square brackets plus 30+ hex digit
if re.findall(r"[a-f0-9]{30}", filebasename) and len(re.findall(r"\[\w+\]", filebasename)) >= 2:
logging.debug("Obfuscated: square brackets plus a 30+ hex")
return True
# /some/thing/abc.xyz.a4c567edbcbf27.BLA is certainly obfuscated
if re.findall(r"^abc\.xyz", filebasename):
logging.debug("Obfuscated: starts with 'abc.xyz'")
# ... which we consider as obfuscated:
return True
# Then: patterns that are not obfuscated but typical, clear names:
# these are signals for the obfuscation versus non-obfuscation
decimals = sum(1 for c in filebasename if c.isnumeric())
upperchars = sum(1 for c in filebasename if c.isupper())
@@ -153,9 +163,9 @@ def is_probably_obfuscated(myinputfilename: str) -> bool:
logging.debug("Not obfuscated: starts with a capital, and most letters are lower case")
return False
# If we get here, no trigger for a clear name was found, so let's default to obfuscated
# Finally: default to obfuscated:
logging.debug("Obfuscated (default)")
return True # default not obfuscated
return True # default is obfuscated
def deobfuscate_list(filelist: List[str], usefulname: str):
@@ -166,9 +176,19 @@ def deobfuscate_list(filelist: List[str], usefulname: str):
# 2. if no meaningful extension, add it
# 3. based on detecting obfuscated filenames
# to be sure, only keep really exsiting files:
# to be sure, only keep really existing files:
filelist = [f for f in filelist if os.path.isfile(f)]
# Do not deobfuscate/rename anything if there is a typical DVD or Bluray directory:
ignored_movie_folders_with_dir_sep = tuple(os.path.sep + f + os.path.sep for f in IGNORED_MOVIE_FOLDERS)
match_ignored_movie_folders = [f for f in filelist if match_str(f, ignored_movie_folders_with_dir_sep)]
if match_ignored_movie_folders:
logging.info(
"Skipping deobfuscation because of DVD/Bluray directory name(s), like: %s",
str(match_ignored_movie_folders)[:200],
)
return # bail out of deobfuscate
# let's see if there are files with uncommon/unpopular (so: obfuscated) extensions
# if so, let's give them a better extension based on their internal content/info
# Example: if 'kjladsflkjadf.adsflkjads' is probably a PNG, rename to 'kjladsflkjadf.adsflkjads.png'
@@ -176,7 +196,7 @@ def deobfuscate_list(filelist: List[str], usefulname: str):
for file in filelist:
if file_extension.has_popular_extension(file):
# common extension, like .doc or .iso, so assume OK and change nothing
logging.debug("extension of %s looks common", file)
logging.debug("Extension of %s looks common", file)
newlist.append(file)
else:
# uncommon (so: obfuscated) extension
@@ -220,6 +240,7 @@ def deobfuscate_list(filelist: List[str], usefulname: str):
# check that file is still there (and not renamed by the secondary renaming process below)
if not os.path.isfile(filename):
continue
logging.debug("Deobfuscate inspecting %s", filename)
# Do we need to rename this file?
# Criteria: big, not-excluded extension, obfuscated (in that order)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -25,7 +25,7 @@ import subprocess
import time
import threading
import logging
from typing import Optional
from typing import Optional, Dict, List, Tuple
import sabnzbd
import sabnzbd.cfg as cfg
@@ -34,7 +34,7 @@ from sabnzbd.filesystem import long_path, remove_all, real_path, remove_file
from sabnzbd.nzbstuff import NzbObject, NzbFile
from sabnzbd.encoding import platform_btou
from sabnzbd.decorators import synchronized
from sabnzbd.newsunpack import EXTRACTFROM_RE, EXTRACTED_RE, rar_volumelist
from sabnzbd.newsunpack import RAR_EXTRACTFROM_RE, RAR_EXTRACTED_RE, rar_volumelist, add_time_left
from sabnzbd.postproc import prepare_extraction_path
from sabnzbd.utils.rarfile import RarFile
from sabnzbd.utils.diskspeed import diskspeedmeasure
@@ -54,20 +54,20 @@ class DirectUnpacker(threading.Thread):
self.nzo: NzbObject = nzo
self.active_instance: Optional[subprocess.Popen] = None
self.killed = False
self.killed: bool = False
self.next_file_lock = threading.Condition(threading.RLock())
self.unpack_dir_info = None
self.rarfile_nzf: Optional[NzbFile] = None
self.cur_setname = None
self.cur_volume = 0
self.total_volumes = {}
self.unpack_time = 0.0
self.cur_setname: Optional[str] = None
self.cur_volume: int = 0
self.total_volumes: Dict[str, int] = {}
self.unpack_time: float = 0.0
self.success_sets = {}
self.next_sets = []
self.success_sets: Dict[str, Tuple[List[str], List[str]]] = {}
self.next_sets: List[NzbFile] = []
self.duplicate_lines = 0
self.duplicate_lines: int = 0
nzo.direct_unpacker = self
@@ -108,6 +108,7 @@ class DirectUnpacker(threading.Thread):
def set_volumes_for_nzo(self):
"""Loop over all files to detect the names"""
logging.debug("Parsing setname and volume information for %s" % self.nzo.final_name)
none_counter = 0
found_counter = 0
for nzf in self.nzo.files + self.nzo.finished_files:
@@ -270,12 +271,12 @@ class DirectUnpacker(threading.Thread):
elif linebuf_encoded.startswith("Extracting from"):
# List files we used
filename = re.search(EXTRACTFROM_RE, linebuf_encoded).group(1)
filename = re.search(RAR_EXTRACTFROM_RE, linebuf_encoded).group(1)
if filename not in rarfiles:
rarfiles.append(filename)
else:
# List files we extracted
m = re.search(EXTRACTED_RE, linebuf_encoded)
m = re.search(RAR_EXTRACTED_RE, linebuf_encoded)
if m:
# In case of flat-unpack, UnRar still prints the whole path (?!)
unpacked_file = m.group(2)
@@ -292,9 +293,13 @@ class DirectUnpacker(threading.Thread):
# Possible that the instance was deleted while locked
if not self.killed:
# Sometimes the assembler is still working on the file, resulting in "Unexpected end of archive".
# So we delay a tiny bit before we continue. This is not the cleanest solution, but it works.
time.sleep(0.1)
# If unrar stopped or is killed somehow, writing will cause a crash
try:
# Give unrar some time to do it's thing
# Give unrar some time to do its thing
self.active_instance.stdin.write(b"C\n")
start_time = time.time()
time.sleep(0.1)
@@ -306,7 +311,7 @@ class DirectUnpacker(threading.Thread):
if not last_volume_linebuf or last_volume_linebuf != linebuf:
# Next volume
self.cur_volume += 1
self.nzo.set_action_line(T("Direct Unpack"), self.get_formatted_stats())
self.nzo.set_action_line(T("Direct Unpack"), self.get_formatted_stats(include_time_left=True))
logging.info("DirectUnpacked volume %s for %s", self.cur_volume, self.cur_setname)
# If lines did not change and we don't have the next volume, this download is missing files!
@@ -325,6 +330,7 @@ class DirectUnpacker(threading.Thread):
# Add last line and write any new output
if linebuf:
unrar_log.append(platform_btou(linebuf.strip()))
if unrar_log:
logging.debug("DirectUnpack Unrar output %s", "\n".join(unrar_log))
# Make more space
@@ -346,10 +352,10 @@ class DirectUnpacker(threading.Thread):
return False
def wait_for_next_volume(self):
"""Wait for the correct volume to appear
But stop if it was killed or the NZB is done
"""Wait for the correct volume to appear but stop if it was killed
or the NZB is in post-processing and no new files will be downloaded.
"""
while not self.have_next_volume() and not self.killed and self.nzo.files:
while not self.have_next_volume() and not self.killed and not self.nzo.pp_active:
with self.next_file_lock:
self.next_file_lock.wait()
@@ -384,7 +390,7 @@ class DirectUnpacker(threading.Thread):
# The first NZF
self.rarfile_nzf = self.have_next_volume()
# Ignore if maybe this set is not there any more
# Ignore if maybe this set is not there anymore
# This can happen due to race/timing issues when creating the sets
if not self.rarfile_nzf:
return
@@ -500,12 +506,17 @@ class DirectUnpacker(threading.Thread):
# Reset settings
self.reset_active()
def get_formatted_stats(self):
def get_formatted_stats(self, include_time_left: bool = False):
"""Get percentage or number of rar's done"""
if self.cur_setname and self.cur_setname in self.total_volumes:
# This won't work on obfuscated posts
if self.total_volumes[self.cur_setname] >= self.cur_volume and self.cur_volume:
return "%02d/%02d" % (self.cur_volume, self.total_volumes[self.cur_setname])
formatted_stats = "%02d/%02d" % (self.cur_volume, self.total_volumes[self.cur_setname])
if include_time_left:
formatted_stats += add_time_left(
(self.cur_volume / self.total_volumes[self.cur_setname]) * 100, time_used=self.unpack_time
)
return formatted_stats
return self.cur_volume

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -70,7 +70,7 @@ class DirScanner(threading.Thread):
self.newdir()
try:
dirscan_dir, self.ignored, self.suspected = sabnzbd.load_admin(SCAN_FILE_NAME)
dirscan_dir, self.ignored, self.suspected = sabnzbd.filesystem.load_admin(SCAN_FILE_NAME)
if dirscan_dir != self.dirscan_dir:
self.ignored = {}
self.suspected = {}
@@ -110,7 +110,7 @@ class DirScanner(threading.Thread):
def save(self):
"""Save dir scanner bookkeeping"""
sabnzbd.save_admin((self.dirscan_dir, self.ignored, self.suspected), SCAN_FILE_NAME)
sabnzbd.filesystem.save_admin((self.dirscan_dir, self.ignored, self.suspected), SCAN_FILE_NAME)
def run(self):
"""Start the scanner"""
@@ -178,7 +178,7 @@ class DirScanner(threading.Thread):
continue
# Add the NZB's
res, _ = sabnzbd.add_nzbfile(path, catdir=catdir, keep=False)
res, _ = sabnzbd.nzbparser.add_nzbfile(path, catdir=catdir, keep=False)
if res < 0:
# Retry later, for example when we can't read the file
self.suspected[path] = stat_tuple

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -28,15 +28,15 @@ from nntplib import NNTPPermanentError
import socket
import random
import sys
import ssl
from typing import List, Dict, Optional, Union
import sabnzbd
from sabnzbd.decorators import synchronized, NzbQueueLocker, DOWNLOADER_CV
from sabnzbd.newswrapper import NewsWrapper
import sabnzbd.notifier
import sabnzbd.config as config
import sabnzbd.cfg as cfg
from sabnzbd.misc import from_units, nntp_to_msg, int_conv, get_server_addrinfo
from sabnzbd.misc import from_units, nntp_to_msg, int_conv, get_server_addrinfo, helpful_warning
from sabnzbd.utils.happyeyeballs import happyeyeballs
@@ -73,6 +73,8 @@ class Server:
"ssl",
"ssl_verify",
"ssl_ciphers",
"ssl_context",
"required",
"optional",
"retention",
"send_group",
@@ -103,12 +105,13 @@ class Server:
timeout,
threads,
priority,
ssl,
use_ssl,
ssl_verify,
ssl_ciphers,
send_group,
username=None,
password=None,
required=False,
optional=False,
retention=0,
):
@@ -122,9 +125,11 @@ class Server:
self.timeout: int = timeout
self.threads: int = threads
self.priority: int = priority
self.ssl: bool = ssl
self.ssl: bool = use_ssl
self.ssl_verify: int = ssl_verify
self.ssl_ciphers: str = ssl_ciphers
self.ssl_context: Optional[ssl.SSLContext] = None
self.required: bool = required
self.optional: bool = optional
self.retention: int = retention
self.send_group: bool = send_group
@@ -183,7 +188,7 @@ class Server:
logging.debug("%s: Connecting to address %s", self.host, ip)
elif cfg.load_balancing() == 2:
# RFC6555 / Happy Eyeballs:
ip = happyeyeballs(self.host, port=self.port, ssl=self.ssl)
ip = happyeyeballs(self.host, port=self.port)
if ip:
logging.debug("%s: Connecting to address %s", self.host, ip)
else:
@@ -312,6 +317,7 @@ class Downloader(Thread):
ssl_ciphers = srv.ssl_ciphers()
username = srv.username()
password = srv.password()
required = srv.required()
optional = srv.optional()
retention = int(srv.retention() * 24 * 3600) # days ==> seconds
send_group = srv.send_group()
@@ -344,6 +350,7 @@ class Downloader(Thread):
send_group,
username,
password,
required,
optional,
retention,
)
@@ -363,8 +370,11 @@ class Downloader(Thread):
@NzbQueueLocker
def set_paused_state(self, state: bool):
"""Set downloader to specified paused state"""
self.paused = state
"""Set downloader to new paused state if it is changed"""
if self.paused != state:
if cfg.preserve_paused_state():
cfg.start_paused.set(state)
self.paused = state
@NzbQueueLocker
def resume(self):
@@ -372,6 +382,8 @@ class Downloader(Thread):
if self.paused and sabnzbd.WEB_DIR:
logging.info("Resuming")
sabnzbd.notifier.send_notification("SABnzbd", T("Resuming"), "pause_resume")
if cfg.preserve_paused_state():
cfg.start_paused.set(False)
self.paused = False
@NzbQueueLocker
@@ -381,6 +393,8 @@ class Downloader(Thread):
self.paused = True
logging.info("Pausing")
sabnzbd.notifier.send_notification("SABnzbd", T("Paused"), "pause_resume")
if cfg.preserve_paused_state():
cfg.start_paused.set(True)
if self.is_paused():
sabnzbd.BPSMeter.reset()
if cfg.autodisconnect():
@@ -413,7 +427,7 @@ class Downloader(Thread):
if mx:
self.bandwidth_limit = mx * self.bandwidth_perc / 100
else:
logging.warning_helpful(T("You must set a maximum bandwidth before you can set a bandwidth limit"))
helpful_warning(T("You must set a maximum bandwidth before you can set a bandwidth limit"))
else:
self.bandwidth_limit = from_units(value)
if mx:
@@ -473,12 +487,16 @@ class Downloader(Thread):
if server.errormsg != errormsg:
server.errormsg = errormsg
logging.warning(errormsg)
logging.warning(T("Server %s will be ignored for %s minutes"), server.host, _PENALTY_TIMEOUT)
if not server.required:
logging.warning(T("Server %s will be ignored for %s minutes"), server.host, _PENALTY_TIMEOUT)
# Not fully the same as the code below for optional servers
server.bad_cons = 0
server.deactivate()
self.plan_server(server, _PENALTY_TIMEOUT)
if server.required:
sabnzbd.Scheduler.plan_required_server_resume()
else:
server.deactivate()
self.plan_server(server, _PENALTY_TIMEOUT)
# Optional and active server had too many problems.
# Disable it now and send a re-enable plan to the scheduler
@@ -528,11 +546,11 @@ class Downloader(Thread):
def run(self):
# First check IPv6 connectivity
sabnzbd.EXTERNAL_IPV6 = sabnzbd.test_ipv6()
sabnzbd.EXTERNAL_IPV6 = sabnzbd.misc.test_ipv6()
logging.debug("External IPv6 test result: %s", sabnzbd.EXTERNAL_IPV6)
# Then we check SSL certificate checking
sabnzbd.CERTIFICATE_VALIDATION = sabnzbd.test_cert_checking()
sabnzbd.CERTIFICATE_VALIDATION = sabnzbd.misc.test_cert_checking()
logging.debug("SSL verification test: %s", sabnzbd.CERTIFICATE_VALIDATION)
# Kick BPS-Meter to check quota
@@ -835,12 +853,17 @@ class Downloader(Thread):
penalty = _PENALTY_UNKNOWN
block = True
if block or (penalty and server.optional):
retry_article = False
if server.active:
server.deactivate()
if penalty and (block or server.optional):
self.plan_server(server, penalty)
# Note that the article is discard for this server
self.__reset_nw(nw, retry_article=False, send_quit=True)
if server.required:
sabnzbd.Scheduler.plan_required_server_resume()
retry_article = True
else:
server.deactivate()
if penalty and (block or server.optional):
self.plan_server(server, penalty)
# Note that the article is discard for this server if the server is not required
self.__reset_nw(nw, retry_article=retry_article, send_quit=True)
continue
except:
logging.error(
@@ -929,7 +952,7 @@ class Downloader(Thread):
# Make sure it is not in the readable sockets
self.remove_socket(nw)
if nw.article:
if nw.article and not nw.article.nzf.nzo.removed_from_queue:
# Only some errors should count towards the total tries for each server
if count_article_try:
nw.article.tries += 1
@@ -1127,3 +1150,17 @@ def check_server_quota():
logging.warning(T("Server %s has used the specified quota"), server.displayname())
server.quota.set("")
config.save_config()
def pause_all():
"""Pause all activities than cause disk access"""
sabnzbd.PAUSED_ALL = True
sabnzbd.Downloader.pause()
logging.debug("PAUSED_ALL active")
def unpause_all():
"""Resume all activities"""
sabnzbd.PAUSED_ALL = False
sabnzbd.Downloader.resume()
logging.debug("PAUSED_ALL inactive")

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2021 The SABnzbd-Team <team@sabnzbd.org>
# Copyright 2007-2022 The SABnzbd-Team <team@sabnzbd.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License

Some files were not shown because too many files have changed in this diff Show More