Compare commits

..

1 Commits

Author SHA1 Message Date
Safihre
8bd39e4c12 Refactor pre-queue script
[skip ci]
2023-11-22 16:17:19 +01:00
176 changed files with 2141 additions and 2471 deletions

View File

@@ -1,42 +0,0 @@
# `git blame` master ignore list.
#
# This file contains a list of git hashes of revisions to be ignored
# by `git blame`. These revisions are considered "unimportant" in
# that they are unlikely to be what you are interested in when blaming.
# They are typically expected to be formatting-only changes.
#
# It can be used for `git blame` using `--ignore-revs-file` or by
# setting `blame.ignoreRevsFile` in the `git config`[1].
#
# Ignore these commits when reporting with blame. Calling
#
# git blame --ignore-revs-file .git-blame-ignore-revs
#
# will tell `git blame` to ignore changes made by these revisions when
# assigning blame, as if the change never happened.
#
# You can enable this as a default for your local repository by
# running
#
# git config blame.ignoreRevsFile .git-blame-ignore-revs
#
# This will probably be automatically picked by your IDE
# (VSCode+GitLens and JetBrains products are confirmed to do this).
#
# Important: if you are switching to a branch without this file,
# `git blame` will fail with an error.
#
# GitHub also excludes the commits listed below from its "Blame"
# views[2][3].
#
# [1]: https://git-scm.com/docs/git-blame#Documentation/git-blame.txt-blameignoreRevsFile
# [2]: https://github.blog/changelog/2022-03-24-ignore-commits-in-the-blame-view-beta/
# [3]: https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view
# Black changes
465a88154152fb0607a63fa24c8446bff43ec886
f06891926661986fff52d6eb4b4cb120c71972d1
9bcbcaefdfecc85aedfd8e2f8aaa1ca7f959404e
433dcab02b29f7bd3827e237434034deecc1b549
9f6a9f991222efccc87b45a701086c95629c67b6

View File

@@ -81,7 +81,7 @@ jobs:
# 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.12.1"
PYTHON_VERSION: "3.12.0"
MACOSX_DEPLOYMENT_TARGET: "10.9"
# We need to force compile for universal2 support
CFLAGS: -arch x86_64 -arch arm64

View File

@@ -1,5 +1,5 @@
(c) Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)
The SABnzbd-Team is:

View File

