mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-02-23 02:07:37 -05:00
Compare commits
86 Commits
4.0.2
...
4.1.0Alpha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
20324ad88b | ||
|
|
80f34bdf3e | ||
|
|
f2dbdb95dc | ||
|
|
0e3893122d | ||
|
|
831ff6e3ae | ||
|
|
b62d17cbee | ||
|
|
b95d6cfca0 | ||
|
|
d0d1876783 | ||
|
|
df23bf21ea | ||
|
|
934561e551 | ||
|
|
de6c560027 | ||
|
|
9c582fccc8 | ||
|
|
cab5c26e3e | ||
|
|
cca6dda9e6 | ||
|
|
77aea23007 | ||
|
|
42c5403bbe | ||
|
|
b14dacd44d | ||
|
|
abd47ddcf7 | ||
|
|
8611e65fc6 | ||
|
|
8663fe39e3 | ||
|
|
4891213a88 | ||
|
|
828ea8e61a | ||
|
|
f6fae7c0b8 | ||
|
|
b4b446e770 | ||
|
|
9ff4fdaab8 | ||
|
|
d3bfbb0642 | ||
|
|
57ab0a05f7 | ||
|
|
296aee9757 | ||
|
|
3d8c408627 | ||
|
|
11cdb24558 | ||
|
|
589cc69498 | ||
|
|
6f17ab1f02 | ||
|
|
7cbbff727f | ||
|
|
daa07ed2d2 | ||
|
|
b3ced3bb40 | ||
|
|
20127e5bcd | ||
|
|
f7a5e462b7 | ||
|
|
728bc723c2 | ||
|
|
b1f75ec35b | ||
|
|
1709c778a6 | ||
|
|
769e110ffb | ||
|
|
a0808d2d4c | ||
|
|
59bd38ddc7 | ||
|
|
000ecb5669 | ||
|
|
8525f60488 | ||
|
|
24329faf5c | ||
|
|
4a72c6fdf9 | ||
|
|
8235c3048e | ||
|
|
209e9f0573 | ||
|
|
9455121647 | ||
|
|
fa7a11617e | ||
|
|
a6c62bc118 | ||
|
|
dbf4073da4 | ||
|
|
552ca12bc1 | ||
|
|
e13968eec1 | ||
|
|
2ce56c8581 | ||
|
|
8d6cc8c86a | ||
|
|
488719de1e | ||
|
|
8cb4011a44 | ||
|
|
9ff0bab873 | ||
|
|
3331738f2b | ||
|
|
e768ceea96 | ||
|
|
cb4215910c | ||
|
|
b9e014b8bd | ||
|
|
96f0743ce5 | ||
|
|
560766dfa0 | ||
|
|
a2bbccd3ea | ||
|
|
5570b804ba | ||
|
|
3ff1d4b68c | ||
|
|
d19d3c382c | ||
|
|
05a68a7506 | ||
|
|
9aacf4c780 | ||
|
|
0390dc14c5 | ||
|
|
1ee1ef836a | ||
|
|
bf1080ac5a | ||
|
|
ee4fdb9563 | ||
|
|
a179f2a895 | ||
|
|
b4c3a4b19f | ||
|
|
71e203f19c | ||
|
|
07283ba9ab | ||
|
|
decfb2c168 | ||
|
|
71778656da | ||
|
|
517d6e3e1a | ||
|
|
e11e9e7201 | ||
|
|
135b9336a4 | ||
|
|
e0d4d4abbd |
2
.github/workflows/build_release.yml
vendored
2
.github/workflows/build_release.yml
vendored
@@ -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.11.3"
|
||||
PYTHON_VERSION: "3.11.4"
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.9"
|
||||
# We need to force compile for universal2 support
|
||||
CFLAGS: -arch x86_64 -arch arm64
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)
|
||||
|
||||
The SABnzbd-team is:
|
||||
The SABnzbd-Team is:
|
||||
|
||||
Active team:
|
||||
Safihre
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
0) LICENSE
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" <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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" <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
|
||||
|
||||
49
README.mkd
49
README.mkd
@@ -1,32 +1,27 @@
|
||||
Release Notes - SABnzbd 4.0.0 Release Candidate 2
|
||||
Release Notes - SABnzbd 4.1.0 Alpha 1
|
||||
=========================================================
|
||||
|
||||
## Changes since 3.7.2
|
||||
- In this major update we replaced a core part of Python's SSL handling
|
||||
with our own improved version. This results in large performance increases
|
||||
when downloading from news servers with SSL enabled.
|
||||
In addition, the general connection handling was overhauled, resulting in
|
||||
performance improvements for all news servers.
|
||||
Special thanks to: mnightingale, puzzledsab and animetosho!
|
||||
- There are multiple settings that can tweak performance, see:
|
||||
https://github.com/sabnzbd/sabnzbd/discussions/2474
|
||||
We are trying to find the most optimal default settings, so you
|
||||
can help us by letting us know the results on your system!
|
||||
- When adding a new news server, SSL is enabled by default.
|
||||
- File assembly performance significantly improved by relying on the
|
||||
CRC32 instead of the MD5 to perform QuickCheck of files.
|
||||
- Slowdown more gracefully when the cache fills up.
|
||||
- Replaced separate Series/Movie/Date Sorting with general Sorter.
|
||||
- HTTPS files are included in the `Backup`.
|
||||
- Improved `Watched Folder` scanning and processing.
|
||||
- Ignore resource fork files created by macOS.
|
||||
- `Deobfuscate final filenames` is enabled for new installations.
|
||||
- Dropped support for Python 3.7.
|
||||
## Changes since 4.0.3
|
||||
- Added a dark mode for the Config, Login, and Wizard.
|
||||
- Added multi-select to the History.
|
||||
- Show the number of items in post-processing when in Tabbed mode.
|
||||
- Added option `verify_xff_header` to include `X-Forwarded-For` when
|
||||
validating if connections should be accepted when using a proxy.
|
||||
- Added option to purge log files from the Folders Config page.
|
||||
- Moved `Server IP address selection` and `On failure, try
|
||||
alternative NZB` to Special settings.
|
||||
- Sparse files will be used if available on the system.
|
||||
- Special setting `ipv6_servers` changed to on/off.
|
||||
- Windows/macOS: Updated 7Zip to 23.01 and UnRar to 6.23
|
||||
|
||||
## Bugfixes since 4.0.3
|
||||
- Series duplicate detection did not detect duplicates.
|
||||
- Sorting would append `.1` to some filenames.
|
||||
- Not all API-keys were removed during log-sanitization.
|
||||
- In certain situations, not all data would be written to disk.
|
||||
- QuickCheck could wrongly rename files with identical content.
|
||||
|
||||
|
||||
## Bugfixes since 3.7.2
|
||||
- Restore applying `History Retention` setting at startup.
|
||||
- Windows: Not all invalid characters were removed from filenames.
|
||||
- Windows: Firewall rules were not removed by uninstaller.
|
||||
|
||||
## Upgrade notices
|
||||
- The download statistics file `totals10.sab` is updated in 3.2.x
|
||||
@@ -43,4 +38,4 @@ Release Notes - SABnzbd 4.0.0 Release Candidate 2
|
||||
that automatically verify, repair, extract and clean up posts downloaded
|
||||
from Usenet.
|
||||
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
(c) Copyright 2007-2023 by The SABnzbd-Team (sabnzbd.org)
|
||||
|
||||
46
README.txt
46
README.txt
@@ -1,46 +0,0 @@
|
||||
Release Notes - SABnzbd 4.0.0 Release Candidate 2
|
||||
=========================================================
|
||||
|
||||
## Changes since 3.7.2
|
||||
- In this major update we replaced a core part of Python's SSL handling
|
||||
with our own improved version. This results in large performance increases
|
||||
when downloading from news servers with SSL enabled.
|
||||
In addition, the general connection handling was overhauled, resulting in
|
||||
performance improvements for all news servers.
|
||||
Special thanks to: mnightingale, puzzledsab and animetosho!
|
||||
- There are multiple settings that can tweak performance, see:
|
||||
https://github.com/sabnzbd/sabnzbd/discussions/2474
|
||||
We are trying to find the most optimal default settings, so you
|
||||
can help us by letting us know the results on your system!
|
||||
- When adding a new news server, SSL is enabled by default.
|
||||
- File assembly performance significantly improved by relying on the
|
||||
CRC32 instead of the MD5 to perform QuickCheck of files.
|
||||
- Slowdown more gracefully when the cache fills up.
|
||||
- Replaced separate Series/Movie/Date Sorting with general Sorter.
|
||||
- HTTPS files are included in the `Backup`.
|
||||
- Improved `Watched Folder` scanning and processing.
|
||||
- Ignore resource fork files created by macOS.
|
||||
- `Deobfuscate final filenames` is enabled for new installations.
|
||||
- Dropped support for Python 3.7.
|
||||
|
||||
## Bugfixes since 3.7.2
|
||||
- Restore applying `History Retention` setting at startup.
|
||||
- Windows: Not all invalid characters were removed from filenames.
|
||||
- Windows: Firewall rules were not removed by uninstaller.
|
||||
|
||||
## Upgrade notices
|
||||
- The download statistics file `totals10.sab` is updated in 3.2.x
|
||||
version. If you downgrade to 3.1.x or lower, detailed download
|
||||
statistics will be lost.
|
||||
|
||||
## Known problems and solutions
|
||||
- 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.
|
||||
|
||||
(c) Copyright 2007-2023 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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
|
||||
@@ -244,7 +244,7 @@ def print_version():
|
||||
"""
|
||||
%s-%s
|
||||
|
||||
Copyright (C) 2007-2023 The SABnzbd-Team <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
|
||||
@@ -629,10 +629,6 @@ def get_webhost(cherryhost, cherryport, https_port):
|
||||
except socket.error:
|
||||
cherryhost = cherryhost.strip("[]")
|
||||
|
||||
if ipv6 and ipv4 and not is_localhost(browserhost):
|
||||
sabnzbd.AMBI_LOCALHOST = True
|
||||
logging.info("IPV6 has priority on this system, potential Firefox issue")
|
||||
|
||||
if ipv6 and ipv4 and cherryhost == "" and sabnzbd.WIN32:
|
||||
helpful_warning(T("Please be aware the 0.0.0.0 hostname will need an IPv6 address for external access"))
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <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
|
||||
@@ -19,6 +19,7 @@ import os
|
||||
|
||||
# Constants
|
||||
VERSION_FILE = "sabnzbd/version.py"
|
||||
APPDATA_FILE = "linux/org.sabnzbd.sabnzbd.appdata.xml"
|
||||
|
||||
# To draft a release or not to draft a release?
|
||||
ON_GITHUB_ACTIONS = os.environ.get("CI", False)
|
||||
@@ -29,6 +30,9 @@ with open(VERSION_FILE) as version_file:
|
||||
exec(version_file.read())
|
||||
RELEASE_VERSION = __version__
|
||||
|
||||
# Pre-releases are longer than 6 characters (e.g. 3.1.0Beta1 vs 3.1.0, but also 3.0.11)
|
||||
PRERELEASE = len(RELEASE_VERSION) > 5
|
||||
|
||||
# Define release name
|
||||
RELEASE_NAME = "SABnzbd-%s" % RELEASE_VERSION
|
||||
RELEASE_TITLE = "SABnzbd %s" % RELEASE_VERSION
|
||||
@@ -41,7 +45,8 @@ RELEASE_README = "README.mkd"
|
||||
|
||||
# Used in package.py and SABnzbd.spec
|
||||
EXTRA_FILES = [
|
||||
"README.mkd",
|
||||
RELEASE_README,
|
||||
"README.txt",
|
||||
"INSTALL.txt",
|
||||
"LICENSE.txt",
|
||||
"GPL2.txt",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <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
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# Special requirements for macOS universal2 binary release
|
||||
# This way dependabot can auto-update them
|
||||
cryptography==40.0.2
|
||||
cryptography==41.0.3
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <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
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
PyGithub==1.58.2
|
||||
praw==7.7.0
|
||||
PyGithub==1.59.1
|
||||
praw==7.7.1
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2008-2017 The SABnzbd-Team <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
|
||||
@@ -19,12 +19,15 @@ import hashlib
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
import github
|
||||
import praw
|
||||
|
||||
from constants import (
|
||||
RELEASE_VERSION,
|
||||
PRERELEASE,
|
||||
RELEASE_SRC,
|
||||
RELEASE_BINARY_32,
|
||||
RELEASE_BINARY_64,
|
||||
@@ -33,6 +36,7 @@ from constants import (
|
||||
RELEASE_README,
|
||||
RELEASE_THIS,
|
||||
RELEASE_TITLE,
|
||||
APPDATA_FILE,
|
||||
)
|
||||
|
||||
# Verify we have all assets
|
||||
@@ -49,6 +53,11 @@ for file_to_check in files_to_check:
|
||||
raise RuntimeError("Not all release files are present!")
|
||||
print("All release files are present")
|
||||
|
||||
# Verify that appdata file is updated
|
||||
if not PRERELEASE:
|
||||
if not isinstance(ET.parse(APPDATA_FILE).find(f"./releases/release[@version='{RELEASE_VERSION}']"), ET.Element):
|
||||
raise RuntimeError(f"Could not find {RELEASE_VERSION} in {APPDATA_FILE}")
|
||||
|
||||
# Calculate hashes for Synology release
|
||||
with open(RELEASE_SRC, "rb") as inp_file:
|
||||
source_data = inp_file.read()
|
||||
@@ -69,9 +78,6 @@ if RELEASE_THIS and gh_token:
|
||||
with open(RELEASE_README, "r") as readme_file:
|
||||
readme_data = readme_file.read()
|
||||
|
||||
# Pre-releases are longer than 6 characters (e.g. 3.1.0Beta1 vs 3.1.0, but also 3.0.11)
|
||||
prerelease = len(RELEASE_VERSION) > 5
|
||||
|
||||
# We have to manually check if we already created this release
|
||||
for release in gh_repo.get_releases():
|
||||
if release.tag_name == RELEASE_VERSION:
|
||||
@@ -86,7 +92,7 @@ if RELEASE_THIS and gh_token:
|
||||
name=RELEASE_TITLE,
|
||||
message=readme_data,
|
||||
draft=True,
|
||||
prerelease=prerelease,
|
||||
prerelease=PRERELEASE,
|
||||
)
|
||||
|
||||
# Fetch existing assets, as overwriting is not allowed by GitHub
|
||||
@@ -119,7 +125,7 @@ if RELEASE_THIS and gh_token:
|
||||
name=RELEASE_TITLE,
|
||||
message=readme_data,
|
||||
draft=False,
|
||||
prerelease=prerelease,
|
||||
prerelease=PRERELEASE,
|
||||
)
|
||||
|
||||
# Update the website
|
||||
@@ -146,7 +152,7 @@ if RELEASE_THIS and gh_token:
|
||||
latest_txt_items = latest_txt.decoded_content.split()
|
||||
new_latest_txt_items = latest_txt_items[:2]
|
||||
config_yml = gh_repo_web.get_contents("_config.yml")
|
||||
if prerelease:
|
||||
if PRERELEASE:
|
||||
# If it's a pre-release, we append to current version in latest.txt
|
||||
new_latest_txt_items.extend([RELEASE_VERSION_BYTES, latest_txt_items[1]])
|
||||
# And replace in _config.yml
|
||||
@@ -205,7 +211,7 @@ if RELEASE_THIS and gh_token:
|
||||
|
||||
# Merge pull-request
|
||||
print("Merging pull request in sabnzbd/sabnzbd.github.io for the update")
|
||||
update_pr.merge(method="squash")
|
||||
update_pr.merge(merge_method="squash")
|
||||
|
||||
# Only with GitHub success we proceed to Reddit
|
||||
if reddit_token := os.environ.get("REDDIT_TOKEN", ""):
|
||||
@@ -227,18 +233,26 @@ if RELEASE_THIS and gh_token:
|
||||
with open(RELEASE_README, "r") as readme_file:
|
||||
readme_lines = readme_file.readlines()
|
||||
|
||||
# Put the download link after the title
|
||||
readme_lines[2] = "## https://sabnzbd.org/downloads\n"
|
||||
|
||||
# Use the header in the readme as title
|
||||
title = readme_lines[0]
|
||||
release_notes_text = "".join(readme_lines[3:])
|
||||
|
||||
# Post always to r/SABnzbd
|
||||
print("Posting release notes to Reddit: r/sabnzbd")
|
||||
submission = subreddit_sabnzbd.submit(title, selftext=release_notes_text)
|
||||
release_notes_text = "".join(readme_lines[2:])
|
||||
|
||||
# Only stable releases to r/usenet
|
||||
if not prerelease:
|
||||
print("Cross-posting release notes to Reddit: r/usenet")
|
||||
submission.crosspost(subreddit_usenet)
|
||||
if not PRERELEASE:
|
||||
print("Posting release notes to Reddit: r/usenet")
|
||||
submission = subreddit_usenet.submit(title, selftext=release_notes_text)
|
||||
|
||||
# Cross-post to r/SABnzbd
|
||||
print("Cross-posting release notes to Reddit: r/sabnzbd")
|
||||
submission.crosspost(subreddit_sabnzbd)
|
||||
else:
|
||||
# Post always to r/SABnzbd
|
||||
print("Posting release notes to Reddit: r/sabnzbd")
|
||||
subreddit_sabnzbd.submit(title, selftext=release_notes_text)
|
||||
|
||||
else:
|
||||
print("Missing REDDIT_TOKEN")
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
# Basic build requirements
|
||||
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
|
||||
pyinstaller==5.11.0
|
||||
pyinstaller-hooks-contrib==2023.3
|
||||
pyinstaller==5.13.0
|
||||
pyinstaller-hooks-contrib==2023.6
|
||||
altgraph==0.17.3
|
||||
wrapt==1.15.0
|
||||
setuptools==67.8.0
|
||||
setuptools==68.0.0
|
||||
certifi
|
||||
|
||||
# orjson does not support 32bit Windows, exclude it based on Python-version
|
||||
# This way we also test ujson on Python 3.8 in the CI-tests
|
||||
orjson==3.8.14; python_version > '3.8'
|
||||
orjson==3.9.4; python_version > '3.8'
|
||||
|
||||
# For the Windows build
|
||||
pefile==2023.2.7; sys_platform == 'win32'
|
||||
pywin32-ctypes==0.2.0; sys_platform == 'win32'
|
||||
pywin32-ctypes==0.2.2; sys_platform == 'win32'
|
||||
|
||||
# For the macOS build
|
||||
dmgbuild==1.6.1; sys_platform == 'darwin'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; -*- coding: utf-8 -*-
|
||||
;
|
||||
; Copyright 2008-2015 The SABnzbd-Team <team@sabnzbd.org>
|
||||
; Copyright 2008-2015 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
|
||||
@@ -194,7 +194,7 @@ Section "SABnzbd" SecDummy
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayName" "SABnzbd ${SAB_VERSION}"
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "UninstallString" '"$INSTDIR\uninstall.exe"'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayVersion" '${SAB_VERSION}'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "Publisher" 'The SABnzbd Team'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "Publisher" 'The SABnzbd-Team'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "HelpLink" 'https://forums.sabnzbd.org/'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "URLInfoAbout" 'https://sabnzbd.org/wiki/'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "URLUpdateInfo" 'https://sabnzbd.org/'
|
||||
|
||||
@@ -34,6 +34,9 @@
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/bootstrap/css/bootstrap.min.css?v=$version" />
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/chartist.min.css" />
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/style.css?v=$version" />
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/night.css?v=$version" media="(prefers-color-scheme: dark)"/>
|
||||
<!--#end if#-->
|
||||
|
||||
<link rel="shortcut icon" href="${root}staticcfg/ico/favicon.ico?v=$version" />
|
||||
|
||||
|
||||
@@ -123,8 +123,8 @@
|
||||
</div>
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding alt">
|
||||
<h5 class="copyright">Copyright © 2007-2023 The SABnzbd Team <<a href="mailto:team@sabnzbd.org">team@sabnzbd.org</a>></h5>
|
||||
<div class="padding">
|
||||
<h5 class="copyright">Copyright © 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>
|
||||
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="log_dir">$T('opt-log_dir')</label>
|
||||
<input type="text" name="log_dir" id="log_dir" value="$log_dir" data-initialdir="$my_lcldata" />
|
||||
<a class="btn btn-default" id="purge_log_files" href="${root}"><span class="glyphicon glyphicon-trash"></span> $T('purge_log_files')</a>
|
||||
<span class="desc">$T('explain-log_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -133,6 +134,16 @@
|
||||
jQuery(document).ready(function() {
|
||||
// Add autocomplete and file-browser
|
||||
\$('.col1 input[name$="_dir"]').typeahead().fileBrowser();
|
||||
|
||||
\$('#purge_log_files').click(function () {
|
||||
if ( confirm("$T('confirm')") ) {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "../../api",
|
||||
data: {mode: 'config', name: 'purge_log_files', output: 'json', apikey: \$('#apikey').val()}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
var serverBandwithData = {}
|
||||
var serverArticleTries = {}
|
||||
var serverArticleFailed = {}
|
||||
|
||||
// Keep track of all used hostnames
|
||||
var hostnames = ""
|
||||
</script>
|
||||
|
||||
<div class="colmask">
|
||||
@@ -30,6 +33,8 @@
|
||||
<div class="section" id="addServerContent" style="display: none;">
|
||||
<div class="col2">
|
||||
<h3>$T('addServer') <a href="$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
|
||||
<iframe></iframe>
|
||||
</div>
|
||||
<div class="col1">
|
||||
<form action="addServer" method="post" autocomplete="off" onsubmit="removeObfuscation();">
|
||||
@@ -301,6 +306,7 @@
|
||||
serverBandwithData[${cur}] = <!--#echo json.dumps($server['amounts'][4])#-->
|
||||
serverArticleTries[${cur}] = <!--#echo json.dumps($server['amounts'][5])#-->
|
||||
serverArticleFailed[${cur}] = <!--#echo json.dumps($server['amounts'][6])#-->
|
||||
hostnames += ",$server['host']"
|
||||
</script>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
@@ -507,6 +513,9 @@
|
||||
\$('#addServerContent').show();
|
||||
// Add coloring
|
||||
addRowColor()
|
||||
// Show text-ad
|
||||
// NOTE: The hash-part cannot be seen by the server, so we don't know which hostnames you use!
|
||||
\$(".Servers iframe").attr("src", "https://sabnzbd.org/servers#$active_lang" + hostnames)
|
||||
});
|
||||
|
||||
\$('[name="ssl"]').click(function() {
|
||||
|
||||
@@ -472,7 +472,7 @@
|
||||
ui.placeholder.height(hPlaceholder + hExtra);
|
||||
\$('<div class="sorter-placeholder-anim" data-height="' + hPlaceholder + '"></div>').insertAfter(ui.placeholder);
|
||||
},
|
||||
cancel: ".pattern-table",
|
||||
cancel: "input,textarea,button,select,option,.pattern-table",
|
||||
change: function(event, ui) {
|
||||
ui.placeholder.stop().height(0).animate({
|
||||
height: ui.item.outerHeight() + hExtra
|
||||
|
||||
@@ -18,15 +18,6 @@
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="load_balancing">$T('opt-load_balancing')</label>
|
||||
<select name="load_balancing" id="load_balancing">
|
||||
<option value="0" <!--#if $load_balancing == 0 then 'selected="selected"' else ""#--> >$T('no-load-balancing')</option>
|
||||
<option value="1" <!--#if $load_balancing == 1 then 'selected="selected"' else ""#--> >$T('load-balancing')</option>
|
||||
<option value="2" <!--#if $load_balancing == 2 then 'selected="selected"' else ""#--> >$T('load-balancing-happy-eyeballs')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-load_balancing')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="max_art_tries">$T('opt-max_art_tries')</label>
|
||||
<input type="number" name="max_art_tries" id="max_art_tries" value="$max_art_tries" min="2" max="2000" />
|
||||
@@ -233,11 +224,6 @@
|
||||
<input type="checkbox" name="script_can_fail" id="script_can_fail" value="1" <!--#if int($script_can_fail) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-script_can_fail')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="new_nzb_on_failure">$T('opt-new_nzb_on_failure')</label>
|
||||
<input type="checkbox" name="new_nzb_on_failure" id="new_nzb_on_failure" value="1" <!--#if int($new_nzb_on_failure) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-new_nzb_on_failure')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ignore_samples">$T('opt-ignore_samples')</label>
|
||||
<input type="checkbox" name="ignore_samples" id="ignore_samples" value="1" <!--#if int($ignore_samples) > 0 then 'checked="checked"' else ""#--> />
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/bootstrap/css/bootstrap.min.css?v=$version" />
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/css/login.css?v=$version" />
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/css/night.css?v=$version" media="(prefers-color-scheme: dark)"/>
|
||||
<!--#end if#-->
|
||||
|
||||
<script type="text/javascript" src="../staticcfg/js/jquery-3.5.1.min.js?v=$version"></script>
|
||||
<script type="text/javascript" src="../staticcfg/bootstrap/js/bootstrap.min.js?v=$version"></script>
|
||||
|
||||
@@ -7,7 +7,10 @@ body {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
|
||||
.btn, .btn:hover, .btn:active, .btn:focus {
|
||||
.btn,
|
||||
.btn:hover,
|
||||
.btn:active,
|
||||
.btn:focus {
|
||||
box-shadow: 1px 1px 1px rgba(0,0,0,.1) !important;
|
||||
background-color: white !important;
|
||||
}
|
||||
|
||||
296
interfaces/Config/templates/staticcfg/css/night.css
Normal file
296
interfaces/Config/templates/staticcfg/css/night.css
Normal file
@@ -0,0 +1,296 @@
|
||||
body {
|
||||
background-color: black;
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
a,
|
||||
a:hover,
|
||||
a:focus,
|
||||
a:visited,
|
||||
#content a,
|
||||
#content a:active,
|
||||
#content a:visited {
|
||||
color: #63a7e1;
|
||||
}
|
||||
|
||||
.btn {
|
||||
box-shadow: 1px 1px 1px rgba(255, 255, 255, .1) !important;
|
||||
}
|
||||
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default,
|
||||
input,
|
||||
select,
|
||||
textarea,
|
||||
.advanced-button,
|
||||
.list-group-item {
|
||||
border-color: #252525 !important;
|
||||
}
|
||||
|
||||
#addFeed,
|
||||
#addFeedContent,
|
||||
.section {
|
||||
border-bottom: 1px solid #555555;
|
||||
}
|
||||
|
||||
.col2 p,
|
||||
.col2-cats {
|
||||
color: #AAA;
|
||||
}
|
||||
|
||||
.col2 h3 {
|
||||
background: none repeat scroll 0 0 #555555;
|
||||
}
|
||||
|
||||
.catTable,
|
||||
.dropdown-menu,
|
||||
.dropdown-menu .divider,
|
||||
.even,
|
||||
.Key tr:nth-child(odd),
|
||||
.language:hover,
|
||||
.navbar-default .navbar-nav>.open>a,
|
||||
.navbar-default .navbar-nav>.open>a:focus,
|
||||
.navbar-default .navbar-nav>.open>a:hover,
|
||||
.navbar-default .navbar-nav>li>a.active,
|
||||
.navbar-default .navbar-nav>li>a:hover,
|
||||
.navbar-logo:hover,
|
||||
.quoteBlock,
|
||||
.selected,
|
||||
.server-disabled,
|
||||
#serverResponse,
|
||||
.table>tbody>tr:nth-child(odd),
|
||||
.table-striped>tbody>tr:nth-child(odd),
|
||||
ul.tabs li.active a,
|
||||
select[disabled],
|
||||
select:hover {
|
||||
background-color: #444444 !important;
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
.correct {
|
||||
border: 2px solid #00cc22 !important;
|
||||
}
|
||||
|
||||
.failed,
|
||||
.required-star,
|
||||
.error-text {
|
||||
color: #ff3333 !important;
|
||||
}
|
||||
|
||||
.unselected,
|
||||
.selected {
|
||||
border: 1px solid #EBEBEB !important;
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
.incorrect {
|
||||
border: 2px solid #ff3333 !important;
|
||||
}
|
||||
|
||||
.disabled-text {
|
||||
color: #777 !important;
|
||||
}
|
||||
|
||||
#rightGreyText,
|
||||
small {
|
||||
color: #c7c7c7 !important;
|
||||
}
|
||||
|
||||
.Categories form.sorting-row:nth-child(2n-1) tr,
|
||||
.advanced-button,
|
||||
.advanced-buttonSeperator,
|
||||
.alt,
|
||||
.infoTableSeperator.alt,
|
||||
.btn:not(.btn-danger),
|
||||
.btn-default.disabled:active,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default.disabled:hover,
|
||||
.form-control[disabled],
|
||||
.input-group-addon,
|
||||
#inner,
|
||||
.navbar-default,
|
||||
.search-box input,
|
||||
.select,
|
||||
.Sorting .explain-sorting,
|
||||
.table-striped>tbody>tr:nth-child(even),
|
||||
.table>tbody>tr:nth-child(even),
|
||||
.tab-pane tr:nth-child(odd),
|
||||
textarea,
|
||||
ul.tabs a.active,
|
||||
a.list-group-item,
|
||||
input[type="text"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="date"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[disabled],
|
||||
textarea,
|
||||
select {
|
||||
background-color: #555555;
|
||||
color: #EBEBEB;
|
||||
}
|
||||
|
||||
.btn:hover:not(.btn-danger),
|
||||
.btn-default:hover,
|
||||
.tab-content .catTable tr:hover td,
|
||||
input:hover,
|
||||
textarea:hover,
|
||||
.list-group-item:hover,
|
||||
select:hover,
|
||||
textarea:hover,
|
||||
input[type="date"]:hover,
|
||||
input[type="datetime"]:hover,
|
||||
input[type="datetime-local"]:hover,
|
||||
input[type="email"]:hover,
|
||||
input[type="month"]:hover,
|
||||
input[type="number"]:hover,
|
||||
input[type="password"]:hover,
|
||||
input[type="search"]:hover,
|
||||
input[type="tel"]:hover,
|
||||
input[type="text"]:hover,
|
||||
input[type="time"]:hover,
|
||||
input[type="url"]:hover,
|
||||
input[type="week"]:hover,
|
||||
textarea:focus,
|
||||
select:focus,
|
||||
input[type="date"]:focus,
|
||||
input[type="datetime"]:focus,
|
||||
input[type="datetime-local"]:focus,
|
||||
input[type="email"]:focus,
|
||||
input[type="month"]:focus,
|
||||
input[type="number"]:focus,
|
||||
input[type="password"]:focus,
|
||||
input[type="search"]:focus,
|
||||
input[type="tel"]:focus,
|
||||
input[type="text"]:focus,
|
||||
input[type="time"]:focus,
|
||||
input[type="url"]:focus,
|
||||
input[type="week"]:focus {
|
||||
background-color: #666;
|
||||
color: #EBEBEB;
|
||||
}
|
||||
|
||||
.btn-default:focus,
|
||||
.form-control:focus,
|
||||
input:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
border-color: #707070 !important;
|
||||
outline: initial !important;
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.3) !important;
|
||||
}
|
||||
|
||||
.modal-backdrop {
|
||||
background-color: #262626 !important;
|
||||
}
|
||||
|
||||
.Key tr {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table>tbody>tr>td,
|
||||
.table>tbody>tr>th,
|
||||
.infoTableSeperator,
|
||||
.modal-footer,
|
||||
.data-row {
|
||||
border-top: 1px solid #555555;
|
||||
}
|
||||
|
||||
hr {
|
||||
border-top: 1px solid #555555;
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
border-color: #7b2b28;
|
||||
}
|
||||
|
||||
.tab-content .catTable tbody,
|
||||
ul.tabs a,
|
||||
.colmask,
|
||||
#subscriptions,
|
||||
.RSS form[action="add_rss_feed"] tr:nth-child(even),
|
||||
.Config .table {
|
||||
border: 1px solid #555555 !important;
|
||||
}
|
||||
|
||||
.Categories form:first-of-type tr:last-of-type,
|
||||
.default,
|
||||
.dropdown-menu>li>a:focus,
|
||||
.dropdown-menu>li>a:hover {
|
||||
background-color: #696969;
|
||||
}
|
||||
|
||||
.activeRSS,
|
||||
.activeRSS a,
|
||||
.activeRSS a:visited,
|
||||
.btn-default,
|
||||
.checkbox label,
|
||||
.feed-row td,
|
||||
.help-block,
|
||||
#content,
|
||||
.navbar-default .navbar-nav>li>a,
|
||||
.navbar-default .navbar-nav>li>a>.glyphicon,
|
||||
.path,
|
||||
.Servers .ct-label,
|
||||
.time,
|
||||
.main-restarting.in,
|
||||
#search-dropdown .dropdown-header,
|
||||
ul.tabs a {
|
||||
color: #EBEBEB;
|
||||
}
|
||||
|
||||
.container,
|
||||
#content {
|
||||
background-color: unset !important;
|
||||
}
|
||||
|
||||
#content>div.colmask>div:nth-child(3) {
|
||||
border-bottom: 1px solid #555555 !important;
|
||||
}
|
||||
|
||||
.Servers .ct-series-a .ct-line,
|
||||
.Servers .ct-series-a .ct-point {
|
||||
stroke: #EBEBEB;
|
||||
}
|
||||
|
||||
#inner,
|
||||
.colmask {
|
||||
background-color: #303030;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
background-color: #3C3C3C;
|
||||
}
|
||||
|
||||
.modal-content,
|
||||
.modal-body,
|
||||
.modal-footer {
|
||||
background-color: #727272;
|
||||
}
|
||||
|
||||
.form-signin .btn.btn-default {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.rss-icon-svg {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
.rss-symbol {
|
||||
fill: #555555;
|
||||
}
|
||||
|
||||
/* Placeholders - Will not work if grouped! */
|
||||
::-webkit-input-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
|
||||
::-moz-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
:-ms-input-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
}
|
||||
@@ -177,8 +177,8 @@ input[type="checkbox"]+.desc {
|
||||
background-color: #F8F8F8;
|
||||
}
|
||||
.field-pair:last-child,
|
||||
.no-field-pair-bg {
|
||||
background-color: transparent;
|
||||
.field-pair.no-field-pair-bg {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
.alt,
|
||||
.infoTableSeperator.alt {
|
||||
@@ -225,10 +225,38 @@ input[type='checkbox'] {
|
||||
padding: 0;
|
||||
margin-left: 5px;
|
||||
}
|
||||
textarea:hover, input[type="date"]:hover, input[type="datetime"]:hover, input[type="datetime-local"]:hover, input[type="email"]:hover, input[type="month"]:hover, input[type="number"]:hover, input[type="password"]:hover, input[type="search"]:hover, input[type="tel"]:hover, input[type="text"]:hover, input[type="time"]:hover, input[type="url"]:hover, input[type="week"]:hover, textarea:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="email"]:focus, input[type="month"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="time"]:focus, input[type="url"]:focus, input[type="week"]:focus {
|
||||
textarea:hover,
|
||||
input[type="date"]:hover,
|
||||
input[type="datetime"]:hover,
|
||||
input[type="datetime-local"]:hover,
|
||||
input[type="email"]:hover,
|
||||
input[type="month"]:hover,
|
||||
input[type="number"]:hover,
|
||||
input[type="password"]:hover,
|
||||
input[type="search"]:hover,
|
||||
input[type="tel"]:hover,
|
||||
input[type="text"]:hover,
|
||||
input[type="time"]:hover,
|
||||
input[type="url"]:hover,
|
||||
input[type="week"]:hover,
|
||||
textarea:focus,
|
||||
input[type="date"]:focus,
|
||||
input[type="datetime"]:focus,
|
||||
input[type="datetime-local"]:focus,
|
||||
input[type="email"]:focus,
|
||||
input[type="month"]:focus,
|
||||
input[type="number"]:focus,
|
||||
input[type="password"]:focus,
|
||||
input[type="search"]:focus,
|
||||
input[type="tel"]:focus,
|
||||
input[type="text"]:focus,
|
||||
input[type="time"]:focus,
|
||||
input[type="url"]:focus,
|
||||
input[type="week"]:focus {
|
||||
background-color: #fffff0;
|
||||
border: 1px solid #aaa;
|
||||
}
|
||||
|
||||
.col1 input[type='checkbox'] {
|
||||
position: absolute;
|
||||
top: auto!important;
|
||||
@@ -986,7 +1014,7 @@ input[type="checkbox"] {
|
||||
}
|
||||
*/
|
||||
.navbar-default .navbar-nav>li>a {
|
||||
color: black !important;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.navbar-default .navbar-nav>li>a:hover,
|
||||
@@ -1023,6 +1051,12 @@ input[type="checkbox"] {
|
||||
margin: 10px 0px;
|
||||
}
|
||||
|
||||
.Servers iframe {
|
||||
width: 100%;
|
||||
height: 325px;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.Servers .col2 .label {
|
||||
margin-top: 8px;
|
||||
font-size: 0.85em;
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<div class="history" id="history-tab" data-bind="visible: hasHistory() || displayTabbed()" style="display: none">
|
||||
<h2>$T('menu-history')</h2>
|
||||
<div class="history-header">
|
||||
<h2>$T('menu-history')</h2>
|
||||
<a href="#" data-bind="click: history.showMultiEdit">
|
||||
<span class="glyphicon glyphicon-tasks" data-tooltip="true" data-placement="left" title="$T('Glitter-multiOperations')"></span>
|
||||
</a>
|
||||
</div>
|
||||
<table class="table table-hover history-table paginated">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -55,7 +60,10 @@
|
||||
<!-- /ko -->
|
||||
<td class="history-completedon row-wrap-text" data-bind="text: completedOn(), attr: { 'data-timestamp': completed }" onclick="showDetails(this)"></td>
|
||||
<td class="delete">
|
||||
<div class="dropdown">
|
||||
<label data-bind="visible: parent.isMultiEditing()">
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" data-bind="click: parent.parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
</label>
|
||||
<div class="dropdown" data-bind="visible: !parent.isMultiEditing()">
|
||||
<a href="#" data-toggle="dropdown" data-bind="click: updateAllHistoryInfo">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
@@ -124,7 +132,20 @@
|
||||
<div class="multioperations-selector" id="history-options">
|
||||
<a href="#" class="hover-button" title="$T('link-retryAll')" data-tooltip="true" data-placement="left" data-bind="click: history.retryAllFailed"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<a href="#" class="hover-button" title="$T('showAllHis') / $T('showFailedHis')" data-tooltip="true" data-placement="left" data-bind="click: history.toggleShowFailed, css: { 'history-options-show-failed': history.showFailed }"><span class="glyphicon glyphicon-exclamation-sign"></span></a>
|
||||
<a href="#modal-purge-history" class="hover-button" title="$T('purgeHist')" data-toggle="modal" data-tooltip="true" data-placement="left"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
|
||||
<div data-bind="visible: history.isMultiEditing()">
|
||||
<span class="label label-default" data-bind="text: history.multiEditItems().length">0</span>
|
||||
<label for="multiedit-checkall-history">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall-history" title="$T('Glitter-checkAll')" data-bind="click: checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<a href="#" class="hover-button" data-bind="visible: history.isMultiEditing(), click: doMultiDelete">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
<a href="#modal-purge-history" class="hover-button" title="$T('purgeHist')" data-bind="visible: !history.isMultiEditing()" data-toggle="modal" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="info-container history-info">
|
||||
|
||||
@@ -713,7 +713,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<hr/>
|
||||
<p><small>Copyright (C) 2007-2021 The SABnzbd Team <team@sabnzbd.org><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>
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
<td class="timeleft row-wrap-text" data-bind="text: statusText"></td>
|
||||
<td class="delete">
|
||||
<label data-bind="visible: parent.isMultiEditing()">
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" data-bind="click: parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" data-bind="click: parent.parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
</label>
|
||||
<!-- ko if: !isGrabbing() -->
|
||||
<div class="dropdown" data-bind="visible: !parent.isMultiEditing()">
|
||||
@@ -171,10 +171,10 @@
|
||||
|
||||
<form class="multioperations-selector" data-bind="visible: (hasQueue() && queue.isMultiEditing())" style="display: none;">
|
||||
<div class="add-nzb-inputbox add-nzb-inputbox-small add-nzb-inputbox-options">
|
||||
<label for="multiedit-checkall">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall" title="$T('Glitter-checkAll')" data-bind="click: queue.checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
<label for="multiedit-checkall-queue">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall-queue" title="$T('Glitter-checkAll')" data-bind="click: checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
</label>
|
||||
<a href="#" class="hover-button" data-bind="click: queue.doMultiDelete">
|
||||
<a href="#" class="hover-button" data-bind="click: doMultiDelete">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -145,10 +145,10 @@
|
||||
<a href="#queue-tab" data-toggle="tab">$T('menu-queue') <span class="badge" data-bind="text: queue.totalItems"></span></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#history-tab" data-toggle="tab">$T('menu-history')<span class="badge" data-bind="text: history.totalItems"></span></a>
|
||||
<a href="#history-tab" data-toggle="tab">$T('menu-history') <span class="badge badge-info" data-bind="text: history.ppItems, visible: history.ppItems"></span><span class="badge" data-bind="text: history.totalItems"></span></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#queue-messages" data-toggle="tab">$T('warnings')<span class="badge" data-bind="text: hasMessages, css: { 'badge-warning': hasMessages() }"></span></a>
|
||||
<a href="#queue-messages" data-toggle="tab">$T('warnings') <span class="badge" data-bind="text: hasMessages, css: { 'badge-warning': hasMessages() }"></span></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,10 @@ function HistoryListModel(parent) {
|
||||
self.searchTerm = ko.observable('').extend({ rateLimit: { timeout: 400, method: "notifyWhenChangesStop" } });
|
||||
self.paginationLimit = ko.observable(10).extend({ persist: 'historyPaginationLimit' });
|
||||
self.totalItems = ko.observable(0);
|
||||
self.ppItems = ko.observable(0);
|
||||
self.pagination = new paginationModel(self);
|
||||
self.isMultiEditing = ko.observable(false).extend({ persist: 'historyIsMultiEditing' });
|
||||
self.multiEditItems = ko.observableArray([]);
|
||||
|
||||
// Download history info
|
||||
self.downloadedToday = ko.observable();
|
||||
@@ -79,7 +82,7 @@ function HistoryListModel(parent) {
|
||||
if(self.parent.queue.multiEditItems().length > 0) {
|
||||
$.each(newItems, function() {
|
||||
var currentItem = this;
|
||||
self.parent.queue.multiEditItems.remove(function(inList) { return inList.id == currentItem.nzo_id; })
|
||||
self.parent.queue.multiEditItems.remove(function(inList) { return inList.id == currentItem.id; })
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -93,6 +96,7 @@ function HistoryListModel(parent) {
|
||||
History information
|
||||
***/
|
||||
self.totalItems(data.noofslots);
|
||||
self.ppItems(data.ppslots)
|
||||
self.downloadedToday(data.day_size);
|
||||
self.downloadedWeek(data.week_size);
|
||||
self.downloadedMonth(data.month_size);
|
||||
@@ -110,6 +114,8 @@ function HistoryListModel(parent) {
|
||||
value: newValue
|
||||
})
|
||||
}
|
||||
// Update pagination and counters
|
||||
self.parent.refresh(true)
|
||||
});
|
||||
|
||||
// Retry a job
|
||||
@@ -224,7 +230,7 @@ function HistoryListModel(parent) {
|
||||
$.each(self.historyItems(), function(index) {
|
||||
// Only append when it's a download that can be deleted
|
||||
if(!this.processingDownload() && !this.processingWaiting()) {
|
||||
strIDs = strIDs + this.nzo_id + ',';
|
||||
strIDs = strIDs + this.id + ',';
|
||||
}
|
||||
})
|
||||
// Send the command
|
||||
@@ -253,6 +259,13 @@ function HistoryListModel(parent) {
|
||||
$("#modal-purge-history").modal('hide');
|
||||
});
|
||||
};
|
||||
|
||||
// Show the input checkbox
|
||||
self.showMultiEdit = function() {
|
||||
self.isMultiEditing(!self.isMultiEditing())
|
||||
self.multiEditItems.removeAll();
|
||||
$('.history-table input[name="multiedit"], #history-options #multiedit-checkall').prop({'checked': false, 'indeterminate': false})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -266,7 +279,7 @@ function HistoryModel(parent, data) {
|
||||
// If we update the full set every time it uses lot of CPU
|
||||
// The Status/Actionline/scriptline/completed we do update every time
|
||||
// When clicked on the more-info button we load the rest again
|
||||
self.nzo_id = data.nzo_id;
|
||||
self.id = data.nzo_id;
|
||||
self.index = data.index;
|
||||
self.updateAllHistory = false;
|
||||
self.hasDropdown = ko.observable(false);
|
||||
@@ -375,7 +388,7 @@ function HistoryModel(parent, data) {
|
||||
// Re-try button
|
||||
self.retry = function() {
|
||||
// Set JOB-id
|
||||
$('#modal-retry-job input[name="retry_job_id"]').val(self.nzo_id)
|
||||
$('#modal-retry-job input[name="retry_job_id"]').val(self.id)
|
||||
// Set password
|
||||
$('#retry_job_password').val(self.historyStatus.password())
|
||||
// Open modal
|
||||
@@ -427,7 +440,7 @@ function HistoryModel(parent, data) {
|
||||
if(item.processingDownload() == 2) {
|
||||
callAPI({
|
||||
mode: 'cancel_pp',
|
||||
value: self.nzo_id
|
||||
value: self.id
|
||||
})
|
||||
// All we can do is wait
|
||||
} else {
|
||||
@@ -436,7 +449,7 @@ function HistoryModel(parent, data) {
|
||||
mode: 'history',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: self.nzo_id
|
||||
value: self.id
|
||||
}).then(function(response) {
|
||||
if(response.status) {
|
||||
// Make sure no flickering (if there are more items left) and then remove
|
||||
|
||||
@@ -133,6 +133,100 @@ function ViewModel() {
|
||||
return parseInt(self.nrWarnings()) + self.allMessages().length;
|
||||
})
|
||||
|
||||
self.updateCheckAllButtonState = function(section) {
|
||||
setCheckAllState(`#multiedit-checkall-${section}`, `.${section}-table input[name="multiedit"]`)
|
||||
}
|
||||
|
||||
// Add queue or history item to multi-edit list
|
||||
self.addMultiEdit = function(item, event) {
|
||||
// The parent model is either the queue or history
|
||||
const model = this.parent;
|
||||
const section = model.queueItems ? 'queue' : 'history';
|
||||
|
||||
if(event.shiftKey) {
|
||||
checkShiftRange(`.${section}-table input[name="multiedit"]`);
|
||||
}
|
||||
|
||||
if(event.currentTarget.checked) {
|
||||
model.multiEditItems.push(item);
|
||||
|
||||
// History is not editable
|
||||
// Only the queue will fire the multi-edit update
|
||||
model.doMultiEditUpdate?.();
|
||||
} else {
|
||||
model.multiEditItems.remove(function(inList) { return inList.id == item.id; })
|
||||
}
|
||||
|
||||
self.updateCheckAllButtonState(section);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check all queue or history items
|
||||
self.checkAllJobs = function(item, event) {
|
||||
const section = event.currentTarget.closest('.multioperations-selector').id === 'history-options' ? 'history' : 'queue';
|
||||
const model = section === 'history' ? self.history : self.queue;
|
||||
|
||||
const allChecks = $(`.${section}-table input[name="multiedit"]`).filter(':not(:disabled):visible');
|
||||
|
||||
self.updateCheckAllButtonState(section);
|
||||
|
||||
if(event.target.indeterminate || (event.target.checked && !event.target.indeterminate)) {
|
||||
const allActive = allChecks.filter(":checked")
|
||||
if(allActive.length === model.multiEditItems().length) {
|
||||
model.multiEditItems.removeAll();
|
||||
allActive.prop('checked', false)
|
||||
} else {
|
||||
allActive.each(function() {
|
||||
var item = ko.dataFor(this)
|
||||
model.multiEditItems.remove(function(inList) { return inList.id === item.id; })
|
||||
this.checked = false;
|
||||
})
|
||||
}
|
||||
} else {
|
||||
allChecks.prop('checked', true)
|
||||
allChecks.each(function() { model.multiEditItems.push(ko.dataFor(this)) })
|
||||
event.target.checked = true
|
||||
|
||||
model.multiEditUpdate?.();
|
||||
}
|
||||
|
||||
self.updateCheckAllButtonState(section);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Delete all selected queue or history items
|
||||
self.doMultiDelete = function(item, event) {
|
||||
const section = event.currentTarget.closest('.multioperations-selector').id === 'history-options' ? 'history' : 'queue';
|
||||
const model = section === 'history' ? self.history : self.queue;
|
||||
|
||||
// Anything selected?
|
||||
if(model.multiEditItems().length < 1) return;
|
||||
|
||||
if(!self.confirmDeleteHistory() || confirm(glitterTranslate.removeDown)) {
|
||||
let strIDs = '';
|
||||
$.each(model.multiEditItems(), function() {
|
||||
strIDs = strIDs + this.id + ',';
|
||||
})
|
||||
|
||||
showNotification('.main-notification-box-removing-multiple', 0, model.multiEditItems().length)
|
||||
|
||||
callAPI({
|
||||
mode: section,
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: strIDs
|
||||
}).then(function(response) {
|
||||
if(response.status) {
|
||||
// Make sure the history doesnt flicker and then fade-out
|
||||
model.isLoading(true)
|
||||
self.refresh()
|
||||
model.multiEditItems.removeAll();
|
||||
hideNotification()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Update main queue
|
||||
self.updateQueue = function(response) {
|
||||
// Block in case off dragging
|
||||
|
||||
@@ -159,6 +159,8 @@ function QueueListModel(parent) {
|
||||
value: newValue
|
||||
})
|
||||
}
|
||||
// Update pagination and counters
|
||||
self.parent.refresh(true)
|
||||
});
|
||||
|
||||
// Do we show search box. So it doesn't dissapear when nothing is found
|
||||
@@ -253,7 +255,7 @@ function QueueListModel(parent) {
|
||||
// Reset form and remove all checked ones
|
||||
$form[0].reset();
|
||||
self.multiEditItems.removeAll();
|
||||
$('.delete input[name="multiedit"], #multiedit-checkall').prop({'checked': false, 'indeterminate': false})
|
||||
$('.queue-table input[name="multiedit"], .queue #multiedit-checkall').prop({'checked': false, 'indeterminate': false})
|
||||
|
||||
// Is the multi-edit in view?
|
||||
if(($form.offset().top + $form.outerHeight(true)) > ($(window).scrollTop()+$(window).height())) {
|
||||
@@ -264,72 +266,6 @@ function QueueListModel(parent) {
|
||||
}
|
||||
}
|
||||
|
||||
// Add to the list
|
||||
self.addMultiEdit = function(item, event) {
|
||||
// Is it a shift-click?
|
||||
if(event.shiftKey) {
|
||||
checkShiftRange('.queue-table input[name="multiedit"]');
|
||||
}
|
||||
|
||||
// Add or remove from the list?
|
||||
if(event.currentTarget.checked) {
|
||||
// Add item
|
||||
self.multiEditItems.push(item);
|
||||
// Update them all
|
||||
self.doMultiEditUpdate();
|
||||
} else {
|
||||
// Go over them all to know which one to remove
|
||||
self.multiEditItems.remove(function(inList) { return inList.id == item.id; })
|
||||
}
|
||||
|
||||
// Update check-all buton state
|
||||
setCheckAllState('#multiedit-checkall', '.queue-table input[name="multiedit"]')
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check all
|
||||
self.checkAllJobs = function(item, event) {
|
||||
// Get which ones we care about
|
||||
var allChecks = $('.queue-table input[name="multiedit"]').filter(':not(:disabled):visible');
|
||||
|
||||
// We need to re-evaltuate the state of this check-all
|
||||
// Otherwise the 'inderterminate' will be overwritten by the click event!
|
||||
setCheckAllState('#multiedit-checkall', '.queue-table input[name="multiedit"]')
|
||||
|
||||
// Now we can check what happend
|
||||
// For when some are checked, or all are checked (but not partly)
|
||||
if(event.target.indeterminate || (event.target.checked && !event.target.indeterminate)) {
|
||||
var allActive = allChecks.filter(":checked")
|
||||
// First remove the from the list
|
||||
if(allActive.length == self.multiEditItems().length) {
|
||||
// Just remove all
|
||||
self.multiEditItems.removeAll();
|
||||
// Remove the check
|
||||
allActive.prop('checked', false)
|
||||
} else {
|
||||
// Remove them seperate
|
||||
allActive.each(function() {
|
||||
// Go over them all to know which one to remove
|
||||
var item = ko.dataFor(this)
|
||||
self.multiEditItems.remove(function(inList) { return inList.id == item.id; })
|
||||
// Remove the check of this one
|
||||
this.checked = false;
|
||||
})
|
||||
}
|
||||
} else {
|
||||
// None are checked, so check and add them all
|
||||
allChecks.prop('checked', true)
|
||||
allChecks.each(function() { self.multiEditItems.push(ko.dataFor(this)) })
|
||||
event.target.checked = true
|
||||
|
||||
// Now we fire the update
|
||||
self.doMultiEditUpdate()
|
||||
}
|
||||
// Set state of all the check-all's
|
||||
setCheckAllState('#multiedit-checkall', '.queue-table input[name="multiedit"]')
|
||||
return true;
|
||||
}
|
||||
|
||||
// Do the actual multi-update immediatly
|
||||
self.doMultiEditUpdate = function() {
|
||||
// Anything selected?
|
||||
@@ -400,42 +336,6 @@ function QueueListModel(parent) {
|
||||
|
||||
}
|
||||
|
||||
// Selete all selected
|
||||
self.doMultiDelete = function() {
|
||||
// Anything selected?
|
||||
if(self.multiEditItems().length < 1) return;
|
||||
|
||||
// Need confirm
|
||||
if(!self.parent.confirmDeleteQueue() || confirm(glitterTranslate.removeDown)) {
|
||||
// List all the ID's
|
||||
var strIDs = '';
|
||||
$.each(self.multiEditItems(), function(index) {
|
||||
strIDs = strIDs + this.id + ',';
|
||||
})
|
||||
|
||||
// Show notification
|
||||
showNotification('.main-notification-box-removing-multiple', 0, self.multiEditItems().length)
|
||||
|
||||
// Remove
|
||||
callAPI({
|
||||
mode: 'queue',
|
||||
name: 'delete',
|
||||
del_files: 1,
|
||||
value: strIDs
|
||||
}).then(function(response) {
|
||||
if(response.status) {
|
||||
// Make sure the queue doesnt flicker and then fade-out
|
||||
self.isLoading(true)
|
||||
self.parent.refresh()
|
||||
// Empty it
|
||||
self.multiEditItems.removeAll();
|
||||
// Hide notification
|
||||
hideNotification()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// On change of page we need to check all those that were in the list!
|
||||
self.queueItems.subscribe(function() {
|
||||
// We need to wait until the unit is actually finished rendering
|
||||
@@ -445,7 +345,7 @@ function QueueListModel(parent) {
|
||||
})
|
||||
|
||||
// Update check-all buton state
|
||||
setCheckAllState('#multiedit-checkall', '.queue-table input[name="multiedit"]')
|
||||
setCheckAllState('.queue #multiedit-checkall', '.queue-table input[name="multiedit"]')
|
||||
}, 100)
|
||||
}, null, "arrayChange")
|
||||
}
|
||||
|
||||
@@ -442,7 +442,7 @@ tbody>tr>td:last-child {
|
||||
.container-tabbed #queue-tab,
|
||||
.container-tabbed #queue-tab,
|
||||
.container-tabbed #queue-messages,
|
||||
.container-tabbed .history h2,
|
||||
.container-tabbed .history-header h2,
|
||||
.container-tabbed .queue h2,
|
||||
.history-queue-swicher {
|
||||
display: none;
|
||||
@@ -494,6 +494,10 @@ tbody>tr>td:last-child {
|
||||
background-color: #d9534f !important;
|
||||
}
|
||||
|
||||
.history-queue-swicher .badge-info {
|
||||
background-color: #58A9FA !important;
|
||||
}
|
||||
|
||||
.history-queue-swicher .badge {
|
||||
margin-left: 4px;
|
||||
}
|
||||
@@ -986,8 +990,27 @@ tr.queue-item>td:first-child>a {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.history h2 {
|
||||
.history-header {
|
||||
clear: left;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.history-header a {
|
||||
align-self: center;
|
||||
margin-right: 2px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.container-tabbed .history-header {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.container-tabbed .history-header a {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.history-table {
|
||||
@@ -1085,6 +1108,18 @@ tr.queue-item>td:first-child>a {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#history-options div {
|
||||
display: inline-block;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#history-options input[name="multieditCheckAll"] {
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
#history-options .hover-button span {
|
||||
top: 2px;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright 2009 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2009 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
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
<title>$T('wizard-quickstart')</title>
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/bootstrap/css/bootstrap.min.css?v=$version"/>
|
||||
<link rel="stylesheet" type="text/css" href="static/style.css?v=$version"/>
|
||||
<!--#if $color_scheme not in ('Light', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="../staticcfg/css/night.css?v=$version" media="(prefers-color-scheme: dark)"/>
|
||||
<!--#end if#-->
|
||||
<link rel="shortcut icon" href="../staticcfg/ico/favicon.ico?v=$version" />
|
||||
<script type="text/javascript" src="../staticcfg/js/jquery-3.5.1.min.js?v=$version"></script>
|
||||
<script type="text/javascript" src="../staticcfg/bootstrap/js/bootstrap.min.js?v=$version"></script>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright 2022-2023 The SABnzbd-Team <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,6 +30,8 @@
|
||||
<url type="faq">https://sabnzbd.org/wiki/faq</url>
|
||||
<url type="contact">https://sabnzbd.org/live-chat.html</url>
|
||||
<releases>
|
||||
<release version="4.0.3" date="2023-06-16" type="stable"/>
|
||||
<release version="4.0.2" date="2023-06-09" type="stable"/>
|
||||
<release version="4.0.1" date="2023-05-01" type="stable"/>
|
||||
<release version="4.0.0" date="2023-04-28" type="stable"/>
|
||||
<release version="3.7.2" date="2023-02-05" type="stable"/>
|
||||
@@ -49,7 +51,7 @@
|
||||
<internet>always</internet>
|
||||
</recommends>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
<developer_name>The SABnzbd-team</developer_name>
|
||||
<developer_name>The SABnzbd-Team</developer_name>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://sabnzbd.org/images/landing/screenshots/interface.png</image>
|
||||
|
||||
BIN
osx/7zip/7zz
BIN
osx/7zip/7zz
Binary file not shown.
Binary file not shown.
BIN
osx/unrar/unrar
BIN
osx/unrar/unrar
Binary file not shown.
@@ -1,7 +1,6 @@
|
||||
#
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# ION, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -625,10 +624,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr ""
|
||||
@@ -2874,6 +2869,10 @@ msgstr ""
|
||||
msgid "Location of log files for SABnzbd.<br /><i>Requires SABnzbd restart!</i>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ""
|
||||
@@ -3018,14 +3017,6 @@ msgstr ""
|
||||
msgid "When the user script returns a non-zero exit code, the job will be flagged as failed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr ""
|
||||
@@ -3261,26 +3252,6 @@ msgstr ""
|
||||
msgid "When during download it becomes clear that too much data is missing, abort the job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr ""
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Pavel C <quoing_transifex@mess.cz>, 2021
|
||||
@@ -675,11 +674,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr ""
|
||||
"Upozornění: LOCALHOST je nejednoznačný, použijte numerickou IP adresu."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Adresa serveru \"%s:%s\" není správná."
|
||||
@@ -3011,6 +3005,10 @@ msgid ""
|
||||
"Location of log files for SABnzbd.<br /><i>Requires SABnzbd restart!</i>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ""
|
||||
@@ -3172,14 +3170,6 @@ msgid ""
|
||||
"as failed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr ""
|
||||
@@ -3430,26 +3420,6 @@ msgid ""
|
||||
"the job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Výběr IP adresy serveru"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "Náhodně vybraná IP adresa"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Nejrychlejší IP adresa, preferuj IPv6"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr ""
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -683,10 +682,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Advarsel: Localhost er tvetydig, bruge numerisk IP-adresse."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Serveradressen \"%s:%s\" er ikke gyldigt."
|
||||
@@ -3075,6 +3070,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Placering af logfiler for SABnzbd.<br /><i>Kræver genstart af SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ".nzb Backup mappe"
|
||||
@@ -3247,14 +3246,6 @@ msgstr ""
|
||||
"Når bruger scriptet returnerer et non-zero exit code, vil jobbet blive "
|
||||
"markeret som mislykkedes."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Ved fejl, prøv alternativ NZB"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "Nogle servere levere en alternativ NZB når et download mislykkes."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Aktiver mappe omdøbning"
|
||||
@@ -3518,26 +3509,6 @@ msgstr ""
|
||||
"Når under download det bliver klart, at for meget data mangler, afbryd "
|
||||
"jobbet"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Nyttigt, hvis en newsserver har mere end én IPv4/IPv6-adresse"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# C E <githubce@eiselt.ch>, 2020
|
||||
@@ -722,11 +721,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr "Invalides Backup Archiv"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr ""
|
||||
"Warnung: localhost ist mehrdeutig. Verwenden Sie eine numerische IP-Adresse."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Server-Adresse \"%s:%s\" ist ungültig."
|
||||
@@ -3191,6 +3185,10 @@ msgstr ""
|
||||
"Hier werden Protokoll-Dateien von SABnzbd abgelegt.<br /><i>Benötigt einen "
|
||||
"Neustart von SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "NZB-Backup-Ordner"
|
||||
@@ -3372,16 +3370,6 @@ msgstr ""
|
||||
"Wenn das Benutzerskript einen Exit-Code ausgibt, der nicht \"0\" ist, wird "
|
||||
"der Auftrag als fehlgeschlagen markiert."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Nach einem Fehler ein alternatives NZB laden"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Manche Server stellen ein alternatives NZB zur Verfügung, falls ein Download"
|
||||
" fehlschlägt."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Ordner-Umbenennung aktivieren"
|
||||
@@ -3665,26 +3653,6 @@ msgstr ""
|
||||
"Job abbrechen falls während des Downloads klar wird, dass zuviele Daten "
|
||||
"fehlen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Auswahl der Server-IP-Adresse"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "Erste IP-Adresse"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "Zufällig ausgewählte IP-Adresse"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Schnellste IP-Adresse, IPv6 bevorzugt"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Nützlich, wenn ein Newsserver mehr als eine IPv4/IPv6-Adresse hat"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Ester Molla Aragones <moarages@gmail.com>, 2020
|
||||
@@ -705,10 +704,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Alerta: LOCALHOST es ambiguo, use dirección de IP numérica"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "La dirección del servidor «%s:%s» no es válida."
|
||||
@@ -3156,6 +3151,10 @@ msgstr ""
|
||||
"Ubicación de los ficheros de log para SABnzbd.<br /><i>Requiere reiniciar "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Directorio de Backups de .nzbs"
|
||||
@@ -3331,15 +3330,6 @@ msgstr ""
|
||||
"Cuando la secuencia de comandos de usuario devuelve un código de salida "
|
||||
"distinto de cero, el trabajo se marca como fallido ."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "En caso de fallo, intentar con un NZB alternativo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Algunos servidores ofrecen una NZB alternativa cuando falla una descarga ."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Habilitar renombrado de directorios"
|
||||
@@ -3614,27 +3604,6 @@ msgstr ""
|
||||
"Cuando este bajando, si es claro que mucha data esta faltando, aborte el "
|
||||
"trabajo."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Selección de la dirección IP del servidor"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "Primera dirección IP"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "Dirección IP seleccionada aleatoriamente"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Dirección IP más rápida, con preferencia IPv6"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr ""
|
||||
"Útil si un servidor de noticias tiene más de una dirección IPv4 / IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -680,10 +679,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Varoitus: LOCALHOST on hämärä, käytä numeerista IP-osoitetta."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Palvelimen osoite \"%s:%s\" ei ole kelvollinen."
|
||||
@@ -3081,6 +3076,10 @@ msgstr ""
|
||||
"Sijainti jonne SABnzbd ohjelman lokitiedostot tallennetaan.<br /><i>Vaatii "
|
||||
"SABnzbd uudelleenkäynnistyksen!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ".nzb varmuuskopiokansio"
|
||||
@@ -3248,15 +3247,6 @@ msgstr ""
|
||||
"Kun käyttäjän skripti palauttaa nollasta poikkeavan koodin, lataus merkitään"
|
||||
" epäonnistuneeksi."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Epäonnistuessa, kokeile vaihtoehtoista NZB:tä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Jotkin palvelimet tarjoavat vaihtoehtoisen NZB:n kun lataus epäonnistuu."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Kansion uudelleennimeäminen käytössä"
|
||||
@@ -3520,27 +3510,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"Peruutetaan lataus, jos ladattaessa huomataan liikaa tiedostoja puuttuvan"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr ""
|
||||
"Hyödyllinen jos uutispalvelimella on enemmän kuin yksi IPv4/IPv6 osoite"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -722,11 +721,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr "Archives de sauvegarde non valides"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr ""
|
||||
"Avertissement: LOCALHOST est ambigü, utilisez une adresse IP numérique."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "L' adresse du serveur \"%s:%s\" n'est pas valide."
|
||||
@@ -3191,6 +3185,10 @@ msgstr ""
|
||||
"Emplacement des fichiers journaux de SABnzbd.<br /><i>Redémarrage requis "
|
||||
"!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr "Purger les logs"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Dossier de sauvegarde des fichiers .nzb"
|
||||
@@ -3371,16 +3369,6 @@ msgstr ""
|
||||
"Lorsque le script de l'utilisateur renvoie un code de sortie \"non-zéro\", "
|
||||
"la tâche sera signalée comme échouée."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "En cas d'échec, essayer avec un NZB alternatif"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Certains serveurs proposent un NZB alternatif lorsqu'un téléchargement "
|
||||
"échoue."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Activer le renommage du dossier"
|
||||
@@ -3662,26 +3650,6 @@ msgstr ""
|
||||
"S'il apparait clairement pendant le téléchargement qu'il manque trop de "
|
||||
"données, annuler la tâche"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Sélection de l'adresse IP du serveur"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "Première adresse IP"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "Adresse IP sélectionnée au hasard"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Adresse IP la plus rapide, IPv6 de préférence"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Utile si un serveur de news a plus d'une adresse IPv4/IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# ION, 2022
|
||||
@@ -680,10 +679,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr "ארכיון בלתי תקף של גיבוי"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "אזהרה: LOCALHOST הוא דו־משמעי, השתמש בכתובת IP מספרית."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "כתובת השרת \"%s:%s\" אינה תקפה."
|
||||
@@ -3086,6 +3081,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"מיקום של קבצי יומן עבור SABnzbd.<br /><i>דורש הפעלה מחדש של SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "תיקיית גיבוי .nzb"
|
||||
@@ -3254,14 +3253,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"כאשר תסריט המשתמש מחזיר קוד יציאה בלתי אפסי, העבודה תסומן בדגל כנכשלה."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "בכישלון, נסה NZB חלופי"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "מספר שרתים מספקים קובץ NZB חלופי כאשר הורדה נכשלת."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "אפשר שינוי שם תיקייה"
|
||||
@@ -3522,26 +3513,6 @@ msgid ""
|
||||
"the job"
|
||||
msgstr "כאשר במהלך הורדה מתבהר שיותר מדי נתונים חסרים, בטל את העבודה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "בחירת כתובת IP של שרת"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "כתובת IP ראשונה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "כתובת IP שנבחרה באופן אקראי"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "כתובת IP הזריזה ביותר, העדפה אל IPv6"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "שימושי אם לשרת חדשות יש יותר מכתובת IPv4/IPv6 אחת"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -675,10 +674,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Advarsel: LOCALHOST er tvetydig, bruk numerisk IP-adresse."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Serveradressen \"%s:%s\" er ikke gyldig."
|
||||
@@ -3063,6 +3058,10 @@ msgstr ""
|
||||
"Plass for lagrede loggfiler fran SABnzbd.<br /><i>Krever omstart av "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ".nzb Reservemappe"
|
||||
@@ -3229,14 +3228,6 @@ msgstr ""
|
||||
"Når brukerskriptet returnerer en ikke-null exit kode, vil jobben bli flagget"
|
||||
" som mislykket."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Når den feiler, prøv alternativ NZB-fil"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "Noen servere vil gi en alternativ NZB når en nedlasting mislykkes."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Aktiver omdøping av mappe"
|
||||
@@ -3496,26 +3487,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"Avbryt jobben om det blir klart under nedlasting at for mye data mangler"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Nyttig hvis en newsserver har mer enn en IPv4/IPv6-adresse"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Rik Brouwer, 2022
|
||||
@@ -711,10 +710,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr "Ongeldig backup bestand"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Let op: LOCALHOST is niet eenduidig, gebruik een numeriek IP-adres."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Serveradres \"%s:%s\" is niet geldig."
|
||||
@@ -3148,6 +3143,10 @@ msgstr ""
|
||||
"Map waarin de log bestanden worden opgeslagen<br /><i>Vereist een "
|
||||
"herstart</i>."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Map voor het bewaren van NZB-bestanden"
|
||||
@@ -3328,15 +3327,6 @@ msgstr ""
|
||||
"Wanneer het script een exit code anders dan 0 geeft, zal de download worden "
|
||||
"afgekeurd."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Bij mislukte download: probeer alternatieve NZB"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Sommige indexers hebben een alternatieve NZB wanneer een download mislukt"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Gebruik tijdelijke mapnamen"
|
||||
@@ -3613,26 +3603,6 @@ msgstr ""
|
||||
"Als tijdens het downloaden duidelijk wordt dat te veel data ontbreekt, breek"
|
||||
" dan de download af"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr "Server IP adres selectie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr "Eerste IP adres"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr "willekeurig geselecteerd IP adres"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr "Snelste IP adres, voorkeur voor IPv6"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Nuttig wanneer een server meer dan één IPv4 of IPv6-adres heeft"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -675,10 +674,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Uwaga: LOCALHOST jest niejednoznaczne, użyj adresu IP."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Nieprawidłowy adres serwera \"%s:%s\"."
|
||||
@@ -3071,6 +3066,10 @@ msgid ""
|
||||
"Location of log files for SABnzbd.<br /><i>Requires SABnzbd restart!</i>"
|
||||
msgstr "Lokalizacja logów SABnzbd.<br /><i>Wymaga restartu SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Katalog kopii zapasowych .nzb"
|
||||
@@ -3237,16 +3236,6 @@ msgstr ""
|
||||
"Jeśli skrypt użytkownika zwróci niezerowy kod zakończenia, zadanie zostanie "
|
||||
"oznaczone jako nieudane"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Użyj alternatywnego NZB w razie niepowodzenia"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Niektóre serwery udostępniają alternatywne NZB, kiedy pobieranie kończy się "
|
||||
"niepowodzeniem"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Włącz zmianę nazw katalogów"
|
||||
@@ -3507,26 +3496,6 @@ msgstr ""
|
||||
"Jeśli podczas pobierania okaże się, że brakuje zbyt dużej ilości danych, "
|
||||
"przerwij zadanie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Przydatne, gdy serwer ma więcej niż jeden adres IPv4/IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -679,10 +678,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Atenção: LOCALHOST é ambíguo, use endereço IP numérico."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Endereço de servidor \"%s:%s\" não é válido."
|
||||
@@ -3074,6 +3069,10 @@ msgstr ""
|
||||
"Local dos arquivos de log do SABnzbd.<br /><i>Será necessário reiniciar o "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Pasta de Backup de .nzb"
|
||||
@@ -3239,15 +3238,6 @@ msgstr ""
|
||||
"Quando um script do usuário retornar um código de saída diferente de zero, o"
|
||||
" trabalho será marcado como falho"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "Em caso de falha, tente um NZB alternativo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Alguns servidores fornecem um NZB alternativo quando um download falha."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Habilitar renomeação de pasta"
|
||||
@@ -3509,26 +3499,6 @@ msgstr ""
|
||||
"Quando durante o download ficar claro que muitos dados estão faltando, "
|
||||
"cancela a tarefa"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Útil se um newsserver tem mais de um endereço IPv4/IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Eduard Baniceru <war4peace@gmail.com>, 2021
|
||||
@@ -694,10 +693,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Atenţie:LOCALHOST este ambiguu, folosiţi o adresă IP numerică"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Adresa server \"%s:%s\" nu este validă"
|
||||
@@ -3099,6 +3094,10 @@ msgstr ""
|
||||
"Locaţie a fişierelor jurnal ale SABnzbd.<br /><i>Necesită repornire "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Dosar Copie de Siguranţă .nzb"
|
||||
@@ -3266,14 +3265,6 @@ msgstr ""
|
||||
"Când un script de utilizator returnează o ieșire diferit de codul de ieșire,"
|
||||
" sarcina v fi marcată ca fiind nereușită."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "La eroare, încearcă NZB alternativ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "Unele server oferă o alternativă dacă un NZB eșuează."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Activează redenumire dosar"
|
||||
@@ -3537,26 +3528,6 @@ msgstr ""
|
||||
"Atunci când e clar că o sarcină va eșua din cauza lipsei de date pe "
|
||||
"server(e), anulează sarcina"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Util dacă un server de știri are mai mult decât o adresă IPv4/IPv6"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -675,12 +674,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr ""
|
||||
"Внимание! Имя LOCALHOST является неоднозначным. Используйте числовой IP-"
|
||||
"адрес."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Адрес сервера «%s:%s» является недопустимым."
|
||||
@@ -3070,6 +3063,10 @@ msgstr ""
|
||||
"Место для хранения файлов журнала SABnzbd.<br /><i>Требуется перезапуск "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Папка для хранения копий NZB"
|
||||
@@ -3233,14 +3230,6 @@ msgid ""
|
||||
"as failed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Переименовывать папки"
|
||||
@@ -3500,26 +3489,6 @@ msgid ""
|
||||
"the job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr ""
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -672,10 +671,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Пажња: LOCALHOST је двосмислен, користите ИП адресе."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Adresa servera \"%s:%s\" je neispravna"
|
||||
@@ -3055,6 +3050,10 @@ msgstr ""
|
||||
"Смештај извештаја SABnzbd-а.<br /><i>Потребно је поновно покретање "
|
||||
"SABnzbd-а!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr "Фасцикла копије .нзб"
|
||||
@@ -3220,14 +3219,6 @@ msgstr ""
|
||||
"Kada korisnička skripta vrati kod koji nije nula, posao će biti označen kao "
|
||||
"neuspešan"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "U slučaju neuspeha, pokušaj sa alternativnim NZB-om"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "Neki serveri nude alternativni NZB pri neuspešnom preuzimanju"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Упали преименовање фасцикле"
|
||||
@@ -3485,26 +3476,6 @@ msgstr ""
|
||||
"Када током преузимања постаје јасно да превише података недостаје, прекинути"
|
||||
" посао"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Korisno ukoliko news server ima više od jedne IPv4/IPv6 adrese"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -674,10 +673,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "Varning: LOCALHOST är tvetydigt, använda numerisk IP-adress ."
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "Serveradressen \"%s:%s\" är ej giltig."
|
||||
@@ -3065,6 +3060,10 @@ msgstr ""
|
||||
"Plats för sparade loggfiler från SABnzbd.<br /><i>Kräver omstart av "
|
||||
"SABnzbd!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ".nzb Reservmapp"
|
||||
@@ -3230,15 +3229,6 @@ msgstr ""
|
||||
"När ett användarskript returnerar ett icke-nollutgångsvärde, så kommer "
|
||||
"jobbet att flaggas som misslyckat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "När misslyckat, prova en alternativ NZB"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
"Vissa servrar kan förse en alternativ NZB när en nerladdning misslyckas"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Döp om mappar"
|
||||
@@ -3498,26 +3488,6 @@ msgid ""
|
||||
msgstr ""
|
||||
"Under nerladdning och det märks att för mycket data saknas, avbryt jobbet"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "Användbar om en newsserver har fler val än en IPv4/IPv6adress"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file MAIN
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2023
|
||||
@@ -667,10 +666,6 @@ msgstr ""
|
||||
msgid "Invalid backup archive"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Warning: LOCALHOST is ambiguous, use numerical IP-address."
|
||||
msgstr "警告: LOCALHOST 太含糊,请使用数字 IP 地址。"
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
msgid "Server address \"%s:%s\" is not valid."
|
||||
msgstr "服务器地址 \"%s:%s\" 无效。"
|
||||
@@ -3020,6 +3015,10 @@ msgid ""
|
||||
"Location of log files for SABnzbd.<br /><i>Requires SABnzbd restart!</i>"
|
||||
msgstr "SABnzbd 日志文件的位置。<br /><i>需要重启 SABnzbd 才能生效!</i>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge Logs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ".nzb Backup Folder"
|
||||
msgstr ".nzb 备份文件夹"
|
||||
@@ -3181,14 +3180,6 @@ msgid ""
|
||||
"as failed."
|
||||
msgstr "用户脚本返回非零的退出代码时,对应的任务将被标记为失败。"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "On failure, try alternative NZB"
|
||||
msgstr "失败时,尝试备用 NZB"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "部分服务器在下载失败时可提供备用 NZB 文件。"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "启用文件夹重命名"
|
||||
@@ -3439,26 +3430,6 @@ msgid ""
|
||||
"the job"
|
||||
msgstr "下载时若发现缺失数据过多,则中止对应任务"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Server IP address selection"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "First IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Randomly selected IP address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Quickest IP address, preferring IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Useful if a newsserver has more than one IPv4/IPv6 address"
|
||||
msgstr "如果新闻服务器有多个 IPv4/IPv6 地址将非常有用"
|
||||
|
||||
#. Caption - Button: Add server
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Add Server"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Pavel C <quoing_transifex@mess.cz>, 2022
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2021
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# SABnzbd Translation Template file NSIS
|
||||
# Copyright 2007-2023 The SABnzbd-Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
# Translators:
|
||||
# Safihre <safihre@sabnzbd.org>, 2020
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Main requirements
|
||||
# Note that not all sub-dependencies are listed, but only ones we know could cause trouble
|
||||
sabctools==7.0.2
|
||||
sabctools==7.1.0
|
||||
cheetah3==3.2.6.post1
|
||||
cffi==1.15.1
|
||||
pycparser==2.21
|
||||
@@ -9,19 +9,19 @@ configobj==5.0.8
|
||||
cheroot==10.0.0
|
||||
six==1.16.0
|
||||
cherrypy==18.8.0
|
||||
jaraco.functools==3.6.0
|
||||
jaraco.collections==4.1.0
|
||||
jaraco.functools==3.8.1
|
||||
jaraco.collections==4.3.0
|
||||
jaraco.text==3.8.1 # Newer version introduces irrelevant extra dependencies
|
||||
jaraco.classes==3.2.3
|
||||
jaraco.classes==3.3.0
|
||||
jaraco.context==4.3.0
|
||||
more-itertools==9.1.0
|
||||
more-itertools==10.1.0
|
||||
zc.lockfile==3.0.post1
|
||||
python-dateutil==2.8.2
|
||||
tempora==5.2.2
|
||||
tempora==5.5.0
|
||||
pytz==2023.3
|
||||
sgmllib3k==1.0.0
|
||||
portend==3.1.0
|
||||
chardet==5.1.0
|
||||
portend==3.2.0
|
||||
chardet==5.2.0
|
||||
PySocks==1.7.1
|
||||
puremagic==1.15
|
||||
guessit==3.7.1
|
||||
@@ -30,17 +30,17 @@ 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==40.0.2
|
||||
cryptography==41.0.3
|
||||
|
||||
# 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.7.0
|
||||
ujson==5.8.0
|
||||
|
||||
# Windows system integration
|
||||
pywin32==306; sys_platform == 'win32'
|
||||
|
||||
# macOS system calls
|
||||
pyobjc==9.1.1; sys_platform == 'darwin'
|
||||
pyobjc==9.2; sys_platform == 'darwin'
|
||||
|
||||
# Linux notifications
|
||||
notify2==0.3.1; sys_platform != 'win32' and sys_platform != 'darwin'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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
|
||||
@@ -48,12 +48,8 @@ elif os.name == "posix":
|
||||
ORG_UMASK = os.umask(18)
|
||||
os.umask(ORG_UMASK)
|
||||
|
||||
# Check if running in a Docker container
|
||||
try:
|
||||
with open("/proc/1/cgroup", "rt") as ifh:
|
||||
DOCKER = ":/docker/" in ifh.read()
|
||||
except:
|
||||
pass
|
||||
# Check if running in a Docker container. Note: fake-able, but good enough for normal setups
|
||||
DOCKER = os.path.exists("/.dockerenv")
|
||||
|
||||
# See if we have the GNU glibc malloc_trim() memory release function
|
||||
try:
|
||||
@@ -156,7 +152,6 @@ LOGFILE = None
|
||||
WEBLOGFILE = None
|
||||
GUIHANDLER = None
|
||||
LOG_ALL = False
|
||||
AMBI_LOCALHOST = False
|
||||
WIN_SERVICE = None # Instance of our Win32 Service Class
|
||||
BROWSER_URL = None
|
||||
|
||||
@@ -173,7 +168,6 @@ PAUSED_ALL = False
|
||||
TRIGGER_RESTART = False # To trigger restart for Scheduler, WinService and Mac
|
||||
WINTRAY = None # Thread for the Windows SysTray icon
|
||||
WEBUI_READY = False
|
||||
EXTERNAL_IPV6 = False
|
||||
LAST_HISTORY_UPDATE = 1
|
||||
RESTORE_DATA = None
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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
|
||||
@@ -68,7 +68,7 @@ from sabnzbd.misc import (
|
||||
opts_to_pp,
|
||||
format_time_left,
|
||||
)
|
||||
from sabnzbd.filesystem import diskspace, get_ext, clip_path, remove_all, list_scripts
|
||||
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 localipv4, publicipv4, ipv6, dnslookup, active_socks5_proxy
|
||||
@@ -533,7 +533,7 @@ def _api_history(name, kwargs):
|
||||
to_units(week),
|
||||
to_units(day),
|
||||
)
|
||||
history["slots"], history["noofslots"] = build_history(
|
||||
history["slots"], history["ppslots"], history["noofslots"] = build_history(
|
||||
start=start, limit=limit, search=search, failed_only=failed_only, categories=categories, nzo_ids=nzo_ids
|
||||
)
|
||||
history["last_history_update"] = sabnzbd.LAST_HISTORY_UPDATE
|
||||
@@ -625,12 +625,10 @@ def _api_warnings(name, kwargs):
|
||||
return report(keyword="warnings", data=sabnzbd.GUIHANDLER.content())
|
||||
|
||||
|
||||
LOG_API_RE = re.compile(rb"(apikey|api)([=:])[\w]+", re.I)
|
||||
LOG_API_JSON_RE = re.compile(rb"'(apikey|api)': '[\w]+'", re.I)
|
||||
LOG_USER_RE = re.compile(rb"(user|username)\s?=\s?[\S]+", re.I)
|
||||
LOG_PASS_RE = re.compile(rb"(password)\s?=\s?[\S]+", re.I)
|
||||
LOG_JSON_RE = re.compile(rb"'(apikey|api|username|password)': '(.*?)'", re.I)
|
||||
LOG_INI_HIDE_RE = re.compile(
|
||||
rb"(email_pwd|email_account|email_to|email_from|pushover_token|pushover_userkey|pushbullet_apikey|prowl_apikey|growl_password|growl_server|IPv[4|6] address)\s?=\s?[\S]+",
|
||||
rb"(apikey|api|user|username|password|email_pwd|email_account|email_to|email_from|pushover_token|pushover_userkey"
|
||||
rb"|pushbullet_apikey|prowl_apikey|growl_password|growl_server|IPv[4|6] address)\s?=.*",
|
||||
re.I,
|
||||
)
|
||||
LOG_HASH_RE = re.compile(rb"([a-zA-Z\d]{25})", re.I)
|
||||
@@ -649,17 +647,13 @@ def _api_showlog(name, kwargs):
|
||||
log_data += f.read()
|
||||
|
||||
# We need to remove all passwords/usernames/api-keys
|
||||
log_data = LOG_API_RE.sub(b"apikey=<APIKEY>", log_data)
|
||||
log_data = LOG_API_JSON_RE.sub(b"'apikey':<APIKEY>'", log_data)
|
||||
log_data = LOG_USER_RE.sub(b"\\g<1>=<USER>", log_data)
|
||||
log_data = LOG_PASS_RE.sub(b"password=<PASSWORD>", log_data)
|
||||
log_data = LOG_JSON_RE.sub(b"'REMOVED': '<REMOVED>'", log_data)
|
||||
log_data = LOG_INI_HIDE_RE.sub(b"\\1 = <REMOVED>", log_data)
|
||||
log_data = LOG_HASH_RE.sub(b"<HASH>", log_data)
|
||||
|
||||
# Try to replace the username
|
||||
try:
|
||||
cur_user = getpass.getuser()
|
||||
if cur_user:
|
||||
if cur_user := getpass.getuser():
|
||||
log_data = log_data.replace(utob(cur_user), b"<USERNAME>")
|
||||
except:
|
||||
pass
|
||||
@@ -913,6 +907,11 @@ def _api_config_create_backup(kwargs):
|
||||
return report(data={"result": bool(backup_file), "message": backup_file})
|
||||
|
||||
|
||||
def _api_config_purge_log_files(kwargs):
|
||||
purge_log_files()
|
||||
return report()
|
||||
|
||||
|
||||
def _api_config_undefined(kwargs):
|
||||
return report(_MSG_NOT_IMPLEMENTED)
|
||||
|
||||
@@ -1027,6 +1026,7 @@ _api_config_table = {
|
||||
"regenerate_certs": (_api_config_regenerate_certs, 3),
|
||||
"test_server": (_api_config_test_server, 3),
|
||||
"create_backup": (_api_config_create_backup, 3),
|
||||
"purge_log_files": (_api_config_purge_log_files, 3),
|
||||
}
|
||||
|
||||
|
||||
@@ -1627,7 +1627,7 @@ def build_history(
|
||||
failed_only: int = 0,
|
||||
categories: Optional[List[str]] = None,
|
||||
nzo_ids: Optional[List[str]] = None,
|
||||
) -> Tuple[Dict[str, Any], int]:
|
||||
) -> Tuple[Dict[str, Any], int, int]:
|
||||
"""Combine the jobs still in post-processing and the database history"""
|
||||
if not limit:
|
||||
limit = 1000000
|
||||
@@ -1717,11 +1717,11 @@ def build_history(
|
||||
if close_db:
|
||||
history_db.close()
|
||||
|
||||
return items, total_items
|
||||
return items, postproc_queue_size, total_items
|
||||
|
||||
|
||||
def get_active_history(queue, items):
|
||||
"""Get the currently in progress and active history queue."""
|
||||
"""Get the jobs currently in progress and active history queue."""
|
||||
for nzo in queue:
|
||||
item = {}
|
||||
(
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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
|
||||
@@ -27,6 +27,7 @@ from threading import Thread
|
||||
import ctypes
|
||||
from typing import Tuple, Optional, List
|
||||
|
||||
import sabctools
|
||||
import sabnzbd
|
||||
from sabnzbd.misc import get_all_passwords, match_str
|
||||
from sabnzbd.filesystem import (
|
||||
@@ -160,13 +161,21 @@ class Assembler(Thread):
|
||||
|
||||
@staticmethod
|
||||
def assemble(nzo: NzbObject, nzf: NzbFile, file_done: bool):
|
||||
"""Assemble a NZF from its table of articles
|
||||
1) Partial write: write what we have
|
||||
2) Nothing written before: write all
|
||||
"""
|
||||
"""Assemble a NZF from its table of articles"""
|
||||
|
||||
# When a file exists, we cannot use "w+b"
|
||||
if os.path.exists(nzf.filepath):
|
||||
open_mode = "r+b"
|
||||
file_sparse = True
|
||||
else:
|
||||
open_mode = "w+b"
|
||||
file_sparse = False
|
||||
|
||||
# We write large article-sized chunks, so we can safely skip the buffering of Python
|
||||
with open(nzf.filepath, "ab", buffering=0) as fout:
|
||||
with open(nzf.filepath, open_mode, buffering=0) as fout:
|
||||
# Track position, so we can prevent a seek if writing continuous
|
||||
file_position = 0
|
||||
|
||||
for article in nzf.decodetable:
|
||||
# Break if deleted during writing
|
||||
if nzo.status is Status.DELETED:
|
||||
@@ -178,10 +187,32 @@ class Assembler(Thread):
|
||||
|
||||
# Write all decoded articles
|
||||
if article.decoded:
|
||||
# On first write try to make the file sparse
|
||||
if not file_sparse and article.file_size is not None and article.file_size > 0:
|
||||
file_sparse = True
|
||||
try:
|
||||
sabctools.sparse(fout, article.file_size)
|
||||
except:
|
||||
logging.debug("Failed to make %s sparse with length %d", nzf.filepath, article.file_size)
|
||||
logging.debug("Traceback: ", exc_info=True)
|
||||
|
||||
data = sabnzbd.ArticleCache.load_article(article)
|
||||
# Could be empty in case nzo was deleted
|
||||
if data:
|
||||
fout.write(data)
|
||||
if article.data_begin is not None:
|
||||
# Seek ahead if needed
|
||||
if article.data_begin != file_position:
|
||||
fout.seek(article.data_begin)
|
||||
file_position = article.data_begin + len(data)
|
||||
else:
|
||||
fout.seek(0, os.SEEK_END)
|
||||
|
||||
# In raw/non-buffered mode fout.write may not write everything requested:
|
||||
# https://docs.python.org/3/library/io.html?highlight=write#io.RawIOBase.write
|
||||
written = 0
|
||||
while written < len(data):
|
||||
written += fout.write(data[written:])
|
||||
|
||||
nzf.update_crc32(article.crc32, len(data))
|
||||
article.on_disk = True
|
||||
else:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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
|
||||
@@ -516,11 +516,9 @@ class BPSMeter:
|
||||
# Pattern = <day#> <hh:mm>
|
||||
# The <day> and <hh:mm> part can both be optional
|
||||
txt = cfg.quota_day().lower()
|
||||
m = RE_DAY.search(txt)
|
||||
if m:
|
||||
if m := RE_DAY.search(txt):
|
||||
self.q_day = int(m.group(1))
|
||||
m = RE_HHMM.search(txt)
|
||||
if m:
|
||||
if m := RE_HHMM.search(txt):
|
||||
self.q_hour = int(m.group(1))
|
||||
self.q_minute = int(m.group(2))
|
||||
if self.q_period == "w":
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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
|
||||
@@ -332,7 +332,6 @@ log_dir = OptionDir("misc", "log_dir", "logs", validation=validate_notempty)
|
||||
# Config - Switches
|
||||
##############################################################################
|
||||
max_art_tries = OptionNumber("misc", "max_art_tries", 3, minval=2)
|
||||
load_balancing = OptionNumber("misc", "load_balancing", 2)
|
||||
top_only = OptionBool("misc", "top_only", False)
|
||||
sfv_check = OptionBool("misc", "sfv_check", True)
|
||||
script_can_fail = OptionBool("misc", "script_can_fail", False)
|
||||
@@ -431,6 +430,7 @@ no_penalties = OptionBool("misc", "no_penalties", False)
|
||||
x_frame_options = OptionBool("misc", "x_frame_options", True)
|
||||
allow_old_ssl_tls = OptionBool("misc", "allow_old_ssl_tls", False)
|
||||
enable_season_sorting = OptionBool("misc", "enable_season_sorting", True)
|
||||
verify_xff_header = OptionBool("misc", "verify_xff_header", False)
|
||||
|
||||
# Text values
|
||||
rss_odd_titles = OptionList("misc", "rss_odd_titles", ["nzbindex.nl/", "nzbindex.com/", "nzbclub.com/"])
|
||||
@@ -445,7 +445,7 @@ history_limit = OptionNumber("misc", "history_limit", 10, minval=0)
|
||||
wait_ext_drive = OptionNumber("misc", "wait_ext_drive", 5, minval=1, maxval=60)
|
||||
max_foldername_length = OptionNumber("misc", "max_foldername_length", DEF_FOLDER_MAX, minval=20, maxval=65000)
|
||||
marker_file = OptionStr("misc", "nomedia_marker")
|
||||
ipv6_servers = OptionNumber("misc", "ipv6_servers", 1, minval=0, maxval=2)
|
||||
ipv6_servers = OptionBool("misc", "ipv6_servers", True)
|
||||
url_base = OptionStr("misc", "url_base", "/sabnzbd", validation=validate_strip_right_slash)
|
||||
host_whitelist = OptionList("misc", "host_whitelist", validation=all_lowercase)
|
||||
local_ranges = OptionList("misc", "local_ranges", protect=True)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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 = "7.0.2"
|
||||
SABCTOOLS_VERSION_REQUIRED = "7.1.0"
|
||||
|
||||
DB_HISTORY_VERSION = 1
|
||||
DB_HISTORY_NAME = "history%s.db" % DB_HISTORY_VERSION
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3 -OO
|
||||
# Copyright 2007-2023 The SABnzbd-Team <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
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user