@@ -4,7 +4,7 @@
0) LICENSE
-------------------------------------------------------------------------------
(c) Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
(c) Copyright 2007-2023 by The SABnzbd-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,4 +1,4 @@
(c) Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
(c) Copyright 2007-2023 by The SABnzbd-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,70 +1,33 @@
Release Notes - SABnzbd 4.2.1
Release Notes - SABnzbd 4.2.0 Alpha 2
=========================================================
This is a bug-fix release of SABnzbd 4.2.0.
## Changes since 4.1.0
- Numerous smaller performance improvements were made.
- Reduced recursive unpacking to 2 levels, instead of 5.
- IPv6 addresses are preferred during server address selection.
- Stricter check if `Complete Folder` is inside `Download Folder`.
- Windows: Reduced size of installer.
- Windows/macOS: Updated to Python 3.12.
## Bug-fixes and changes since 4.2.0:
* **Bug-fixes:**
* New downloads did not appear in the History after the update to 4.2.0.
* **Changes:**
* The external IPv6-address is shown, instead of the internal address.
* Windows: Network drives as `Download Folder` are no longer blocked, only warned against.
## Key changes since 4.1.0
* **Duplicate detection workflow overhaul:**
* `Series Duplicate Detection` was replaced by `Smart Duplicate Detection`
that can also detect `Movie` and `Daily Show` duplicates.
* Additionally, duplicates will also be detected if they are still in the queue.
* More information: https://sabnzbd.org/wiki/duplicate-detection
* **Interface changes:**
* Added ability to filter the Queue and History by `status`.
* RSS-feed that provided the download is shown in History details.
* macOS/Windows 10 & 11: Added `Open Folder` button to `Job/Queue finished` notifications.
Clicking any type of notification will now open a browser with SABnzbd.
* **Performance and usability improvements:**
* Numerous smaller performance improvements were made.
* Server IP-address selection was optimized.
* The `Internet Bandwidth` test was made more reliable.
* macOS/Windows: Updated to Python 3.12 and par2cmdline-turbo v1.1.1.
* **Configuration changes:**
* The `On queue finish script` is now set in Switches.
* Reduced recursive unpacking to 2 levels, instead of 5.
* Duplicate detection related Pre-queue script input parameters were removed.
You will need to update your Pre-queue script.
More information: https://sabnzbd.org/wiki/configuration/4.2/scripts/pre-queue-scripts
* Stricter check if `Complete Folder` is inside `Download Folder`.
* Windows: Prevent use of network drive as `Download Folder`.
## Bug fixes since 4.1.0
* Fixed an issue where the multi-select option in the queue was not working for some users.
* Prevented a crash that would occur during the saving of configuration settings.
* Jobs with larger articles could stall the queue for several minutes.
* Ensured that server warnings are always displayed to users.
* If `weblogging` was enabled, output was also written to regular log.
* Fixed an issue where removing a failed download from the History could break active downloads.
## Bugfixes since 4.1.0
- Multi-select in the queue was broken for some users.
- Prevent crash during saving of configuration.
- Removing a failed download from the history could break active downloads.
## Upgrade notices
* You can directly upgrade from version 3.0.0 and newer.
* Upgrading from older versions will require performing a `Queue repair`.
* Downgrading from version 4.2.0 or newer to 3.7.2 or older will require
performing a `Queue repair` due to changes in the internal data format.
- Direct upgrade is possible from version 3.0.0 and newer.
Upgrading from older versions will require `Queue repair`.
- Downgrading from version 4.2.0 or newer to 3.7.2 or older will
require `Queue repair` due to changes in the internal data format.
## Known problems and solutions
* Read `ISSUES.txt` or https://sabnzbd.org/wiki/introduction/known-issues
- Read the file "ISSUES.txt"
## About
SABnzbd is an open-source cross-platform binary newsreader.
It simplifies the process of downloading from Usenet dramatically, thanks to its web-based
user interface and advanced built-in post-processing options that automatically verify, repair,
extract and clean up posts downloaded from Usenet.
SABnzbd is an open-source cross-platform binary newsreader.
It simplifies the process of downloading from Usenet dramatically, thanks
to its web-based user interface and advanced built-in post-processing options
that automatically verify, repair, extract and clean up posts downloaded
from Usenet.
(c) Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -83,6 +83,7 @@ from sabnzbd.constants import (
)
import sabnzbd.newsunpack
from sabnzbd.misc import (
check_latest_version,
exit_sab,
split_host,
create_https_certificates,
@@ -103,7 +104,8 @@ import sabnzbd.config as config
import sabnzbd.cfg
import sabnzbd.notifier as notifier
import sabnzbd.zconfig
from sabnzbd.getipaddress import local_ipv4
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6, dnslookup
from sabnzbd.utils.getperformance import getpystone, getcpu
import sabnzbd.utils.ssdp as ssdp
try:
@@ -242,7 +244,7 @@ def print_version():
"""
%s-%s
(C) Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
Copyright (C) 2007-2023 The SABnzbd-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
@@ -1205,13 +1207,23 @@ def main():
logging.warning(T("Could not load additional certificates from certifi package"))
logging.info("Traceback: ", exc_info=True)
# List the number of certificates available (can take up to 1.5 seconds)
# Extra startup info
if sabnzbd.cfg.log_level() > 1:
# List the number of certificates available (can take up to 1.5 seconds)
logging.debug("Available certificates = %s", repr(ssl.create_default_context().cert_store_stats()))
# List networking
localipv4()
publicipv4()
ipv6()
dnslookup()
# Measure basic system performance measured by pystone and - if possible - CPU model
getpystone()
getcpu()
logging.info("Using INI file %s", inifile)
# Store auto-browser setting from command line
if autobrowser is not None:
sabnzbd.cfg.autobrowser.set(autobrowser)
@@ -1463,6 +1475,8 @@ def main():
if not autorestarted:
launch_a_browser(browser_url)
notifier.send_notification("SABnzbd", T("SABnzbd %s started") % sabnzbd.__version__, "startup")
# Now's the time to check for a new version
check_latest_version()
autorestarted = False
# Start SSDP and Bonjour if SABnzbd isn't listening on localhost only
@@ -1473,7 +1487,7 @@ def main():
external_host = cherryhost
else:
# Fall back to the IPv4 address of the LAN interface
external_host = local_ipv4()
external_host = localipv4()
logging.debug("Using %s as host address for Bonjour and SSDP", external_host)
# Only broadcast to local network addresses. If local ranges have been defined, further
@@ -1748,10 +1762,10 @@ if __name__ == "__main__":
# Initialize the menu
shared_app = NSApplication.sharedApplication()
sabnzbd.MACOSTRAY = SABnzbdDelegate.alloc().init()
shared_app.setDelegate_(sabnzbd.MACOSTRAY)
sabnzbd_menu = SABnzbdDelegate.alloc().init()
shared_app.setDelegate_(sabnzbd_menu)
# Build the menu
sabnzbd.MACOSTRAY.awakeFromNib()
sabnzbd_menu.awakeFromNib()
# Run the main eventloop
AppHelper.runEventLoop()
else:

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2008-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2017 The SABnzbd-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 2008-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2017 The SABnzbd-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,3 +1,3 @@
# Special requirements for macOS universal2 binary release
# This way dependabot can auto-update them
cryptography==41.0.7
cryptography==41.0.5

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2008-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2017 The SABnzbd-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 2008-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2017 The SABnzbd-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,15 +1,15 @@
# Basic build requirements
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
pyinstaller==6.3.0
pyinstaller==6.2.0
packaging==23.2
pyinstaller-hooks-contrib==2023.11
pyinstaller-hooks-contrib==2023.10
altgraph==0.17.4
wrapt==1.16.0
setuptools==69.0.3
setuptools==68.2.2
certifi
# Required on 32bit Windows, exclude it based on Python-version
importlib_metadata==7.0.1; python_version < '3.10'
importlib_metadata==6.8.0; python_version < '3.10'
importlib_resources==6.1.1; python_version < '3.10'
zipp==3.17.0; python_version < '3.10'

View File

@@ -200,14 +200,9 @@ Section "SABnzbd" SecDummy
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "URLUpdateInfo" 'https://sabnzbd.org/'
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "Comments" 'The automated Usenet download tool'
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayIcon" '$INSTDIR\icons\sabnzbd.ico'
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "EstimatedSize" 40674
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "EstimatedSize" 25674
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "NoRepair" -1
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "NoModify" -1
WriteRegStr HKEY_CURRENT_USER "Software\Classes\AppUserModelId\SABnzbd" "DisplayName" "SABnzbd"
WriteRegStr HKEY_CURRENT_USER "Software\Classes\AppUserModelId\SABnzbd" "IconUri" '$INSTDIR\icons\sabnzbd16_32.ico'
; write out uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
@@ -353,8 +348,6 @@ Section "un.$(MsgDelProgram)" Uninstall
Delete "$INSTDIR\uninstall.exe"
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd"
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd"
DeleteRegKey HKEY_CURRENT_USER "Software\Classes\AppUserModelId\SABnzbd"
DeleteRegKey HKEY_CURRENT_USER "Software\SABnzbd"
${RemovePrev} "$INSTDIR"
@@ -390,6 +383,8 @@ Section "un.$(MsgDelProgram)" Uninstall
Delete "$DESKTOP\SABnzbd.lnk"
DeleteRegKey HKEY_CURRENT_USER "Software\SABnzbd"
${unregisterExtension} ".nzb" "NZB File"
${RefreshShellIcons}

View File

@@ -33,6 +33,14 @@
$ssl_version
</td>
</tr>
<!--#if not $certificate_validation#-->
<tr>
<th scope="row"></th>
<td>
<span class="label label-danger">$T('warning')</span> $T('explain-nosslcontext')
</td>
</tr>
<!--#end if#-->
<!--#if not $windows and not $macos#-->
<tr>
<th scope="row">Par2cmdline-turbo:</th>
@@ -80,8 +88,8 @@
<td><a href="https://github.com/sabnzbd/sabnzbd" target="_blank">https://github.com/sabnzbd/sabnzbd</a></td>
</tr>
<tr>
<th scope="row">$T('menu-live-chat') </th>
<td><a href="https://sabnzbd.org/live-chat/" target="_blank">https://sabnzbd.org/live-chat/</a></td>
<th scope="row">$T('menu-irc') </th>
<td><a href="irc://irc.synirc.net/#sabnzbd"><i>#sabnzbd</i> on <i>irc.synirc.net</i></a> $T('or') (<a href="http://sabnzbd.org/live-chat/" target="_blank">webchat</a>)</td>
</tr>
<tr>
<th scope="row">$T('menu-issues') </th>
@@ -98,7 +106,7 @@
<div class="colmask">
<div class="padding">
<h5 class="copyright">Copyright &copy; 2007-2024 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)</h5>
<h5 class="copyright">Copyright &copy; 2007-2023 The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)</h5>
<p class="copyright"><small>$T('yourRights')</small></p>
</div>

View File

@@ -172,10 +172,11 @@
<option value="1" <!--#if $check_new_rel == 1 then 'selected="selected"' else ""#--> >$T('on')</option>
<option value="2" <!--#if $check_new_rel == 2 then 'selected="selected"' else ""#--> >$T('also-test')</option>
</select>
<span class="desc">$T('explain-check_new_rel')</span>
</div>
<div class="field-pair advanced-settings">
<div class="field-pair advanced-settings <!--#if int($certificate_validation) == 0 then "disabled" else ""#-->">
<label class="config" for="enable_https_verification">$T('opt-enable_https_verification')</label>
<input type="checkbox" name="enable_https_verification" id="enable_https_verification" value="1" <!--#if int($enable_https_verification) > 0 then 'checked="checked"' else ""#--> />
<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">

View File

@@ -202,7 +202,7 @@
<div class="field-pair">
<label class="config" for="nscript_parameters">$T('opt-nscript_parameters')</label>
<input type="text" name="nscript_parameters" id="nscript_parameters" value="$nscript_parameters" />
<span class="desc">$T('Optional') - $T('readwiki')</span>
<span class="desc">$T('Optional') - $T('explain-nscript_parameters')</span>
</div>
$show_notify_checkboxes('nscript')
<div class="field-pair no-field-pair-bg">

View File

@@ -91,9 +91,9 @@
<label class="config" for="timeout">$T('srv-timeout')</label>
<input type="number" name="timeout" id="timeout" min="20" max="240" /> <i>$T('seconds')</i>
</div>
<div class="field-pair advanced-settings">
<div class="field-pair <!--#if int($certificate_validation) == 0 then "disabled" else ""#--> advanced-settings">
<label class="config" for="ssl_verify">$T('opt-ssl_verify')</label>
<select name="ssl_verify" id="ssl_verify">
<select name="ssl_verify" id="ssl_verify" <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#-->>
<option value="2" selected>$T('ssl_verify-strict')</option>
<option value="1">$T('ssl_verify-normal')</option>
<option value="0">$T('ssl_verify-disabled')</option>
@@ -223,9 +223,9 @@
<input type="number" name="timeout" id="timeout$cur" value="$server['timeout']" min="20" max="240" required /> <i>$T('seconds')</i>
</div>
<div class="field-pair advanced-settings">
<div class="field-pair <!--#if int($certificate_validation) == 0 then "disabled" else ""#--> advanced-settings">
<label class="config" for="ssl_verify$cur">$T('opt-ssl_verify')</label>
<select name="ssl_verify" id="ssl_verify$cur">
<select name="ssl_verify" id="ssl_verify$cur" <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#-->>
<option value="2" <!--#if $server['ssl_verify'] == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
<option value="1" <!--#if $server['ssl_verify'] == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-normal')</option>
<option value="0" <!--#if $server['ssl_verify'] == 0 then 'selected="selected"' else ""#--> >$T('ssl_verify-disabled')</option>

View File

@@ -96,29 +96,23 @@
<option value="3" <!--#if int($no_dupes) == 3 then 'selected="selected"' else ""#--> >$T('nodupes-fail')</option>
<option value="1" <!--#if int($no_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
</select>
<span class="desc">
$T('explain-no_dupes')<br>
<a href="https://sabnzbd.org/wiki/duplicate-detection" target="_blank">https://sabnzbd.org/wiki/duplicate-detection</a>
</span>
<span class="desc">$T('explain-no_dupes')</span>
</div>
<div class="field-pair">
<label class="config" for="no_smart_dupes">$T('opt-no_smart_dupes')</label>
<select name="no_smart_dupes" id="no_smart_dupes">
<option value="0" <!--#if int($no_smart_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
<option value="4" <!--#if int($no_smart_dupes) == 4 then 'selected="selected"' else ""#--> >$T('nodupes-tag')</option>
<option value="2" <!--#if int($no_smart_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
<option value="3" <!--#if int($no_smart_dupes) == 3 then 'selected="selected"' else ""#--> >$T('nodupes-fail')</option>
<option value="1" <!--#if int($no_smart_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
<label class="config" for="no_series_dupes">$T('opt-no_series_dupes')</label>
<select name="no_series_dupes" id="no_series_dupes">
<option value="0" <!--#if int($no_series_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
<option value="4" <!--#if int($no_series_dupes) == 4 then 'selected="selected"' else ""#--> >$T('nodupes-tag')</option>
<option value="2" <!--#if int($no_series_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
<option value="3" <!--#if int($no_series_dupes) == 3 then 'selected="selected"' else ""#--> >$T('nodupes-fail')</option>
<option value="1" <!--#if int($no_series_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
</select>
<span class="desc">
$T('explain-no_smart_dupes')<br>
<a href="https://sabnzbd.org/wiki/duplicate-detection" target="_blank">https://sabnzbd.org/wiki/duplicate-detection</a>
</span>
<span class="desc">$T('explain-no_series_dupes')</span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="dupes_propercheck">$T('opt-dupes_propercheck')</label>
<input type="checkbox" name="dupes_propercheck" id="dupes_propercheck" value="1" <!--#if int($dupes_propercheck) > 0 then 'checked="checked"' else ""#--> />
<span class="desc">$T('explain-dupes_propercheck')</span>
<label class="config" for="series_propercheck">$T('opt-series_propercheck')</label>
<input type="checkbox" name="series_propercheck" id="series_propercheck" value="1" <!--#if int($series_propercheck) > 0 then 'checked="checked"' else ""#--> />
<span class="desc">$T('explain-series_propercheck')</span>
</div>
<div class="field-pair">
<label class="config" for="pause_on_pwrar">$T('opt-pause_on_pwrar')</label>
@@ -193,12 +187,12 @@
<div class="field-pair advanced-settings <!--#if not $have_nice then "disabled" else "" #-->">
<label class="config" for="nice">$T('opt-nice')</label>
<input type="text" name="nice" id="nice" value="$nice" <!--#if not $have_nice then 'readonly="readonly" disabled="disabled"' else "" #--> />
<span class="desc">$T('readwiki')</span>
<span class="desc">$T('explain-nice')</span>
</div>
<div class="field-pair advanced-settings <!--#if not $have_ionice then "disabled" else "" #-->">
<label class="config" for="ionice">$T('opt-ionice')</label>
<input type="text" name="ionice" id="ionice" value="$ionice" <!--#if not $have_ionice then 'readonly="readonly" disabled="disabled"' else "" #--> />
<span class="desc">$T('readwiki')</span>
<span class="desc">$T('explain-ionice')</span>
</div>
<!--#else#-->
<div class="field-pair advanced-settings">
@@ -210,13 +204,13 @@
<option value="2" <!--#if int($win_process_prio) == 2 then 'selected="selected"' else ""#-->>$T('win_process_prio-low')</option>
<option value="1" <!--#if int($win_process_prio) == 1 then 'selected="selected"' else ""#-->>$T('win_process_prio-idle')</option>
</select>
<span class="desc">$T('readwiki')</span>
<span class="desc">$T('explain-win_process_prio')</span>
</div>
<!--#end if#-->
<div class="field-pair advanced-settings">
<label class="config" for="par_option">$T('opt-par_option')</label>
<input type="text" name="par_option" id="par_option" value="$par_option" />
<span class="desc">$T('readwiki')</span>
<span class="desc">$T('explain-par_option')</span>
</div>
<div class="field-pair advanced-settings">
<label class="config" for="sfv_check">$T('opt-sfv_check')</label>

View File

@@ -134,7 +134,7 @@
<div class="col-sm-6">$T('dashboard-systemPerformance') &nbsp; </div>
<div class="col-sm-6 col-dot-overflow" data-bind="visible: hasPerformanceInfo">
<span data-bind="text: statusInfo.pystone"></span>
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest') (~10 $T('seconds'))"><span class="glyphicon glyphicon-repeat"></span></a>
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
<small title="$cpumodel $cpusimd" data-tooltip="true">$cpumodel $cpusimd</small>
</div>
<div class="col-sm-6 col-loading" data-bind="visible: !hasPerformanceInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
@@ -143,7 +143,7 @@
<div class="col-sm-6">$T('dashboard-downloadDirSpeed') &nbsp; </div>
<div class="col-sm-6 col-dot-overflow" data-bind="visible: hasPerformanceInfo">
<span data-bind="text: statusInfo.downloaddirspeed()"></span> MB/s
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest') (~10 $T('seconds'))"><span class="glyphicon glyphicon-repeat"></span></a>
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
<small data-bind="text: statusInfo.downloaddir, attr: { 'data-original-title': statusInfo.downloaddir }" data-tooltip="true"></small>
</div>
<div class="col-sm-6 col-loading" data-bind="visible: !hasPerformanceInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
@@ -152,7 +152,7 @@
<div class="col-sm-6">$T('dashboard-completeDirSpeed') &nbsp; </div>
<div class="col-sm-6 col-dot-overflow" data-bind="visible: hasPerformanceInfo">
<span data-bind="text: statusInfo.completedirspeed()"></span> MB/s
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest') (~10 $T('seconds'))"><span class="glyphicon glyphicon-repeat"></span></a>
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
<small data-bind="text: statusInfo.completedir, attr: { 'data-original-title': statusInfo.completedir }" data-tooltip="true"></small>
</div>
<div class="col-sm-6 col-loading" data-bind="visible: !hasPerformanceInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
@@ -161,7 +161,7 @@
<div class="col-sm-6">$T('dashboard-internetBandwidth') &nbsp; </div>
<div class="col-sm-6" data-bind="visible: hasPerformanceInfo">
<span data-bind="text: statusInfo.internetbandwidth()"></span> MB/s
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest') (~10 $T('seconds'))"><span class="glyphicon glyphicon-repeat"></span></a>
<a href="#" class="diskspeed-button" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
<small><span data-bind="text: statusInfo.internetbandwidth()*8"></span> Mbps</small>
</div>
<div class="col-sm-6 col-loading" data-bind="visible: !hasPerformanceInfo()">$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></div>
@@ -712,13 +712,13 @@
<td><a href="https://github.com/sabnzbd/sabnzbd" target="_blank">https://github.com/sabnzbd/sabnzbd/</a></td>
</tr>
<tr>
<td><strong>$T('menu-live-chat'):</strong></td>
<td><strong>$T('menu-irc'):</strong></td>
<td><a href="https://sabnzbd.org/live-chat" target="_blank">https://sabnzbd.org/live-chat</a></td>
</tr>
</tbody>
</table>
<hr/>
<p><small>Copyright &copy; 2007-2024 by The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)<br/>$T('yourRights') </small></p>
<p><small>Copyright (C) 2007-2021 The SABnzbd-Team (<a href="https://sabnzbd.org/" target="_blank">sabnzbd.org</a>)<br/>$T('yourRights') </small></p>
</div>
</div>
</div>

View File

@@ -97,7 +97,6 @@
glitterTranslate.status['Unpack'] = "$T('stage-unpack')";
glitterTranslate.status['Deobfuscate'] = "$T('stage-deobfuscate')";
glitterTranslate.status['Script'] = "$T('stage-script')";
glitterTranslate.status['RSS'] = "$T('stage-rss')";
glitterTranslate.status['Source'] = "$T('stage-source')";
glitterTranslate.status['Servers'] = "$T('stage-servers')";
glitterTranslate.status['INFO'] = "$T('log-info')".replace('+', '').toUpperCase();

View File

@@ -338,7 +338,7 @@ function ViewModel() {
limit: parseInt(self.queue.paginationLimit())
}
if (self.queue.searchTerm()) {
parseSearchQuery(api_call, self.queue.searchTerm(), ["cat", "category", "priority", "status"])
parseSearchQuery(api_call, self.queue.searchTerm(), ["cat", "category", "priority"])
}
var queueApi = callAPI(api_call)
.done(self.updateQueue)
@@ -367,7 +367,7 @@ function ViewModel() {
last_history_update: self.history.lastUpdate
}
if (self.history.searchTerm()) {
parseSearchQuery(history_call, self.history.searchTerm(), ["cat", "category", "status"])
parseSearchQuery(history_call, self.history.searchTerm(), ["cat", "category"])
}
// History
@@ -397,6 +397,7 @@ function ViewModel() {
if (keyword === "priority" && api_request["priority"]) {
for (const prio_name in self.queue.priorityName) {
api_request["priority"] = api_request["priority"].replace(prio_name, self.queue.priorityName[prio_name])
}
}
}
@@ -655,12 +656,15 @@ function ViewModel() {
name: $(form.nzbURL).val(),
nzbname: $('#nzbname').val(),
password: $('#password').val(),
cat: $('#modal-add-nzb select[name="Category"]').val(),
priority: $('#modal-add-nzb select[name="Priority"]').val(),
pp: $('#modal-add-nzb select[name="Processing"]').val(),
script: $('#modal-add-nzb select[name="Post-processing"]').val(),
priority: $('#modal-add-nzb select[name="Priority"]').val(),
pp: $('#modal-add-nzb select[name="Processing"]').val()
}
// Optional, otherwise they get mis-labeled if left empty
if ($('#modal-add-nzb select[name="Category"]').val() !== '*') theCall.cat = $('#modal-add-nzb select[name="Category"]').val()
if ($('#modal-add-nzb select[name="Processing"]').val()) theCall.pp = $('#modal-add-nzb select[name="Category"]').val()
// Add
callAPI(theCall).then(function(r) {
// Hide and reset/refresh
@@ -699,12 +703,14 @@ function ViewModel() {
data.append("mode", "addfile");
data.append("nzbname", $('#nzbname').val());
data.append("password", $('#password').val());
data.append("cat", $('#modal-add-nzb select[name="Category"]').val())
data.append("priority", $('#modal-add-nzb select[name="Priority"]').val())
data.append("pp", $('#modal-add-nzb select[name="Processing"]').val())
data.append("script", $('#modal-add-nzb select[name="Post-processing"]').val())
data.append("priority", $('#modal-add-nzb select[name="Priority"]').val())
data.append("apikey", apiKey);
// Optional, otherwise they get mis-labeled if left empty
if ($('#modal-add-nzb select[name="Category"]').val() !== '*') data.append("cat", $('#modal-add-nzb select[name="Category"]').val());
if ($('#modal-add-nzb select[name="Processing"]').val()) data.append("pp", $('#modal-add-nzb select[name="Processing"]').val());
// Add this one
$.ajax({
url: "./api",

View File

@@ -69,7 +69,7 @@
<div class="form-group">
<label for="ssl_verify" class="col-sm-4 control-label">$T('opt-ssl_verify')</label>
<div class="col-sm-8">
<select name="ssl_verify" id="ssl_verify" class="form-control">
<select name="ssl_verify" id="ssl_verify" class="form-control" <!--#if int($certificate_validation) == 0 then "disabled=\"disabled\"" else ""#-->>
<option value="2" <!--#if $ssl_verify == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
<option value="1" <!--#if $ssl_verify == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-normal')</option>
<option value="0" <!--#if $ssl_verify == 0 then 'selected="selected"' else ""#--> >$T('ssl_verify-disabled')</option>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2022-2024 by The SABnzbd-Team (sabnzbd.org) -->
<!-- Copyright 2022-2023 The SABnzbd-Team (sabnzbd.org) -->
<component type="desktop-application">
<id>org.sabnzbd.sabnzbd</id>
<metadata_license>MIT</metadata_license>
@@ -30,8 +30,7 @@
<url type="faq">https://sabnzbd.org/wiki/faq</url>
<url type="contact">https://sabnzbd.org/live-chat.html</url>
<releases>
<release version="4.2.1" date="2024-01-05" type="stable"/>
<release version="4.2.0" date="2024-01-03" type="stable"/>
<release version="4.2.0" date="2023-11-26" type="stable"/>
<release version="4.1.0" date="2023-09-26" type="stable"/>
<release version="4.0.3" date="2023-06-16" type="stable"/>
<release version="4.0.2" date="2023-06-09" type="stable"/>

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -1,10 +1,10 @@
#
# SABnzbd Translation Template file EMAIL
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: team@sabnzbd.org\n"
"Language-Team: SABnzbd <team@sabnzbd.org>\n"

View File

@@ -3,7 +3,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
"MIME-Version: 1.0\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: ION, 2020\n"
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"

View File

@@ -1,10 +1,10 @@
#
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: team@sabnzbd.org\n"
"Language-Team: SABnzbd <team@sabnzbd.org>\n"
@@ -162,6 +162,11 @@ msgstr ""
msgid "Default"
msgstr ""
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr ""
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -253,9 +258,8 @@ msgstr ""
msgid "Permissions setting of %s might deny SABnzbd access to the files and folders it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgid "UNC path \"%s\" not allowed here"
msgstr ""
#: sabnzbd/cfg.py
@@ -678,10 +682,6 @@ msgstr ""
msgid "Back"
msgstr ""
#: sabnzbd/misc.py
msgid "To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr ""
@@ -1002,16 +1002,6 @@ msgstr ""
msgid "Other Messages"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr ""
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr ""
@@ -1379,11 +1369,6 @@ msgstr ""
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr ""
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr ""
#. Warning message
#: sabnzbd/postproc.py
msgid "Completed Download Folder %s is on FAT file system, limiting maximum file size to 4GB"
@@ -1566,6 +1551,10 @@ msgstr ""
msgid "Show interface"
msgstr ""
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr ""
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1653,11 +1642,6 @@ msgstr ""
msgid "Script"
msgstr ""
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr ""
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -1930,6 +1914,7 @@ msgstr ""
msgid "Home page"
msgstr ""
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr ""
@@ -1996,7 +1981,7 @@ msgstr ""
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgid "IRC"
msgstr ""
#. Main menu item
@@ -2029,6 +2014,11 @@ msgstr ""
msgid "Scheduling"
msgstr ""
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr ""
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2416,6 +2406,10 @@ msgstr ""
msgid "Enable 7zip"
msgstr ""
#: sabnzbd/skintext.py
msgid "Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will be encrypted, however, validating a server's identity using its certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid "Speed up repairs by installing par2cmdline-turbo, it is available for many platforms."
msgstr ""
@@ -2433,6 +2427,7 @@ msgstr ""
msgid "Backup"
msgstr ""
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr ""
@@ -2909,19 +2904,19 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
msgstr ""
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgid "Detect identical NZB files (based on items in your History or files in .nzb Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgid "Detect duplicate episodes in series"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid "Detect identical episodes in series (based on \"name/season/episode\" of items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -2929,7 +2924,7 @@ msgid "Allow proper releases"
msgstr ""
#: sabnzbd/skintext.py
msgid "Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in the download name."
msgid "Bypass series duplicate detection if PROPER, REAL or REPACK is detected in the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3064,6 +3059,10 @@ msgstr ""
msgid "Check for New Release"
msgstr ""
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr ""
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Pavel C <quoing_transifex@mess.cz>, 2023
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"
@@ -179,6 +179,11 @@ msgstr "Žádný"
msgid "Default"
msgstr "Výchozí"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Nepodařilo se zkompilovat regex pro hledaný výraz: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -280,10 +285,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC cesta \"%s\" zde není povolena"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -729,11 +733,6 @@ msgstr "CHYBA:"
msgid "Back"
msgstr "Zpět"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -1070,16 +1069,6 @@ msgstr "Fronta dokončena"
msgid "Other Messages"
msgstr "Ostatní zprávy"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Otevřít složku s kompletními soubory"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Nedostupné"
@@ -1452,11 +1441,6 @@ msgstr ""
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr "Stará fronta nalezena, použijte Status->Repair pro konverzi fronty"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Nepodařilo se zkompilovat regex pro hledaný výraz: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1641,6 +1625,10 @@ msgstr "Prázdný RSS záznam nalezen (%s)"
msgid "Show interface"
msgstr "Zobrazit rozhraní"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Otevřít složku s kompletními soubory"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1729,11 +1717,6 @@ msgstr ""
msgid "Script"
msgstr "Skript"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2006,6 +1989,7 @@ msgstr "Verze pythonu"
msgid "Home page"
msgstr "Domovská stránka"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "nebo"
@@ -2072,8 +2056,8 @@ msgstr "Fórum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2105,6 +2089,11 @@ msgstr "Přepínače"
msgid "Scheduling"
msgstr "Plánování"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2506,6 +2495,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Povolit 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2525,6 +2522,7 @@ msgstr ""
msgid "Backup"
msgstr "Záloha"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr ""
@@ -3049,19 +3047,23 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
msgstr ""
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr "Detekovat duplicitní stahování"
#: sabnzbd/skintext.py
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgid "Detect duplicate episodes in series"
msgstr ""
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -3070,8 +3072,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3214,6 +3216,10 @@ msgstr ""
msgid "Check for New Release"
msgstr ""
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr ""
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"
@@ -179,6 +179,11 @@ msgstr "Ingen"
msgid "Default"
msgstr "Standard"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Det lykkedes ikke at kompilere regex for søgestreng: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -280,10 +285,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC søgning \"%s\" er ikke tilladt her"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -737,11 +741,6 @@ msgstr "FEJL:"
msgid "Back"
msgstr "Tilbage"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -1074,16 +1073,6 @@ msgstr "Kø færdig"
msgid "Other Messages"
msgstr "Andre beskeder"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Åben færdig mappe"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Ikke tilgængelig"
@@ -1484,11 +1473,6 @@ msgstr "Fejl %s: Du skal angive et gyldigt brugernavn og adgangskode."
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr "Gamle kø opdaget, brug Status->Reparation for at konvertere kø"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Det lykkedes ikke at kompilere regex for søgestreng: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1673,6 +1657,10 @@ msgstr "Tom RSS post blev fundet (%s)"
msgid "Show interface"
msgstr "Vis grænseflade"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Åben færdig mappe"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1761,11 +1749,6 @@ msgstr ""
msgid "Script"
msgstr "Script"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2038,6 +2021,7 @@ msgstr "Python-version"
msgid "Home page"
msgstr "Startside"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "eller"
@@ -2104,8 +2088,8 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2137,6 +2121,11 @@ msgstr "Parameter"
msgid "Scheduling"
msgstr "Planlægning"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2547,6 +2536,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Aktivere 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2566,6 +2563,7 @@ msgstr "Oppetid"
msgid "Backup"
msgstr "Sikkerhedskopi"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Læs mere om dette på Wiki Help!"
@@ -3117,20 +3115,28 @@ msgstr ""
"I tilfælde af \"Pause\", skal du angive en adgangskode og genoptage jobbet."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgstr ""
msgid "Detect Duplicate Downloads"
msgstr "Find identiske downloads"
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
"Fundet identiske NZB filer (baseret på elementer i din historik eller filer "
"i. nzb Backup mappe)"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Opdage identiske episoder i serier"
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
"Fundet identiske episoder i serie (baseret på \"navn /sæson /episode\" af "
"elementer i din historik)"
#: sabnzbd/skintext.py
msgid "Allow proper releases"
@@ -3138,8 +3144,8 @@ msgstr "Tillad reelle udgivelser"
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3288,6 +3294,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Kontroller for ny version"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Kontroller for ny version af SABnzbd hver uge."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# C E <githubce@eiselt.ch>, 2020
@@ -15,7 +15,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"
@@ -195,6 +195,12 @@ msgstr "Nichts"
msgid "Default"
msgstr "Standard"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr ""
"Kompilieren des regulären Ausdrucks für den Suchbegriff %s fehlgeschlagen."
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -300,10 +306,9 @@ msgstr ""
"Die aktuellen Zugriffseinstellungen (%s) könnte SABnzbd den Zugriff auf die "
"erstellten Dateien und Ordner von SABnzbd verweigern."
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-Pfad \"%s\" ist hier nicht erlaubt"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -324,8 +329,6 @@ msgid ""
"Do not use a folder in the application folder as your Scripts Folder, it "
"might be emptied during updates."
msgstr ""
"Verwenden Sie keinen Ordner im Anwendungsordner als Ihren Skriptordner, er "
"könnte während Updates geleert werden."
#. Warning message
#: sabnzbd/config.py
@@ -478,7 +481,7 @@ msgstr "Fehler %s@%s zu initialisieren, aus folgendem Grund: %s"
#. Error message
#: sabnzbd/downloader.py
msgid "Fatal error in Downloader"
msgstr "Schwerer Fehler im Downloader"
msgstr ""
#: sabnzbd/downloader.py
msgid "Too many connections to server %s [%s]"
@@ -652,15 +655,11 @@ msgstr "%s ist nicht beschreibbar. Downloads sind dadurch blockiert."
#: sabnzbd/filesystem.py
msgid "Cannot write a long filename to %s. This can cause problems."
msgstr ""
"Kann keinen langen Dateinamen in %s schreiben. Dies kann Probleme "
"verursachen."
#. Warning message
#: sabnzbd/filesystem.py
msgid "Cannot write a unicode filename to %s. This can cause problems."
msgstr ""
"Kann keinen Dateinamen in Unicode in %s schreiben. Dies kann Probleme "
"verursachen."
#. Warning message
#: sabnzbd/filesystem.py
@@ -782,11 +781,6 @@ msgstr "FEHLER:"
msgid "Back"
msgstr "Zurück"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "t"
@@ -1129,16 +1123,6 @@ msgstr "Warteschlange abgearbeitet"
msgid "Other Messages"
msgstr "Andere Nachrichten"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr "Ordner öffnen"
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Öffne Zielverzeichnis"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Nicht verfügbar"
@@ -1267,7 +1251,7 @@ msgstr "DUPLIKAT"
#: sabnzbd/nzbstuff.py
msgid "ALTERNATIVE"
msgstr "ALTERNATIVE"
msgstr ""
#: sabnzbd/nzbstuff.py
msgid "ENCRYPTED"
@@ -1551,12 +1535,6 @@ msgstr ""
"Alte Warteschlangen-Version erkannt, über Status->Reparieren ins neue Format"
" konvertieren"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr ""
"Kompilieren des regulären Ausdrucks für den Suchbegriff %s fehlgeschlagen."
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1744,6 +1722,10 @@ msgstr "Leerer RSS-Feed gefunden: %s"
msgid "Show interface"
msgstr "Interface anzeigen"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Öffne Zielverzeichnis"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1832,11 +1814,6 @@ msgstr "Entschleiern"
msgid "Script"
msgstr "Skript"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2109,6 +2086,7 @@ msgstr "Python Version"
msgid "Home page"
msgstr "Startseite"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "oder"
@@ -2175,8 +2153,8 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2208,6 +2186,11 @@ msgstr "Schalter"
msgid "Scheduling"
msgstr "Planung"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2627,6 +2610,18 @@ msgstr ""
msgid "Enable 7zip"
msgstr "7zip aktivieren"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
"Sichere (SSL) Verbindungen von SABnzbd zu Newsserver und Webseiten sind "
"verschlüsselt, aber das Validieren der Server Identität mit dessen "
"Zertifikat ist nicht möglich. Vorraussetzungen dafür sind OpenSSL 1.0.2 oder"
" höher und aktuelle lokale CA Zertifikate."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2646,6 +2641,7 @@ msgstr "Zeit seit Start"
msgid "Backup"
msgstr "Sicherheitskopie"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Lesen Sie dazu die Hilfe im Wiki!"
@@ -3238,20 +3234,28 @@ msgstr ""
"fortsetzen."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgstr ""
msgid "Detect Duplicate Downloads"
msgstr "Doppelte Downloads erkennen"
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
"Doppelte NZB Datei entdeckt (basierend auf den Eintragungen in der Historie "
"oder den .nzb Dateien im NZB-Backup-Ordner)"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Doppelte Episoden in Serien erkennen"
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
"Identische Episoden in den Serien entdeckt (basierend auf "
"\"name/season/episode\") der Einträge in der Historie"
#: sabnzbd/skintext.py
msgid "Allow proper releases"
@@ -3259,9 +3263,11 @@ msgstr "Erlaube \"Proper\" Releases"
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
"Umgehe Serien Duplikat-Erkennung, wenn PROPER, REAL oder REPACK im Download-"
"Namen erkannt wird"
#. Four way switch for duplicates
#: sabnzbd/skintext.py
@@ -3418,6 +3424,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Auf neue Version prüfen"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Wöchentlich überprüfen, ob eine neue SABnzbd-Version verfügbar ist."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Ester Molla Aragones <moarages@gmail.com>, 2020
@@ -8,7 +8,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"
@@ -188,6 +188,11 @@ msgstr "Ninguno"
msgid "Default"
msgstr "Predeterminado"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Compilación de regex para término fallo: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -295,10 +300,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "Ruta de acceso UNC \"%s\" no permitido aqui"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -761,11 +765,6 @@ msgstr "ERROR:"
msgid "Back"
msgstr "Atrás"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -1114,16 +1113,6 @@ msgstr "Cola terminada"
msgid "Other Messages"
msgstr "Otros mensajes"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Abrir todo el folder"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "No disponible"
@@ -1536,11 +1525,6 @@ msgstr ""
"Se ha encontrado una cola antigua, utilice Estado->Reparar para convertir la"
" cola"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Compilación de regex para término fallo: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1729,6 +1713,10 @@ msgstr "Entrada RSS vacía (%s)"
msgid "Show interface"
msgstr "Mostrar interfaz"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Abrir todo el folder"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1817,11 +1805,6 @@ msgstr ""
msgid "Script"
msgstr "Script"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2094,6 +2077,7 @@ msgstr "Version de Python"
msgid "Home page"
msgstr "Pagina principal"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "o"
@@ -2160,8 +2144,8 @@ msgstr "Foro"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2193,6 +2177,11 @@ msgstr "Switches"
msgid "Scheduling"
msgstr "Planificación"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2607,6 +2596,20 @@ msgstr "Cuando tu dirección IP cambie o reinicies SABnzbd, la sesión caduca."
msgid "Enable 7zip"
msgstr "Habilitar 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
"Las conexiones seguras (capa de puertos seguros, SSL) de SABnzbd a los "
"newsservers (servidores de notícias) y páginas web HTTPS estarán "
"codificadas. Sin embargo, no es posible validar la identidad de un servidor "
"utilizando sus certificados. Se necesitan certificados OpenSSL 1.0.2 o "
"versiones posteriores y certificados actualizados AC (autoridad de "
"certificación) locales."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2626,6 +2629,7 @@ msgstr "Tiempo en Activo"
msgid "Backup"
msgstr "Copia de seguridad"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Lee la ayuda en la Wiki (inglés) acerca de esto!"
@@ -3193,20 +3197,28 @@ msgstr ""
"trabajo."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgstr ""
msgid "Detect Duplicate Downloads"
msgstr "Detectar descargas duplicadas"
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
"Detecta archivos NZB idénticos (basándose en los elementos de su historial o"
" los archivos en el directorio de copia de seguridad .nzb)"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Detectar episodios duplicadas en serie"
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
"Detecta episodios idénticos en series (basándose en "
"\"nombre/temporada/episodio\" de los elementos de su historial)"
#: sabnzbd/skintext.py
msgid "Allow proper releases"
@@ -3214,9 +3226,11 @@ msgstr "Permitir comunicados adecuados"
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
"Evitar detección de duplicado de series si se detecta PROPER, REAL o REPACK "
"en el nombre de la descarga"
#. Four way switch for duplicates
#: sabnzbd/skintext.py
@@ -3368,6 +3382,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Buscar Nva Versión"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Chequear semanalmente por nuevas versiones de SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"
@@ -181,6 +181,11 @@ msgstr "Ei mitään"
msgid "Default"
msgstr "Oletus"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Regex käännös epäonnistui hakutermille: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -278,10 +283,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "TUNT polku \"%s\" ei ole sallittu"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -734,11 +738,6 @@ msgstr "VIRHE:"
msgid "Back"
msgstr "Takaisin"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "pv"
@@ -1068,16 +1067,6 @@ msgstr "Jono valmistunut"
msgid "Other Messages"
msgstr "Muut viestit"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Avaa valmistuneet-kansio"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Ei saatavilla"
@@ -1478,11 +1467,6 @@ msgstr "Virhe %s: Syötä kelvollinen käyttäjänimi ja salasana."
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr "Vanhan version jono havaittiin, käytä Tila->Korjaa muuntaaksesi jonon"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Regex käännös epäonnistui hakutermille: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1667,6 +1651,10 @@ msgstr "Tyhjä RSS kohde löytyi (%s)"
msgid "Show interface"
msgstr "Näytä käyttöliittymä"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Avaa valmistuneet-kansio"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1755,11 +1743,6 @@ msgstr ""
msgid "Script"
msgstr "Skripti"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2032,6 +2015,7 @@ msgstr "Python versio"
msgid "Home page"
msgstr "Kotisivu"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "tai"
@@ -2098,8 +2082,8 @@ msgstr "Foorumi"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2131,6 +2115,11 @@ msgstr "Muuttujat"
msgid "Scheduling"
msgstr "Ajastus"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2543,6 +2532,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr "7zip käytössä"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2562,6 +2559,7 @@ msgstr "Käynnissäoloaika"
msgid "Backup"
msgstr "Varmuuskopioi"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Lue Wikin ohjeet tähän!"
@@ -3124,19 +3122,23 @@ msgstr ""
" lataamista."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr "Tunnista päällekkäiset lataukset"
#: sabnzbd/skintext.py
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Tunnista identtiset jaksot sarjassa"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -3145,8 +3147,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3297,6 +3299,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Tarkista uusi versio"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Tarkistaa viikottain uusimman SABnzbd version."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Fred L <88com88@gmail.com>, 2023\n"
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"
@@ -190,6 +190,11 @@ msgstr "Aucun"
msgid "Default"
msgstr "Par défaut"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Echec de la compilation de regex pour la recherche du terme : %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -299,10 +304,9 @@ msgstr ""
"Le réglage des permissions de %s pourrait refuser à SABnzbd l'accès aux "
"fichiers et dossiers qu'il crée."
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "Le chemin UNC \"%s\" n'est pas autorisé ici"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -777,11 +781,6 @@ msgstr "ERREUR:"
msgid "Back"
msgstr "Retour"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "j"
@@ -1124,16 +1123,6 @@ msgstr "File d'attente terminée"
msgid "Other Messages"
msgstr "Autres messages"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr "Ouvrir le dossier"
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Ouvrir le dossier des complets"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Non disponible"
@@ -1260,7 +1249,7 @@ msgstr "DOUBLON"
#: sabnzbd/nzbstuff.py
msgid "ALTERNATIVE"
msgstr "ALTERNATIVE"
msgstr ""
#: sabnzbd/nzbstuff.py
msgid "ENCRYPTED"
@@ -1542,11 +1531,6 @@ msgstr ""
"Ancienne file d'attente détectée, utiliser Statut-> Réparation pour "
"convertir la file d'attente"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Echec de la compilation de regex pour la recherche du terme : %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1736,6 +1720,10 @@ msgstr "Entrée vide de flux RSS trouvée (%s)"
msgid "Show interface"
msgstr "Afficher linterface"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Ouvrir le dossier des complets"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1824,11 +1812,6 @@ msgstr "Désobfuscation"
msgid "Script"
msgstr "Script"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2101,6 +2084,7 @@ msgstr "Version de Python"
msgid "Home page"
msgstr "Page d'accueil"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "ou"
@@ -2167,8 +2151,8 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr "Chat en direct"
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2200,6 +2184,11 @@ msgstr "Switches"
msgid "Scheduling"
msgstr "Planification"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2619,6 +2608,18 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Activer 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
"Les connexions sécurisées (SSL) de SABnzbd aux serveurs de news et aux sites"
" web HTTPS seront cryptées, cependant, la validation de l'identité d'un des "
"serveur à l'aide de ses certificats n'est pas possible. OpenSSL 1.0.2, ou "
"supérieur, et des certificats locaux AC à jour sont requis."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2640,6 +2641,7 @@ msgstr "Temps de fonctionnement"
msgid "Backup"
msgstr "Secours"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Consultez le Wiki pour plus d'info à ce sujet (en anglais) !"
@@ -3233,21 +3235,28 @@ msgstr ""
"tâche."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgstr "Détection des téléchargements identiques"
msgid "Detect Duplicate Downloads"
msgstr "Détecter les doublons de téléchargement"
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
"Détecter les téléchargements identiques basés sur le nom ou le contenu NZB."
"Détecter les fichiers NZB identiques (en fonction des éléments de votre "
"historique ou des fichiers .nzb du dossier de backup)"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr "Détection intelligente des doublons"
msgid "Detect duplicate episodes in series"
msgstr "Détecter les doublons d'épisodes de séries"
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgstr "Détecter les doublons basés sur l'analyse du nom de fichier."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
"Détecter les épisodes de série identiques (en fonction du modèle "
"\"nom/saison/épisode\" des éléments de votre historique)"
#: sabnzbd/skintext.py
msgid "Allow proper releases"
@@ -3255,11 +3264,11 @@ msgstr "Autoriser les versions corrigées (proper)"
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
"Contourner la détection des doublons si PROPER, REAL ou REPACK est détecté "
"dans l'intitulé du téléchargement."
"dans l'intitulé du téléchargement"
#. Four way switch for duplicates
#: sabnzbd/skintext.py
@@ -3416,6 +3425,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Vérifier les mises à jour"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Vérifier chaque semaine les mises à jour de SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,15 +1,15 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
# ION, 2023
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: ION, 2023\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -30,7 +30,7 @@ msgstr "שגיאה"
#. Error message
#: SABnzbd.py
msgid "Failed to start web-interface"
msgstr "כישלון בהתחלת ממשק רשת"
msgstr "נכשל בהתחלת ממשק רשת"
#. Warning message
#: SABnzbd.py
@@ -116,7 +116,7 @@ msgstr "HTTPS הושבת בגלל קבצים בלתי תקפים של CERT ו־K
#. Error message
#: SABnzbd.py
msgid "Failed to start web-interface: "
msgstr "כישלון בהתחלת ממשק רשת: "
msgstr "נכשל בהתחלת ממשק רשת: "
#: SABnzbd.py
msgid "SABnzbd %s started"
@@ -178,6 +178,11 @@ msgstr "אין"
msgid "Default"
msgstr "ברירת מחדל"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "עבור מונח חיפוש regex נכשל בליקוט: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -277,10 +282,9 @@ msgid ""
msgstr ""
"הגדרת הרשאות של %s עשויה לדחות גישה מן SABnzbd אל הקבצים והתיקיות שהוא יוצר."
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "נתיב UNC \"%s\" אינו מותר כאן"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -300,8 +304,6 @@ msgid ""
"Do not use a folder in the application folder as your Scripts Folder, it "
"might be emptied during updates."
msgstr ""
"אל תשתמש בתיקייה בתוך תיקיית היישום כתיקיית התסריטים שלך, היא עשויה להתרוקן "
"במהלך עדכונים."
#. Warning message
#: sabnzbd/config.py
@@ -346,7 +348,7 @@ msgstr "פקודת SQL נכשלה, ראה יומן"
#. Error message
#: sabnzbd/database.py
msgid "Failed to close database, see log"
msgstr "כישלון בסגירת מסד נתונים, ראה יומן"
msgstr "נכשל בסגירת מסד נתונים, ראה יומן"
#. Warning message
#: sabnzbd/database.py
@@ -442,12 +444,12 @@ msgstr "אין שרתים פעילים!"
#. Error message
#: sabnzbd/downloader.py
msgid "Failed to initialize %s@%s with reason: %s"
msgstr "כישלון באתחול %s@%s עם סיבה: %s"
msgstr "נכשל באתחול %s@%s עם סיבה: %s"
#. Error message
#: sabnzbd/downloader.py
msgid "Fatal error in Downloader"
msgstr "שגיאה גורלית במורידן"
msgstr ""
#: sabnzbd/downloader.py
msgid "Too many connections to server %s [%s]"
@@ -458,12 +460,10 @@ msgid ""
"Login from too many different IP addresses to server %s [%s] - "
"https://sabnzbd.org/multiple-adresses"
msgstr ""
"כניסה מיותר מדי כתובות IP שונות אל שרת %s [%s] - "
"https://sabnzbd.org/multiple-adresses"
#: sabnzbd/downloader.py
msgid "Failed login for server %s [%s]"
msgstr "כניסה נכשלה עבור שרת %s [%s]"
msgstr "נכשל בכניסה אל השרת %s [%s]"
#. Error message
#: sabnzbd/downloader.py
@@ -491,11 +491,11 @@ msgstr "השרת %s השתמש במכסה המצויינת"
#: sabnzbd/emailer.py
msgid "Failed to connect to mail server"
msgstr "כישלון בהתחברות אל שרת דוא״ל"
msgstr "נכשל בהתחברות אל שרת דוא״ל"
#: sabnzbd/emailer.py
msgid "Failed to initiate TLS connection"
msgstr "כישלון ביזימת חיבור TLS"
msgstr "נכשל ביזימת חיבור TLS"
#: sabnzbd/emailer.py
msgid "The server didn't reply properly to the helo greeting"
@@ -503,7 +503,7 @@ msgstr "השרת לא הגיב כראוי לברכת השלום"
#: sabnzbd/emailer.py
msgid "Failed to authenticate to mail server"
msgstr "כישלון באימות שרת הדוא״ל"
msgstr "נכשל באימות שרת הדוא״ל"
#: sabnzbd/emailer.py
msgid "No suitable authentication method was found"
@@ -515,11 +515,11 @@ msgstr "כישלון בלתי ידוע של אימות בשרת דוא״ל"
#: sabnzbd/emailer.py
msgid "Failed to send e-mail"
msgstr "כישלון בשליחת דוא״ל"
msgstr "נכשל בשליחת דוא״ל"
#: sabnzbd/emailer.py
msgid "Failed to close mail connection"
msgstr "כישלון בסגירת חיבור דוא״ל"
msgstr "נכשל בסגירת חיבור דוא״ל"
#: sabnzbd/emailer.py, sabnzbd/notifier.py
msgid "Cannot send, missing required data"
@@ -583,12 +583,12 @@ msgstr "לא ניתן לשנות הרשאות של %s"
#. Error message
#: sabnzbd/filesystem.py
msgid "Failed making (%s)"
msgstr "כישלון בעשייה (%s)"
msgstr "נכשל בעשייה (%s)"
#. Error message
#: sabnzbd/filesystem.py, sabnzbd/postproc.py
msgid "Failed moving %s to %s"
msgstr "כישלון בהעברת %s אל %s"
msgstr "נכשל בהעברת %s אל %s"
#. Error message
#: sabnzbd/filesystem.py
@@ -618,12 +618,12 @@ msgstr "%s אינו בר־כתיבה בכלל. זה חוסם הורדות."
#. Warning message
#: sabnzbd/filesystem.py
msgid "Cannot write a long filename to %s. This can cause problems."
msgstr "בלתי ניתן לכתוב שם ארוך של קובץ אל %s. זה עשוי לגרום לבעיות."
msgstr ""
#. Warning message
#: sabnzbd/filesystem.py
msgid "Cannot write a unicode filename to %s. This can cause problems."
msgstr "בלתי ניתן לכתוב שם יוניקוד של קובץ אל %s. זה עשוי לגרום לבעיות."
msgstr ""
#. Warning message
#: sabnzbd/filesystem.py
@@ -738,11 +738,6 @@ msgstr "שגיאה:"
msgid "Back"
msgstr "הקודם"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "י"
@@ -762,12 +757,12 @@ msgstr "עדכון זמין!"
#. Error message
#: sabnzbd/misc.py
msgid "Failed to upload file: %s"
msgstr "כישלון בהעלאת קובץ: %s"
msgstr "נכשל בהעלאת קובץ: %s"
#. Error message
#: sabnzbd/misc.py
msgid "Error creating SSL key and certificate"
msgstr "כישלון ביצירה של מפתח ותעודה של SSL"
msgstr "נכשל ביצירה של מפתח ותעודה של SSL"
#. Warning message
#: sabnzbd/misc.py
@@ -781,7 +776,7 @@ msgstr ""
#. Warning message
#: sabnzbd/misc.py
msgid "Failed to read the password file %s"
msgstr "כישלון בקריאת קובץ הסיסמה %s"
msgstr "נכשל בקריאת קובץ הסיסמה %s"
#. Error message
#: sabnzbd/misc.py
@@ -1075,28 +1070,18 @@ msgstr "תור הסתיים"
msgid "Other Messages"
msgstr "הודעות אחרות"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "פתח תיקיית השלמה"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "לא זמין"
#: sabnzbd/notifier.py
msgid "Failed to send macOS notification"
msgstr "כישלון בשליחת התראת macOS"
msgstr "נכשל בשליחת התראת macOS"
#. Warning message
#: sabnzbd/notifier.py
msgid "Failed to send Prowl message"
msgstr "כישלון בשליחת הודעת Prowl"
msgstr "נכשל בשליחת הודעת Prowl"
#. Error message
#: sabnzbd/notifier.py
@@ -1106,7 +1091,7 @@ msgstr "תגובה רעה מאת Pushover (%s): %s"
#. Error message - Warning message
#: sabnzbd/notifier.py
msgid "Failed to send pushover message"
msgstr "כישלון בשליחת הודעת Pushover"
msgstr "נכשל בשליחת הודעת Pushover"
#. Error message
#: sabnzbd/notifier.py
@@ -1116,7 +1101,7 @@ msgstr "תגובה רעה מאת Pushbullet (%s): %s"
#. Warning message
#: sabnzbd/notifier.py
msgid "Failed to send pushbullet message"
msgstr "כישלון בשליחת הודעת Pushbullet"
msgstr "Pushbullet נכשל בשליחת הודעת"
#. Error message
#: sabnzbd/notifier.py
@@ -1129,7 +1114,7 @@ msgstr "תסריט ההתראה \"%s\" אינו קיים"
#: sabnzbd/notifier.py
msgid "Failed to send Windows notification"
msgstr "כישלון בשליחת התראת Windows"
msgstr "נכשל בשליחת התראת Windows"
#. Error message
#: sabnzbd/nzbparser.py
@@ -1149,7 +1134,7 @@ msgstr "שגיאה בהסרת %s"
#. Warning message
#: sabnzbd/nzbparser.py
msgid "Failed to import %s files from %s"
msgstr "כישלון ביבוא %s קבצים מן %s"
msgstr "נכשל ביבוא %s קבצים מן %s"
#. Error message
#: sabnzbd/nzbqueue.py
@@ -1211,7 +1196,7 @@ msgstr "כפול"
#: sabnzbd/nzbstuff.py
msgid "ALTERNATIVE"
msgstr "חלופה"
msgstr ""
#: sabnzbd/nzbstuff.py
msgid "ENCRYPTED"
@@ -1487,11 +1472,6 @@ msgstr "שגיאה %s: אתה צריך לספק שם משתמש וסיסמה ת
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr "תור ישן התגלה, השתמש במעמד->תיקון כדי להמיר את התור"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "כישלון בליקוט ביטוי רגולרי עבור מונח חיפוש: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1528,7 +1508,7 @@ msgstr "שגיאה בשינוי שם \"%s\" אל \"%s\""
#: sabnzbd/postproc.py
msgid "Failed to move files"
msgstr "כישלון בהעברת קבצים"
msgstr "נכשל בהעברת קבצים"
#: sabnzbd/postproc.py
msgid "Running user script %s"
@@ -1622,12 +1602,12 @@ msgstr "הסרת %s נכשלה"
#. Error message
#: sabnzbd/powersup.py
msgid "Failed to hibernate system"
msgstr "כישלון בחריפת מערכת"
msgstr "נכשל בחריפת מערכת"
#. Error message
#: sabnzbd/powersup.py
msgid "Failed to standby system"
msgstr "כישלון בהיכוננות מערכת"
msgstr "נכשל בהיכוננות מערכת"
#. Error message
#: sabnzbd/powersup.py
@@ -1654,7 +1634,7 @@ msgstr "שגיאת צד שרת (קוד שרת %s); לא היה ניתן להשי
#: sabnzbd/rss.py
msgid "Failed to retrieve RSS from %s: %s"
msgstr "כישלון באחזור RSS מן %s: %s"
msgstr "נכשל באחזור RSS מן %s: %s"
#: sabnzbd/rss.py, sabnzbd/urlgrabber.py
msgid "Server %s uses an untrusted HTTPS certificate"
@@ -1678,6 +1658,10 @@ msgstr "כניסת RSS ריקה נמצאה (%s)"
msgid "Show interface"
msgstr "הראה ממשק"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "פתח תיקיית השלמה"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1766,11 +1750,6 @@ msgstr "אי־האפלה"
msgid "Script"
msgstr "תסריט"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2043,6 +2022,7 @@ msgstr "גרסת פייתון"
msgid "Home page"
msgstr "דף הבית"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "או"
@@ -2109,8 +2089,8 @@ msgstr "פורום"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2142,6 +2122,11 @@ msgstr "מתגים"
msgid "Scheduling"
msgstr "תזמון"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2553,12 +2538,22 @@ msgstr "כאשר כתובת ה־IP שלך משתנה או כאשר SABnzbd מו
msgid "Enable 7zip"
msgstr "אפשר חילוץ 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
"חיבורים מאובטחים (SSL) מן SABnzbd אל שרתי חדשות ואל אתרי HTTPS יוצפנו, עם "
"זאת, וידוא זהות של שרת ע״י שימוש בתעודות שלו הוא בלתי אפשרי. OpenSSL 1.0.2 "
"ומעלה ותעודות CA מקומיות עדכניות דרושים."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
"platforms."
msgstr ""
"האץ תיקונים ע״י התקנת par2cmdline-turbo, הוא זמין עבור פלטפורמות רבות."
#: sabnzbd/skintext.py
msgid "Version"
@@ -2573,6 +2568,7 @@ msgstr "זמן פעולה"
msgid "Backup"
msgstr "גיבוי"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "קרא את עזרת וויקי על זה!"
@@ -2931,7 +2927,7 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Use Sorting to automatically organize and rename your completed downloads."
msgstr "השתמש במיון כדי לארגן ולשנות שם באופן אוטומטי את ההורדות השלמות שלך."
msgstr ""
#: sabnzbd/skintext.py
msgid "Minimum Free Space for Completed Download Folder"
@@ -3014,7 +3010,7 @@ msgstr "תיקיות מערכת"
#: sabnzbd/skintext.py
msgid "Hidden Folders"
msgstr "תיקיות מוסתרות"
msgstr ""
#: sabnzbd/skintext.py
msgid "Administrative Folder"
@@ -3057,7 +3053,7 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "Purge Logs"
msgstr "טהר יומנים"
msgstr ""
#: sabnzbd/skintext.py
msgid ".nzb Backup Folder"
@@ -3130,20 +3126,25 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
msgstr "במקרה של \"השהיה\", תצטרך לקבוע סיסמה ולהמשיך את העבודה."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgstr "גילוי הורדה זהה"
msgid "Detect Duplicate Downloads"
msgstr "גלה הורדות כפולות"
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr "גלה הורדות זהות על סמך שם או תכני NZB."
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
"גלה קבצי NZB זהים (על סמך פריטים בהיסטוריה שלך או קבצים בתיקיית גיבוי .nzb)"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr "גילוי שכפולים חכם"
msgid "Detect duplicate episodes in series"
msgstr "גלה פרקים כפולים בסדרות"
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgstr "גלה שכפולים על סמך ניתוח של שם הקובץ."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr "גלה פרקים זהים בסדרות (על סמך \"שם/עונה/פרק\" של פריטים בהיסטוריה שלך)"
#: sabnzbd/skintext.py
msgid "Allow proper releases"
@@ -3151,9 +3152,9 @@ msgstr "התר שחרורים תקינים"
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
msgstr "עקוף גילוי שכפולים חכם אם PROPER, REAL או REPACK מתגלים בשם ההורדה."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr "עקוף גילוי כפילויות סדרה אם PROPER, REAL או REPACK מתגלים בשם ההורדה"
#. Four way switch for duplicates
#: sabnzbd/skintext.py
@@ -3213,13 +3214,14 @@ msgstr "בצע וידוא נוסף שמבוסס על קבצי SFV."
#: sabnzbd/skintext.py
msgid "User script can flag job as failed"
msgstr "תסריט משתמש יכול לדגל עבודה כנכשלה"
msgstr "תסריט משתמש יכול לסמן בדגל עבודה כנכשלה"
#: sabnzbd/skintext.py
msgid ""
"When the user script returns a non-zero exit code, the job will be flagged "
"as failed."
msgstr "כאשר תסריט המשתמש מחזיר קוד יציאה בלתי אפסי, העבודה תדוגל כנכשלה."
msgstr ""
"כאשר תסריט המשתמש מחזיר קוד יציאה בלתי אפסי, העבודה תסומן בדגל כנכשלה."
#: sabnzbd/skintext.py
msgid "Enable folder rename"
@@ -3243,11 +3245,11 @@ msgstr "בשימוש לפני ש־NZB נכנס לתור."
#: sabnzbd/skintext.py
msgid "On queue finish script"
msgstr "תסריט בסיום תור"
msgstr ""
#: sabnzbd/skintext.py
msgid "Executed after the queue finishes downloading."
msgstr "מבוצע לאחר שהתור יסיים להוריד."
msgstr ""
#: sabnzbd/skintext.py
msgid "Extra PAR2 Parameters"
@@ -3301,6 +3303,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "בדוק אחר שחרור חדש"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "בדוק פעם בשבוע אחר שחרור SABnzbd חדש."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"
@@ -4115,7 +4121,7 @@ msgstr "שם_סרט"
#: sabnzbd/skintext.py
msgid "Show Name"
msgstr "שם סדרה"
msgstr "הראה שם"
#: sabnzbd/skintext.py
msgid "Show.Name"
@@ -4123,7 +4129,7 @@ msgstr "שם.סדרה"
#: sabnzbd/skintext.py
msgid "Show_Name"
msgstr "שם_סדרה"
msgstr "הראה_שם"
#: sabnzbd/skintext.py
msgid "Season Number"
@@ -4187,15 +4193,15 @@ msgstr "מחרוזת מיון"
#: sabnzbd/skintext.py
msgid "Multi-part Label"
msgstr "תווית מרובת־חלקים"
msgstr ""
#: sabnzbd/skintext.py
msgid "Show folder"
msgstr "תיקיית סדרה"
msgstr ""
#: sabnzbd/skintext.py
msgid "Season folder"
msgstr "תיקיית עונה"
msgstr ""
#: sabnzbd/skintext.py
msgid "In folders"
@@ -4211,7 +4217,7 @@ msgstr "שם עבודה בתור שם קובץ"
#: sabnzbd/skintext.py
msgid "Series"
msgstr "סדרות"
msgstr ""
#. Note for title expression in Sorting that does case adjustment
#: sabnzbd/skintext.py
@@ -4244,27 +4250,27 @@ msgstr "GuessIt_Property"
#: sabnzbd/skintext.py
msgid "Minimum Filesize"
msgstr "גודל מזערי של קובץ"
msgstr ""
#: sabnzbd/skintext.py
msgid "Affected Job Types"
msgstr "סוגי עבודה מושפעים"
msgstr ""
#: sabnzbd/skintext.py
msgid "All"
msgstr "הכול"
msgstr "הכל"
#: sabnzbd/skintext.py
msgid "Series with air dates"
msgstr "סדרות עם תאריכי שידור"
msgstr ""
#: sabnzbd/skintext.py
msgid "Movies"
msgstr "סרטים"
msgstr ""
#: sabnzbd/skintext.py
msgid "Other / Unknown"
msgstr "אחר / בלתי ידוע"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
@@ -4276,39 +4282,34 @@ msgid ""
"applied.</p><p>More options are available when Advanced Settings is "
"checked.<br/>Detailed information can be found on the Wiki.</p>"
msgstr ""
"<p>השתמש בממיינים כדי לארגן באופן אוטומטי את ההורדות השלמות שלך. לדוגמה, שים"
" את כל הפרקים מסדרה בתיקייה של עונה מסויימת.</p><p>ממיינים מנוסים לפי סדר "
"הופעתם ויכולים להסתדר מחדש על ידי גרירה ושחרור.<br/>הממיין הפעיל הראשון "
"שתואם אל הקטגוריה המושפעת ואל סוג העבודה הוא זה שמוחל.</p><p>עוד אפשרויות "
"זמינות כאשר האפשרות הגדרות מתקדמות מסומנת.<br/>מידע מפורט נמצא בוויקי.</p>"
#: sabnzbd/skintext.py
msgid "Add Sorter"
msgstr "הוסף ממיין"
msgstr ""
#: sabnzbd/skintext.py
msgid "Remove Sorter"
msgstr "הסר ממיין"
msgstr ""
#: sabnzbd/skintext.py
msgid "Test Data"
msgstr "בחן נתונים"
msgstr ""
#: sabnzbd/skintext.py
msgid "Quick start"
msgstr "התחלה זריזה"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Move and rename all episodes in the \"tv\" category to a show-specific "
"folder"
msgstr "העבר ושנה שם את כל הפרקים בקטגוריה \"טלוויזיה\" אל תיקייה של סדרה מסויימת"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Move and rename all movies in the \"movies\" category to a movie-specific "
"folder"
msgstr "העבר ושנה שם את כל הסרטים בקטגוריה \"סרטים\" אל תיקייה של סרט מסויים"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
@@ -4550,7 +4551,7 @@ msgstr "קיצורי דרך במקלדת"
#: sabnzbd/skintext.py
msgid "Shift+Arrow key: Browse Queue and History pages"
msgstr "Shift+מקש חץ: עיין בתור ובדפי היסטוריה"
msgstr ""
#: sabnzbd/skintext.py
msgid "How long or untill when do you want to pause? (in English!)"
@@ -4729,12 +4730,12 @@ msgstr ""
#. Error message
#: sabnzbd/sorting.py
msgid "Failed to rename %s to %s"
msgstr "כישלון בשינוי שם %s אל %s"
msgstr ""
#. Error message
#: sabnzbd/sorting.py
msgid "Failed to rename similar file: %s to %s"
msgstr "כישלון בשינוי שם של קובץ דומה: %s אל %s"
msgstr "נכשל בשינוי שם של קובץ דומה: %s אל %s"
#: sabnzbd/urlgrabber.py
msgid "Unauthorized access"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"
@@ -177,6 +177,11 @@ msgstr "Ingen"
msgid "Default"
msgstr "Standard"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Kunne ikke lage regex for søkestreng: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -274,10 +279,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-sti \"%s\" er ikke tillatt her"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -729,11 +733,6 @@ msgstr "FEIL:"
msgid "Back"
msgstr "Tilbake"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -1064,16 +1063,6 @@ msgstr "Køen er ferdig"
msgid "Other Messages"
msgstr "Andre meldinger"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Åpne fullført mappe"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Ikke tilgjengelig"
@@ -1474,11 +1463,6 @@ msgstr "Feil %s: Du må oppgi et gyldig brukernavn og passord."
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr "Gammel kø oppdaget. Bruk Status -> Reparer for å konvertere køen"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Kunne ikke lage regex for søkestreng: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1663,6 +1647,10 @@ msgstr "Tom RSS post funnet (%s)"
msgid "Show interface"
msgstr "Vis grensesnitt"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Åpne fullført mappe"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1751,11 +1739,6 @@ msgstr ""
msgid "Script"
msgstr "Skript"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2028,6 +2011,7 @@ msgstr "Python-versjon"
msgid "Home page"
msgstr "Startside"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "eller"
@@ -2094,8 +2078,8 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2127,6 +2111,11 @@ msgstr "Svitsjer"
msgid "Scheduling"
msgstr "Nedlastingsplan"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2537,6 +2526,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Aktiver 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2556,6 +2553,7 @@ msgstr "Oppetid"
msgid "Backup"
msgstr "Sikkerhetskopi"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Les Wiki Help fer dette!"
@@ -3105,19 +3103,23 @@ msgstr ""
"I tilfelle \"Pause\", så trenger du å sette et passord og gjenoppta jobben."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr "Oppdag duplikatnedlastinger"
#: sabnzbd/skintext.py
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Oppdag duplikat episoder i serie"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -3126,8 +3128,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3274,6 +3276,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Se etter ny utgave"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Se etter ny utgave av SABnzbd hver uke."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Rik Brouwer, 2022
@@ -8,7 +8,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"
@@ -185,6 +185,11 @@ msgstr "Geen"
msgid "Default"
msgstr "Standaard"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Het compileren van 'regex' voor de zoekterm lukt niet: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -292,10 +297,9 @@ msgstr ""
"Ingestelde rechten van %s zouden kunnen beletten dat SABnzbd toegang heeft "
"tot de aangemaakte bestanden en mappen."
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-pad '%s' hier niet toegestaan."
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -315,9 +319,6 @@ msgid ""
"Do not use a folder in the application folder as your Scripts Folder, it "
"might be emptied during updates."
msgstr ""
"Als de Map voor scripts zich in de SABnzbd installatie-map bevindt kan deze "
"automatisch verwijderd worden tijdens updates. We adviseren een andere "
"locatie te gebruiken voor je scripts."
#. Warning message
#: sabnzbd/config.py
@@ -471,7 +472,7 @@ msgstr "Initialisatie van %s@%s mislukt, vanwege: %s"
#. Error message
#: sabnzbd/downloader.py
msgid "Fatal error in Downloader"
msgstr "Onherstelbare fout in de Downloader"
msgstr ""
#: sabnzbd/downloader.py
msgid "Too many connections to server %s [%s]"
@@ -645,15 +646,11 @@ msgstr ""
#: sabnzbd/filesystem.py
msgid "Cannot write a long filename to %s. This can cause problems."
msgstr ""
"Bestanden met lange bestandsnamen kunnen niet worden opgeslagen in %s. Dit "
"kan voor problemen zorgen tijdens het downloaden."
#. Warning message
#: sabnzbd/filesystem.py
msgid "Cannot write a unicode filename to %s. This can cause problems."
msgstr ""
"Bestanden met speciale karakters in de bestandsnaam kunnen niet worden "
"opgeslagen in %s. Dit kan voor problemen zorgen tijdens het downloaden."
#. Warning message
#: sabnzbd/filesystem.py
@@ -774,11 +771,6 @@ msgstr "FOUT:"
msgid "Back"
msgstr "Terug"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -1117,16 +1109,6 @@ msgstr "Wachtrij voltooid"
msgid "Other Messages"
msgstr "Andere berichten"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr "Open map"
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Open map met voltooide downloads"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Niet beschikbaar"
@@ -1253,7 +1235,7 @@ msgstr "DUBBEL"
#: sabnzbd/nzbstuff.py
msgid "ALTERNATIVE"
msgstr "ALTERNATIEF"
msgstr ""
#: sabnzbd/nzbstuff.py
msgid "ENCRYPTED"
@@ -1529,11 +1511,6 @@ msgstr "Fout %s: Je moet een geldige gebruikersnaam en wachtwoord invullen."
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr "Oude wachtrij gevonden, gebruik Status->Reparatie om te converteren"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Het compileren van 'regex' voor de zoekterm lukt niet: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1721,6 +1698,10 @@ msgstr "Lege RSS-feed gevonden (%s)"
msgid "Show interface"
msgstr "Toon webinterface"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Open map met voltooide downloads"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1809,11 +1790,6 @@ msgstr "Bestandsnaam verbeteren"
msgid "Script"
msgstr "Script"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2086,6 +2062,7 @@ msgstr "Python versie"
msgid "Home page"
msgstr "Startpagina"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "of"
@@ -2152,8 +2129,8 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr "Live Chat"
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2185,6 +2162,11 @@ msgstr "Opties"
msgid "Scheduling"
msgstr "Taakplanner"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2601,13 +2583,23 @@ msgstr ""
msgid "Enable 7zip"
msgstr "7Zip toestaan"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
"Beveiligde (SSL) verbindingen van SABnzbd naar nieuwsservers en HTTPS "
"websites worden versleuteld, maar het is niet mogelijk de identiteit van de "
"servers te verifiëren. Voor correcte identificatie zijn OpenSSL 1.0.2 of "
"hoger en bijgewerkte CA-certificaten benodigd."
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
"platforms."
msgstr ""
"Versnel reparaties door par2cmdline-turbo te installeren. Beschikbaar voor "
"veel besturingssystemen."
#: sabnzbd/skintext.py
msgid "Version"
@@ -2622,6 +2614,7 @@ msgstr "Tijd in de lucht"
msgid "Backup"
msgstr "Reserve"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Lees de Wiki pagina over dit onderwerp"
@@ -2989,8 +2982,6 @@ msgstr "(kan aangepast worden door de categorieën)."
msgid ""
"Use Sorting to automatically organize and rename your completed downloads."
msgstr ""
"Gebruik Sorteren om automatisch je voltooide downloads te organiseren en "
"hernoemen."
#: sabnzbd/skintext.py
msgid "Minimum Free Space for Completed Download Folder"
@@ -3075,7 +3066,7 @@ msgstr "Systeemmappen"
#: sabnzbd/skintext.py
msgid "Hidden Folders"
msgstr "Verborgen mappen"
msgstr ""
#: sabnzbd/skintext.py
msgid "Administrative Folder"
@@ -3122,7 +3113,7 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "Purge Logs"
msgstr "Logs wissen"
msgstr ""
#: sabnzbd/skintext.py
msgid ".nzb Backup Folder"
@@ -3201,22 +3192,28 @@ msgstr ""
"download vrij te geven"
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgstr "Identieke downloaddetectie"
msgid "Detect Duplicate Downloads"
msgstr "Detecteer dubbele downloads"
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
"Detecteer identieke downloads op basis van de naam of de inhoud van de NZB."
"Detecteer identieke downloads (op basis van downloads in je Geschiedenis of "
"bestanden in je .nzb backup map)."
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr "Slimme detectie van dubbele downloads"
msgid "Detect duplicate episodes in series"
msgstr "Detecteer dubbele afleveringen in series"
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
"Detecteer dubbele downloads op basis van de analyse van de bestandsnaam."
"Detecteer identieke afleveringen in series (gebaseerd op "
"\"naam/seizoen/aflevering\" van downloads in je Geschiedenis)."
#: sabnzbd/skintext.py
msgid "Allow proper releases"
@@ -3224,11 +3221,11 @@ msgstr "Sta verbeterde downloads toe"
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
"Sla slimme detectie van dubbele downloads over als de naam van de download "
"PROPER, REAL of REPACK bevat."
"Sla dubbele download detectie over als er in de naam van de download PROPER,"
" REAL of REPACK bevat"
#. Four way switch for duplicates
#: sabnzbd/skintext.py
@@ -3320,11 +3317,11 @@ msgstr "Word uitgevoerd vóór een download aan de wachtrij word toegevoegd"
#: sabnzbd/skintext.py
msgid "On queue finish script"
msgstr "Script voor na het afronden van de wachtrij"
msgstr ""
#: sabnzbd/skintext.py
msgid "Executed after the queue finishes downloading."
msgstr "Script wordt uitgevoerd nadat de wachtrij is gedownload."
msgstr ""
#: sabnzbd/skintext.py
msgid "Extra PAR2 Parameters"
@@ -3383,6 +3380,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Periodieke controle voor nieuwe versies"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Controleer elke week of er een nieuwe SABnzbd versie beschikbaar is."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"
@@ -4292,15 +4293,15 @@ msgstr "Sorteertekst"
#: sabnzbd/skintext.py
msgid "Multi-part Label"
msgstr "Meervoudig label"
msgstr ""
#: sabnzbd/skintext.py
msgid "Show folder"
msgstr "Map per serie"
msgstr ""
#: sabnzbd/skintext.py
msgid "Season folder"
msgstr "Map per seizoen"
msgstr ""
#: sabnzbd/skintext.py
msgid "In folders"
@@ -4316,7 +4317,7 @@ msgstr "Downloadnaam als Bestandsnaam"
#: sabnzbd/skintext.py
msgid "Series"
msgstr "Series"
msgstr ""
#. Note for title expression in Sorting that does case adjustment
#: sabnzbd/skintext.py
@@ -4353,7 +4354,7 @@ msgstr "Minimale bestandsgrootte"
#: sabnzbd/skintext.py
msgid "Affected Job Types"
msgstr "Type downloads"
msgstr ""
#: sabnzbd/skintext.py
msgid "All"
@@ -4361,15 +4362,15 @@ msgstr "alles"
#: sabnzbd/skintext.py
msgid "Series with air dates"
msgstr "Series met datums"
msgstr ""
#: sabnzbd/skintext.py
msgid "Movies"
msgstr "Films"
msgstr ""
#: sabnzbd/skintext.py
msgid "Other / Unknown"
msgstr "Anders / Onbekend"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
@@ -4381,43 +4382,34 @@ msgid ""
"applied.</p><p>More options are available when Advanced Settings is "
"checked.<br/>Detailed information can be found on the Wiki.</p>"
msgstr ""
"<p>Gebruik Sorteren om automatisch je voltooide downloads te organiseren. Bijvoorbeeld het automatisch verplaatsen van alle afleveringen van een serie in een seizoensspecifieke map. Of plaats films in een map met de naam van de film.</p>\n"
"\n"
"<p>Sorteringen worden in de getoonde volgorde geprobeerd en kunnen worden herschikt door ze te slepen.<br/> De eerste actieve Sortering die overeenkomt met zowel de betreffende categorie als het type taak wordt toegepast.</p>\n"
"\n"
"<p>Meer opties zijn beschikbaar wanneer Geavanceerde instellingen zijn aangevinkt.<br/> Gedetailleerde informatie is te vinden op de Wiki.</p>"
#: sabnzbd/skintext.py
msgid "Add Sorter"
msgstr "Sortering toevoegen"
msgstr ""
#: sabnzbd/skintext.py
msgid "Remove Sorter"
msgstr "Sortering verwijderen"
msgstr ""
#: sabnzbd/skintext.py
msgid "Test Data"
msgstr "Testgegevens"
msgstr ""
#: sabnzbd/skintext.py
msgid "Quick start"
msgstr "Snel beginnen"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Move and rename all episodes in the \"tv\" category to a show-specific "
"folder"
msgstr ""
"Verplaats en hernoem alle afleveringen in de \"tv\" categorie naar een "
"specifieke map voor de serie."
#: sabnzbd/skintext.py
msgid ""
"Move and rename all movies in the \"movies\" category to a movie-specific "
"folder"
msgstr ""
"Verplaats en hernoem alle films in de categorie \"films\" naar een "
"specifieke map voor de film."
#: sabnzbd/skintext.py
msgid ""
@@ -4660,7 +4652,7 @@ msgstr "Sneltoetsen"
#: sabnzbd/skintext.py
msgid "Shift+Arrow key: Browse Queue and History pages"
msgstr "Shift+Pijltoets: Blader door de wachtrij- en geschiedenispagina's"
msgstr ""
#: sabnzbd/skintext.py
msgid "How long or untill when do you want to pause? (in English!)"
@@ -4839,7 +4831,7 @@ msgstr ""
#. Error message
#: sabnzbd/sorting.py
msgid "Failed to rename %s to %s"
msgstr "Hernoemen van %s naar %s mislukt"
msgstr ""
#. Error message
#: sabnzbd/sorting.py

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"
@@ -173,6 +173,11 @@ msgstr "Brak"
msgid "Default"
msgstr "Domyślne"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Błąd kompilacji wyrażenia regularnego dla wyszukiwania: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -270,10 +275,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "Ścieżka UNC \"%s\" niedozwolona"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -729,11 +733,6 @@ msgstr "BŁĄD:"
msgid "Back"
msgstr "Powrót"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -1066,16 +1065,6 @@ msgstr "Kolejka ukończona"
msgid "Other Messages"
msgstr "Inne komunikaty"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Otwórz katalog zakończonych"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Niedostępne"
@@ -1480,11 +1469,6 @@ msgstr ""
"Wykryto kolejkę w starszej wersji, użyj funkcji Status->Naprawa, aby ją "
"przekonwertować"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Błąd kompilacji wyrażenia regularnego dla wyszukiwania: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1669,6 +1653,10 @@ msgstr "Znaleziono pusty wpis RSS (%s)"
msgid "Show interface"
msgstr "Pokaż interfejs"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Otwórz katalog zakończonych"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1757,11 +1745,6 @@ msgstr ""
msgid "Script"
msgstr "Skrypt"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2034,6 +2017,7 @@ msgstr "Wersja Pythona"
msgid "Home page"
msgstr "Strona projektu"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "lub"
@@ -2100,8 +2084,8 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2133,6 +2117,11 @@ msgstr "Przełączniki"
msgid "Scheduling"
msgstr "Harmonogram"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2542,6 +2531,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Włącz 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2561,6 +2558,7 @@ msgstr "Czas działania"
msgid "Backup"
msgstr "Zapasowy"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Przeczytaj o tym w Wiki!"
@@ -3113,19 +3111,23 @@ msgstr ""
"Jeśli wybrano \"Wstrzymaj\", będzie trzeba ustawić hasło i wznowić zadanie"
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr "Działanie dla duplikatów"
#: sabnzbd/skintext.py
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Wykryj zduplikowane odcinki seriali"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -3134,8 +3136,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3282,6 +3284,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Sprawdzaj aktualizacje"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Sprawdzaj co tydzień dostępność nowych wydań SABnzbd"
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,13 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Henrique Moreno, 2023
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"
@@ -68,7 +67,7 @@ msgstr "aplicativo 7za... NÃO encontrado!"
#. Error message
#: SABnzbd.py
msgid "Essential modules are missing, downloading cannot start."
msgstr "Módulos essenciais estão faltando, não é possível baixar."
msgstr ""
#. Warning message
#: SABnzbd.py
@@ -90,8 +89,6 @@ msgid ""
"SABnzbd was started with encoding %s, this should be UTF-8. Expect problems "
"with Unicoded file and directory names in downloads."
msgstr ""
"SABnzbd iniciou com codificado %s, deveria ser UFT-8. Esperado problemas com"
" arquivos e nomes de diretórios Unicode nos downloades."
#. Warning message
#: SABnzbd.py
@@ -99,13 +96,11 @@ msgid ""
"Current umask (%o) might deny SABnzbd access to the files and folders it "
"creates."
msgstr ""
"Mascara atual (%o) pode negar ao SABnzbd acesso aos arquivos e diretórios "
"criados."
#. Warning message
#: SABnzbd.py
msgid "Could not load additional certificates from certifi package"
msgstr "Não foi possível carregar certificado do pacote certifi."
msgstr ""
#. Warning message
#: SABnzbd.py
@@ -115,7 +110,7 @@ msgstr "HTTPS desabilitado pela falta de arquivos CERT e KEY"
#. Warning message
#: SABnzbd.py
msgid "Disabled HTTPS because of invalid CERT and KEY files"
msgstr "HTTPs desabilitado por caus de arquivo CERT e KEY invalidos"
msgstr ""
#. Error message
#: SABnzbd.py
@@ -143,22 +138,22 @@ msgstr "Erro fatal ao salvar estado"
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed postprocessor"
msgstr "Reiniciado por falha de pós processamento."
msgstr ""
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed downloader"
msgstr "Reiniciado por falha de download"
msgstr ""
#. Warning message
#: sabnzbd/__init__.py
msgid "Restarting because of crashed assembler"
msgstr "Reiniciado por falha de assembler"
msgstr ""
#. Warning message
#: sabnzbd/__init__.py
msgid "Cannot access PID file %s"
msgstr "Não é possível acessar arquivo PID %s"
msgstr ""
#: sabnzbd/api.py, sabnzbd/emailer.py
msgid "Email succeeded"
@@ -182,6 +177,11 @@ msgstr "Nenhum"
msgid "Default"
msgstr "Padrão"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Falha ao compilar a expressão para o termo pesquisado: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -208,8 +208,6 @@ msgid ""
"Paused job \"%s\" because of encrypted RAR file (if supplied, all passwords "
"were tried)"
msgstr ""
"Tarefa \"%s\" pausado por causa de arquivo RAR encripitado (se fornecido, "
"todos as senhas foram tentadas)"
#. Warning message
#: sabnzbd/assembler.py
@@ -217,8 +215,6 @@ msgid ""
"Aborted job \"%s\" because of encrypted RAR file (if supplied, all passwords"
" were tried)"
msgstr ""
"Tarefa \"%s\" abortado por causa de arquivo RAR encripitado (se fornecido, "
"todos as senhas foram tentadas)"
#: sabnzbd/assembler.py
msgid "Aborted, encryption detected"
@@ -228,8 +224,6 @@ msgstr "Cancelado, criptografia detectada"
#: sabnzbd/assembler.py
msgid "In \"%s\" unwanted extension in RAR file. Unwanted file is %s "
msgstr ""
"Em \"%s\" extensão não necessária em arquivo RAR. Arquivo não necessário é "
"%s "
#: sabnzbd/assembler.py
msgid "Unwanted extension is in rar file %s"
@@ -285,10 +279,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "O caminho UNC \"%s\" não é permitido aqui"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -744,11 +737,6 @@ msgstr "ERRO:"
msgid "Back"
msgstr "Voltar"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -1078,16 +1066,6 @@ msgstr "Fila concluída"
msgid "Other Messages"
msgstr "Outras Mensagens"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Abrir pasta de finalizados"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Não disponível"
@@ -1492,11 +1470,6 @@ msgstr ""
"Fila antiga detectada, use \"Situação -> Reparação da fila\" para converter "
"a fila"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Falha ao compilar a expressão para o termo pesquisado: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1683,6 +1656,10 @@ msgstr "Entrada RSS vazia encontrada (%s)"
msgid "Show interface"
msgstr "Exibir interface"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Abrir pasta de finalizados"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1771,11 +1748,6 @@ msgstr ""
msgid "Script"
msgstr "Script"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2048,6 +2020,7 @@ msgstr "Versão do Python"
msgid "Home page"
msgstr "Página inicial"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "ou"
@@ -2114,8 +2087,8 @@ msgstr "Fórum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2147,6 +2120,11 @@ msgstr "Opções"
msgid "Scheduling"
msgstr "Agendamento"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2556,6 +2534,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Ativar 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2575,6 +2561,7 @@ msgstr "Tempo ativo"
msgid "Backup"
msgstr "Backup"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Leia a sessão ajuda no Wiki sobre isso!"
@@ -3126,19 +3113,23 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
msgstr "Em caso de \"Pausa\", você precisa definir uma senha e retomar a tarefa."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr "Detectar Downloads Duplicados"
#: sabnzbd/skintext.py
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Detecta episódios duplicados em séries"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -3147,8 +3138,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3297,6 +3288,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Procurar por nova versão"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Checar semanalmente por nova versão do SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,5 +1,5 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Eduard Baniceru <war4peace@gmail.com>, 2021
@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"
@@ -182,6 +182,11 @@ msgstr "Niciunul"
msgid "Default"
msgstr "Implicit"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Compilarea unei căutări regex nereuşită: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -285,10 +290,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "cale UNC \"%s\" nu este premisă aici"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -750,11 +754,6 @@ msgstr "EROARE:"
msgid "Back"
msgstr "Înapoi"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -1092,16 +1091,6 @@ msgstr "Coadă finalizată"
msgid "Other Messages"
msgstr "Alte Mesaje"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Deschide dosar descărcări complete"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Indisponibil"
@@ -1508,11 +1497,6 @@ msgstr ""
"Coadă de descărcare veche detectată, utilizează Stare->Reparare pentru a "
"converti coada"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Compilarea unei căutări regex nereuşită: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1699,6 +1683,10 @@ msgstr "Valoare RSS gasită a fost goală (%s)"
msgid "Show interface"
msgstr "Arată interfața"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Deschide dosar descărcări complete"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1787,11 +1775,6 @@ msgstr ""
msgid "Script"
msgstr "Script"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2064,6 +2047,7 @@ msgstr "Versiune Python"
msgid "Home page"
msgstr "Pagină de pornire"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "sau"
@@ -2130,8 +2114,8 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2163,6 +2147,11 @@ msgstr "Comutatoare"
msgid "Scheduling"
msgstr "Planificare"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2575,6 +2564,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Activează 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2594,6 +2591,7 @@ msgstr "Durata Funcţionării"
msgid "Backup"
msgstr "Server Secundar"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Citeşte Ajutorul Wiki despre asta !"
@@ -3142,19 +3140,23 @@ msgstr ""
"reluați sarcina."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr "Detectează Descărcări Duplicate"
#: sabnzbd/skintext.py
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Detectează episoade duplicate în seriale"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -3163,8 +3165,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3314,6 +3316,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Verifică Versiuni Noi"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Verificare săptămânală versiuni noi SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"
@@ -177,6 +177,11 @@ msgstr "Ничего"
msgid "Default"
msgstr "по умолчанию"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Не удалось составить регулярное выражение поиска: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -274,10 +279,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC-путь «%s» здесь не допускается"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -729,11 +733,6 @@ msgstr "ОШИБКА"
msgid "Back"
msgstr "Назад"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "д"
@@ -1065,16 +1064,6 @@ msgstr ""
msgid "Other Messages"
msgstr "Другие сообщения"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr ""
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr ""
@@ -1477,11 +1466,6 @@ msgstr "Ошибка %s: укажите действительное имя по
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr ""
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Не удалось составить регулярное выражение поиска: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1666,6 +1650,10 @@ msgstr "Обнаружена пустая запись RSS (%s)"
msgid "Show interface"
msgstr "Показать интерфейс"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr ""
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1754,11 +1742,6 @@ msgstr ""
msgid "Script"
msgstr "Сценарий"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2031,6 +2014,7 @@ msgstr ""
msgid "Home page"
msgstr ""
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr ""
@@ -2097,8 +2081,8 @@ msgstr "Форум"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2130,6 +2114,11 @@ msgstr "Переключатели"
msgid "Scheduling"
msgstr "Расписание"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2539,6 +2528,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2558,6 +2555,7 @@ msgstr "Время работы"
msgid "Backup"
msgstr "Резервный"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Описание см. на вики-странице."
@@ -3109,19 +3107,23 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
msgstr ""
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr "Обнаруживать повторяющиеся загрузки"
#: sabnzbd/skintext.py
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgid "Detect duplicate episodes in series"
msgstr ""
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -3130,8 +3132,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3277,6 +3279,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Проверять наличие обновлений"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Еженедельно проверять доступность новых версий SABnzbd."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"
@@ -175,6 +175,11 @@ msgstr "Ниједно"
msgid "Default"
msgstr "Подразумевано"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Neuspešna kompilacija regularne ekspresije za termin pretrage: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -272,10 +277,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC путања \"%s\" није дозвољена"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -726,11 +730,6 @@ msgstr "ГРЕШКА:"
msgid "Back"
msgstr "Назад"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "д"
@@ -1061,16 +1060,6 @@ msgstr "Ред завршен"
msgid "Other Messages"
msgstr "Остале поруке"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Otvori fasciklu završenih"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Недоступно"
@@ -1471,11 +1460,6 @@ msgstr "Грешка %s: Требате да унесете важеће име/
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr "Стари ред је нађен, употребити Статус->Поправи за претварање реда"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Neuspešna kompilacija regularne ekspresije za termin pretrage: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1660,6 +1644,10 @@ msgstr "Nađen prazan RSS unos (%s)"
msgid "Show interface"
msgstr "Pokaži interfejs"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Otvori fasciklu završenih"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1748,11 +1736,6 @@ msgstr ""
msgid "Script"
msgstr "Скрипт"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2025,6 +2008,7 @@ msgstr "Верзија Python-а"
msgid "Home page"
msgstr "Почетна страница"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "или"
@@ -2091,8 +2075,8 @@ msgstr "Форум"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "ИРЦ"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2124,6 +2108,11 @@ msgstr "Прекидачи"
msgid "Scheduling"
msgstr "Планирање"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2531,6 +2520,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Омогући 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2550,6 +2547,7 @@ msgstr "; Ради"
msgid "Backup"
msgstr "Резервно"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "За више информација, читајте Вики!"
@@ -3096,19 +3094,23 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
msgstr "Ако је \"Пауза\", требате да поставите лозинку и да наставите рад."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr "Откриј дупликатна преузимања"
#: sabnzbd/skintext.py
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Откриј дупле епизоде у серије"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -3117,8 +3119,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3265,6 +3267,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Провери нове верзије"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Недељно проверавај за новије верзије програма."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,12 +1,12 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"
@@ -175,6 +175,11 @@ msgstr "Ingen"
msgid "Default"
msgstr "Standard"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "Det gick inte att kompilera regex för sök-sträng: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -272,10 +277,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "UNC sökväg \"%s\" är inte tillåten här"
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -728,11 +732,6 @@ msgstr "FEL:"
msgid "Back"
msgstr "Bakåt"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "d"
@@ -1065,16 +1064,6 @@ msgstr "Kön färdig"
msgid "Other Messages"
msgstr "Andra meddelanden"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Öppna färdig mapp"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "Ej tillgänglig"
@@ -1477,11 +1466,6 @@ msgstr "Error %s: Du måste ange ett giltigt användarnamn och lösenord."
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr "Gammal kö hittad, använd Status -> Reparera för att konvertera kön"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "Det gick inte att kompilera regex för sök-sträng: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1666,6 +1650,10 @@ msgstr "Tom RSS post hittades (%s)"
msgid "Show interface"
msgstr "Visa gränssnitt"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "Öppna färdig mapp"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1754,11 +1742,6 @@ msgstr ""
msgid "Script"
msgstr "Skript"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2031,6 +2014,7 @@ msgstr "Python-version"
msgid "Home page"
msgstr "Webbplats"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "eller"
@@ -2097,8 +2081,8 @@ msgstr "Forum"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2130,6 +2114,11 @@ msgstr "Switchar"
msgid "Scheduling"
msgstr "Schemaläggare"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2539,6 +2528,14 @@ msgstr ""
msgid "Enable 7zip"
msgstr "Aktivera 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2558,6 +2555,7 @@ msgstr "Upptid"
msgid "Backup"
msgstr "Säkerhetskopiera"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "Läs Wiki Help för detta!"
@@ -3106,19 +3104,23 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
msgstr "Om \"Pausad\", så behöver du ange ett lösenord för att återuppta jobbet."
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgid "Detect Duplicate Downloads"
msgstr "Upptäck dubbletter av nedladdningar"
#: sabnzbd/skintext.py
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "Hitta dublettavsnitt i serier"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr ""
#: sabnzbd/skintext.py
@@ -3127,8 +3129,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3275,6 +3277,10 @@ msgstr ""
msgid "Check for New Release"
msgstr "Kolla efter ny utgåva"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "Kolla efter ny utgåva av SABnzbd varje vecka."
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"

View File

@@ -1,15 +1,14 @@
# SABnzbd Translation Template file MAIN
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
# Translators:
# Safihre <safihre@sabnzbd.org>, 2023
# Kangwei Li <lkw20010211@gmail.com>, 2023
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:49+0000\n"
"Last-Translator: Kangwei Li <lkw20010211@gmail.com>, 2023\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2023\n"
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -174,6 +173,11 @@ msgstr "无"
msgid "Default"
msgstr "默认"
#. Error message
#: sabnzbd/api.py
msgid "Failed to compile regex for search term: %s"
msgstr "为搜索关键词编译正则表达式失败: %s"
#. Error message
#: sabnzbd/assembler.py
msgid "Disk full! Forcing Pause"
@@ -271,10 +275,9 @@ msgid ""
" it creates."
msgstr ""
#. Warning message
#: sabnzbd/cfg.py
msgid "Network path \"%s\" should not be used here"
msgstr ""
msgid "UNC path \"%s\" not allowed here"
msgstr "此处不允许使用 UNC 路径 \"%s\""
#: sabnzbd/cfg.py
msgid "Queue not empty, cannot change folder."
@@ -722,11 +725,6 @@ msgstr "错误:"
msgid "Back"
msgstr "返回"
#: sabnzbd/misc.py
msgid ""
"To prevent all helpful warnings, disable Special setting 'helpful_warnings'."
msgstr ""
#: sabnzbd/misc.py
msgid "d"
msgstr "天"
@@ -1055,16 +1053,6 @@ msgstr "队列已完成"
msgid "Other Messages"
msgstr "其他信息"
#. Notification action
#: sabnzbd/notifier.py
msgid "Open folder"
msgstr ""
#. Notification action
#: sabnzbd/notifier.py, sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "打开完成文件夹"
#: sabnzbd/notifier.py, sabnzbd/skintext.py
msgid "Not available"
msgstr "不可用"
@@ -1465,11 +1453,6 @@ msgstr "错误 %s: 您需要提供有效的用户名与密码。"
msgid "Old queue detected, use Status->Repair to convert the queue"
msgstr "侦测到旧版队列,请使用“状态”→“修复”转换队列"
#. Error message
#: sabnzbd/postproc.py
msgid "Failed to compile regex for search term: %s"
msgstr "为搜索关键词编译正则表达式失败: %s"
#. Warning message
#: sabnzbd/postproc.py
msgid ""
@@ -1654,6 +1637,10 @@ msgstr "发现空的 RSS 条目 (%s)"
msgid "Show interface"
msgstr "显示界面"
#: sabnzbd/sabtray.py, sabnzbd/sabtraylinux.py
msgid "Open complete folder"
msgstr "打开完成文件夹"
#. Queue page button or entry box
#: sabnzbd/sabtray.py, sabnzbd/skintext.py
msgid "Pause for"
@@ -1742,11 +1729,6 @@ msgstr ""
msgid "Script"
msgstr "脚本"
#. PP RSS feed of the NZB - Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. PP Source of the NZB (path or URL) - Where to find the SABnzbd sourcecode
#: sabnzbd/skintext.py
msgid "Source"
@@ -2019,6 +2001,7 @@ msgstr "Python 版本"
msgid "Home page"
msgstr "主页"
#. Used in "IRC or IRC-Webaccess"
#: sabnzbd/skintext.py
msgid "or"
msgstr "或"
@@ -2085,8 +2068,8 @@ msgstr "论坛"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Live Chat"
msgstr ""
msgid "IRC"
msgstr "IRC"
#. Main menu item
#: sabnzbd/skintext.py
@@ -2118,6 +2101,11 @@ msgstr "参数"
msgid "Scheduling"
msgstr "定时任务"
#. Main menu item
#: sabnzbd/skintext.py
msgid "RSS"
msgstr "RSS"
#. Main menu item
#: sabnzbd/skintext.py
msgid "Notifications"
@@ -2519,6 +2507,14 @@ msgstr "每当您的 IP 地址发生变化,或当 SABnzbd 重启,登录会
msgid "Enable 7zip"
msgstr "启用 7zip"
#: sabnzbd/skintext.py
msgid ""
"Secure (SSL) connections from SABnzbd to newsservers and HTTPS websites will"
" be encrypted, however, validating a server's identity using its "
"certificates is not possible. OpenSSL 1.0.2 or above and up-to-date local CA"
" certificates are required."
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Speed up repairs by installing par2cmdline-turbo, it is available for many "
@@ -2538,6 +2534,7 @@ msgstr "启动时间"
msgid "Backup"
msgstr "备份"
#. Notification Script settings
#: sabnzbd/skintext.py
msgid "Read the Wiki Help on this!"
msgstr "关于该项请参阅 Wiki 帮助!"
@@ -2878,11 +2875,11 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "Minimum Free Space for Completed Download Folder"
msgstr "完成下载文件夹的最小剩余空间"
msgstr ""
#: sabnzbd/skintext.py
msgid "Will not work if a category folder is on a different disk."
msgstr "当某分类的路径位于另一磁盘上时不生效。"
msgstr ""
#. Auto-resume download on the reset day
#: sabnzbd/skintext.py
@@ -2966,14 +2963,14 @@ msgstr "队列管理及历史数据库的存放位置。<br /><i>仅当队列为
#: sabnzbd/skintext.py
msgid "Backup Folder"
msgstr "备份文件夹"
msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Location where the backups of the configuration file and databases are "
"stored.<br />If left empty, the backup will be created in the Completed "
"Download Folder."
msgstr "备份配置文件和数据库的位置。<br />如果留空,备份将存放于完成下载文件夹中。"
msgstr ""
#: sabnzbd/skintext.py
msgid "<i>Data will <b>not</b> be moved. Requires SABnzbd restart!</i>"
@@ -2990,7 +2987,7 @@ msgstr "SABnzbd 日志文件的位置。<br /><i>需要重启 SABnzbd 才能生
#: sabnzbd/skintext.py
msgid "Purge Logs"
msgstr "清除日志"
msgstr ""
#: sabnzbd/skintext.py
msgid ".nzb Backup Folder"
@@ -3060,20 +3057,24 @@ msgid "In case of \"Pause\", you'll need to set a password and resume the job."
msgstr "若选择“暂停”,您将需要设置密码并手动续传对应任务。"
#: sabnzbd/skintext.py
msgid "Identical download detection"
msgstr ""
msgid "Detect Duplicate Downloads"
msgstr "侦测重复下载"
#: sabnzbd/skintext.py
msgid "Detect identical downloads based on name or NZB contents."
msgstr ""
msgid ""
"Detect identical NZB files (based on items in your History or files in .nzb "
"Backup Folder)"
msgstr "检测相同的 NZB 文件 (基于您的历史项目或 .nzb 备份文件夹中的文件)"
#: sabnzbd/skintext.py
msgid "Smart duplicate detection"
msgstr ""
msgid "Detect duplicate episodes in series"
msgstr "侦测同季的重复剧集"
#: sabnzbd/skintext.py
msgid "Detect duplicates based on analysis of the filename."
msgstr ""
msgid ""
"Detect identical episodes in series (based on \"name/season/episode\" of "
"items in your History)"
msgstr "在剧目中检测相同的剧集 (基于您的历史项目,参照 \"name/season/episode\" 的规则)"
#: sabnzbd/skintext.py
msgid "Allow proper releases"
@@ -3081,8 +3082,8 @@ msgstr ""
#: sabnzbd/skintext.py
msgid ""
"Bypass smart duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name."
"Bypass series duplicate detection if PROPER, REAL or REPACK is detected in "
"the download name"
msgstr ""
#. Four way switch for duplicates
@@ -3225,6 +3226,10 @@ msgstr "在文章发布时长尚不足该值时暂停下载文章。将任务优
msgid "Check for New Release"
msgstr "检查新版本"
#: sabnzbd/skintext.py
msgid "Weekly check for new SABnzbd release."
msgstr "每周检查 SABnzbd 的新版本。"
#. Pick list for weekly test for new releases
#: sabnzbd/skintext.py
msgid "Also test releases"
@@ -3435,7 +3440,7 @@ msgstr "超时"
#: sabnzbd/skintext.py
msgid "Account expiration date"
msgstr "账户到期时间"
msgstr ""
#: sabnzbd/skintext.py
msgid "Warn 5 days in advance of account expiration date."
@@ -3615,7 +3620,7 @@ msgstr "应用过滤器"
#. Config->RSS edit button
#: sabnzbd/skintext.py
msgid "Edit"
msgstr "编辑"
msgstr ""
#. Config->RSS when will be the next RSS scan
#: sabnzbd/skintext.py

View File

@@ -1,10 +1,10 @@
#
# SABnzbd Translation Template file NSIS
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-Team
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: team@sabnzbd.org\n"
"Language-Team: SABnzbd <team@sabnzbd.org>\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Pavel C <quoing_transifex@mess.cz>, 2022\n"
"Language-Team: Czech (https://app.transifex.com/sabnzbd/teams/111101/cs/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Danish (https://app.transifex.com/sabnzbd/teams/111101/da/)\n"

View File

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC4\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: reloxx13 <reloxx@interia.pl>, 2022\n"
"Language-Team: German (https://app.transifex.com/sabnzbd/teams/111101/de/)\n"

View File

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Ester Molla Aragones <moarages@gmail.com>, 2020\n"
"Language-Team: Spanish (https://app.transifex.com/sabnzbd/teams/111101/es/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Finnish (https://app.transifex.com/sabnzbd/teams/111101/fi/)\n"

View File

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Fred L <88com88@gmail.com>, 2021\n"
"Language-Team: French (https://app.transifex.com/sabnzbd/teams/111101/fr/)\n"

View File

@@ -7,7 +7,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: ION, 2021\n"
"Language-Team: Hebrew (https://app.transifex.com/sabnzbd/teams/111101/he/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Norwegian Bokmål (https://app.transifex.com/sabnzbd/teams/111101/nb/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC4\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2021\n"
"Language-Team: Dutch (https://app.transifex.com/sabnzbd/teams/111101/nl/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Polish (https://app.transifex.com/sabnzbd/teams/111101/pl/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/sabnzbd/teams/111101/pt_BR/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Romanian (https://app.transifex.com/sabnzbd/teams/111101/ro/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Russian (https://app.transifex.com/sabnzbd/teams/111101/ru/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Serbian (https://app.transifex.com/sabnzbd/teams/111101/sr/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Swedish (https://app.transifex.com/sabnzbd/teams/111101/sv/)\n"

View File

@@ -6,7 +6,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-4.2.0RC3\n"
"Project-Id-Version: SABnzbd-4.2.0Alpha2\n"
"PO-Revision-Date: 2020-06-27 15:56+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>, 2020\n"
"Language-Team: Chinese (China) (https://app.transifex.com/sabnzbd/teams/111101/zh_CN/)\n"

View File

@@ -1,16 +1,16 @@
# Main requirements
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
sabctools==8.1.0
sabctools==8.0.0
cheetah3==3.2.6.post1
cffi==1.16.0
pycparser==2.21
feedparser==6.0.11
feedparser==6.0.10
configobj==5.0.8
cheroot==10.0.0
six==1.16.0
cherrypy==18.9.0
cherrypy==18.8.0
jaraco.functools==4.0.0
jaraco.collections==5.0.0
jaraco.collections==4.3.0
jaraco.text==3.8.1 # Newer version introduces irrelevant extra dependencies
jaraco.classes==3.3.0
jaraco.context==4.3.0
@@ -24,26 +24,24 @@ portend==3.2.0
chardet==5.2.0
PySocks==1.7.1
puremagic==1.15
guessit==3.8.0
guessit==3.7.1
babelfish==0.6.0
rebulk==3.2.0
# Recent cryptography versions require Rust. If you run into issues compiling this
# SABnzbd will also work with older pre-Rust versions such as cryptography==3.3.2
cryptography==41.0.7
cryptography==41.0.5
# We recommend using "orjson" as it is 2x as fast as "ujson". However, it requires
# Rust so SABnzbd works just as well with "ujson" or the Python built in "json" module
ujson==5.9.0
ujson==5.8.0
# Windows system integration
pywin32==306; sys_platform == 'win32'
toasts-winrt==1.0.0; sys_platform == 'win32'
windows-toasts==1.0.2; sys_platform == 'win32'
# macOS system calls
pyobjc-core==10.1; sys_platform == 'darwin'
pyobjc-framework-Cocoa==10.1; sys_platform == 'darwin'
pyobjc-core==10.0; sys_platform == 'darwin'
pyobjc-framework-Cocoa==10.0; sys_platform == 'darwin'
# Linux notifications
notify2==0.3.1; sys_platform != 'win32' and sys_platform != 'darwin'
@@ -57,4 +55,4 @@ notify2==0.3.1; sys_platform != 'win32' and sys_platform != 'darwin'
# Optional support for system power management on *nix.
# Requires libdbus-1-dev to be installed.
# Uncomment line below or manually install after installing requirements.
# dbus-python; sys_platform != 'win32' and sys_platform != 'darwin'
# dbus-python; sys_platform != 'win32' and sys_platform != 'darwin'

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -150,6 +150,7 @@ LOG_ALL = False
WIN_SERVICE = None # Instance of our Win32 Service Class
BROWSER_URL = None
CERTIFICATE_VALIDATION = True
NO_DOWNLOADING = False # When essentials are missing (SABCTools/par2/unrar)
WEB_DIR = None
@@ -161,7 +162,6 @@ RESTART_REQ = False
PAUSED_ALL = False
TRIGGER_RESTART = False # To trigger restart for Scheduler, WinService and Mac
WINTRAY = None # Thread for the Windows SysTray icon
MACOSTRAY = None # Thread for the macOS tray icon
WEBUI_READY = False
LAST_HISTORY_UPDATE = 1
RESTORE_DATA = None
@@ -285,11 +285,6 @@ def initialize(pause_downloader=False, clean_up=False, repair=0):
misc.convert_sorter_settings()
cfg.sorters_converted.set(True)
# Convert duplicate settings
if cfg.no_series_dupes():
cfg.no_smart_dupes.set(cfg.no_series_dupes())
cfg.no_series_dupes.set(0)
# Add hostname to the whitelist
if not cfg.host_whitelist():
cfg.host_whitelist.set(socket.gethostname())
@@ -374,35 +369,35 @@ def halt():
logging.debug("Stopping URLGrabber")
sabnzbd.URLGrabber.stop()
try:
sabnzbd.URLGrabber.join(timeout=3)
sabnzbd.URLGrabber.join()
except:
pass
logging.debug("Stopping dirscanner")
sabnzbd.DirScanner.stop()
try:
sabnzbd.DirScanner.join(timeout=3)
sabnzbd.DirScanner.join()
except:
pass
logging.debug("Stopping downloader")
sabnzbd.Downloader.stop()
try:
sabnzbd.Downloader.join(timeout=3)
sabnzbd.Downloader.join()
except:
pass
logging.debug("Stopping assembler")
sabnzbd.Assembler.stop()
try:
sabnzbd.Assembler.join(timeout=3)
sabnzbd.Assembler.join()
except:
pass
logging.debug("Stopping postprocessor")
sabnzbd.PostProcessor.stop()
try:
sabnzbd.PostProcessor.join(timeout=3)
sabnzbd.PostProcessor.join()
except:
pass

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -58,7 +58,7 @@ import sabnzbd.config as config
import sabnzbd.cfg as cfg
from sabnzbd.skintext import SKIN_TEXT
from sabnzbd.utils.diskspeed import diskspeedmeasure
from sabnzbd.internetspeed import internetspeed
from sabnzbd.utils.internetspeed import internetspeed
from sabnzbd.utils.pathbrowser import folders_at_path
from sabnzbd.utils.getperformance import getpystone
from sabnzbd.misc import (
@@ -69,15 +69,11 @@ from sabnzbd.misc import (
calc_age,
opts_to_pp,
format_time_left,
is_none,
history_updated,
request_repair,
change_queue_complete_action,
)
from sabnzbd.filesystem import diskspace, get_ext, clip_path, remove_all, list_scripts, purge_log_files
from sabnzbd.encoding import xml_name, utob
from sabnzbd.utils.servertests import test_nntp_server_dict
from sabnzbd.getipaddress import local_ipv4, public_ipv4, public_ipv6, dnslookup, active_socks5_proxy
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6, dnslookup, active_socks5_proxy
from sabnzbd.database import HistoryDB
from sabnzbd.lang import is_rtl
from sabnzbd.nzbstuff import NzbObject
@@ -209,7 +205,7 @@ def _api_queue_rename(value, kwargs):
def _api_queue_change_complete_action(value, kwargs):
"""API: accepts value(=action)"""
change_queue_complete_action(value)
sabnzbd.misc.change_queue_complete_action(value)
return report()
@@ -274,7 +270,6 @@ def _api_queue_default(value, kwargs):
search = kwargs.get("search")
categories = kwargs.get("cat") or kwargs.get("category")
priorities = kwargs.get("priority")
statuses = kwargs.get("status")
nzo_ids = kwargs.get("nzo_ids")
if categories and not isinstance(categories, list):
@@ -282,21 +277,13 @@ def _api_queue_default(value, kwargs):
if priorities and not isinstance(priorities, list):
# Make sure it's an integer
priorities = [int_conv(prio) for prio in priorities.split(",")]
if statuses and not isinstance(statuses, list):
statuses = statuses.split(",")
if nzo_ids and not isinstance(nzo_ids, list):
nzo_ids = nzo_ids.split(",")
return report(
keyword="queue",
data=build_queue(
start=start,
limit=limit,
search=search,
categories=categories,
priorities=priorities,
statuses=statuses,
nzo_ids=nzo_ids,
start=start, limit=limit, search=search, categories=categories, priorities=priorities, nzo_ids=nzo_ids
),
)
@@ -398,7 +385,7 @@ def _api_change_cat(name, kwargs):
if value and value2:
nzo_id = value
cat = value2
if is_none(cat):
if cat == "None":
cat = None
result = sabnzbd.NzbQueue.change_cat(nzo_id, cat)
return report(keyword="status", data=bool(result > 0))
@@ -413,7 +400,7 @@ def _api_change_script(name, kwargs):
if value and value2:
nzo_id = value
script = value2
if is_none(script):
if script.lower() == "none":
script = None
result = sabnzbd.NzbQueue.change_script(nzo_id, script)
return report(keyword="status", data=bool(result > 0))
@@ -496,9 +483,8 @@ def _api_history(name, kwargs):
limit = int_conv(kwargs.get("limit"))
last_history_update = int_conv(kwargs.get("last_history_update", 0))
search = kwargs.get("search")
categories = kwargs.get("cat") or kwargs.get("category")
statuses = kwargs.get("status")
failed_only = int_conv(kwargs.get("failed_only"))
categories = kwargs.get("cat") or kwargs.get("category")
nzo_ids = kwargs.get("nzo_ids")
# Do we need to send anything?
@@ -508,13 +494,6 @@ def _api_history(name, kwargs):
if categories and not isinstance(categories, list):
categories = categories.split(",")
if statuses and not isinstance(statuses, list):
statuses = statuses.split(",")
if failed_only:
# We ignore any other statuses, having both doesn't make sense
statuses = [Status.FAILED]
if nzo_ids and not isinstance(nzo_ids, list):
nzo_ids = nzo_ids.split(",")
@@ -532,7 +511,7 @@ def _api_history(name, kwargs):
history_db.remove_failed(search)
if special in ("all", "completed"):
history_db.remove_completed(search)
history_updated()
sabnzbd.misc.history_updated()
return report()
elif value:
jobs = value.split(",")
@@ -544,7 +523,7 @@ def _api_history(name, kwargs):
if del_files:
remove_all(history_db.get_incomplete_path(job), recursive=True)
history_db.remove_history(job)
history_updated()
sabnzbd.misc.history_updated()
return report()
else:
return report(_MSG_NO_VALUE)
@@ -558,12 +537,7 @@ def _api_history(name, kwargs):
to_units(day),
)
history["slots"], history["ppslots"], history["noofslots"] = build_history(
start=start,
limit=limit,
search=search,
categories=categories,
statuses=statuses,
nzo_ids=nzo_ids,
start=start, limit=limit, search=search, failed_only=failed_only, categories=categories, nzo_ids=nzo_ids
)
history["last_history_update"] = sabnzbd.LAST_HISTORY_UPDATE
history["version"] = sabnzbd.__version__
@@ -727,7 +701,7 @@ def _api_restart(name, kwargs):
def _api_restart_repair(name, kwargs):
logging.info("Queue repair requested by API")
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()
@@ -1276,6 +1250,9 @@ def build_status(calculate_performance: bool = False, skip_dashboard: bool = Fal
# Calculate performance measures, if requested
if int_conv(calculate_performance):
# Perform the internetspeed measure in separate thread
internetspeed_future = sabnzbd.THREAD_POOL.submit(internetspeed)
# PyStone
sabnzbd.PYSTONE_SCORE = getpystone()
@@ -1284,7 +1261,7 @@ def build_status(calculate_performance: bool = False, skip_dashboard: bool = Fal
sabnzbd.COMPLETE_DIR_SPEED = round(diskspeedmeasure(sabnzbd.cfg.complete_dir.get_path()), 1)
# Internet bandwidth
sabnzbd.INTERNET_BANDWIDTH = round(internetspeed(), 1)
sabnzbd.INTERNET_BANDWIDTH = round(internetspeed_future.result(), 1)
# How often did we delay?
info["delayed_assembler"] = sabnzbd.BPSMeter.delayed_assembler
@@ -1307,9 +1284,9 @@ 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"] = local_ipv4()
info["publicipv4"] = public_ipv4()
info["ipv6"] = public_ipv6()
info["localipv4"] = localipv4()
info["publicipv4"] = publicipv4()
info["ipv6"] = ipv6()
info["dnslookup"] = dnslookup()
info["servers"] = []
@@ -1366,7 +1343,6 @@ def build_queue(
search: Optional[str] = None,
categories: Optional[List[str]] = None,
priorities: Optional[List[str]] = None,
statuses: Optional[List[str]] = None,
nzo_ids: Optional[List[str]] = None,
):
info = build_header(for_template=False)
@@ -1378,13 +1354,7 @@ def build_queue(
queue_fullsize,
nzos_matched,
) = sabnzbd.NzbQueue.queue_info(
search=search,
categories=categories,
priorities=priorities,
statuses=statuses,
nzo_ids=nzo_ids,
start=start,
limit=limit,
search=search, categories=categories, priorities=priorities, nzo_ids=nzo_ids, start=start, limit=limit
)
info["kbpersec"] = "%.2f" % (sabnzbd.BPSMeter.bps / KIBI)
@@ -1414,6 +1384,7 @@ def build_queue(
for nzo in nzo_list:
mbleft = nzo.remaining / MEBI
mb = nzo.bytes / MEBI
is_propagating = (nzo.avg_stamp + float(cfg.propagation_delay() * 60)) > time.time()
slot = {}
slot["index"] = n
@@ -1434,8 +1405,8 @@ def build_queue(
slot["direct_unpack"] = nzo.direct_unpack_progress
if not sabnzbd.Downloader.paused and nzo.status not in (Status.PAUSED, Status.FETCHING, Status.GRABBING):
if nzo.propagation_delay_left:
slot["status"] = Status.PROPAGATING
if is_propagating:
slot["status"] = Status.PROP
elif nzo.status == Status.CHECKING:
slot["status"] = Status.CHECKING
else:
@@ -1449,7 +1420,7 @@ def build_queue(
if (
sabnzbd.Downloader.paused
or sabnzbd.Downloader.paused_for_postproc
or nzo.propagation_delay_left
or is_propagating
or nzo.status not in (Status.DOWNLOADING, Status.FETCHING, Status.QUEUED)
) and nzo.priority != FORCE_PRIORITY:
slot["timeleft"] = "0:00:00"
@@ -1562,7 +1533,7 @@ def del_job_files(job_paths):
def Tspec(txt):
"""Translate special terms"""
if is_none(txt):
if txt == "None":
return T("None")
elif txt in ("Default", "*"):
return T("Default")
@@ -1660,20 +1631,36 @@ def build_header(webdir: str = "", for_template: bool = True, trans_functions: b
def build_history(
start: int = 0,
limit: int = 1000000,
limit: int = 0,
search: Optional[str] = None,
failed_only: int = 0,
categories: Optional[List[str]] = None,
statuses: Optional[List[str]] = None,
nzo_ids: Optional[List[str]] = None,
) -> Tuple[List[Dict[str, Any]], int, int]:
"""Combine the jobs still in post-processing and the database history"""
if not limit:
limit = 1000000
# Grab any items that are active or queued in postproc
postproc_queue = sabnzbd.PostProcessor.get_queue(
search=search,
categories=categories,
statuses=statuses,
nzo_ids=nzo_ids,
)
postproc_queue = sabnzbd.PostProcessor.get_queue()
# Filter out any items that don't match the search term or category
if postproc_queue:
# It would be more efficient to iterate only once, but we accept the penalty for code clarity
if isinstance(categories, list):
postproc_queue = [nzo for nzo in postproc_queue if nzo.cat in categories]
if isinstance(search, str):
# Replace * with .* and ' ' with .
search_text = search.strip().replace("*", ".*").replace(" ", ".*") + ".*?"
try:
re_search = re.compile(search_text, re.I)
postproc_queue = [nzo for nzo in postproc_queue if re_search.search(nzo.final_name)]
except:
logging.error(T("Failed to compile regex for search term: %s"), search_text)
if nzo_ids:
postproc_queue = [nzo for nzo in postproc_queue if nzo.nzo_id in nzo_ids]
# Multi-page support for postproc items
postproc_queue_size = len(postproc_queue)
@@ -1682,10 +1669,13 @@ def build_history(
postproc_queue = []
database_history_limit = limit
else:
if limit:
postproc_queue = postproc_queue[start : start + limit]
else:
postproc_queue = postproc_queue[start:]
try:
if limit:
postproc_queue = postproc_queue[start : start + limit]
else:
postproc_queue = postproc_queue[start:]
except:
pass
# Remove the amount of postproc items from the db request for history items
database_history_limit = max(limit - len(postproc_queue), 0)
database_history_start = max(start - postproc_queue_size, 0)
@@ -1702,22 +1692,12 @@ def build_history(
# Fetch history items
if not database_history_limit:
items, total_items = history_db.fetch_history(
start=database_history_start,
limit=1,
search=search,
categories=categories,
statuses=statuses,
nzo_ids=nzo_ids,
database_history_start, 1, search, failed_only, categories, nzo_ids
)
items = []
else:
items, total_items = history_db.fetch_history(
start=database_history_start,
limit=database_history_limit,
search=search,
categories=categories,
statuses=statuses,
nzo_ids=nzo_ids,
database_history_start, database_history_limit, search, failed_only, categories, nzo_ids
)
# Add the postproc items to the top of the history
@@ -1762,7 +1742,6 @@ def add_active_history(postproc_queue: List[NzbObject], items: List[Dict[str, An
"size": to_units(nzo.bytes_downloaded, "B"),
"meta": None,
"series": "",
"duplicate_key": nzo.duplicate_key,
"md5sum": "",
"password": nzo.correct_password,
"action_line": nzo.action_line,

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -157,7 +157,6 @@ class Assembler(Thread):
sabnzbd.Downloader.pause()
if cfg.fulldisk_autoresume():
sabnzbd.Scheduler.plan_diskspace_resume(full_dir, required_space)
sabnzbd.notifier.send_notification("SABnzbd", T("Too little diskspace forcing PAUSE"), "disk_full")
sabnzbd.emailer.diskfull_mail()
@staticmethod

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -51,7 +51,7 @@ from sabnzbd.constants import (
DEF_HTTPS_CERT_FILE,
DEF_HTTPS_KEY_FILE,
)
from sabnzbd.filesystem import same_directory, real_path, is_valid_script, is_network_path
from sabnzbd.filesystem import same_directory, real_path
# Validators currently only are made for string/list-of-strings
# and return those on success or an error message.
@@ -188,9 +188,9 @@ def validate_host(value: str) -> ValidateResult:
def validate_script(value: str) -> ValidateResult:
"""Check if value is a valid script"""
if not sabnzbd.__INITIALIZED__ or (value and is_valid_script(value)):
if not sabnzbd.__INITIALIZED__ or (value and sabnzbd.filesystem.is_valid_script(value)):
return None, value
elif sabnzbd.misc.is_none(value):
elif (value and value == "None") or not value:
return None, "None"
return T("%s is not a valid script") % value, None
@@ -217,12 +217,12 @@ def validate_permissions(value: str) -> ValidateResult:
def validate_safedir(root: str, value: str, default: str) -> ValidateResult:
"""Allow only when queues are empty and not a network-path"""
"""Allow only when queues are empty and no UNC"""
if not sabnzbd.__INITIALIZED__ or (sabnzbd.PostProcessor.empty() and sabnzbd.NzbQueue.is_empty()):
# We allow it, but send a warning
if is_network_path(real_path(root, value)):
sabnzbd.misc.helpful_warning(T('Network path "%s" should not be used here'), value)
return validate_default_if_empty(root, value, default)
if value.startswith(r"\\"):
return T('UNC path "%s" not allowed here') % value, None
else:
return validate_default_if_empty(root, value, default)
else:
return T("Queue not empty, cannot change folder."), None
@@ -378,15 +378,14 @@ autodisconnect = OptionBool("misc", "auto_disconnect", True)
pre_script = OptionStr("misc", "pre_script", "None", validation=validate_script)
end_queue_script = OptionStr("misc", "end_queue_script", "None", validation=validate_script)
no_dupes = OptionNumber("misc", "no_dupes", 0)
no_series_dupes = OptionNumber("misc", "no_series_dupes", 0) # Kept for converting to no_smart_dupes
no_smart_dupes = OptionNumber("misc", "no_smart_dupes", 0)
dupes_propercheck = OptionBool("misc", "dupes_propercheck", True)
no_series_dupes = OptionNumber("misc", "no_series_dupes", 0)
series_propercheck = OptionBool("misc", "series_propercheck", True)
pause_on_pwrar = OptionNumber("misc", "pause_on_pwrar", 1)
ignore_samples = OptionBool("misc", "ignore_samples", False)
deobfuscate_final_filenames = OptionBool("misc", "deobfuscate_final_filenames", True)
auto_sort = OptionStr("misc", "auto_sort")
direct_unpack = OptionBool("misc", "direct_unpack", False)
propagation_delay = OptionNumber("misc", "propagation_delay", 0, minval=0)
propagation_delay = OptionNumber("misc", "propagation_delay", 0)
folder_rename = OptionBool("misc", "folder_rename", True)
replace_spaces = OptionBool("misc", "replace_spaces", False)
replace_underscores = OptionBool("misc", "replace_underscores", False)
@@ -508,7 +507,7 @@ email_cats = OptionList("misc", "email_cats", ["*"])
# [ncenter]
ncenter_enable = OptionBool("ncenter", "ncenter_enable", sabnzbd.MACOS)
ncenter_cats = OptionList("ncenter", "ncenter_cats", ["*"])
ncenter_prio_startup = OptionBool("ncenter", "ncenter_prio_startup", False)
ncenter_prio_startup = OptionBool("ncenter", "ncenter_prio_startup", True)
ncenter_prio_download = OptionBool("ncenter", "ncenter_prio_download", False)
ncenter_prio_pause_resume = OptionBool("ncenter", "ncenter_prio_pause_resume", False)
ncenter_prio_pp = OptionBool("ncenter", "ncenter_prio_pp", False)
@@ -518,7 +517,7 @@ ncenter_prio_disk_full = OptionBool("ncenter", "ncenter_prio_disk_full", True)
ncenter_prio_new_login = OptionBool("ncenter", "ncenter_prio_new_login", False)
ncenter_prio_warning = OptionBool("ncenter", "ncenter_prio_warning", False)
ncenter_prio_error = OptionBool("ncenter", "ncenter_prio_error", False)
ncenter_prio_queue_done = OptionBool("ncenter", "ncenter_prio_queue_done", False)
ncenter_prio_queue_done = OptionBool("ncenter", "ncenter_prio_queue_done", True)
ncenter_prio_other = OptionBool("ncenter", "ncenter_prio_other", True)
# [acenter]
@@ -534,13 +533,13 @@ acenter_prio_disk_full = OptionBool("acenter", "acenter_prio_disk_full", True)
acenter_prio_new_login = OptionBool("acenter", "acenter_prio_new_login", False)
acenter_prio_warning = OptionBool("acenter", "acenter_prio_warning", False)
acenter_prio_error = OptionBool("acenter", "acenter_prio_error", False)
acenter_prio_queue_done = OptionBool("acenter", "acenter_prio_queue_done", False)
acenter_prio_queue_done = OptionBool("acenter", "acenter_prio_queue_done", True)
acenter_prio_other = OptionBool("acenter", "acenter_prio_other", True)
# [ntfosd]
ntfosd_enable = OptionBool("ntfosd", "ntfosd_enable", not sabnzbd.WIN32 and not sabnzbd.MACOS)
ntfosd_cats = OptionList("ntfosd", "ntfosd_cats", ["*"])
ntfosd_prio_startup = OptionBool("ntfosd", "ntfosd_prio_startup", False)
ntfosd_prio_startup = OptionBool("ntfosd", "ntfosd_prio_startup", True)
ntfosd_prio_download = OptionBool("ntfosd", "ntfosd_prio_download", False)
ntfosd_prio_pause_resume = OptionBool("ntfosd", "ntfosd_prio_pause_resume", False)
ntfosd_prio_pp = OptionBool("ntfosd", "ntfosd_prio_pp", False)
@@ -550,7 +549,7 @@ ntfosd_prio_disk_full = OptionBool("ntfosd", "ntfosd_prio_disk_full", True)
ntfosd_prio_new_login = OptionBool("ntfosd", "ntfosd_prio_new_login", False)
ntfosd_prio_warning = OptionBool("ntfosd", "ntfosd_prio_warning", False)
ntfosd_prio_error = OptionBool("ntfosd", "ntfosd_prio_error", False)
ntfosd_prio_queue_done = OptionBool("ntfosd", "ntfosd_prio_queue_done", False)
ntfosd_prio_queue_done = OptionBool("ntfosd", "ntfosd_prio_queue_done", True)
ntfosd_prio_other = OptionBool("ntfosd", "ntfosd_prio_other", True)
# [prowl]
@@ -567,7 +566,7 @@ prowl_prio_disk_full = OptionNumber("prowl", "prowl_prio_disk_full", 1)
prowl_prio_new_login = OptionNumber("prowl", "prowl_prio_new_login", -3)
prowl_prio_warning = OptionNumber("prowl", "prowl_prio_warning", -3)
prowl_prio_error = OptionNumber("prowl", "prowl_prio_error", -3)
prowl_prio_queue_done = OptionNumber("prowl", "prowl_prio_queue_done", -3)
prowl_prio_queue_done = OptionNumber("prowl", "prowl_prio_queue_done", 0)
prowl_prio_other = OptionNumber("prowl", "prowl_prio_other", 0)
# [pushover]
@@ -588,7 +587,7 @@ pushover_prio_disk_full = OptionNumber("pushover", "pushover_prio_disk_full", 1)
pushover_prio_new_login = OptionNumber("pushover", "pushover_prio_new_login", -3)
pushover_prio_warning = OptionNumber("pushover", "pushover_prio_warning", 1)
pushover_prio_error = OptionNumber("pushover", "pushover_prio_error", 1)
pushover_prio_queue_done = OptionNumber("pushover", "pushover_prio_queue_done", -3)
pushover_prio_queue_done = OptionNumber("pushover", "pushover_prio_queue_done", -1)
pushover_prio_other = OptionNumber("pushover", "pushover_prio_other", -1)
# [pushbullet]
@@ -614,7 +613,7 @@ nscript_enable = OptionBool("nscript", "nscript_enable")
nscript_cats = OptionList("nscript", "nscript_cats", ["*"])
nscript_script = OptionStr("nscript", "nscript_script", validation=validate_script)
nscript_parameters = OptionStr("nscript", "nscript_parameters")
nscript_prio_startup = OptionBool("nscript", "nscript_prio_startup", False)
nscript_prio_startup = OptionBool("nscript", "nscript_prio_startup", True)
nscript_prio_download = OptionBool("nscript", "nscript_prio_download", False)
nscript_prio_pause_resume = OptionBool("nscript", "nscript_prio_pause_resume", False)
nscript_prio_pp = OptionBool("nscript", "nscript_prio_pp", False)
@@ -624,7 +623,7 @@ nscript_prio_disk_full = OptionBool("nscript", "nscript_prio_disk_full", True)
nscript_prio_new_login = OptionBool("nscript", "nscript_prio_new_login", False)
nscript_prio_warning = OptionBool("nscript", "nscript_prio_warning", False)
nscript_prio_error = OptionBool("nscript", "nscript_prio_error", False)
nscript_prio_queue_done = OptionBool("nscript", "nscript_prio_queue_done", False)
nscript_prio_queue_done = OptionBool("nscript", "nscript_prio_queue_done", True)
nscript_prio_other = OptionBool("nscript", "nscript_prio_other", True)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -556,13 +556,6 @@ class ConfigCat:
except KeyError:
continue
# TODO: Remove after next release
if "alt.bin" in self.newzbin.get_string():
sabnzbd.misc.helpful_warning(
"You have set a newsgroup for category %s. Could you let us know why? https://github.com/sabnzbd/sabnzbd/discussions/2758",
self.__name,
)
def get_dict(self, for_public_api: bool = False) -> Dict[str, Any]:
"""Return a dictionary with all attributes"""
output_dict = {}
@@ -1151,12 +1144,12 @@ def get_categories() -> Dict[str, ConfigCat]:
# Add Default categories
if "*" not in cats:
ConfigCat("*", {"order": 0, "pp": "3", "script": "None", "priority": NORMAL_PRIORITY})
ConfigCat("*", {"pp": "3", "script": "None", "priority": NORMAL_PRIORITY})
# Add some category suggestions
ConfigCat("movies", {"order": 1})
ConfigCat("tv", {"order": 2})
ConfigCat("audio", {"order": 3})
ConfigCat("software", {"order": 4})
ConfigCat("movies", {})
ConfigCat("tv", {})
ConfigCat("audio", {})
ConfigCat("software", {})
# Save config for future use
save_config(True)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -49,7 +49,7 @@ RENAMES_FILE = "__renames__"
ATTRIB_FILE = "SABnzbd_attrib"
REPAIR_REQUEST = "repair-all.sab"
SABCTOOLS_VERSION_REQUIRED = "8.1.0"
SABCTOOLS_VERSION_REQUIRED = "8.0.0"
DB_HISTORY_VERSION = 1
DB_HISTORY_NAME = "history%s.db" % DB_HISTORY_VERSION
@@ -120,15 +120,14 @@ INTERFACE_PRIORITIES = {
}
STAGES = {
"RSS": 0,
"Source": 1,
"Download": 2,
"Servers": 3,
"Repair": 4,
"Filejoin": 5,
"Unpack": 6,
"Deobfuscate": 7,
"Script": 8,
"Source": 0,
"Download": 1,
"Servers": 2,
"Repair": 3,
"Filejoin": 4,
"Unpack": 5,
"Deobfuscate": 6,
"Script": 7,
}
VALID_ARCHIVES = (".zip", ".rar", ".7z")
@@ -163,14 +162,14 @@ class Status:
RUNNING = "Running" # PP: User's post processing script is running
VERIFYING = "Verifying" # PP: Job is being verified (by par2)
DELETED = "Deleted" # Q: Job has been deleted (and is almost gone)
PROPAGATING = "Propagating" # Q: Delayed download
PROP = "Propagating" # Q: Delayed download
class DuplicateStatus:
DUPLICATE = "Duplicate" # Simple duplicate
DUPLICATE_ALTERNATIVE = "Duplicate Alternative" # Alternative duplicate for a queued job
SMART_DUPLICATE = "Smart Duplicate" # Simple Series duplicate
SMART_DUPLICATE_ALTERNATIVE = "Smart Duplicate Alternative" # Alternative duplicate for a queued job
SERIES_DUPLICATE = "Series Duplicate" # Simple Series duplicate
SERIES_DUPLICATE_ALTERNATIVE = "Series Duplicate Alternative" # Alternative duplicate for a queued job
class AddNzbFileResult:

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -80,32 +80,26 @@ class HistoryDB:
self.execute("PRAGMA user_version;")
try:
version = self.cursor.fetchone()["user_version"]
except (IndexError, TypeError):
except IndexError:
version = 0
# Add any new columns added since last DB version
# Use "and" to stop when database has been reset due to corruption
if version < 1:
# Add any missing columns added since first DB version
# Use "and" to stop when database has been reset due to corruption
_ = (
self.execute("PRAGMA user_version = 1;", save=True)
and self.execute("ALTER TABLE history ADD COLUMN series TEXT;", save=True)
and self.execute("ALTER TABLE history ADD COLUMN md5sum TEXT;", save=True)
self.execute("PRAGMA user_version = 1;")
and self.execute('ALTER TABLE "history" ADD COLUMN series TEXT;')
and self.execute('ALTER TABLE "history" ADD COLUMN md5sum TEXT;')
)
if version < 2:
_ = self.execute("PRAGMA user_version = 2;", save=True) and self.execute(
"ALTER TABLE history ADD COLUMN password TEXT;", save=True
)
if version < 3:
# Transfer data to new column (requires WHERE-hack), original column should be removed later
_ = (
self.execute("PRAGMA user_version = 3;", save=True)
and self.execute("ALTER TABLE history ADD COLUMN duplicate_key TEXT;", save=True)
and self.execute("UPDATE history SET duplicate_key = series WHERE 1 = 1;", save=True)
# Add any missing columns added since second DB version
# Use "and" to stop when database has been reset due to corruption
_ = self.execute("PRAGMA user_version = 2;") and self.execute(
'ALTER TABLE "history" ADD COLUMN password TEXT;'
)
def execute(self, command: str, args: Sequence = (), save: bool = False) -> bool:
"""Wrapper for executing SQL commands"""
for tries in (4, 3, 2, 1, 0):
for tries in range(5, 0, -1):
try:
self.cursor.execute(command, args)
if save:
@@ -113,7 +107,7 @@ class HistoryDB:
return True
except:
error = str(sys.exc_info()[1])
if tries > 0 and "is locked" in error:
if tries >= 0 and "is locked" in error:
logging.debug("Database locked, wait and retry")
time.sleep(0.5)
continue
@@ -148,7 +142,7 @@ class HistoryDB:
"""Create a new (empty) database file"""
self.execute(
"""
CREATE TABLE history (
CREATE TABLE "history" (
"id" INTEGER PRIMARY KEY,
"completed" INTEGER NOT NULL,
"name" TEXT NOT NULL,
@@ -175,13 +169,11 @@ class HistoryDB:
"meta" TEXT,
"series" TEXT,
"md5sum" TEXT,
"password" TEXT,
"duplicate_key" TEXT
"password" TEXT
)
""",
save=True,
"""
)
self.execute("PRAGMA user_version = 3;", save=True)
self.execute("PRAGMA user_version = 2;")
def close(self):
"""Close database connection"""
@@ -271,7 +263,7 @@ class HistoryDB:
self.execute(
"""INSERT INTO history (completed, name, nzb_name, category, pp, script, report,
url, status, nzo_id, storage, path, script_log, script_line, download_time, postproc_time, stage_log,
downloaded, fail_message, url_info, bytes, duplicate_key, md5sum, password)
downloaded, fail_message, url_info, bytes, series, md5sum, password)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
t,
save=True,
@@ -283,8 +275,8 @@ class HistoryDB:
start: Optional[int] = None,
limit: Optional[int] = None,
search: Optional[str] = None,
failed_only: int = 0,
categories: Optional[List[str]] = None,
statuses: Optional[List[str]] = None,
nzo_ids: Optional[List[str]] = None,
) -> Tuple[List[Dict[str, Any]], int]:
"""Return records for specified jobs"""
@@ -293,20 +285,18 @@ class HistoryDB:
post = ""
if categories:
categories = ["*" if c == "Default" else c for c in categories]
post = " AND (category = ?"
post += " OR category = ? " * (len(categories) - 1)
post = " AND (CATEGORY = ?"
post += " OR CATEGORY = ? " * (len(categories) - 1)
post += ")"
command_args.extend(categories)
if statuses:
post += " AND (status = ?"
post += " OR status = ? " * (len(statuses) - 1)
post += ")"
command_args.extend(statuses)
if nzo_ids:
post += " AND (nzo_id = ?"
post += " OR nzo_id = ? " * (len(nzo_ids) - 1)
post += " AND (NZO_ID = ?"
post += " OR NZO_ID = ? " * (len(nzo_ids) - 1)
post += ")"
command_args.extend(nzo_ids)
if failed_only:
post += " AND STATUS = ?"
command_args.append(Status.FAILED)
cmd = "SELECT COUNT(*) FROM history WHERE name LIKE ?"
total_items = -1
@@ -331,17 +321,11 @@ class HistoryDB:
return items, total_items
def have_duplicate_key(self, duplicate_key: str) -> bool:
"""Check whether History contains this duplicate key"""
def have_episode(self, series_key: str) -> bool:
"""Check whether History contains this series episode"""
total = 0
if self.execute(
"""
SELECT COUNT(*)
FROM History
WHERE
duplicate_key = ? AND
STATUS != ?""",
(duplicate_key, Status.FAILED),
"""SELECT COUNT(*) FROM History WHERE series = ? AND STATUS != ?""", (series_key, Status.FAILED)
):
total = self.cursor.fetchone()["COUNT(*)"]
return total > 0
@@ -350,12 +334,7 @@ class HistoryDB:
"""Check whether this name or md5sum is already in History"""
total = 0
if self.execute(
"""
SELECT COUNT(*)
FROM History
WHERE
( LOWER(name) = LOWER(?) OR md5sum = ? ) AND
STATUS != ?""",
"""SELECT COUNT(*) FROM History WHERE ( LOWER(name) = LOWER(?) OR md5sum = ? ) AND STATUS != ?""",
(name, md5sum, Status.FAILED),
):
total = self.cursor.fetchone()["COUNT(*)"]
@@ -443,7 +422,7 @@ class HistoryDB:
def convert_search(search: str) -> str:
"""Convert classic wildcard to SQL wildcard"""
if not search or not isinstance(search, str):
if not search:
# Default value
search = ""
else:
@@ -487,7 +466,7 @@ def build_history_info(nzo, workdir_complete: str, postproc_time: int, script_ou
report = "future" if nzo.futuretype else ""
# Make sure we have the duplicate key
nzo.set_duplicate_key()
nzo.set_duplicate_series_key()
return (
completed,
@@ -511,7 +490,7 @@ def build_history_info(nzo, workdir_complete: str, postproc_time: int, script_ou
nzo.fail_msg,
url_info,
nzo.bytes_downloaded,
nzo.duplicate_key,
nzo.duplicate_series_key,
nzo.md5sum,
nzo.correct_password,
)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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,8 +18,6 @@
##############################################################################
# Decorators
##############################################################################
import time
import functools
from typing import Union, Callable
from threading import Lock, RLock, Condition
@@ -62,24 +60,3 @@ def NzbQueueLocker(func: Callable):
DOWNLOADER_CV.release()
return call_func
def cache_maintainer(clear_time: int):
"""
A function decorator that clears functools.cache or functools.lru_cache clear_time seconds
:param clear_time: In seconds, how often to clear cache (only checks when called)
"""
def inner(func):
def wrapper(*args, **kwargs):
if hasattr(func, "next_clear"):
if time.time() > func.next_clear or kwargs.get("force"):
func.cache_clear()
func.next_clear = time.time() + clear_time
else:
func.next_clear = time.time() + clear_time
return func(*args, **kwargs)
return wrapper
return inner

2
sabnzbd/deobfuscate_filenames.py Executable file → Normal file
View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -252,7 +252,7 @@ class DirectUnpacker(threading.Thread):
self.nzo.set_unpack_info("Unpack", msg, self.cur_setname)
# Write current log and clear
logging.debug("DirectUnpack Unrar output: \n%s", "\n".join(unrar_log))
logging.debug("DirectUnpack Unrar output %s", "\n".join(unrar_log))
unrar_log = []
rarfiles = []
extracted = []
@@ -344,7 +344,7 @@ class DirectUnpacker(threading.Thread):
if linebuf:
unrar_log.append(platform_btou(linebuf.strip()))
if unrar_log:
logging.debug("DirectUnpack Unrar output: \n%s", "\n".join(unrar_log))
logging.debug("DirectUnpack Unrar output %s", "\n".join(unrar_log))
# Make more space
self.reset_active()
@@ -565,9 +565,9 @@ def abort_all():
def test_disk_performance():
"""Test the incomplete-dir performance and enable
Direct Unpack if good enough (> 100MB/s)
Direct Unpack if good enough (> 40MB/s)
"""
if diskspeedmeasure(sabnzbd.cfg.download_dir.get_path()) > 100:
if diskspeedmeasure(sabnzbd.cfg.download_dir.get_path()) > 40:
cfg.direct_unpack.set(True)
logging.warning(
T("Direct Unpack was automatically enabled.")

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -136,7 +136,7 @@ class Server:
self.retention: int = retention
self.send_group: bool = send_group
# TODO: Remove after next release
# TODO: Remove for final release
if send_group:
helpful_warning(
"You have 'Send Group' enabled for %s. Could you let us know why? https://github.com/sabnzbd/sabnzbd/discussions/2715",
@@ -223,13 +223,7 @@ class Server:
def request_addrinfo_blocking(self):
"""Blocking attempt to run getaddrinfo() and Happy Eyeballs for specified server"""
logging.debug("Retrieving server address information for %s", self.host)
# Disable IPV6 if desired
family = socket.AF_UNSPEC
if not cfg.ipv6_servers():
family = socket.AF_INET
self.addrinfo = happyeyeballs(self.host, self.port, self.timeout, family)
self.addrinfo = happyeyeballs(self.host, self.port)
if not self.addrinfo:
self.bad_cons += self.threads
# Notify next call to maybe_block_server
@@ -531,6 +525,10 @@ class Downloader(Thread):
sabnzbd.decoder.decode(article, data_view)
def run(self):
# Verify SSL certificate checking
sabnzbd.CERTIFICATE_VALIDATION = sabnzbd.misc.test_cert_checking()
logging.debug("SSL verification test: %s", sabnzbd.CERTIFICATE_VALIDATION)
# Warn if there are servers defined, but none are valid
if config.get_servers() and not self.servers:
logging.warning(T("There are no active servers!"))
@@ -668,7 +666,7 @@ class Downloader(Thread):
else:
read = []
BPSMeter.reset()
time.sleep(0.1)
time.sleep(1.0)
self.max_chunk_size = _DEFAULT_CHUNK_SIZE
with DOWNLOADER_CV:
while (
@@ -716,8 +714,7 @@ class Downloader(Thread):
bytes_received, done = nw.recv_chunk()
except ssl.SSLWantReadError:
return
except (ConnectionError, ConnectionAbortedError):
# The ConnectionAbortedError is thrown by sabctools in case of fatal SSL-layer problems
except:
self.__reset_nw(nw, "Server closed connection", wait=False)
return
@@ -891,13 +888,6 @@ class Downloader(Thread):
errormsg = T("Cannot connect to server %s [%s]") % (server.host, error.msg)
penalty = _PENALTY_UNKNOWN
block = True
# Set error for server and warn user if it was first time thrown
if errormsg and server.active and server.errormsg != errormsg:
server.errormsg = errormsg
logging.warning(errormsg)
# Take action on the problem
if block or (penalty and server.optional):
retry_article = False
if server.active:
@@ -910,6 +900,11 @@ class Downloader(Thread):
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)
# Set error for server and warn user if it was first time thrown
if errormsg and server.active and server.errormsg != errormsg:
server.errormsg = errormsg
logging.warning(errormsg)
return False
except Exception as err:
logging.error(

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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 2008-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2008-2017 The SABnzbd-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
@@ -33,7 +33,6 @@ import fnmatch
import stat
import ctypes
import random
import functools
from typing import Union, List, Tuple, Any, Dict, Optional, BinaryIO
try:
@@ -43,7 +42,7 @@ except ImportError:
pass
import sabnzbd
from sabnzbd.decorators import synchronized, cache_maintainer
from sabnzbd.decorators import synchronized
from sabnzbd.constants import FUTURE_Q_FOLDER, JOB_ADMIN, GIGI, DEF_FILE_MAX, IGNORED_FILES_AND_FOLDERS, DEF_LOG_FILE
from sabnzbd.encoding import correct_unknown_encoding, utob, ubtou
from sabnzbd.utils import rarfile
@@ -453,23 +452,9 @@ def same_directory(a: str, b: str) -> int:
return is_subfolder
def is_network_path(path: str) -> bool:
"""Check weither a path is a network path.
On Windows, use win32 functions to detect users that try to avoid this detection by using a mapped drive letter.
We don't check on Linux for mnt or media, since those could also be used for internal drives."""
path = clip_path(path)
if path.startswith(r"\\"):
return True
if sabnzbd.WIN32:
drive_letter, _ = os.path.splitdrive(path)
return win32file.GetDriveType(drive_letter) == win32file.DRIVE_REMOTE
return False
def mount_is_available(path: str) -> bool:
"""Return False if volume isn't mounted on Linux or macOS or
the network path isn't available on Windows.
Retry wait_ext_drive times with an interval of 1 sec.
def check_mount(path: str) -> bool:
"""Return False if volume isn't mounted on Linux or macOS
Retry 6 times with an interval of 1 sec.
"""
if sabnzbd.MACOS:
m = re.search(r"^(/Volumes/[^/]+)", path, re.I)
@@ -763,7 +748,7 @@ def create_all_dirs(path: str, apply_permissions: bool = False) -> Union[str, bo
@synchronized(DIR_LOCK)
def get_unique_dir(path: str, n: int = 0, create_dir: bool = True) -> Union[str, bool]:
"""Determine a unique folder or filename"""
if not mount_is_available(path):
if not check_mount(path):
return path
new_path = path
@@ -1083,15 +1068,43 @@ def diskspace_base(dir_to_check: str) -> Tuple[float, float]:
return 20.0, 10.0
@cache_maintainer(clear_time=10)
@functools.lru_cache(maxsize=None)
# Store all results to speed things up
__DIRS_CHECKED = []
__DISKS_SAME = None
__LAST_DISK_RESULT = {"download_dir": (0.0, 0.0), "complete_dir": (0.0, 0.0)}
__LAST_DISK_CALL = 0
def diskspace(force: bool = False) -> Dict[str, Tuple[float, float]]:
"""Wrapper to keep results cached by cache_maintainer
If called with force=True, the wrapper will clear the results"""
return {
"download_dir": diskspace_base(sabnzbd.cfg.download_dir.get_path()),
"complete_dir": diskspace_base(sabnzbd.cfg.complete_dir.get_path()),
}
"""Wrapper to cache results"""
global __DIRS_CHECKED, __DISKS_SAME, __LAST_DISK_RESULT, __LAST_DISK_CALL
# Reset everything when folders changed
dirs_to_check = [sabnzbd.cfg.download_dir.get_path(), sabnzbd.cfg.complete_dir.get_path()]
if __DIRS_CHECKED != dirs_to_check:
__DIRS_CHECKED = dirs_to_check
__DISKS_SAME = None
__LAST_DISK_RESULT = {"download_dir": [], "complete_dir": []}
__LAST_DISK_CALL = 0
# When forced, ignore any cache to avoid problems in UI
if force:
__LAST_DISK_CALL = 0
# Check against cache
if time.time() > __LAST_DISK_CALL + 10.0:
# Same disk? Then copy-paste
__LAST_DISK_RESULT["download_dir"] = diskspace_base(sabnzbd.cfg.download_dir.get_path())
__LAST_DISK_RESULT["complete_dir"] = (
__LAST_DISK_RESULT["download_dir"] if __DISKS_SAME else diskspace_base(sabnzbd.cfg.complete_dir.get_path())
)
__LAST_DISK_CALL = time.time()
# Do we know if it's same disk?
if __DISKS_SAME is None:
__DISKS_SAME = __LAST_DISK_RESULT["download_dir"] == __LAST_DISK_RESULT["complete_dir"]
return __LAST_DISK_RESULT
def get_new_id(prefix, folder, check_list=None):
@@ -1199,7 +1212,7 @@ def load_admin(data_id: str, remove=False, silent=False) -> Any:
def wait_for_download_folder():
"""Wait for download folder to become available"""
while not sabnzbd.cfg.download_dir.test_path():
logging.info("Waiting for incomplete folder")
logging.debug("Waiting for incomplete folder")
time.sleep(2.0)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -19,20 +19,18 @@
sabnzbd.getipaddress
"""
import functools
import logging
import socket
import time
import urllib.error
import functools
import urllib.request
from typing import Callable
import urllib.error
import socks
import logging
import time
from typing import Callable
import sabnzbd
import sabnzbd.cfg
from sabnzbd.encoding import ubtou
from sabnzbd.happyeyeballs import happyeyeballs, family_type
def timeout(max_timeout: float):
@@ -90,7 +88,7 @@ def dnslookup():
return result
def local_ipv4():
def localipv4():
try:
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s_ipv4:
# Option: use 100.64.1.1 (IANA-Reserved IPv4 Prefix for Shared Address Space)
@@ -103,56 +101,59 @@ def local_ipv4():
return ipv4
def public_ip(family=socket.AF_UNSPEC):
"""
Reports the client's public IP address (IPv4 or IPv6, if specified by family), as reported by selftest host
def publicipv4():
"""Because of dual IPv4/IPv6 clients, finding the
public ipv4 needs special attention, meaning forcing
IPv4 connections, and not allowing IPv6 connections
Function uses sabnzbd.cfg.selftest_host(), which must report our public IPv4 address over which we access it
"""
start = time.time()
if resolvehostaddress := happyeyeballs(sabnzbd.cfg.selftest_host(), port=443, family=family):
resolvehostip = resolvehostaddress.ipaddress
else:
logging.debug("Error resolving my IP address: resolvehost not found")
return None
if sabnzbd.misc.is_ipv4_addr(resolvehostip):
resolveurl = f"http://{resolvehostip}/?ipv4test"
elif sabnzbd.misc.is_ipv6_addr(resolvehostip):
resolveurl = f"http://[{resolvehostip}]/?ipv6test" # including square brackets
else:
logging.debug("Error resolving public IP address: no valid IPv4 or IPv6 address found")
return None
try:
req = urllib.request.Request(resolveurl)
req.add_header("Host", sabnzbd.cfg.selftest_host())
req.add_header("User-Agent", "SABnzbd/%s" % sabnzbd.__version__)
with urllib.request.urlopen(req, timeout=2) as open_req:
client_ip = ubtou(open_req.read().strip())
# look up IPv4 addresses of selftest_host
lookup_result_iv4 = addresslookup4(sabnzbd.cfg.selftest_host())
# Make sure it's a valid IPv4 or IPv6 address
if not sabnzbd.misc.is_ipv4_addr(client_ip) and not sabnzbd.misc.is_ipv6_addr(client_ip):
raise ValueError
except urllib.error.URLError:
logging.debug(
"Failed to get public address from %s (%s)",
sabnzbd.cfg.selftest_host(),
family_type(family),
exc_info=True,
)
# Make sure there is a result, abort otherwise
if not lookup_result_iv4:
raise Exception
except Exception:
# something very bad: no name resolving of selftest_host
logging.debug("Failed to detect public IPv4 address: looking up %s failed", sabnzbd.cfg.selftest_host())
return None
logging.debug("Public address %s = %s (in %.2f seconds)", family_type(family), client_ip, time.time() - start)
return client_ip
public_ipv4 = None
# we got one or more IPv4 address(es) for selftest_host, so let's connect and ask for our own public IPv4
for item in lookup_result_iv4:
# get next IPv4 address of sabnzbd.cfg.selftest_host()
selftest_ipv4 = item[4][0]
try:
# put the selftest_host's IPv4 address into the URL
req = urllib.request.Request("http://" + selftest_ipv4 + "/")
# specify the User-Agent, because certain sites refuse connections with "python urllib2" as User-Agent:
req.add_header("User-Agent", "SABnzbd/%s" % sabnzbd.__version__)
# specify the Host, because we only provide the IPv4 address in the URL:
req.add_header("Host", sabnzbd.cfg.selftest_host())
# get the response, timeout 2 seconds, in case the website is not accessible
public_ipv4 = ubtou(urllib.request.urlopen(req, timeout=2).read())
# ... check the response is indeed an IPv4 address:
# if we got anything else than a plain IPv4 address, this will raise an exception
socket.inet_aton(public_ipv4)
# if we get here without exception, we found our public IPv4, and we're done:
break
except (socket.error, urllib.error.URLError):
# the connect OR the inet_aton raised an exception, so:
public_ipv4 = None # reset
# continue the for loop to try next server IPv4 address
pass
if not public_ipv4:
logging.debug("Failed to get public IPv4 address from %s", sabnzbd.cfg.selftest_host())
return None
logging.debug("Public IPv4 address = %s (in %.2f seconds)", public_ipv4, time.time() - start)
return public_ipv4
def public_ipv4():
return public_ip(family=socket.AF_INET)
def local_ipv6():
"""
return IPv6 address on local LAN interface. So a first check if there is IPv6 connectivity
"""
def ipv6():
try:
with socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) as s_ipv6:
# IPv6 prefix for documentation purpose
@@ -163,8 +164,3 @@ def local_ipv6():
logging.debug("IPv6 address = %s", ipv6_address)
return ipv6_address
def public_ipv6():
if local_ipv6():
return public_ip(family=socket.AF_INET6)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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,19 +28,39 @@ import threading
import time
import logging
import queue
import functools
from dataclasses import dataclass
from typing import Tuple, Union, Optional
from more_itertools import roundrobin
from sabnzbd.constants import DEF_TIMEOUT
from sabnzbd.decorators import cache_maintainer
from sabnzbd import cfg as cfg
# How long to delay between connection attempts? The RFC suggests 250ms, but this is
# quite long and might give us a slow host that just happened to be on top of the list.
# The absolute minium specified in RFC 8305 is 10ms, so we use that.
CONNECTION_ATTEMPT_DELAY = 0.01
# The total time we want to wait for any result
MAXIMUM_RESOLUTION_TIME = 3
# While providers are afraid to add IPv6 to their standard hostnames
# we map a number of well known hostnames to their IPv6 alternatives.
# WARNING: Only add if the SSL-certificate allows both hostnames!
IPV6_MAPPING = {
"news.eweka.nl": "news6.eweka.nl",
"news.xlned.com": "news6.xlned.com",
"news.usenet.farm": "news6.usenet.farm",
"news.easynews.com": "news6.easynews.com",
"news.tweaknews.nl": "news6.tweaknews.nl",
"news.tweaknews.eu": "news6.tweaknews.eu",
"news.astraweb.com": "news6.astraweb.com",
"news.pureusenet.nl": "news6.pureusenet.nl",
"news.sunnyusenet.com": "news6.sunnyusenet.com",
"news.newshosting.com": "news6.newshosting.com",
"news.usenetserver.com": "news6.usenetserver.com",
"news.frugalusenet.com": "news-v6.frugalusenet.com",
"eunews.frugalusenet.com": "eunews-v6.frugalusenet.com",
}
# For typing and convenience!
@dataclass
@@ -57,24 +77,13 @@ class AddrInfo:
self.ipaddress = self.sockaddr[0]
def family_type(family) -> str:
"""Human-readable socket type"""
if family not in (socket.AF_INET, socket.AF_INET6, socket.AF_UNSPEC):
raise ValueError("Invalid family")
if family == socket.AF_INET:
return "IPv4-only"
elif family == socket.AF_INET6:
return "IPv6-only"
return "IPv4 and IPv6"
# Called by each thread
def do_socket_connect(result_queue: queue.Queue, addrinfo: AddrInfo, timeout: int):
def do_socket_connect(result_queue: queue.Queue, addrinfo: AddrInfo):
"""Connect to the ip, and put the result into the queue"""
try:
start = time.time()
s = socket.socket(addrinfo.family, addrinfo.type)
s.settimeout(timeout)
s.settimeout(MAXIMUM_RESOLUTION_TIME)
try:
s.connect(addrinfo.sockaddr)
result_queue.put(addrinfo)
@@ -97,47 +106,55 @@ def do_socket_connect(result_queue: queue.Queue, addrinfo: AddrInfo, timeout: in
pass
@cache_maintainer(clear_time=10)
@functools.lru_cache(maxsize=None)
def happyeyeballs(host: str, port: int, timeout: int = DEF_TIMEOUT, family=socket.AF_UNSPEC) -> Optional[AddrInfo]:
def happyeyeballs(host: str, port: int) -> Optional[AddrInfo]:
"""Return the fastest result of getaddrinfo() based on RFC 6555/8305 (Happy Eyeballs),
including IPv6 addresses if desired. Returns None in case no addresses were returned
by getaddrinfo or if no connection could be made to any of the addresses.
If family is specified, only that family is tried"""
by getaddrinfo or if no connection could be made to any of the addresses"""
try:
# Get address information, by default both IPV4 and IPV6
check_hosts = [host]
family = socket.AF_UNSPEC
if not cfg.ipv6_servers():
family = socket.AF_INET
elif host in IPV6_MAPPING:
# See if we can add a IPv6 alternative
check_hosts.append(IPV6_MAPPING[host])
logging.info("Added alternative IPv6 address: %s", IPV6_MAPPING[host])
ipv4_addrinfo = []
ipv6_addrinfo = []
last_canonname = ""
for check_host in check_hosts:
try:
for addrinfo in socket.getaddrinfo(
check_host, port, family, socket.SOCK_STREAM, flags=socket.AI_CANONNAME
):
# Convert to AddrInfo
addrinfo = AddrInfo(*addrinfo)
try:
for addrinfo in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM, flags=socket.AI_CANONNAME):
# Convert to AddrInfo
addrinfo = AddrInfo(*addrinfo)
# The canonname is only reported once per alias
if addrinfo.canonname:
last_canonname = addrinfo.canonname
elif last_canonname:
addrinfo.canonname = last_canonname
# The canonname is only reported once per alias
if addrinfo.canonname:
last_canonname = addrinfo.canonname
elif last_canonname:
addrinfo.canonname = last_canonname
# Put it in the right list for further processing
# But prevent adding duplicate items to the lists
if addrinfo not in ipv6_addrinfo and addrinfo not in ipv4_addrinfo:
if addrinfo.family == socket.AddressFamily.AF_INET6:
ipv6_addrinfo.append(addrinfo)
else:
ipv4_addrinfo.append(addrinfo)
except:
# Did we fail on the first getaddrinfo already?
# Otherwise, we failed on the IPv6 alternative address, and those failures can be ignored
if not ipv4_addrinfo and not ipv6_addrinfo:
raise
# Put it in the right list for further processing
# But prevent adding duplicate items to the lists
if addrinfo not in ipv6_addrinfo and addrinfo not in ipv4_addrinfo:
if addrinfo.family == socket.AddressFamily.AF_INET6:
ipv6_addrinfo.append(addrinfo)
else:
ipv4_addrinfo.append(addrinfo)
except:
# Did we fail on the first getaddrinfo already?
# Otherwise, we failed on the IPv6 alternative address, and those failures can be ignored
if not ipv4_addrinfo and not ipv6_addrinfo:
raise
logging.debug(
"Available addresses for %s (port=%d, %s): %d IPv4 and %d IPv6",
"Available addresses for %s (port=%d): %d IPv4 and %d IPv6",
host,
port,
family_type(family),
len(ipv4_addrinfo),
len(ipv6_addrinfo),
)
@@ -148,7 +165,7 @@ def happyeyeballs(host: str, port: int, timeout: int = DEF_TIMEOUT, family=socke
addr_tried = 0
result: Optional[AddrInfo] = None
for addrinfo in roundrobin(ipv6_addrinfo, ipv4_addrinfo):
threading.Thread(target=do_socket_connect, args=(result_queue, addrinfo, timeout), daemon=True).start()
threading.Thread(target=do_socket_connect, args=(result_queue, addrinfo), daemon=True).start()
addr_tried += 1
try:
result = result_queue.get(timeout=CONNECTION_ATTEMPT_DELAY)
@@ -162,18 +179,11 @@ def happyeyeballs(host: str, port: int, timeout: int = DEF_TIMEOUT, family=socke
if not result:
try:
# Reduce waiting time by time already spent
result = result_queue.get(timeout=timeout - addr_tried * CONNECTION_ATTEMPT_DELAY)
result = result_queue.get(timeout=MAXIMUM_RESOLUTION_TIME - addr_tried * CONNECTION_ATTEMPT_DELAY)
except queue.Empty:
raise ConnectionError("No addresses could be resolved")
logging.info(
"Quickest IP address for %s (port=%d, %s): %s (%s)",
host,
port,
family_type(family),
result.ipaddress,
result.canonname,
)
logging.info("Quickest IP address for %s (port=%d): %s (%s)", host, port, result.ipaddress, result.canonname)
return result
except Exception as e:
logging.debug("Failed Happy Eyeballs lookup: %s", e)

View File

@@ -1,5 +1,5 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-Team (sabnzbd.org)
# Copyright 2007-2023 The SABnzbd-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
@@ -21,7 +21,7 @@ sabnzbd.interface - webinterface
import os
import time
import datetime
from datetime import datetime
import cherrypy
import logging
import urllib.parse
@@ -52,7 +52,6 @@ from sabnzbd.misc import (
is_loopback_addr,
helpful_warning,
recursive_html_escape,
is_none,
)
from sabnzbd.happyeyeballs import happyeyeballs
from sabnzbd.filesystem import (
@@ -81,7 +80,6 @@ from sabnzbd.constants import (
GUESSIT_SORT_TYPES,
VALID_NZB_FILES,
VALID_ARCHIVES,
DEF_TIMEOUT,
)
from sabnzbd.lang import list_languages
from sabnzbd.api import (
@@ -518,6 +516,7 @@ class Wizard:
cfg.language.set(kwargs.get("lang"))
info = build_header(sabnzbd.WIZARD_DIR)
info["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
# Just in case, add server
servers = config.get_servers()
@@ -682,8 +681,11 @@ class ConfigPage:
conf["configfn"] = clip_path(config.get_filename())
conf["cmdline"] = sabnzbd.CMDLINE
conf["build"] = sabnzbd.__baseline__[:7]
conf["have_7zip"] = bool(sabnzbd.newsunpack.SEVENZIP_COMMAND)
conf["have_par2_turbo"] = sabnzbd.newsunpack.PAR2_TURBO
conf["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
conf["ssl_version"] = ssl.OPENSSL_VERSION
return template_filtered_response(
@@ -779,8 +781,8 @@ SWITCH_LIST = (
"fail_hopeless_jobs",
"enable_all_par",
"enable_recursive",
"no_smart_dupes",
"dupes_propercheck",
"no_series_dupes",
"series_propercheck",
"script_can_fail",
"unwanted_extensions",
"action_on_unwanted_extensions",
@@ -797,6 +799,8 @@ class ConfigSwitches:
@secured_expose(check_configlock=True)
def index(self, **kwargs):
conf = build_header(sabnzbd.WEB_DIR_CONFIG)
conf["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
conf["have_nice"] = bool(sabnzbd.newsunpack.NICE_COMMAND)
conf["have_ionice"] = bool(sabnzbd.newsunpack.IONICE_COMMAND)
@@ -952,6 +956,8 @@ class ConfigGeneral:
def index(self, **kwargs):
conf = build_header(sabnzbd.WEB_DIR_CONFIG)
conf["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
web_list = []
for interface_dir in globber_full(sabnzbd.DIR_INTERFACES):
# Ignore the config
@@ -1065,6 +1071,7 @@ class ConfigServer:
conf["servers"] = new
conf["cats"] = list_cats(default=True)
conf["certificate_validation"] = sabnzbd.CERTIFICATE_VALIDATION
return template_filtered_response(
file=os.path.join(sabnzbd.WEB_DIR_CONFIG, "config_server.tmpl"),
@@ -1144,7 +1151,7 @@ def handle_server(kwargs, root=None, new_svr=False):
kwargs["connections"] = "1"
if kwargs.get("enable") == "1":
if not happyeyeballs(host, int_conv(port), int_conv(kwargs.get("timeout"), default=DEF_TIMEOUT)):
if not happyeyeballs(host, int_conv(port)):
return badParameterResponse(T('Server address "%s:%s" is not valid.') % (host, port), ajax)
# Default server name is just the host name
@@ -1378,7 +1385,7 @@ class ConfigRss:
raise rssRaiser(self.__root, kwargs)
pp = kwargs.get("pp", "")
if is_none(pp):
if pp.lower() == "none":
pp = ""
script = ConvertSpecials(kwargs.get("script"))
cat = ConvertSpecials(kwargs.get("cat"))
@@ -1478,24 +1485,16 @@ class ConfigRss:
"""Download NZB from provider (Download button)"""
feed = kwargs.get("feed")
url = kwargs.get("url")
if att := sabnzbd.RSSReader.lookup_url(feed, url):
nzbname = kwargs.get("nzbname")
nzbname = kwargs.get("nzbname")
att = sabnzbd.RSSReader.lookup_url(feed, url)
if att:
pp = att.get("pp")
cat = att.get("cat")
script = att.get("script")
priority = att.get("prio")
prio = att.get("prio")
if url:
logging.info("Adding %s (%s) to queue", url, nzbname)
sabnzbd.urlgrabber.add_url(
url,
pp=pp,
script=script,
cat=cat,
priority=priority,
nzbname=nzbname,
nzo_info={"RSS": feed},
)
sabnzbd.urlgrabber.add_url(url, pp, script, cat, prio, nzbname)
# Need to pass the title instead
sabnzbd.RSSReader.flag_downloaded(feed, url)
raise rssRaiser(self.__root, kwargs)
@@ -1737,12 +1736,12 @@ class ConfigCats:
conf["defdir"] = cfg.complete_dir.get_clipped_path()
categories = config.get_ordered_categories()
new_cat_order = max(cat["order"] for cat in categories) + 1
conf["have_cats"] = len(categories) > 1
# Add empty line to add new categories
# Add empty line
empty = {
"name": "",
"order": str(new_cat_order),
"order": "0",
"pp": "-1",
"script": "",
"dir": "",
@@ -1936,7 +1935,7 @@ def GetRssLog(feed):
# And we add extra fields for sorting
if job.get("age", 0):
job["age_ms"] = (job["age"] - datetime.datetime(1970, 1, 1)).total_seconds()
job["age_ms"] = (job["age"] - datetime.utcfromtimestamp(0)).total_seconds()
job["age"] = calc_age(job["age"], True)
else:
job["age_ms"] = ""
@@ -2119,7 +2118,7 @@ class ConfigNotify:
@secured_expose(check_configlock=True)
def index(self, **kwargs):
conf = build_header(sabnzbd.WEB_DIR_CONFIG)
conf["notify_types"] = sabnzbd.notifier.NOTIFICATION_TYPES
conf["notify_types"] = sabnzbd.notifier.NOTIFICATION
conf["categories"] = list_cats(False)
conf["have_ntfosd"] = sabnzbd.notifier.have_ntfosd()
conf["have_ncenter"] = sabnzbd.MACOS and sabnzbd.FOUNDATION

View File

@@ -1,110 +0,0 @@
#!/usr/bin/python3 -OO
# Copyright 2007-2024 by The SABnzbd-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
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""
sabnzbd.internetspeed - Measure internet bandwidth using sabctools routines
"""
import sys
import logging
import socket
import ssl
import time
import threading
from typing import Dict
import sabctools
import sabnzbd
from sabnzbd.happyeyeballs import happyeyeballs
TEST_HOSTNAME = "sabnzbd.org"
TEST_PORT = 443
TEST_FILE = "/tests/internetspeed/100MB.bin"
TEST_FILE_SIZE = 100 * 1024 * 1024
TEST_REQUEST = f"GET {TEST_FILE} HTTP/1.1\nHost: {TEST_HOSTNAME}\nUser-Agent: SABnzbd/{sabnzbd.__version__}\n\n"
SOCKET_TIMEOUT = 3
BUFFER_SIZE = 5 * 1024 * 1024 # Each connection will allocate its own buffer, so mind the memory usage!
NR_CONNECTIONS = 5
TIME_LIMIT = 3
def internetspeed_worker(secure_sock: ssl.SSLSocket, socket_speed: Dict[ssl.SSLSocket, float]):
"""Worker to perform the requests in parallel"""
secure_sock.sendall(TEST_REQUEST.encode())
empty_buffer = memoryview(sabctools.bytearray_malloc(BUFFER_SIZE))
start_time = time.perf_counter()
diff_time = 0
data_received = 0
while diff_time < TIME_LIMIT:
if data_received < TEST_FILE_SIZE:
try:
if new_bytes := sabctools.unlocked_ssl_recv_into(secure_sock, empty_buffer):
# Update the speed after every loop
diff_time = time.perf_counter() - start_time
data_received += new_bytes
socket_speed[secure_sock] = data_received / diff_time
else:
break
except ssl.SSLWantReadError:
time.sleep(0)
else:
break
try:
secure_sock.close()
except socket.error:
# In case socket was closed unexpectedly already
pass
def internetspeed(test_time_limit: int = TIME_LIMIT) -> float:
"""Measure internet speed from a test-download using our optimized SSL-code"""
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
socket_speed = {}
try:
for _ in range(NR_CONNECTIONS):
addrinfo = happyeyeballs(TEST_HOSTNAME, TEST_PORT, SOCKET_TIMEOUT)
sock = socket.socket(addrinfo.family, addrinfo.type)
sock.settimeout(SOCKET_TIMEOUT)
sock.connect(addrinfo.sockaddr)
secure_sock = context.wrap_socket(sock, server_hostname=TEST_HOSTNAME)
secure_sock.setblocking(False)
socket_speed[secure_sock] = 0
for secure_sock in socket_speed:
threading.Thread(target=internetspeed_worker, args=(secure_sock, socket_speed), daemon=True).start()
except Exception:
logging.info("Internet Bandwidth connection failure", exc_info=True)
return 0.0
# We let the workers finish
time.sleep(test_time_limit + 0.5)
speed = sum(socket_speed.values()) / 1024 / 1024
logging.debug("Internet Bandwidth = %.2f MB/s - %.2f Mbps", speed, speed * 8.05)
return speed
if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
internetspeed()

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