mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-01-05 14:09:22 -05:00
Compare commits
316 Commits
2.2.0Alpha
...
2.2.x
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcc4dd75cf | ||
|
|
97711ca82e | ||
|
|
e782237f27 | ||
|
|
52bb156c08 | ||
|
|
4361d82ddd | ||
|
|
017cf8f285 | ||
|
|
03cdf6ed5d | ||
|
|
cf347a8e90 | ||
|
|
f06afe43e1 | ||
|
|
fb301eb5c8 | ||
|
|
1562c3560b | ||
|
|
9813bc237f | ||
|
|
b39fe059c6 | ||
|
|
a56c770a8b | ||
|
|
e3bf0edad8 | ||
|
|
e35d9e4db3 | ||
|
|
c617d4321a | ||
|
|
0fd3a2881f | ||
|
|
0c1f7633de | ||
|
|
b7d5d49c84 | ||
|
|
9911b93ece | ||
|
|
eeaad00968 | ||
|
|
e1bb8459e3 | ||
|
|
65c3ac0cc0 | ||
|
|
413c02a80f | ||
|
|
80f118f304 | ||
|
|
5c0a10e16b | ||
|
|
d9b32261e7 | ||
|
|
8d8ce52193 | ||
|
|
1cc2e25cda | ||
|
|
0dc2c6687d | ||
|
|
b061e582b6 | ||
|
|
690731fd79 | ||
|
|
068b7ed7f5 | ||
|
|
aae2fdcd32 | ||
|
|
d3628a1eb7 | ||
|
|
9cc8176d87 | ||
|
|
27f83f21be | ||
|
|
5e31a31a21 | ||
|
|
a077012478 | ||
|
|
fed0e0f765 | ||
|
|
fbdbf7ab22 | ||
|
|
f013d38d00 | ||
|
|
93b9c8a6da | ||
|
|
e3a779bbc6 | ||
|
|
adfce8c8b6 | ||
|
|
a49d68c0db | ||
|
|
e4156e76d1 | ||
|
|
35b66eea0e | ||
|
|
4d0cf8d45f | ||
|
|
ad9fef5f41 | ||
|
|
6235174995 | ||
|
|
4b9ca989c4 | ||
|
|
4d54aecceb | ||
|
|
11eeb6f2e9 | ||
|
|
00364b1317 | ||
|
|
6666663f78 | ||
|
|
3d6dfec47a | ||
|
|
0f3d44aa4b | ||
|
|
d2d2471950 | ||
|
|
b71343e8ab | ||
|
|
489f3f4ba0 | ||
|
|
3765e8c350 | ||
|
|
28d4f527b8 | ||
|
|
1d8af8f97d | ||
|
|
829ef4bee8 | ||
|
|
7e40c12e47 | ||
|
|
37d8d659f5 | ||
|
|
0a29291be2 | ||
|
|
7f3a5f309b | ||
|
|
60ec5f9191 | ||
|
|
d03e801e74 | ||
|
|
56bf484e77 | ||
|
|
66674469d5 | ||
|
|
09a86683e5 | ||
|
|
fc9a13879e | ||
|
|
73f0885566 | ||
|
|
090b22f193 | ||
|
|
f9c092ae8f | ||
|
|
4246bc2aea | ||
|
|
c4fa047393 | ||
|
|
22e4d24a71 | ||
|
|
96fccff63b | ||
|
|
6b46a15b49 | ||
|
|
98cc0dad55 | ||
|
|
6fdeab6948 | ||
|
|
553dd04cea | ||
|
|
0baa316a72 | ||
|
|
3ac209f9a9 | ||
|
|
ec55f64a8a | ||
|
|
932e1e577b | ||
|
|
56d5b1d9f8 | ||
|
|
28bdebb147 | ||
|
|
827fc7b64e | ||
|
|
f5dde93644 | ||
|
|
60c574828e | ||
|
|
14ca8342f9 | ||
|
|
5d5b1bf053 | ||
|
|
ea4cdba3eb | ||
|
|
d6ecebc75a | ||
|
|
b0af6a1761 | ||
|
|
6e350f30fc | ||
|
|
169137c631 | ||
|
|
6393dc0dca | ||
|
|
1a27b4824b | ||
|
|
2b59a383cf | ||
|
|
efbaaade22 | ||
|
|
cf7e7b1f62 | ||
|
|
2c1746a92d | ||
|
|
a2e57fd3d8 | ||
|
|
932f8d9176 | ||
|
|
5ffd82da89 | ||
|
|
8b3de191d9 | ||
|
|
83d8a23e2c | ||
|
|
58b107a4b5 | ||
|
|
a40609b39d | ||
|
|
0faa5d3dff | ||
|
|
374239777e | ||
|
|
9a7701d7e6 | ||
|
|
01ff04f338 | ||
|
|
eac39767dd | ||
|
|
0d0adf99fa | ||
|
|
16905ce34f | ||
|
|
5287fa8a0c | ||
|
|
b72ab4fb8e | ||
|
|
81054c675c | ||
|
|
7362be8748 | ||
|
|
b4ba2b3463 | ||
|
|
8bed6938c1 | ||
|
|
ecf16f6201 | ||
|
|
bf240357df | ||
|
|
ddcf447957 | ||
|
|
d9642611e2 | ||
|
|
0018c6f263 | ||
|
|
6398bfa12f | ||
|
|
4605c3fd30 | ||
|
|
ed7dc3f827 | ||
|
|
e69eeebdd8 | ||
|
|
5da5f1adc1 | ||
|
|
f47e92dec0 | ||
|
|
a894ca5171 | ||
|
|
5abe1140ae | ||
|
|
d34e14370c | ||
|
|
c4f4a3131c | ||
|
|
dcbd9b57f3 | ||
|
|
aad3b54a17 | ||
|
|
cde142a371 | ||
|
|
8bfc98ffc6 | ||
|
|
e46f21d566 | ||
|
|
0e45fdcdfd | ||
|
|
eec7af16d7 | ||
|
|
6532425902 | ||
|
|
44b896522c | ||
|
|
1b16ee44cb | ||
|
|
d5f608c28c | ||
|
|
555d8418e7 | ||
|
|
8c22e35da4 | ||
|
|
95a7924b31 | ||
|
|
5830bebd95 | ||
|
|
d32cf57c75 | ||
|
|
6d9242ebc5 | ||
|
|
cbc4f6a964 | ||
|
|
2a3b2b9556 | ||
|
|
53a219f12b | ||
|
|
48519dcfa0 | ||
|
|
92542c58fe | ||
|
|
7eafe730f9 | ||
|
|
494e72a996 | ||
|
|
84cc86f1d3 | ||
|
|
64479e2e5d | ||
|
|
13b523d9bd | ||
|
|
181881a21b | ||
|
|
86d11095ac | ||
|
|
927ba3cd9d | ||
|
|
6296fc1762 | ||
|
|
60fbe44724 | ||
|
|
29e45da431 | ||
|
|
d82e69eef4 | ||
|
|
8c7d557252 | ||
|
|
a56d6e5517 | ||
|
|
7548d9e975 | ||
|
|
b7e2bd9684 | ||
|
|
f0a243e3d3 | ||
|
|
6e108c9ef2 | ||
|
|
89edcc1924 | ||
|
|
8a6aca47a1 | ||
|
|
d03e5780b8 | ||
|
|
209d8f9b40 | ||
|
|
c257b1be3d | ||
|
|
2c48c8de2e | ||
|
|
a767ef6aed | ||
|
|
ad61d1dd03 | ||
|
|
33c3d187a0 | ||
|
|
4eb486d4e2 | ||
|
|
bfb6c167a4 | ||
|
|
44abf3bdf6 | ||
|
|
c950572592 | ||
|
|
3999cb13fd | ||
|
|
af65075f0c | ||
|
|
de2a2b465b | ||
|
|
cd7a77f02d | ||
|
|
f4a5394b63 | ||
|
|
3fb6a8dedb | ||
|
|
50c8f84eba | ||
|
|
2c7ecdee92 | ||
|
|
72390a793a | ||
|
|
04ad4e5d3e | ||
|
|
5ef9c6a433 | ||
|
|
e6baffc839 | ||
|
|
e361eb25a5 | ||
|
|
9b420e91c9 | ||
|
|
3a4bf971b2 | ||
|
|
1128691c5d | ||
|
|
15043aef3f | ||
|
|
2a3b4afa03 | ||
|
|
00a98efa81 | ||
|
|
f013dd7f0d | ||
|
|
7b91b1c769 | ||
|
|
5583cce322 | ||
|
|
b995c5f992 | ||
|
|
214ac4a53d | ||
|
|
fc7e87f0df | ||
|
|
c0f2f59fc1 | ||
|
|
b90a847a6f | ||
|
|
a58bb385f5 | ||
|
|
9754baeb1c | ||
|
|
ffcd154966 | ||
|
|
97cfe9488c | ||
|
|
374b6f616a | ||
|
|
e2f51595b6 | ||
|
|
04091a16aa | ||
|
|
9d9d2fd9a2 | ||
|
|
5746115331 | ||
|
|
42f1a4926c | ||
|
|
7d87fd461b | ||
|
|
1ba9976979 | ||
|
|
659c199043 | ||
|
|
81a3f53226 | ||
|
|
1cbff28f67 | ||
|
|
8e15acbf30 | ||
|
|
e07be60db6 | ||
|
|
539c9662ff | ||
|
|
b396014f8d | ||
|
|
1db32415b6 | ||
|
|
b24629db6b | ||
|
|
9b5cdcf8fb | ||
|
|
4831415d14 | ||
|
|
a4c51f0b20 | ||
|
|
ec3ba1fb93 | ||
|
|
61966f7036 | ||
|
|
4f69e81841 | ||
|
|
d0d90581df | ||
|
|
8ea5c27633 | ||
|
|
517500fdf3 | ||
|
|
c4c1c9b6ab | ||
|
|
2388889ede | ||
|
|
55cfe878d7 | ||
|
|
a2daaee468 | ||
|
|
2c360e395e | ||
|
|
399cfee594 | ||
|
|
be646ae6ab | ||
|
|
b470253d9f | ||
|
|
b83c493492 | ||
|
|
991277bb01 | ||
|
|
5626013b81 | ||
|
|
2810d37758 | ||
|
|
c2f08f01e0 | ||
|
|
17ff087e06 | ||
|
|
77de565b7c | ||
|
|
54d238aa4d | ||
|
|
379d09f8cc | ||
|
|
00de72b127 | ||
|
|
f9c84fa7dd | ||
|
|
c8e46691bb | ||
|
|
df1bb636e5 | ||
|
|
ff886fad0d | ||
|
|
6dbee7a413 | ||
|
|
3f8fcd7172 | ||
|
|
d94f7388e6 | ||
|
|
ad8b49fea8 | ||
|
|
ce00270c12 | ||
|
|
8c501f8f58 | ||
|
|
ce313ebc65 | ||
|
|
887ad881a2 | ||
|
|
ce40827552 | ||
|
|
2777d89482 | ||
|
|
727b300a0e | ||
|
|
652b021a8e | ||
|
|
fdf33acfbb | ||
|
|
b001bc9b6f | ||
|
|
8802cb1d8c | ||
|
|
e19a2fbae7 | ||
|
|
53e38f98f9 | ||
|
|
e783e227f6 | ||
|
|
f3dfbe4181 | ||
|
|
bcd8ca8bc4 | ||
|
|
816d6a63cd | ||
|
|
88d3f25700 | ||
|
|
80f69b11db | ||
|
|
81a11f20c8 | ||
|
|
9e2a839953 | ||
|
|
3cefcde270 | ||
|
|
87a1eacfe7 | ||
|
|
7cbc1a8419 | ||
|
|
7b5570eb0b | ||
|
|
1a43a4dcf0 | ||
|
|
2c2a6592c7 | ||
|
|
f31de6ee4e | ||
|
|
8fcd1f6b6c | ||
|
|
d7f3a473d7 | ||
|
|
ab2eb0c94e | ||
|
|
e51f4fc45a | ||
|
|
65278120e2 | ||
|
|
2eed355e9c | ||
|
|
018955f4d5 | ||
|
|
12fd63c1cf |
@@ -24,13 +24,13 @@
|
||||
For these the server blocking method is not very favourable.
|
||||
There is an INI-only option that will limit blocks to 1 minute.
|
||||
no_penalties = 1
|
||||
See: https://sabnzbd.org/wiki/configuration/2.1/special
|
||||
See: https://sabnzbd.org/wiki/configuration/2.2/special
|
||||
|
||||
- Some third-party utilties try to probe SABnzbd API in such a way that you will
|
||||
often see warnings about unauthenticated access.
|
||||
If you are sure these probes are harmless, you can suppress the warnings by
|
||||
setting the option "api_warnings" to 0.
|
||||
See: https://sabnzbd.org/wiki/configuration/2.1/special
|
||||
See: https://sabnzbd.org/wiki/configuration/2.2/special
|
||||
|
||||
- On OSX you may encounter downloaded files with foreign characters.
|
||||
The par2 repair may fail when the files were created on a Windows system.
|
||||
@@ -41,7 +41,7 @@
|
||||
You will see this only when downloaded files contain accented characters.
|
||||
You need to fix it yourself by running the convmv utility (available for most Linux platforms).
|
||||
Possible the file system override setting 'fsys_type' might be solve things:
|
||||
See: https://sabnzbd.org/wiki/configuration/2.1/special
|
||||
See: https://sabnzbd.org/wiki/configuration/2.2/special
|
||||
|
||||
- The "Watched Folder" sometimes fails to delete the NZB files it has
|
||||
processed. This happens when other software still accesses these files.
|
||||
@@ -81,4 +81,4 @@
|
||||
- Squeeze Linux
|
||||
There is a "special" option that will allow you to select an alternative library.
|
||||
use_pickle = 1
|
||||
See: https://sabnzbd.org/wiki/configuration/2.1/special
|
||||
See: https://sabnzbd.org/wiki/configuration/2.2/special
|
||||
|
||||
4
PKG-INFO
4
PKG-INFO
@@ -1,7 +1,7 @@
|
||||
Metadata-Version: 1.0
|
||||
Name: SABnzbd
|
||||
Version: 2.2.0Alpha3
|
||||
Summary: SABnzbd-2.2.0Alpha3
|
||||
Version: 2.2.1
|
||||
Summary: SABnzbd-2.2.1
|
||||
Home-page: https://sabnzbd.org
|
||||
Author: The SABnzbd Team
|
||||
Author-email: team@sabnzbd.org
|
||||
|
||||
89
README.mkd
89
README.mkd
@@ -1,39 +1,69 @@
|
||||
Release Notes - SABnzbd 2.2.0 Alpha 3
|
||||
Release Notes - SABnzbd 2.2.1
|
||||
=========================================================
|
||||
|
||||
## Changes since 2.2.0
|
||||
- Allow up to 5 bad articles for jobs with no or little par2
|
||||
- Only auto-disconnect after first run of verification
|
||||
- Warning is shown when password-file is too large
|
||||
- Failure of recursive unpacking no longer fails whole job
|
||||
- Failure of unpacking of duplicate RAR no longer fails whole job
|
||||
|
||||
## Bugfixes since 2.2.0
|
||||
- Some users were experiencing downloads or pre-check being stuck at 99%
|
||||
- Fixed RarFile error during unpacking
|
||||
- Remove email addresses settings from log export
|
||||
- Block server longer on 'Download limit exceeded' errors
|
||||
- Windows: If repair renamed a job the correct renamed file was deleted
|
||||
- Windows: Unpacking of downloads with many archives could fail
|
||||
- macOS: Adding jobs could fail without any error
|
||||
|
||||
|
||||
Release Notes - SABnzbd 2.2.0
|
||||
=========================================================
|
||||
|
||||
NOTE: Due to changes in this release, the queue will be converted when 2.2.0
|
||||
is started for the first time. Job order, settings and data will be
|
||||
preserved, but all jobs will be unpaused and URL's that did not finish
|
||||
preserved, but all jobs will be unpaused and URLs that did not finish
|
||||
fetching before the upgrade will be lost!
|
||||
|
||||
## Changes since 2.1.0
|
||||
- Direct Unpack: Jobs will start unpacking during the download, reduces
|
||||
post-processing time but requires capable hard drive. Only works for jobs that
|
||||
do not need repair. Will be enabled if your incomplete folder-speed > 60MB/s
|
||||
do not need repair. Will be enabled if your incomplete folder-speed > 40MB/s
|
||||
- Reduced memory usage, especially with larger queues
|
||||
- Removed 5 second delay between fetching URLs
|
||||
- Graphical overview of server-usage on Servers page
|
||||
- Notifications can now be limited to certain Categories
|
||||
- Each item in the Queue and Filelist now has Move to Top/Bottom buttons
|
||||
- Smoother animations in Firefox (disabled previously due to FF high-CPU usage)
|
||||
- Removed 5 second delay between fetching URLs
|
||||
- Each item in the Queue and File list now has Move to Top/Bottom buttons
|
||||
- Add option to only tag a duplicate job without pausing or removing it
|
||||
- New option "History Retention" to automatically purge jobs from History
|
||||
- Jobs outside server retention are processed faster
|
||||
- Show missing articles in MB instead of number of articles
|
||||
- Obfuscated filenames are renamed during downloading, if possible
|
||||
- If enable_par_cleanup is disabled all par2 files be downloaded
|
||||
- Disk-space is now checked before writing files
|
||||
- Add "Retry All Failed" button to Glitter
|
||||
- Smoother animations in Firefox (disabled previously due to FF high-CPU usage)
|
||||
- Show missing articles in MB instead of number of articles
|
||||
- Better indication of verification process before and after repair
|
||||
- Remove video and audio rating icons from Queue
|
||||
- Show vote buttons instead of video and audio rating buttons in History
|
||||
- If enabled, replace dots in filenames also when there are spaces already
|
||||
- Handling of par2 files made more robust
|
||||
- All par2 files are only downloaded when enabled, not on enable_par_cleanup
|
||||
- Update GNTP bindings to 1.0.3
|
||||
- max_art_opt and replace_illegal moved from Switches to Specials
|
||||
- Removed Specials enable_meta, par2_multicore and allow_streaming
|
||||
- Removed Specials par2_multicore and allow_streaming
|
||||
- Windows: Full unicode support when calling repair and unpack
|
||||
- Windows: Move enable_multipar to Specials
|
||||
- Windows: Better indication of verification process before and after repair
|
||||
- Windows: MultiPar verification of a job is skipped after blocks are fetched
|
||||
- Windows & macOS: removed par2cmdline in favor of par2tbb/Multipar
|
||||
- Windows & macOS: removed par2cmdline in favor of par2tbb/MultiPar
|
||||
- Windows & macOS: Updated WinRAR to 5.5.0
|
||||
|
||||
## Bugfixes since 2.1.0
|
||||
- Shutdown/suspend did not work on some Linux systems
|
||||
- Standby/Hibernate was not working on Windows
|
||||
- Deleting a job could result in write errors
|
||||
- Display warning if custom par2 parameters are wrong
|
||||
- RSS URLs with commas were broken
|
||||
- Display warning if "Extra par2 parameters" turn out to be wrong
|
||||
- RSS URLs with commas in the URL were broken
|
||||
- Fixed some "Saving failed" errors
|
||||
- Fixed crashing URLGrabber
|
||||
- Jobs with renamed files are now correctly handled when using Retry
|
||||
@@ -42,29 +72,42 @@ fetching before the upgrade will be lost!
|
||||
- Fix race-condition in Post-processing
|
||||
- History would not always show latest changes
|
||||
- Convert HTML in error messages
|
||||
- In some cases not all RAR-sets were unpacked
|
||||
- Fixed unicode error during Sorting
|
||||
- Faulty pynotify could stop shutdown
|
||||
- Categories with ' in them could result in SQL errors
|
||||
- Special characters like []!* in filenames could break repair
|
||||
- Wizard was always accessible, even with username and password set
|
||||
- Correct value in "Speed" Extra History Column
|
||||
- Not all texts were shown in the selected Language
|
||||
- Various CSS fixes in Glitter and the Config
|
||||
- Catch "error 0" when using HTTPS on some Linux platforms
|
||||
- Warning is shown when many files with duplicate filenames are discarded
|
||||
- Improve zeroconf/bonjour by sending HTTPS setting and auto-discover of IP
|
||||
- Windows: Fix error in MultiPar-code when first par2-file was damaged
|
||||
- macOS: Catch 'Protocol wrong type for socket' errors
|
||||
- macOS: Catch "Protocol wrong type for socket" errors
|
||||
|
||||
## Translations
|
||||
- Added Hebrew translation by ION IL, many other languages updated.
|
||||
|
||||
## Upgrading from 0.7.x and older
|
||||
## Depreciation notices
|
||||
- Option to limit Servers to specific Categories is now scheduled
|
||||
to be removed in the next release.
|
||||
|
||||
## Upgrading from 2.1.x and older
|
||||
- Finish queue
|
||||
- Stop SABnzbd
|
||||
- Install new version
|
||||
- Start SABnzbd
|
||||
|
||||
## Upgrade notices (from pre-2.x.x)
|
||||
- Windows: When starting the Post-Processing script, the path to the job folder
|
||||
is no longer in short-path notation but includes the full path. To support
|
||||
long paths (>255), you might need to alter them to long-path notation (\\?\).
|
||||
- Schedule items are converted when upgrading to 2.x.x and will break when
|
||||
reverted back to pre-2.x.x releases.
|
||||
## Upgrade notices
|
||||
- Due to changes in this release, the queue will be converted when 2.2.x
|
||||
is started for the first time. Job order, settings and data will be
|
||||
preserved, but all jobs will be unpaused and URLs that did not finish
|
||||
fetching before the upgrade will be lost!
|
||||
- The organization of the download queue is different from 0.7.x releases.
|
||||
So 2.x.x will not see the existing queue, but you can go to Status->Queue Repair
|
||||
and "Repair" the old queue.
|
||||
This version will not see the old queue, but you restore the jobs by going
|
||||
to Status page and use Queue Repair.
|
||||
|
||||
## Known problems and solutions
|
||||
- Read the file "ISSUES.txt"
|
||||
|
||||
@@ -1374,7 +1374,14 @@ def main():
|
||||
|
||||
# Wait for server to become ready
|
||||
cherrypy.engine.wait(cherrypy.process.wspbus.states.STARTED)
|
||||
sabnzbd.zconfig.set_bonjour(cherryhost, cherryport)
|
||||
|
||||
# Bonjour needs a ip. Lets try to find it.
|
||||
try:
|
||||
z_host = socket.gethostbyname(socket.gethostname())
|
||||
except socket.gaierror:
|
||||
z_host = cherryhost
|
||||
|
||||
sabnzbd.zconfig.set_bonjour(z_host, cherryport)
|
||||
|
||||
mail = None
|
||||
if sabnzbd.WIN32:
|
||||
|
||||
@@ -200,8 +200,8 @@ socket_errors_nonblocking = plat_specific_errors(
|
||||
'EAGAIN', 'EWOULDBLOCK', 'WSAEWOULDBLOCK')
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
socket_errors_to_ignore.append(plat_specific_errors('EPROTOTYPE'))
|
||||
socket_errors_nonblocking.append(plat_specific_errors('EPROTOTYPE'))
|
||||
socket_errors_to_ignore.extend(plat_specific_errors('EPROTOTYPE'))
|
||||
socket_errors_nonblocking.extend(plat_specific_errors('EPROTOTYPE'))
|
||||
|
||||
comma_separated_headers = [
|
||||
ntob(h) for h in
|
||||
|
||||
@@ -98,6 +98,12 @@ class BuiltinSSLAdapter(wsgiserver.SSLAdapter):
|
||||
# The connection can safely be dropped.
|
||||
return None, {}
|
||||
raise
|
||||
except:
|
||||
# Temporary fix for https://github.com/cherrypy/cherrypy/issues/1618
|
||||
e = sys.exc_info()[1]
|
||||
if e.args == (0, 'Error'):
|
||||
return None, {}
|
||||
raise
|
||||
return s, self.get_environ(s)
|
||||
|
||||
# TODO: fill this out more with mod ssl env
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</title>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1" />
|
||||
<meta name="apple-mobile-web-app-title" content="SABnzbd" />
|
||||
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="${root}staticcfg/ico/apple-touch-icon-76x76-precomposed.png" />
|
||||
@@ -32,7 +32,9 @@
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="${root}staticcfg/ico/android-192x192.png" />
|
||||
|
||||
<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/style.css?p=$pid" />
|
||||
<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" />
|
||||
|
||||
<link rel="shortcut icon" href="${root}staticcfg/ico/favicon.ico?v=$version" />
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Config"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/configure"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/configure"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--#from locale import getpreferredencoding#-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Categories"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/categories"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/categories"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
<div class="colmask">
|
||||
<div class="section">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Folders"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/folders"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/folders"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="General"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/general"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/general"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Email"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/notifications"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/notifications"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--#def show_notify_checkboxes($section_label)#-->
|
||||
@@ -178,6 +178,45 @@
|
||||
</div>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<div class="section" id="nscript">
|
||||
<div class="col2">
|
||||
<h3>$T('section-NScript')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="nscript_enable" id="nscript_enable" value="1" <!--#if int($nscript_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="nscript_enable"> $T('opt-nscript_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-nscript_enable')</em><br><a href="$helpuri$help_uri#nscript" target="_blank">$T('readwiki')</a>
|
||||
$show_cat_box('nscript')
|
||||
</div>
|
||||
<div class="col1" <!--#if int($nscript_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="nscript_script">$T('opt-nscript_script')</label>
|
||||
<select name="nscript_script">
|
||||
<!--#for $sc in $scripts#-->
|
||||
<option value="$sc" <!--#if $nscript_script == $sc then 'selected="selected"' else ""#-->>$Tspec($sc)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<span class="desc">$T('explain-nscript_script')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="nscript_parameters">$T('opt-nscript_parameters')</label>
|
||||
<input type="text" name="nscript_parameters" id="nscript_parameters" value="$nscript_parameters" />
|
||||
<span class="desc">$T('Optional') - $T('explain-nscript_parameters')</span>
|
||||
</div>
|
||||
$show_notify_checkboxes('nscript')
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_nscript"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
<div class="field-pair result-box">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="growl">
|
||||
<div class="col2">
|
||||
<h3>$T('growlSettings') <a href="$helpuri$help_uri#toc3" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
@@ -350,45 +389,6 @@
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="nscript">
|
||||
<div class="col2">
|
||||
<h3>$T('section-NScript')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="nscript_enable" id="nscript_enable" value="1" <!--#if int($nscript_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="nscript_enable"> $T('opt-nscript_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-nscript_enable')</em>
|
||||
$show_cat_box('nscript')
|
||||
</div>
|
||||
<div class="col1" <!--#if int($nscript_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="nscript_script">$T('opt-nscript_script')</label>
|
||||
<select name="nscript_script">
|
||||
<!--#for $sc in $scripts#-->
|
||||
<option value="$sc" <!--#if $nscript_script == $sc then 'selected="selected"' else ""#-->>$Tspec($sc)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<span class="desc">$T('explain-nscript_script')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="nscript_parameters">$T('opt-nscript_parameters')</label>
|
||||
<input type="text" name="nscript_parameters" id="nscript_parameters" value="$nscript_parameters" />
|
||||
<span class="desc">$T('Optional') - $T('explain-nscript_parameters')</span>
|
||||
</div>
|
||||
$show_notify_checkboxes('nscript')
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_nscript"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
<div class="field-pair result-box">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div><!-- /colmask -->
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="RSS"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/rss"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/rss"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
<div class="colmask">
|
||||
<!--#if not $active_feed#-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Scheduling"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/scheduling"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/scheduling"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<%
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Servers"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/servers"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/servers"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -110,6 +110,59 @@
|
||||
</div><!-- /section -->
|
||||
</form>
|
||||
|
||||
<script type="text/javascript" src="${root}staticcfg/js/chartist.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
// Define variables needed for the server-plots
|
||||
var serverData = {}
|
||||
var chartOptions = {
|
||||
fullWidth: true,
|
||||
showArea: true,
|
||||
axisX: {
|
||||
labelOffset: {
|
||||
x: -5
|
||||
},
|
||||
showGrid: false
|
||||
},
|
||||
axisY: {
|
||||
labelOffset: {
|
||||
y: 7
|
||||
},
|
||||
scaleMinSpace: 30
|
||||
},
|
||||
chartPadding: {
|
||||
top: 9,
|
||||
bottom: 0,
|
||||
left: 30,
|
||||
right: 20
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<!--
|
||||
We need to find how many months we have recorded so far, so we
|
||||
loop over all the dates to find the lowest value and then use
|
||||
this to calculate the date-selector
|
||||
-->
|
||||
|
||||
<!--#import json#-->
|
||||
<!--#import datetime#-->
|
||||
<!--#import sabnzbd.misc#-->
|
||||
|
||||
<!--#def show_date_selector($server, $id)#-->
|
||||
<!--#set month_names = [$T('January'), $T('February'), $T('March'), $T('April'), $T('May'), $T('June'), $T('July'), $T('August'), $T('September'), $T('October'), $T('November'), $T('December')] #-->
|
||||
<!--#set min_date = datetime.date.today()#-->
|
||||
<!--#for date in $server['amounts'][4]#-->
|
||||
<!--#set split_date = $date.split('-')#-->
|
||||
<!--#set min_date = min(min_date, datetime.date(int(split_date[0]), int(split_date[1]), 1))#-->
|
||||
<!--#end for#-->
|
||||
<!--#set months_recorded = list(sabnzbd.misc.monthrange(min_date, datetime.date.today()))#-->
|
||||
<!--#$months_recorded.reverse()#-->
|
||||
<select class="chart-selector" name="chart-selector-${id}" id="chart-selector-${id}" data-id="${id}">
|
||||
<!--#for $cur_date in months_recorded#-->
|
||||
<option value="<!--#echo '%d-%02d' % ($cur_date.year, $cur_date.month)#-->">$month_names[$cur_date.month-1] $cur_date.year</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<!--#end def#-->
|
||||
|
||||
<!--#set $prio_colors = ["#59cc33", "#3366cc","#7f33cc", "#cc33a6", "#cc3333"] #-->
|
||||
<!--#set $cur_prio_color = -1 #-->
|
||||
<!--#set $last_prio = -1 #-->
|
||||
@@ -208,7 +261,7 @@
|
||||
</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<span class="desc">$T('srv-explain-categories')</span>
|
||||
<span class="desc">$T('srv-explain-categories')<br><span class="label label-warning">$T('warning').upper()</span> <strong>This option is scheduled to be removed in the next release of SABnzbd.</strong></span>
|
||||
<div class="alert alert-info alert-no-category">
|
||||
<span class="glyphicon glyphicon-info-sign"></span>
|
||||
$T('srv-explain-no-categories')
|
||||
@@ -232,166 +285,279 @@
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
<div class="col2" style="display:block;">
|
||||
<!--#if 'amounts' in $server#-->
|
||||
<b>$T('srv-bandwidth'):</b><br/>
|
||||
$T('total'): $(server['amounts'][0])B<br/>
|
||||
$T('today'): $(server['amounts'][3])B<br/>
|
||||
$T('thisWeek'): $(server['amounts'][2])B<br/>
|
||||
$T('thisMonth'): $(server['amounts'][1])B
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
</div><!-- /section -->
|
||||
<div class="col1" style="display:block;">
|
||||
<!--#if 'amounts' in $server#-->
|
||||
<div class="server-amounts-text">
|
||||
<b>$T('srv-bandwidth'):</b><br/>
|
||||
$T('total'): $(server['amounts'][0])B<br/>
|
||||
$T('today'): $(server['amounts'][3])B<br/>
|
||||
$T('thisWeek'): $(server['amounts'][2])B<br/>
|
||||
$T('thisMonth'): $(server['amounts'][1])B
|
||||
</div>
|
||||
<div class="server-chart">
|
||||
$show_date_selector($server, $cur)
|
||||
<div id="server-chart-${cur}" class="ct-chart"></div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
// Server data
|
||||
serverData[${cur}] = <!--#echo json.dumps($server['amounts'][4])#-->
|
||||
\$(document).ready(function() {
|
||||
showChart(${cur}, \$('#chart-selector-${cur}').val())
|
||||
})
|
||||
</script>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!--#end for#-->
|
||||
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function(){
|
||||
// Exception when change of priority, reload
|
||||
\$('input[name="priority"], input[name="displayname"]').on('change', function() {
|
||||
\$('.fullform').submit(function() {
|
||||
// Skip the fancy stuff, just submit
|
||||
this.submit()
|
||||
})
|
||||
})
|
||||
function showChart(server_id, month) {
|
||||
// This month
|
||||
var thisDay = new Date()
|
||||
|
||||
/**
|
||||
Message on no Default category selected
|
||||
**/
|
||||
function checkServerCats() {
|
||||
// Now we check all of them
|
||||
var hasDefault = false;
|
||||
// Only check the active servers, not the add-server one
|
||||
\$('.section:not(#addServerContent) select[name="categories"]').each(function() {
|
||||
// See if this server is enabled
|
||||
if(!\$(this).parents('.section').find('.col2').hasClass('server-disabled') ) {
|
||||
// Is there Default?
|
||||
if(\$(this).val() && \$(this).val().indexOf('Default') > -1) {
|
||||
// Hide
|
||||
\$('.alert-no-category').hide()
|
||||
hasDefault = true
|
||||
// All good!
|
||||
return true
|
||||
}
|
||||
// What month are we doing?
|
||||
var inputDate = new Date(month+'-01')
|
||||
var baseDate = new Date(inputDate.getUTCFullYear(), inputDate.getUTCMonth(), 1)
|
||||
var maxDaysInMonth = new Date(baseDate.getFullYear(), baseDate.getMonth()+1, 0).getDate()
|
||||
|
||||
// Fill the data array
|
||||
var data = {
|
||||
labels: [],
|
||||
series: [[]]
|
||||
};
|
||||
var largestVal = 0
|
||||
for(var i = 1; i < maxDaysInMonth+1; i++) {
|
||||
// Add X-label
|
||||
if(i % 3 == 1) {
|
||||
data['labels'].push(i)
|
||||
} else {
|
||||
data['labels'].push(NaN)
|
||||
}
|
||||
|
||||
// Get formatted date
|
||||
baseDate.setDate(i)
|
||||
var dateCheck = toFormattedDate(baseDate)
|
||||
|
||||
// Add data if we have it
|
||||
if(dateCheck in serverData[server_id]) {
|
||||
data['series'][0].push(serverData[server_id][dateCheck])
|
||||
largestVal = Math.max(largestVal, serverData[server_id][dateCheck])
|
||||
} else if(thisDay.getYear() == baseDate.getYear() && thisDay.getMonth() == baseDate.getMonth() && thisDay.getDate() < i) {
|
||||
data['series'][0].push(NaN)
|
||||
} else {
|
||||
data['series'][0].push(0)
|
||||
}
|
||||
}
|
||||
|
||||
// Check if we should shrink the Y-axis values
|
||||
var devideBy = 1024
|
||||
var axisLabel = 'KB'
|
||||
if(largestVal > 1024*1024) {
|
||||
devideBy = 1024*1024
|
||||
axisLabel = 'MB'
|
||||
}
|
||||
if(largestVal > 1024*1024*1024) {
|
||||
devideBy = 1024*1024*1024
|
||||
axisLabel = 'GB'
|
||||
}
|
||||
if(largestVal > 1024*1024*1024*1024) {
|
||||
devideBy = 1024*1024*1024*1024
|
||||
axisLabel = 'TB'
|
||||
}
|
||||
|
||||
// Shrink the value
|
||||
data['series'][0] = data['series'][0].map(function(num) {
|
||||
return num / devideBy;
|
||||
})
|
||||
// We found nothing.. Let's show a warning
|
||||
if(!hasDefault) \$('.alert-no-category').show()
|
||||
|
||||
// Show the chart
|
||||
chart = new Chartist.Line('#server-chart-'+server_id, data, chartOptions);
|
||||
chart.on('created', function(context) {
|
||||
// Make sure to add this as the first child so it's at the bottom
|
||||
context.svg.elem('rect', {
|
||||
x: context.chartRect.x1,
|
||||
y: context.chartRect.y2-1,
|
||||
width: context.chartRect.width(),
|
||||
height: context.chartRect.height()+2,
|
||||
fill: 'none',
|
||||
stroke: '#B9B9B9',
|
||||
'stroke-width': '1px'
|
||||
}, '', context.svg, true)
|
||||
\$('#server-chart-'+server_id+' .ct-label.ct-vertical').each(function(index, elmn) {
|
||||
elmn.innerHTML += axisLabel
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
\$('select[name="categories"]').on('change', checkServerCats)
|
||||
checkServerCats()
|
||||
// Need to mitigate timezone effects!
|
||||
function toFormattedDate(date) {
|
||||
var local = new Date(date);
|
||||
local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
|
||||
return local.toJSON().slice(0, 10);
|
||||
}
|
||||
|
||||
/**
|
||||
Click events
|
||||
When finished loading
|
||||
**/
|
||||
\$('.showserver').click(function () {
|
||||
if(\$(this).parent().hasClass('server-disabled')) {
|
||||
\$(this).parent().parent().toggleClass('server-disabled')
|
||||
}
|
||||
\$(this).parent().next().toggle();
|
||||
\$(this).parent().next().next().toggle();
|
||||
if (\$(this).attr("value") == "$T('showDetails')") {
|
||||
\$(this).attr("value", "$T('hideDetails')");
|
||||
} else {
|
||||
\$(this).attr("value", "$T('showDetails')");
|
||||
}
|
||||
});
|
||||
\$(document).ready(function(){
|
||||
// Exception when change of priority, reload
|
||||
\$('input[name="priority"], input[name="displayname"]').on('change', function() {
|
||||
\$('.fullform').submit(function() {
|
||||
// Skip the fancy stuff, just submit
|
||||
this.submit()
|
||||
})
|
||||
})
|
||||
|
||||
\$('#addServerButton').click(function(){
|
||||
\$('#addServer').hide();
|
||||
\$('#addServerContent').show();
|
||||
});
|
||||
/**
|
||||
Update charts when changed
|
||||
**/
|
||||
\$('.chart-selector').on('change', function(elemn) {
|
||||
showChart(\$(elemn.target).data('id'), \$(elemn.target).val())
|
||||
// Lets us leave (needs to be called after the change event)
|
||||
setTimeout(function() {
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
}, 100)
|
||||
})
|
||||
|
||||
\$('[name="ssl"]').click(function() {
|
||||
// Use CSS transitions to do some highlighting
|
||||
var portBox = \$(this).parent().parent().find('[name="port"]')
|
||||
if(this.checked) {
|
||||
// Enabled SSL change port when not already a custom port
|
||||
if(portBox.val() == '119') {
|
||||
portBox.val('563')
|
||||
portBox.addClass('port-highlight')
|
||||
/**
|
||||
Message on no Default category selected
|
||||
**/
|
||||
function checkServerCats() {
|
||||
// Now we check all of them
|
||||
var hasDefault = false;
|
||||
// Only check the active servers, not the add-server one
|
||||
\$('.section:not(#addServerContent) select[name="categories"]').each(function() {
|
||||
// See if this server is enabled
|
||||
if(!\$(this).parents('.section').find('.col2').hasClass('server-disabled') ) {
|
||||
// Is there Default?
|
||||
if(\$(this).val() && \$(this).val().indexOf('Default') > -1) {
|
||||
// Hide
|
||||
\$('.alert-no-category').hide()
|
||||
hasDefault = true
|
||||
// All good!
|
||||
return true
|
||||
}
|
||||
}
|
||||
})
|
||||
// We found nothing.. Let's show a warning
|
||||
if(!hasDefault) \$('.alert-no-category').show()
|
||||
}
|
||||
|
||||
\$('select[name="categories"]').on('change', checkServerCats)
|
||||
checkServerCats()
|
||||
|
||||
/**
|
||||
Click events
|
||||
**/
|
||||
\$('.showserver').click(function () {
|
||||
if(\$(this).parent().hasClass('server-disabled')) {
|
||||
\$(this).parent().parent().toggleClass('server-disabled')
|
||||
}
|
||||
} else {
|
||||
// Remove SSL port
|
||||
if(portBox.val() == '563') {
|
||||
portBox.val('119')
|
||||
portBox.addClass('port-highlight')
|
||||
}
|
||||
}
|
||||
setTimeout(function() { portBox.removeClass('port-highlight') }, 2000)
|
||||
})
|
||||
|
||||
\$('.testServer').click(function(event){
|
||||
removeObfuscation()
|
||||
var theButton = \$(this)
|
||||
var resultBox = theButton.parents('.col1').find('.result-box .alert');
|
||||
theButton.attr("disabled", "disabled")
|
||||
theButton.find('span').toggleClass('glyphicon-sort glyphicon-refresh spin-glyphicon')
|
||||
\$.ajax({
|
||||
type: "POST",
|
||||
url: "../../tapi",
|
||||
data: "mode=config&output=json&name=test_server&" + \$(this).parents('form:first').serialize()
|
||||
}).then(function(data) {
|
||||
// Let's replace the link
|
||||
msg = data.value.message.replace('https://sabnzbd.org/certificate-errors', '<a href="https://sabnzbd.org/certificate-errors" class="alert-link" target="_blank">https://sabnzbd.org/certificate-errors</a>')
|
||||
msg = msg.replace('-', '<br>')
|
||||
// Fill the box and enable the button
|
||||
resultBox.removeClass('alert-success alert-danger').show()
|
||||
resultBox.html(msg)
|
||||
theButton.removeAttr("disabled")
|
||||
theButton.find('span').toggleClass('glyphicon-sort glyphicon-refresh spin-glyphicon')
|
||||
|
||||
// Succes or not?
|
||||
if(data.value.result) {
|
||||
resultBox.addClass('alert-success')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-ok-sign"></span> ')
|
||||
\$(this).parent().next().toggle();
|
||||
\$(this).parent().next().next().toggle();
|
||||
if (\$(this).attr("value") == "$T('showDetails')") {
|
||||
\$(this).attr("value", "$T('hideDetails')");
|
||||
} else {
|
||||
resultBox.addClass('alert-danger')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-exclamation-sign"></span> ')
|
||||
\$(this).attr("value", "$T('showDetails')");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
\$('.delServer').click(function(){
|
||||
if( confirm("$T('Plush-confirm')") ) {
|
||||
\$(this).parents('form:first').attr('action','delServer').submit();
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
setTimeout(function() { location.reload(); }, 500)
|
||||
}
|
||||
return false;
|
||||
});
|
||||
\$('#addServerButton').click(function(){
|
||||
\$('#addServer').hide();
|
||||
\$('#addServerContent').show();
|
||||
});
|
||||
|
||||
\$('.clrServer').click(function(){
|
||||
if( confirm("$T('Plush-confirm')") ) {
|
||||
\$(this).parents('form:first').attr('action','clrServer').submit();
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
setTimeout(function() { location.reload(); }, 500)
|
||||
}
|
||||
return false;
|
||||
});
|
||||
\$('[name="ssl"]').click(function() {
|
||||
// Use CSS transitions to do some highlighting
|
||||
var portBox = \$(this).parent().parent().find('[name="port"]')
|
||||
if(this.checked) {
|
||||
// Enabled SSL change port when not already a custom port
|
||||
if(portBox.val() == '119') {
|
||||
portBox.val('563')
|
||||
portBox.addClass('port-highlight')
|
||||
}
|
||||
} else {
|
||||
// Remove SSL port
|
||||
if(portBox.val() == '563') {
|
||||
portBox.val('119')
|
||||
portBox.addClass('port-highlight')
|
||||
}
|
||||
}
|
||||
setTimeout(function() { portBox.removeClass('port-highlight') }, 2000)
|
||||
})
|
||||
|
||||
\$('.toggleServerCheckbox').click(function(){
|
||||
var whichServer = \$(this).attr("name");
|
||||
\$.ajax({
|
||||
type: "POST",
|
||||
url: "toggleServer",
|
||||
data: {server: whichServer, session: "$session" }
|
||||
}).done(function() {
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
setTimeout(function() { location.reload(); }, 100)
|
||||
\$('.testServer').click(function(event){
|
||||
removeObfuscation()
|
||||
var theButton = \$(this)
|
||||
var resultBox = theButton.parents('.col1').find('.result-box .alert');
|
||||
theButton.attr("disabled", "disabled")
|
||||
theButton.find('span').toggleClass('glyphicon-sort glyphicon-refresh spin-glyphicon')
|
||||
\$.ajax({
|
||||
type: "POST",
|
||||
url: "../../tapi",
|
||||
data: "mode=config&output=json&name=test_server&" + \$(this).parents('form:first').serialize()
|
||||
}).then(function(data) {
|
||||
// Let's replace the link
|
||||
msg = data.value.message.replace('https://sabnzbd.org/certificate-errors', '<a href="https://sabnzbd.org/certificate-errors" class="alert-link" target="_blank">https://sabnzbd.org/certificate-errors</a>')
|
||||
msg = msg.replace('-', '<br>')
|
||||
// Fill the box and enable the button
|
||||
resultBox.removeClass('alert-success alert-danger').show()
|
||||
resultBox.html(msg)
|
||||
theButton.removeAttr("disabled")
|
||||
theButton.find('span').toggleClass('glyphicon-sort glyphicon-refresh spin-glyphicon')
|
||||
|
||||
// Succes or not?
|
||||
if(data.value.result) {
|
||||
resultBox.addClass('alert-success')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-ok-sign"></span> ')
|
||||
} else {
|
||||
resultBox.addClass('alert-danger')
|
||||
resultBox.prepend('<span class="glyphicon glyphicon-exclamation-sign"></span> ')
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
\$('.delServer').click(function(){
|
||||
if( confirm("$T('Plush-confirm')") ) {
|
||||
\$(this).parents('form:first').attr('action','delServer').submit();
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
setTimeout(function() { location.reload(); }, 500)
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
\$('.clrServer').click(function(){
|
||||
if( confirm("$T('Plush-confirm')") ) {
|
||||
\$(this).parents('form:first').attr('action','clrServer').submit();
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
setTimeout(function() { location.reload(); }, 500)
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
\$('.toggleServerCheckbox').click(function(){
|
||||
var whichServer = \$(this).attr("name");
|
||||
\$.ajax({
|
||||
type: "POST",
|
||||
url: "toggleServer",
|
||||
data: {server: whichServer, session: "$session" }
|
||||
}).done(function() {
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
setTimeout(function() { location.reload(); }, 100)
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Sorting"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/sorting"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/sorting"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Special"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/special"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/special"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Switches"#-->
|
||||
<!--#set global $help_uri="configuration/2.1/switches"#-->
|
||||
<!--#set global $help_uri="configuration/2.2/switches"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -86,6 +86,7 @@
|
||||
<label class="config" for="no_dupes">$T('opt-no_dupes')</label>
|
||||
<select name="no_dupes" id="no_dupes">
|
||||
<option value="0" <!--#if int($no_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="4" <!--#if int($no_dupes) == 4 then 'selected="selected"' else ""#--> >$T('nodupes-tag')</option>
|
||||
<option value="2" <!--#if int($no_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="3" <!--#if int($no_dupes) == 3 then 'selected="selected"' else ""#--> >$T('nodupes-fail')</option>
|
||||
<option value="1" <!--#if int($no_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
|
||||
@@ -96,6 +97,7 @@
|
||||
<label class="config" for="no_series_dupes">$T('opt-no_series_dupes')</label>
|
||||
<select name="no_series_dupes" id="no_series_dupes">
|
||||
<option value="0" <!--#if int($no_series_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="4" <!--#if int($no_series_dupes) == 4 then 'selected="selected"' else ""#--> >$T('nodupes-tag')</option>
|
||||
<option value="2" <!--#if int($no_series_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="3" <!--#if int($no_series_dupes) == 3 then 'selected="selected"' else ""#--> >$T('nodupes-fail')</option>
|
||||
<option value="1" <!--#if int($no_series_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
|
||||
@@ -133,7 +135,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="direct_unpack">$T('opt-direct_unpack')</label>
|
||||
<input type="checkbox" name="direct_unpack" id="direct_unpack" value="1" <!--#if int($direct_unpack) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-direct_unpack')</span>
|
||||
<span class="desc">$T('explain-direct_unpack').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
@@ -210,11 +212,28 @@
|
||||
<input type="checkbox" name="ignore_samples" id="ignore_samples" value="1" <!--#if int($ignore_samples) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-ignore_samples') $T('igsam-del').</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable_meta">$T('opt-enable_meta')</label>
|
||||
<input type="checkbox" name="enable_meta" id="enable_meta" value="1" <!--#if int($enable_meta) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_meta').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="cleanup_list">$T('opt-cleanup_list')</label>
|
||||
<input type="text" name="cleanup_list" id="cleanup_list" value="$cleanup_list"/>
|
||||
<span class="desc">$T('explain-cleanup_list')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="history_retention_select">$T('opt-history_retention')</label>
|
||||
<input type="hidden" name="history_retention" id="history_retention" value="$history_retention">
|
||||
<select name="history_retention_select" id="history_retention_select">
|
||||
<option value="0">$T('history_retention-all')</option>
|
||||
<option value="n">$T('history_retention-number')</option>
|
||||
<option value="d">$T('history_retention-days')</option>
|
||||
<option value="-1">$T('history_retention-none')</option>
|
||||
</select>
|
||||
<input type="number" id="history_retention_number" name="history_retention_number" min="1">
|
||||
<span class="desc">$T('explain-history_retention').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default restoreDefaults"><span class="glyphicon glyphicon-asterisk"></span> $T('button-restoreDefaults')</button>
|
||||
@@ -231,7 +250,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="folder_rename">$T('opt-folder_rename')</label>
|
||||
<input type="checkbox" name="folder_rename" id="folder_rename" value="1" <!--#if int($folder_rename) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-folder_rename')</span>
|
||||
<span class="desc">$T('explain-folder_rename').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="replace_spaces">$T('opt-replace_spaces')</label>
|
||||
@@ -437,6 +456,53 @@
|
||||
}
|
||||
});
|
||||
|
||||
\$('#history_retention_select, #history_retention_number').on('change', updateHistoryRetention)
|
||||
function updateHistoryRetention() {
|
||||
var retention_setting = \$('#history_retention')
|
||||
var retention_select = \$('#history_retention_select').val()
|
||||
var retention_number = \$('#history_retention_number')
|
||||
// Keep all or keep none
|
||||
if(retention_select == "0" || retention_select == "-1") {
|
||||
retention_number.hide()
|
||||
retention_number.val('')
|
||||
retention_number.attr('placeholder', '')
|
||||
retention_setting.val(retention_select)
|
||||
} else {
|
||||
retention_number.show()
|
||||
// Days or number?
|
||||
if(retention_select.indexOf("d") !== -1) {
|
||||
retention_number.attr('placeholder', '$T('days').capitalize()')
|
||||
if(retention_number.val()) {
|
||||
retention_setting.val(retention_number.val() + 'd')
|
||||
} else if(parseInt(retention_setting.val()) > 0) {
|
||||
retention_number.val(parseInt(retention_setting.val()))
|
||||
}
|
||||
} else {
|
||||
retention_number.attr('placeholder', '$T('history_retention-limit')')
|
||||
if(retention_number.val()) {
|
||||
retention_setting.val(retention_number.val())
|
||||
} else if(parseInt(retention_setting.val()) > 0) {
|
||||
retention_number.val(parseInt(retention_setting.val()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Set the history-retention settig
|
||||
var retention_setting_value = \$('#history_retention').val()
|
||||
if(parseInt(retention_setting_value) > 0) {
|
||||
// Days or number?
|
||||
if(retention_setting_value.indexOf("d") !== -1) {
|
||||
\$('#history_retention_select').val("d")
|
||||
} else {
|
||||
\$('#history_retention_select').val("n")
|
||||
}
|
||||
\$('#history_retention_number').val(parseInt(retention_setting_value))
|
||||
} else {
|
||||
// Keep all or keep none
|
||||
\$('#history_retention_select').val(retention_setting_value)
|
||||
\$('#history_retention_number').hide()
|
||||
}
|
||||
|
||||
\$('.restoreDefaults').click(function(e) {
|
||||
// Get section name
|
||||
var sectionName = \$(this).parents('.section').find('.col2 h3').text().trim()
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<html lang="$active_lang">
|
||||
<head>
|
||||
<title>SABnzbd</title>
|
||||
<title>SABnzbd - $T('login')</title>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1" />
|
||||
<meta name="apple-mobile-web-app-title" content="SABnzbd" />
|
||||
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="../staticcfg/ico/apple-touch-icon-76x76-precomposed.png" />
|
||||
|
||||
1
interfaces/Config/templates/staticcfg/css/chartist.min.css
vendored
Normal file
1
interfaces/Config/templates/staticcfg/css/chartist.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -619,7 +619,6 @@ h2.activeRSS {
|
||||
padding: 0 0 .5em;
|
||||
}
|
||||
.feed-row div {
|
||||
padding-right: 10px;
|
||||
overflow:hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
@@ -994,6 +993,55 @@ input[type="checkbox"] {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.Servers .server-amounts-text {
|
||||
width: 20%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.Servers .server-chart {
|
||||
float: right;
|
||||
width: calc(100% - 250px - 25%);
|
||||
text-align: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.Servers .ct-series-a .ct-line {
|
||||
stroke: #666666;
|
||||
}
|
||||
|
||||
.Servers .ct-series-a .ct-point {
|
||||
stroke: #666666;
|
||||
stroke-width: 4px;
|
||||
}
|
||||
|
||||
.Servers .ct-series-a .ct-area {
|
||||
fill: #666666
|
||||
}
|
||||
|
||||
.Servers .ct-label {
|
||||
font-size: 1em;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.Servers .chart-selector {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: -7px;
|
||||
left: 50%;
|
||||
width: 120px;
|
||||
margin-left: -40px;
|
||||
min-width: initial;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.Servers .chart-selector:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.Servers .ct-grid.ct-vertical:first-of-type {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.advanced-settings {
|
||||
display: none;
|
||||
}
|
||||
@@ -1119,7 +1167,7 @@ input[type="checkbox"] {
|
||||
|
||||
.navbar-nav {
|
||||
/* For extra wide languages like Polish */
|
||||
margin-right: -50px;
|
||||
margin-right: -150px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1171,6 +1219,15 @@ input[type="checkbox"] {
|
||||
.Servers .col2 button:first-of-type {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.Servers .server-chart {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.Servers .server-amounts-text {
|
||||
padding: 0px 15px 10px;
|
||||
width: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
|
||||
10
interfaces/Config/templates/staticcfg/js/chartist.min.js
vendored
Normal file
10
interfaces/Config/templates/staticcfg/js/chartist.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -232,7 +232,7 @@ function do_restart() {
|
||||
var portsUnchanged = ($('#port').val() == $('#port').data('original')) && ($('#https_port').val() == $('#https_port').data('original'))
|
||||
|
||||
// Are we on settings page or did nothing change?
|
||||
if(!$('body').hasClass('General') || (!switchedHTTPS && !portsUnchanged)) {
|
||||
if(!$('body').hasClass('General') || (!switchedHTTPS && portsUnchanged)) {
|
||||
// Same as before
|
||||
var urlTotal = window.location.origin + urlPath
|
||||
} else {
|
||||
|
||||
@@ -48,8 +48,8 @@
|
||||
<!-- ko if: historyStatus.has_rating -->
|
||||
<div class="dropdown history-ratings">
|
||||
<a href="#" class="name-icons hover-button" data-toggle="dropdown" onclick="keepOpen(this)">
|
||||
<span class="glyphicon glyphicon-facetime-video"></span> <span data-bind="text: historyStatus.rating_avg_video"></span>
|
||||
<span class="glyphicon glyphicon-volume-up"></span> <span data-bind="text: historyStatus.rating_avg_audio"></span>
|
||||
<span class="glyphicon glyphicon-thumbs-up"></span> <span data-bind="text: historyStatus.rating_avg_vote_up"></span>
|
||||
<span class="glyphicon glyphicon-thumbs-down"></span> <span data-bind="text: historyStatus.rating_avg_vote_down"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu history-ratings-menu">
|
||||
<li>
|
||||
@@ -206,6 +206,7 @@
|
||||
</ul>
|
||||
|
||||
<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>
|
||||
|
||||
@@ -95,18 +95,18 @@
|
||||
<span data-bind="text: password"></span>
|
||||
</small>
|
||||
<!-- /ko -->
|
||||
<div class="name-icons direct-unpack hover-button" data-bind="visible: direct_unpack">
|
||||
<span class="glyphicon glyphicon-compressed "></span> <span data-bind="text: direct_unpack">5</span>
|
||||
<div class="name-icons direct-unpack hover-button" data-bind="visible: direct_unpack" title="$T('opt-direct_unpack')">
|
||||
<span class="glyphicon glyphicon-compressed"></span> <span data-bind="text: direct_unpack"></span>
|
||||
</div>
|
||||
</div>
|
||||
<form data-bind="submit: editingNameSubmit">
|
||||
<input type="text" data-bind="value: nameForEdit, visible: editingName(), hasfocus: editingName" />
|
||||
</form>
|
||||
<div class="name-options" data-bind="visible: !editingName()">
|
||||
<a href="#" data-bind="click: \$parent.queue.moveButton" class="hover-button buttonMoveToTop" title="$T('Glitter-MoveToTop')"><span class="glyphicon glyphicon-chevron-up"></span></a>
|
||||
<a href="#" data-bind="click: \$parent.queue.moveButton" class="hover-button buttonMoveToBottom" title="$T('Glitter-MoveToBottom')"><span class="glyphicon glyphicon-chevron-down"></span></a>
|
||||
<a href="#" data-bind="click: editName, css: { disabled: isGrabbing() }" class="hover-button"><span class="glyphicon glyphicon-pencil"></span></a>
|
||||
<a href="#" data-bind="click: showFiles, css: { disabled: isGrabbing() }" class="hover-button" title="$T('nzoDetails') - $T('srv-password')"><span class="glyphicon glyphicon-folder-open"></span></a>
|
||||
<div class="name-options" data-bind="visible: !editingName(), css: { disabled: isGrabbing() }">
|
||||
<a href="#" data-bind="click: \$parent.queue.moveButton" class="hover-button buttonMoveToTop" title="$T('Glitter-top')"><span class="glyphicon glyphicon-chevron-up"></span></a>
|
||||
<a href="#" data-bind="click: \$parent.queue.moveButton" class="hover-button buttonMoveToBottom" title="$T('Glitter-bottom')"><span class="glyphicon glyphicon-chevron-down"></span></a>
|
||||
<a href="#" data-bind="click: editName" class="hover-button" title="$T('Glitter-rename')"><span class="glyphicon glyphicon-pencil"></span></a>
|
||||
<a href="#" data-bind="click: showFiles" class="hover-button" title="$T('nzoDetails') - $T('srv-password')"><span class="glyphicon glyphicon-folder-open"></span></a>
|
||||
<small data-bind="text: avg_age"></small>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<title data-bind="text: title">SABnzbd</title>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, maximum-scale=1" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta name="application-name" content="SABnzbd">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
@@ -30,13 +30,13 @@
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="./staticcfg/ico/apple-touch-icon-152x152-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="./staticcfg/ico/apple-touch-icon-180x180-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="./staticcfg/ico/android-192x192.png" />
|
||||
<link rel="shortcut icon" type="image/ico" href="./staticcfg/ico/favicon.ico?v=1.0.0" data-bind="attr: { 'href': SABIcon }" />
|
||||
<link rel="shortcut icon" type="image/ico" href="./staticcfg/ico/favicon.ico?v=$version" data-bind="attr: { 'href': SABIcon }" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="./static/bootstrap/css/bootstrap.min.css?p=$pid" />
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/glitter.css?p=$pid" />
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/glitter.mobile.css?p=$pid" media="all and (max-width: 768px)" />
|
||||
<link rel="stylesheet" type="text/css" href="./static/bootstrap/css/bootstrap.min.css?v=$version" />
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/glitter.css?v=$version" />
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/glitter.mobile.css?v=$version" media="all and (max-width: 768px)" />
|
||||
<!--#if $color_scheme not in ('Default', '') #-->
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/colorschemes/${color_scheme}.css?p=$pid"/>
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/colorschemes/${color_scheme}.css?v=$version"/>
|
||||
<!--#end if#-->
|
||||
|
||||
<!-- Make translations available in scripts -->
|
||||
@@ -62,6 +62,7 @@
|
||||
glitterTranslate.repair = "$T('explain-Repair')".replace(/<br \/>/g, "\n").replace(/"/g,'"');
|
||||
glitterTranslate.removeDown = "$T('Glitter-confirmClearDownloads')";
|
||||
glitterTranslate.removeDow1 = "$T('Glitter-confirmClear1Download')";
|
||||
glitterTranslate.retryAll = "$T('link-retryAll')?";
|
||||
glitterTranslate.encrypted = "$T('Glitter-encrypted')";
|
||||
glitterTranslate.duplicate = "$T('Glitter-duplicate')";
|
||||
glitterTranslate.tooLarge = "$T('Glitter-tooLarge')";
|
||||
@@ -102,7 +103,7 @@
|
||||
glitterTranslate.status['Script'] = "$T('stage-script')";
|
||||
glitterTranslate.status['Source'] = "$T('stage-source')";
|
||||
glitterTranslate.status['Servers'] = "$T('stage-servers')";
|
||||
glitterTranslate.status['INFO'] = "$T('log-info')".replace('+ ', '').toUpperCase();
|
||||
glitterTranslate.status['INFO'] = "$T('log-info')".replace('+', '').toUpperCase();
|
||||
glitterTranslate.status['WARNING'] = "$T('Glitter-warning')";
|
||||
glitterTranslate.status['ERROR'] = "$T('Glitter-error')";
|
||||
|
||||
|
||||
@@ -37,19 +37,10 @@ function Fileslisting(parent) {
|
||||
|
||||
// Move to top and bottom buttons
|
||||
self.moveButton = function (item,event) {
|
||||
var ITEMKEY = "ko_sortItem",
|
||||
INDEXKEY = "ko_sourceIndex",
|
||||
LISTKEY = "ko_sortList",
|
||||
PARENTKEY = "ko_parentList",
|
||||
DRAGKEY = "ko_dragItem",
|
||||
unwrap = ko.utils.unwrapObservable,
|
||||
dataGet = ko.utils.domData.get,
|
||||
dataSet = ko.utils.domData.set;
|
||||
var targetRow,sourceRow,tbody;
|
||||
var targetRow, sourceRow, tbody;
|
||||
sourceRow = $(event.currentTarget).parents("tr").filter(":first");
|
||||
tbody = sourceRow.parents("tbody").filter(":first");
|
||||
//debugger;
|
||||
dataSet(sourceRow[0], INDEXKEY, ko.utils.arrayIndexOf(sourceRow.parent().children(), sourceRow[0]));
|
||||
ko.utils.domData.set(sourceRow[0], "ko_sourceIndex", ko.utils.arrayIndexOf(sourceRow.parent().children(), sourceRow[0]));
|
||||
sourceRow = sourceRow.detach();
|
||||
if ($(event.currentTarget).is(".buttonMoveToTop")) {
|
||||
// we are moving to the top
|
||||
@@ -67,7 +58,7 @@ function Fileslisting(parent) {
|
||||
}
|
||||
tbody.sortable('option', 'update').call(tbody[0],null, { item: sourceRow });
|
||||
};
|
||||
|
||||
|
||||
// Trigger update
|
||||
self.triggerUpdate = function() {
|
||||
// Call API
|
||||
@@ -230,9 +221,9 @@ function FileslistingModel(parent, data) {
|
||||
self.nzf_id = ko.observable(data.nzf_id);
|
||||
self.file_age = ko.observable(data.age);
|
||||
self.mb = ko.observable(data.mb);
|
||||
self.percentage = ko.observable(fixPercentages((100 - (data.mbleft / data.mb * 100)).toFixed(0)));
|
||||
self.canselect = ko.observable(data.status != "finished" && data.status != "queued");
|
||||
self.isdone = ko.observable(data.status == "finished");
|
||||
self.percentage = ko.observable(self.isdone() ? fixPercentages(100) : fixPercentages((100 - (data.mbleft / data.mb * 100)).toFixed(0)));
|
||||
|
||||
// Update internally
|
||||
self.updateFromData = function(data) {
|
||||
@@ -240,9 +231,10 @@ function FileslistingModel(parent, data) {
|
||||
self.nzf_id(data.nzf_id)
|
||||
self.file_age(data.age)
|
||||
self.mb(data.mb)
|
||||
self.percentage(fixPercentages((100 - (data.mbleft / data.mb * 100)).toFixed(0)));
|
||||
self.canselect(data.status != "finished" && data.status != "queued")
|
||||
self.isdone(data.status == "finished")
|
||||
// Data is given in MB, would always show 0% for small files even if completed
|
||||
self.percentage(self.isdone() ? fixPercentages(100) : fixPercentages((100 - (data.mbleft / data.mb * 100)).toFixed(0)))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -169,7 +169,6 @@ function HistoryListModel(parent) {
|
||||
|
||||
// Toggle showing failed
|
||||
self.toggleShowFailed = function(data, event) {
|
||||
|
||||
// Set the loader so it doesn't flicker and then switch
|
||||
self.isLoading(true)
|
||||
self.showFailed(!self.showFailed())
|
||||
@@ -177,7 +176,20 @@ function HistoryListModel(parent) {
|
||||
$('#history-options a').tooltip('hide')
|
||||
// Force refresh
|
||||
self.parent.refresh(true)
|
||||
}
|
||||
|
||||
// Retry all failed
|
||||
self.retryAllFailed = function(data, event) {
|
||||
// Ask to be sure
|
||||
if(confirm(glitterTranslate.retryAll)) {
|
||||
// Send the command
|
||||
callAPI({
|
||||
mode: 'retry_all'
|
||||
}).then(function() {
|
||||
// Force refresh
|
||||
self.parent.refresh(true)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Empty history options
|
||||
@@ -328,16 +340,14 @@ function HistoryModel(parent, data) {
|
||||
case 'speed':
|
||||
// Anything to calculate?
|
||||
if(self.historyStatus.bytes() > 0 && self.historyStatus.download_time() > 0) {
|
||||
var theSpeed = self.historyStatus.bytes()/self.historyStatus.download_time();
|
||||
theSpeed = theSpeed/1024;
|
||||
|
||||
// MB/s or KB/s
|
||||
if(theSpeed > 1024) {
|
||||
theSpeed = theSpeed/1024;
|
||||
return theSpeed.toFixed(1) + ' MB/s'
|
||||
} else {
|
||||
return Math.round(theSpeed) + ' KB/s'
|
||||
}
|
||||
try {
|
||||
// Extract the Download section
|
||||
var downloadLog = ko.utils.arrayFirst(self.historyStatus.stage_log(), function(item) {
|
||||
return item.name() == 'Download'
|
||||
});
|
||||
// Extract the speed
|
||||
return downloadLog.actions()[0].match(/(\S*\s\S+)(?=<br\/>)/)[0]
|
||||
} catch(err) { }
|
||||
}
|
||||
return;
|
||||
case 'category':
|
||||
|
||||
@@ -331,6 +331,13 @@ function ViewModel() {
|
||||
// Split title & speed
|
||||
var dataSplit = data.split('|||');
|
||||
|
||||
// Maybe the result is actually the login page?
|
||||
if(dataSplit[0].substring(0, 11) === '<html lang=') {
|
||||
// Redirect
|
||||
document.location = document.location
|
||||
return
|
||||
}
|
||||
|
||||
// Set title
|
||||
self.title(dataSplit[0]);
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ legend,
|
||||
background-color: #666;
|
||||
}
|
||||
|
||||
.navbar-collapse.in .dropdown-menu {
|
||||
.navbar-collapse.in .dropdown-menu, {
|
||||
border: none;
|
||||
}
|
||||
|
||||
@@ -111,6 +111,7 @@ legend,
|
||||
color: #EBEBEB;
|
||||
}
|
||||
|
||||
table,
|
||||
.table-striped>tbody>tr:nth-child(even)>td,
|
||||
.table>tbody>tr:nth-child(even)>td,
|
||||
.table th,
|
||||
@@ -158,7 +159,9 @@ select.form-control,
|
||||
.retry-button, .retry-button-inactive,
|
||||
.history-options-show-failed,
|
||||
.queue-error-info,
|
||||
.options-bad-status {
|
||||
.options-bad-status,
|
||||
.history-failed-download:hover .retry-button .glyphicon:before,
|
||||
.retry-button:hover .glyphicon:before {
|
||||
color: #F95151 !important;
|
||||
}
|
||||
|
||||
@@ -205,6 +208,10 @@ hr {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
#modal-item-files .item-files-table {
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
.history-queue-swicher .nav-tabs>li>a,
|
||||
.history-queue-swicher .nav-tabs>li.active>a {
|
||||
border-bottom: none;
|
||||
@@ -222,6 +229,11 @@ hr {
|
||||
box-shadow: inset 1px 0px 1px rgba(0, 0, 0, 1);
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
border-color: #727272;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
/* Placeholders - Will not work if grouped! */
|
||||
::-webkit-input-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
|
||||
@@ -533,9 +533,16 @@ tbody>tr>td:last-child {
|
||||
}
|
||||
|
||||
.hover-button.disabled,
|
||||
.hover-button.disabled:hover {
|
||||
.hover-button.disabled:hover,
|
||||
.name-options.disabled .hover-button,
|
||||
.name-options.disabled .hover-button:hover {
|
||||
cursor: not-allowed !important;
|
||||
opacity: 0.1 !important;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.name-options.disabled {
|
||||
cursor: not-allowed !important;
|
||||
}
|
||||
|
||||
.info-container {
|
||||
@@ -656,12 +663,16 @@ td.name .name-icons {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.queue-table td.name:hover .name-icons {
|
||||
display: none;
|
||||
}
|
||||
|
||||
td.name .name-icons .glyphicon {
|
||||
margin-left: 2px;
|
||||
top: 2px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.glyphicon-chevron-down,
|
||||
.glyphicon-chevron-up {
|
||||
top: 2px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
tbody.no-downloads tr td {
|
||||
|
||||
@@ -101,6 +101,7 @@
|
||||
<div id="nav_text_left">
|
||||
<span id="warning_box"><b><a href="${path}status/#tabs-warnings" id="last_warning" title="#echo $last_warning.replace("\n"," ").replace('"',"'") #"><span id="have_warnings">$have_warnings</span> $T('warnings')</a></b></span>
|
||||
#if $pane=="Main"#
|
||||
⋅ <a href="${path}config/general#web_dir">#echo $T('useGlitter').split('.')[0]#.</a>
|
||||
#if $new_release#⋅ <a href="$new_rel_url" id="new_release" target="_blank">$T('Plush-updateAvailable').replace(' ',' ')</a>#end if#
|
||||
#end if#
|
||||
</div>
|
||||
|
||||
@@ -109,11 +109,6 @@ body {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#new_release {
|
||||
color: green;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#livetip {
|
||||
position: absolute;
|
||||
background-color: #cfc;
|
||||
@@ -343,6 +338,7 @@ body {
|
||||
clear:left;
|
||||
padding: 0 20px 0 25px;
|
||||
font-size:90%;
|
||||
font-weight: bold;
|
||||
}
|
||||
#nav_text_left a, #nav_text_right a {
|
||||
color:#000;
|
||||
@@ -1083,7 +1079,7 @@ tr:hover .history_added { color: black; }
|
||||
color: red;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
|
||||
.rating_icon_vision {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
|
||||
16146
interfaces/smpl/templates/static/MochiKit/MochiKit.js
vendored
16146
interfaces/smpl/templates/static/MochiKit/MochiKit.js
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,2 +1,2 @@
|
||||
dojo.hostenv.conditionalLoadModule({"common": ["MochiKit.MochiKit"]});
|
||||
dojo.hostenv.moduleLoaded("MochiKit.*");
|
||||
dojo.hostenv.conditionalLoadModule({"common": ["MochiKit.MochiKit"]});
|
||||
dojo.hostenv.moduleLoaded("MochiKit.*");
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<div class="clearfix"></div>
|
||||
<iframe style="float: right; width: 315px; height: 315px;" frameborder="0" src="https://resources.sabnzbd.org/wizard/ad/$language"></iframe>
|
||||
<iframe style="float: right; width: 325px; height: 325px;" frameborder="0" src="https://sabnzbd.org/wizard#$language"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
The original author of SABnzbd based his work on Pynewsleecher by Freddy@madcowdesease.org.
|
||||
|
||||
Few parts of Pynewsleecher have survived the generations of SABnzbd in a
|
||||
recognizable form.
|
||||
Still, we wish to thank Freddy for his inspiration.
|
||||
|
||||
The home of the Pynewsleecher project:
|
||||
http://www.madcowdisease.org/mcd/pynewsleecher
|
||||
|
||||
The software does not carry any license information.
|
||||
|
||||
The original author of SABnzbd based his work on Pynewsleecher by Freddy@madcowdesease.org.
|
||||
|
||||
Few parts of Pynewsleecher have survived the generations of SABnzbd in a
|
||||
recognizable form.
|
||||
Still, we wish to thank Freddy for his inspiration.
|
||||
|
||||
The home of the Pynewsleecher project:
|
||||
http://www.madcowdisease.org/mcd/pynewsleecher
|
||||
|
||||
The software does not carry any license information.
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
On http://www.brunningonline.net/simon/blog/archives/001835.html,
|
||||
the author licensed SysTrayIcon.py under a variant of the WTFPL:
|
||||
|
||||
> Any road up, help yourself. Consider SysTrayIcon.py to be under an
|
||||
> "Aleister Crowley" style license - "Do what thou wilt shall be the
|
||||
> only law".
|
||||
>
|
||||
> Err, but don't sue me if it doesn't work. ;-)
|
||||
On http://www.brunningonline.net/simon/blog/archives/001835.html,
|
||||
the author licensed SysTrayIcon.py under a variant of the WTFPL:
|
||||
|
||||
> Any road up, help yourself. Consider SysTrayIcon.py to be under an
|
||||
> "Aleister Crowley" style license - "Do what thou wilt shall be the
|
||||
> only law".
|
||||
>
|
||||
> Err, but don't sue me if it doesn't work. ;-)
|
||||
|
||||
BIN
osx/unrar/unrar
BIN
osx/unrar/unrar
Binary file not shown.
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-22 20:42+0000\n"
|
||||
"PO-Revision-Date: 2017-06-13 09:56+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2017-08-01 16:45+0000\n"
|
||||
"Last-Translator: ION IL <Unknown>\n"
|
||||
"Language-Team: Hebrew <he@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-23 05:55+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-02 06:03+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
@@ -64,6 +64,48 @@ msgid ""
|
||||
"Sorry!\n"
|
||||
"<!--#end if#-->\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## SABnzbd תבנית דוא\"ל ברירת מחדל עבור\n"
|
||||
"## זאת תבנית ברדלס\n"
|
||||
"## http://sabnzbd.wikidot.com/email-templates :תיעוד\n"
|
||||
"##\n"
|
||||
"## !שורות חדשות ורווחים לבנים הם משמעותיים\n"
|
||||
"##\n"
|
||||
"## אלו כותרות הדוא\"ל\n"
|
||||
"$to :אל\n"
|
||||
"$from :מאת\n"
|
||||
"תאריך: $date\n"
|
||||
"<!--#if $status then \"completed\" else \"failed\" #--> $name יש עבודה אשר "
|
||||
"SABnzbd-נושא: ל\n"
|
||||
"## !אחרי זה בא הגוף, השורה הריקה דרושה\n"
|
||||
"\n"
|
||||
",היי\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd הוריד את \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin "
|
||||
"#\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd נכשל להוריד את \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
"\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
"<!--#end if#-->\n"
|
||||
"הסתיים ב-$end_time\n"
|
||||
"הורדו $size\n"
|
||||
"\n"
|
||||
":תוצאות העבודה\n"
|
||||
"<!--#for $stage ב $stages #-->\n"
|
||||
"שלב $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result ב $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
":(קוד יציאה = $script_ret) \"$script\" פלט מתסריט משתמש\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"!תהנה\n"
|
||||
"<!--#else#-->\n"
|
||||
"!סליחה\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
msgid ""
|
||||
@@ -93,6 +135,29 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## SABnzbd עבור RSS תבנית דוא\"ל\n"
|
||||
"## זאת תבנית ברדלס\n"
|
||||
"## http://sabnzbd.wikidot.com/email-templates :תיעוד\n"
|
||||
"##\n"
|
||||
"## !שורות חדשות ורווחים לבנים הם משמעותיים\n"
|
||||
"##\n"
|
||||
"## אלו כותרות הדוא\"ל\n"
|
||||
"$to :אל\n"
|
||||
"$from :מאת\n"
|
||||
"תאריך: $date\n"
|
||||
"הוסיף $amount עבודות לתור SABnzbd :נושא\n"
|
||||
"## !אחרי זה בא הגוף, השורה הריקה דרושה\n"
|
||||
"\n"
|
||||
",היי\n"
|
||||
"\n"
|
||||
".הוסיף $amount עבודות לתור SABnzbd\n"
|
||||
".\"$feed\" בשם RSS הם מהזנת\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"ביי\n"
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
@@ -119,3 +184,23 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## SABnzbd רעה עבור URL תבנית דוא\"ל של משיכת\n"
|
||||
"## זאת תבנית ברדלס\n"
|
||||
"## http://sabnzbd.wikidot.com/email-templates :תיעוד\n"
|
||||
"##\n"
|
||||
"## !שורות חדשות ורווחים לבנים הם משמעותיים\n"
|
||||
"##\n"
|
||||
"## אלו כותרות הדוא\"ל\n"
|
||||
"$to :אל\n"
|
||||
"$from :מאת\n"
|
||||
"תאריך: $date\n"
|
||||
"NZB נכשל במשיכת SABnzbd :נושא\n"
|
||||
"## !אחרי זה בא הגוף, השורה הריקה דרושה\n"
|
||||
"\n"
|
||||
",היי\n"
|
||||
"\n"
|
||||
".$url מתוך NZB-נכשל לאחזר את ה SABnzbd\n"
|
||||
"הודעת השגיאה הייתה: $msg\n"
|
||||
"\n"
|
||||
"ביי\n"
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-2.2.0-develop\n"
|
||||
"Project-Id-Version: SABnzbd-2.3.0-develop\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: shypike@sabnzbd.org\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ASCII\n"
|
||||
"Content-Transfer-Encoding: 7bit\n"
|
||||
"POT-Creation-Date: 2017-07-15 13:06+W. Europe Daylight Time\n"
|
||||
"POT-Creation-Date: 2017-08-25 09:18+W. Europe Daylight Time\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
@@ -40,10 +40,22 @@ msgstr ""
|
||||
msgid "par2 binary... NOT found!"
|
||||
msgstr ""
|
||||
|
||||
#: SABnzbd.py [Error message] # SABnzbd.py [Error message]
|
||||
msgid "Verification and repair will not be possible."
|
||||
msgstr ""
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "MultiPar binary... NOT found!"
|
||||
msgstr ""
|
||||
|
||||
#: SABnzbd.py [Warning message]
|
||||
msgid "Your UNRAR version is %s, we recommend version %s or higher.<br />"
|
||||
msgstr ""
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Downloads will not unpacked."
|
||||
msgstr ""
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "unrar binary... NOT found"
|
||||
msgstr ""
|
||||
@@ -93,7 +105,7 @@ msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr ""
|
||||
|
||||
@@ -178,10 +190,6 @@ msgstr ""
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/__init__.py [Warning message]
|
||||
msgid "Too little diskspace forcing PAUSE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/__init__.py [Error message]
|
||||
msgid "Failure in tempfile.mkstemp"
|
||||
msgstr ""
|
||||
@@ -229,6 +237,10 @@ msgstr ""
|
||||
msgid "Failed to compile regex for search term: %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/assembler.py [Warning message]
|
||||
msgid "Too little diskspace forcing PAUSE"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/assembler.py [Error message]
|
||||
msgid "Disk full! Forcing Pause"
|
||||
msgstr ""
|
||||
@@ -409,10 +421,14 @@ msgstr ""
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
@@ -420,21 +436,25 @@ msgid "Unpacked %s files/folders in %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Enabled Direct Unpack:"
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid "Jobs will start unpacking during the download, reduces post-processing time but requires capable hard drive. Only works for jobs that do not need repair."
|
||||
msgid "Jobs will start unpacking during the downloading to reduce post-processing time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Warning message]
|
||||
#: sabnzbd/dirscanner.py [Warning message] # sabnzbd/rss.py [Warning message]
|
||||
msgid "Cannot read %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error while adding %s, removing"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Cannot read Watched Folder %s"
|
||||
msgstr ""
|
||||
@@ -600,7 +620,7 @@ msgstr ""
|
||||
msgid "Authentication missing, please enter username/password from Config->General into your 3rd party program:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid "Try our new skin Glitter! Fresh new design that is optimized for desktop and mobile devices. Go to Config -> General to change your skin."
|
||||
msgstr ""
|
||||
|
||||
@@ -660,7 +680,7 @@ msgstr ""
|
||||
msgid "Undefined server!"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/interface.py
|
||||
#: sabnzbd/interface.py # sabnzbd/interface.py
|
||||
msgid "Incorrect parameter"
|
||||
msgstr ""
|
||||
|
||||
@@ -708,6 +728,10 @@ msgstr ""
|
||||
msgid "Error creating SSL key and certificate"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py [Warning message]
|
||||
msgid "Your password file contains more than 30 passwords, testing all these passwords takes a lot of time. Try to only list useful passwords."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py [Error message]
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr ""
|
||||
@@ -779,6 +803,11 @@ msgstr ""
|
||||
msgid "Unpacking failed, archive requires a password"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacking"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP phase "unpack"]
|
||||
msgid "Unpack"
|
||||
msgstr ""
|
||||
@@ -912,7 +941,7 @@ msgid "Main packet not found..."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Invalid par2 files, cannot verify or repair"
|
||||
msgid "Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
@@ -937,6 +966,11 @@ msgstr ""
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -944,19 +978,15 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1014,7 +1044,7 @@ msgid "Not available"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr ""
|
||||
|
||||
@@ -1106,7 +1136,7 @@ msgstr ""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1114,6 +1144,10 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "%d files with duplicate filenames were discared for \"%s\". Enable \"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr ""
|
||||
@@ -1213,7 +1247,7 @@ msgid "Limit Speed"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr ""
|
||||
@@ -1455,7 +1489,7 @@ msgstr ""
|
||||
msgid "Download Completed"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -1519,6 +1553,18 @@ msgstr ""
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid "This key provides identity to indexer. Check your profile on the indexer's website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr ""
|
||||
@@ -1605,10 +1651,6 @@ msgstr ""
|
||||
msgid "Failure"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
@@ -1737,6 +1779,14 @@ msgstr ""
|
||||
msgid "Disable quota management"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Config->Scheduler]
|
||||
msgid "Pause jobs with category"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Config->Scheduler]
|
||||
msgid "Resume jobs with category"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Prowl priority] # sabnzbd/skintext.py [Prowl priority] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
msgid "Off"
|
||||
msgstr ""
|
||||
@@ -1817,6 +1867,54 @@ msgstr ""
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr ""
|
||||
@@ -2595,6 +2693,34 @@ msgstr ""
|
||||
msgid "List of file extensions that should be deleted after download.<br />For example: <b>nfo</b> or <b>nfo, sfv</b>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Automatically delete completed jobs from History. Beware that Duplicate Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr ""
|
||||
@@ -2619,10 +2745,6 @@ msgstr ""
|
||||
msgid "Help us translate SABnzbd in your language! <br/>Add untranslated texts or improved existing translations here:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr ""
|
||||
@@ -2871,14 +2993,26 @@ msgstr ""
|
||||
msgid "Detect identical episodes in series (based on \"name/season/episode\" of items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Allow proper releases"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Bypass series duplicate detection if PROPER, REAL or REPACK is detected in the download name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr ""
|
||||
@@ -2923,6 +3057,14 @@ msgstr ""
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "When sorting, use tags from indexer for title, season, episode, etc. Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr ""
|
||||
@@ -2967,10 +3109,6 @@ msgstr ""
|
||||
msgid "Automatically sort items by (average) age."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Posts will be paused untill they are at least this age. Setting job priority to Force will skip the delay."
|
||||
msgstr ""
|
||||
@@ -3132,11 +3270,7 @@ msgid "Enable Indexer Integration"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Indexers can supply rating information when a job is added and SABnzbd can report to the indexer if a job couldn't be completed. Depending on your indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key provides identity to indexer. Check your profile on the indexer's website."
|
||||
msgid "Indexers can supply rating information when a job is added and SABnzbd can report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3475,10 +3609,6 @@ msgstr ""
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr ""
|
||||
@@ -4011,6 +4141,10 @@ msgstr ""
|
||||
msgid "articles"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr ""
|
||||
@@ -4475,6 +4609,14 @@ msgid ""
|
||||
"It is licensed under the GNU GENERAL PUBLIC LICENSE Version 2 or (at your option) any later version.\n"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "In order to download from usenet you will require access to a provider. Your ISP may provide you with access, however a premium provider is recommended."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr ""
|
||||
@@ -4492,7 +4634,7 @@ msgstr ""
|
||||
msgid "Server name does not resolve"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr ""
|
||||
|
||||
|
||||
230
po/main/da.po
230
po/main/da.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2017-06-22 07:07+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"Language-Team: Danish <da@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:53+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -104,7 +104,7 @@ msgid "Error"
|
||||
msgstr "Fejl"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd lukning udført."
|
||||
|
||||
@@ -427,13 +427,37 @@ msgstr "Forkert udformet yEnc artikel i %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Ukendt fejl under afkodning af %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUENCODE detekteret, kun yEnc kodning understøttes [%s]"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => mangler fra alle servere, afviser"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUENCODE detekteret, kun yEnc kodning understøttes [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Færdig"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Udpakket %s filer/mapper i %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
@@ -632,7 +656,7 @@ msgstr ""
|
||||
"Brugeroplysninger mangler, indtast brugernavn / password fra Konfiguration-> "
|
||||
"Generelt i dit tredjepartsprogram:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -806,8 +830,6 @@ msgstr "[%s] Fejl \"%s\" under udpakning af RAR fil(er)"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Fejl \"%s\" når du køre rar_unpack på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -890,10 +912,6 @@ msgstr "Ubrugelig RAR fil"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Ødelagt RAR fil"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Udpakket %s filer/mapper i %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s filer i %s"
|
||||
@@ -994,6 +1012,11 @@ msgstr "Reparerer"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Repareret i %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -1001,19 +1024,15 @@ msgstr "Disk fuld"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Bekræfter"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Kontrollerer"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Python script '%s' har ikke udfør (+x) tilladelsessæt"
|
||||
@@ -1073,7 +1092,7 @@ msgid "Not available"
|
||||
msgstr "Ikke tilgængelig"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Kan ikke sende, mangler nødvendige data"
|
||||
|
||||
@@ -1165,7 +1184,7 @@ msgstr "Ignorerer identiske NZB \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Fejler dublet NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Dublet NZB"
|
||||
|
||||
@@ -1173,6 +1192,12 @@ msgstr "Dublet NZB"
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pause duplikeret NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Afbrudt, kan ikke afsluttes"
|
||||
@@ -1272,7 +1297,7 @@ msgid "Limit Speed"
|
||||
msgstr "Hastighedsbegrænsning"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
@@ -1486,10 +1511,6 @@ msgstr "Overførslen kan mislykkes, kun %s af det krævede %s tilgængelig"
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Download mislykkedes - ikke på din server (e)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Kan ikke oprette endelig mappe %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Ingen efterbehandling på grund af mislykket godkendelse"
|
||||
@@ -1554,6 +1575,10 @@ msgstr "Det lykkedes ikke at fjerne arbejdsmappen (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Overførsel fuldført"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Kan ikke oprette endelig mappe %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Efterbehandling"
|
||||
@@ -1614,6 +1639,22 @@ msgstr "Fejl ved lukning af system"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Indexer id (%s) ikke fundet for ratings fil"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Serveradresse"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-nøgle"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
"Denne nøgle indeholder identitet indekseringen. Tjek din profil på "
|
||||
"indekseringens hjemmeside."
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Forkert RSS-feed beskrivelse \"%s\""
|
||||
@@ -1700,10 +1741,6 @@ msgstr "Server"
|
||||
msgid "Failure"
|
||||
msgstr "Mislykkedes"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Færdig"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Mislykkedes"
|
||||
@@ -1912,6 +1949,54 @@ msgstr "Måned"
|
||||
msgid "Year"
|
||||
msgstr "År"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Månedsdag"
|
||||
@@ -2735,6 +2820,36 @@ msgstr ""
|
||||
"Listen over filtypenavne, der skal slettes efter download. < br / > For "
|
||||
"eksempel: <b>nfo</b> eller <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Gem ændringer"
|
||||
@@ -2763,10 +2878,6 @@ msgstr ""
|
||||
"Hjælp os med at oversætte SABnzbd på dit sprog! <br/> Tilføj uoversatte "
|
||||
"tekster eller forbedrede eksisterende oversættelser her:"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-nøgle"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr "Denne nøgle vil give 3. parts programmer fuld adgang til SABnzbd."
|
||||
@@ -3073,14 +3184,18 @@ msgstr ""
|
||||
"Fundet identiske episoder i serie (baseret på \"navn /sæson /episode\" af "
|
||||
"elementer i din historik)"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Kassér"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr "Mislykkes job (flyt til historik)"
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Afbryd"
|
||||
@@ -3131,6 +3246,16 @@ msgstr "Ved fejl, prøv alternativ NZB"
|
||||
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 "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Aktiver mappe omdøbning"
|
||||
@@ -3359,20 +3484,8 @@ msgstr "Aktiver indekseringen Integration"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
"Indeksatorer kan levere klassifikationsoplysninger, når et job er tilføjet "
|
||||
"og SABnzbd kan rapportere indekseringen, hvis et job ikke kunne fuldføres. "
|
||||
"Afhængigt af din indekseringen, kan API tasteindstillingen stå tomt."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
"Denne nøgle indeholder identitet indekseringen. Tjek din profil på "
|
||||
"indekseringens hjemmeside."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Filtering"
|
||||
@@ -3726,10 +3839,6 @@ msgstr "Aktiver Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Send meddelelser til Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Serveradresse"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Bruges kun ved Growl fjern server (vært: port)"
|
||||
@@ -4137,7 +4246,7 @@ msgstr "Ændre NZB detaljer"
|
||||
msgid "Delete"
|
||||
msgstr "Slet"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Øverst"
|
||||
|
||||
@@ -4149,7 +4258,7 @@ msgstr "Op"
|
||||
msgid "Down"
|
||||
msgstr "Ned"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Bunden"
|
||||
|
||||
@@ -4281,6 +4390,10 @@ msgstr "Indlæser..."
|
||||
msgid "articles"
|
||||
msgstr "artikler"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Omdøbe"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Kø reparation"
|
||||
@@ -4782,7 +4895,7 @@ msgstr "Kunne ikke omdøbe lignende fil: %s til %s"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Servernavnet løser ikke"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Uautoriseret adgang"
|
||||
|
||||
@@ -5162,9 +5275,6 @@ msgstr "URL hentning mislykkedes; %s"
|
||||
#~ msgid "Pause Interval"
|
||||
#~ msgstr "Pause interval"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Omdøbe"
|
||||
|
||||
#~ msgid "Upload: .nzb .rar .zip .gz"
|
||||
#~ msgstr "Upload: .nzb .rar .zip .gz"
|
||||
|
||||
|
||||
247
po/main/de.po
247
po/main/de.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"PO-Revision-Date: 2017-06-22 07:06+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2017-08-09 21:46+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"Language-Team: German <de@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-10 06:03+0000\n"
|
||||
"X-Generator: Launchpad (build 18446)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -111,7 +111,7 @@ msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd wurde beendet"
|
||||
|
||||
@@ -201,7 +201,7 @@ msgstr "Temporäre Datei für %s konnte nicht angelegt werden"
|
||||
|
||||
#: sabnzbd/__init__.py [Warning message] # sabnzbd/__init__.py [Warning message]
|
||||
msgid "Trying to set status of non-existing server %s"
|
||||
msgstr "Versuche Status für nicht bestehenden Server %s zu setzen"
|
||||
msgstr "Status für nicht vorhandenen Server wird versucht %s einzustellen"
|
||||
|
||||
#: sabnzbd/__init__.py [Warning message]
|
||||
msgid "Too little diskspace forcing PAUSE"
|
||||
@@ -446,13 +446,40 @@ msgstr "Ungültiger yEnc-Artikel in %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Unbekannter Fehler %s beim Dekodieren"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode gefunden, nur yEnc Codierung wir unterstützt [%s]"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s wurde auf keinem Server gefunden und daher übersprungen"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode gefunden, nur yEnc Codierung wir unterstützt [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr "Direkt entpacken"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Fertiggestellt"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "%s Datei(en)/Ordner entpackt in %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr "Direkt entpacken wurde automatisch aktiviert"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
"Aufträge werden bereits während des Download-Vorgangs entpackt, um die "
|
||||
"Nachbearbeitungszeit zu verkürzen. Nur für Aufträge, die nicht repariert "
|
||||
"werden müssen."
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
@@ -654,7 +681,7 @@ msgstr ""
|
||||
"Authentifizierung fehlt. Bitte Benutzernamen und Passwort aus Einstellungen-"
|
||||
">Allgemein in die externe Anwendung eingeben:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -827,8 +854,6 @@ msgstr "[%s] Fehler \"%s\" beim Entpacken der RAR-Dateien"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Fehler \"%s\" beim Ausführen von rar_unpack auf %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -913,10 +938,6 @@ msgstr "RAR-Datei beschädigt"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Defekte RAR Datei"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "%s Datei(en)/Ordner entpackt in %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s Dateien in %s"
|
||||
@@ -1021,6 +1042,11 @@ msgstr "Reparieren"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Repariert in %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr "Überprüfe Reparatur"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -1028,19 +1054,15 @@ msgstr "Festplatte voll"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Überprüfen"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Wird überprüft"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Dem Pythonskript \"%s\" fehlen die Ausführenrechte (+x)"
|
||||
@@ -1054,10 +1076,13 @@ msgid ""
|
||||
"Certificate hostname mismatch: the server hostname is not listed in the "
|
||||
"certificate. This is a server issue."
|
||||
msgstr ""
|
||||
"Zertifikat ungültig: Der Server-Host ist nicht im angegeben Zertifikat "
|
||||
"enthalten. Dies ist ein Serverproblem."
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "Certificate not valid. This is most probably a server issue."
|
||||
msgstr ""
|
||||
"Zertifikat ist nicht gültig. Dies ist wahrscheinlich ein Serverproblem."
|
||||
|
||||
#: sabnzbd/newswrapper.py
|
||||
msgid "Server %s uses an untrusted certificate [%s]"
|
||||
@@ -1100,7 +1125,7 @@ msgid "Not available"
|
||||
msgstr "Nicht verfügbar"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Absenden nicht möglich, benötigte Daten fehlen"
|
||||
|
||||
@@ -1197,7 +1222,7 @@ msgstr "Doppelte NZB \"%s\" wird ignoriert"
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "kopieren der NZB \"%s\" fehlgeschlagen"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Doppelte NZB"
|
||||
|
||||
@@ -1205,6 +1230,14 @@ msgstr "Doppelte NZB"
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Doppelt vorhandene NZB \"%s\" angehalten"
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
"%d Dateien mit doppelten Dateinamen wurden für \"%s\" verworfen. Aktiviere "
|
||||
"\"allow_duplicate_files\" um doppelte Dateinamen zu erlauben."
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Abgebrochen, kann nicht fertiggestellt werden"
|
||||
@@ -1305,7 +1338,7 @@ msgid "Limit Speed"
|
||||
msgstr "Geschwindigkeit begrenzen"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Anhalten"
|
||||
@@ -1494,6 +1527,8 @@ msgid ""
|
||||
"Unable to bind to port %s on %s. Some other software uses the port or "
|
||||
"SABnzbd is already running."
|
||||
msgstr ""
|
||||
"Konnte nicht an Port %s auf %s starten. Eine andere Software nutzt diesen "
|
||||
"Port oder SABnzbd läuft bereits."
|
||||
|
||||
#: sabnzbd/panic.py # sabnzbd/panic.py
|
||||
msgid "Fatal error"
|
||||
@@ -1531,10 +1566,6 @@ msgstr ""
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Download fehlgeschlagen - Nicht auf deinem/n Server/n vorhanden"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Konnte Download-Ordner %s nicht anlegen"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Keine Nachbearbeitung wegen fehlgeschlagener Überprüfung"
|
||||
@@ -1599,6 +1630,10 @@ msgstr "Fehler beim Entfernen des Arbeitsverzeichnisses %s."
|
||||
msgid "Download Completed"
|
||||
msgstr "Download fertig"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Konnte Download-Ordner %s nicht anlegen"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Nachbearbeitung"
|
||||
@@ -1659,6 +1694,22 @@ msgstr "Fehler beim Herunterfahren des Systems"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Indexer ID (%s) für Bewertung nicht gefunden"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Server-Adresse"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
"Der Schlüssel liefert die Identität des Indexers. Prüfe dein Profil auf der "
|
||||
"indexer Webseite."
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Ungültige RSS-Feed-Beschreibung \"%s\""
|
||||
@@ -1745,10 +1796,6 @@ msgstr "Server"
|
||||
msgid "Failure"
|
||||
msgstr "Fehler"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Fertiggestellt"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Fehlgeschlagen"
|
||||
@@ -1957,6 +2004,54 @@ msgstr "Monat"
|
||||
msgid "Year"
|
||||
msgstr "Jahr"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr "Januar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr "Februar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr "März"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr "April"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr "Mai"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr "Juni"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr "Juli"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr "August"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr "September"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr "Oktober"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr "November"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr "Dezember"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Tag im Monat"
|
||||
@@ -2585,7 +2680,7 @@ msgstr "7zip aktivieren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Multicore Par2"
|
||||
msgstr ""
|
||||
msgstr "Multicore Par2"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
@@ -2787,6 +2882,38 @@ msgstr ""
|
||||
"Liste der Dateiendungen, die nach dem Download gelöscht werden sollen.<br "
|
||||
"/>Zum Beispiel:<b>nfo</b> or <b>nfo,sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr "Verlaufsgröße"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
"Fertige Aufträge automatisch aus dem Verlauf entfernen. Duplikatserkennung "
|
||||
"und manche externe Skripte benötigen Informationen aus dem Verlauf."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr "Alle Aufträge behalten"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr "Fertige Aufträge nicht behalten"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr "Aufträge"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Änderungen speichern"
|
||||
@@ -2815,10 +2942,6 @@ msgstr ""
|
||||
"Hilf uns beim Übersetzen von SABnzbd in deiner Sprache! <br/>Neue "
|
||||
"Übersetzungen hinzufügen oder bestehende verbessern kannst du hier:"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr ""
|
||||
@@ -3135,14 +3258,18 @@ msgstr ""
|
||||
"Identische Episoden in den Serien entdeckt (basierend auf "
|
||||
"\"name/season/episode\") der Einträge in der Historie"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Verwerfen"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr "Aufgabe abgebrochen (verschoben in die Historie)"
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Abbrechen"
|
||||
@@ -3196,6 +3323,16 @@ msgstr ""
|
||||
"Manche Server stellen ein alternatives NZB zur Verfügung, falls ein Download "
|
||||
"fehlschlägt."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Ordner-Umbenennung aktivieren"
|
||||
@@ -3438,18 +3575,9 @@ msgstr "Indexer Integration eingeschaltet"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
"Der Schlüssel liefert die Identität des Indexers. Prüfe dein Profil auf der "
|
||||
"indexer Webseite."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Filtering"
|
||||
msgstr "Filter aktivieren"
|
||||
@@ -3584,7 +3712,7 @@ msgstr "Optional"
|
||||
|
||||
#: sabnzbd/skintext.py [Explain server optional tickbox]
|
||||
msgid "For unreliable servers, will be ignored longer in case of failures"
|
||||
msgstr ""
|
||||
msgstr "Für unzuverlässige Server, wird bei Fehlern länger ignoriert"
|
||||
|
||||
#: sabnzbd/skintext.py [Enable server tickbox]
|
||||
msgid "Enable"
|
||||
@@ -3806,10 +3934,6 @@ msgstr "Growl aktivieren"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Benachrichtigungen an Growl senden"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Server-Adresse"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Nur für entfernten Growl-Server verwenden (Rechnername:Port)"
|
||||
@@ -4213,7 +4337,7 @@ msgstr "NZB-Details bearbeiten"
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Ganz nach oben"
|
||||
|
||||
@@ -4225,7 +4349,7 @@ msgstr "Nach oben"
|
||||
msgid "Down"
|
||||
msgstr "Nach unten"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Ganz nach unten"
|
||||
|
||||
@@ -4358,6 +4482,10 @@ msgstr "Wird geladen..."
|
||||
msgid "articles"
|
||||
msgstr "Artikel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Umbenennen"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Reparatur der Warteschlange"
|
||||
@@ -4861,7 +4989,7 @@ msgstr "Umbenennen der gleichen Datei von %s nach %s fehlgeschlagen."
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Konnte Servernamen nicht auflösen"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Unerlaubter Zugriff"
|
||||
|
||||
@@ -5214,9 +5342,6 @@ msgstr "Abrufen der URL fehlgeschlagen; %s"
|
||||
#~ msgid "Pause for 24 hours"
|
||||
#~ msgstr "24 Stunden anhalten"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Umbenennen"
|
||||
|
||||
#~ msgid "Left"
|
||||
#~ msgstr "Verbleibend"
|
||||
|
||||
|
||||
@@ -105,3 +105,11 @@ msgstr "Posts will be paused until they are at least this age. Setting job prior
|
||||
msgid "Support the project, Donate!"
|
||||
msgstr "Support the project, donate!"
|
||||
|
||||
msgid "%d files with duplicate filenames were discared for \"%s\". Enable \"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr "%d files with duplicate filenames were discarded for \"%s\". Enable \"allow_duplicate_files\" to allow duplicate filenames."
|
||||
|
||||
msgid "User script can flag job as failed"
|
||||
msgstr "Post-processing script can flag job as failed"
|
||||
|
||||
msgid "When the user script returns a non-zero exit code, the job will be flagged as failed."
|
||||
msgstr "When the post-processing script returns a non-zero exit code, the job will be flagged as failed."
|
||||
|
||||
223
po/main/es.po
223
po/main/es.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2017-06-22 07:07+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"Language-Team: Spanish <es@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:54+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -105,7 +105,7 @@ msgid "Error"
|
||||
msgstr "Se ha producido un error"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Cierre de SABnzbd terminado"
|
||||
|
||||
@@ -428,13 +428,37 @@ msgstr "Articulo yEnc corrupto en %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Error inespecifico mientras descodificando %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode detectada, la única codificación válida es Enc [%s]"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => faltando de todos servidores, desechando"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode detectada, la única codificación válida es Enc [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Completado"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Descompresos %s archivos/directorios en %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
@@ -634,7 +658,7 @@ msgstr ""
|
||||
"Faltaron datos de cuenta, favor ingresar usuario/contraseña desde Config-"
|
||||
">General en tu aplicacion externa:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -809,8 +833,6 @@ msgstr "[%s] Error \"%s\" al descomprimir ficheros RAR"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Error \"%s\" al ejecutar rar_unpack sobre %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -894,10 +916,6 @@ msgstr "Archivo RAR inutilizable"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Fichero RAR corrupto"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Descompresos %s archivos/directorios en %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s archivos en %s"
|
||||
@@ -1002,6 +1020,11 @@ msgstr "Reparando"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Reparado en %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -1009,19 +1032,15 @@ msgstr "Disco lleno"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verificando"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Verificando"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1081,7 +1100,7 @@ msgid "Not available"
|
||||
msgstr "No disponible"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "No se ha podido enviar, faltan datos"
|
||||
|
||||
@@ -1176,7 +1195,7 @@ msgstr "Ignorando NZB Duplicado \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1184,6 +1203,12 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pausando NZB duplicados \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Abortado, No puede ser completado"
|
||||
@@ -1283,7 +1308,7 @@ msgid "Limit Speed"
|
||||
msgstr "Limitar Velocidad"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Pausar"
|
||||
@@ -1503,10 +1528,6 @@ msgstr "La descarga fallo, solo %s de los %s requeridos estan disponibles"
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Descarga fallida - No está en tu(s) servidor(es)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Imposible crear directorio final %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "No se ha podido post-procesar debido a un fallo en la verificación"
|
||||
@@ -1571,6 +1592,10 @@ msgstr "Error al eliminar el directorio de trabajo (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Descarga Completada"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Imposible crear directorio final %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Post-Procesado"
|
||||
@@ -1633,6 +1658,20 @@ msgstr ""
|
||||
"Identificación del indexador (%s) no encontrado para archivo de "
|
||||
"calificaciones"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Dirección del Servidor"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Clave API"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "iaDescripción de canal RSS incorrecta \"%s\""
|
||||
@@ -1721,10 +1760,6 @@ msgstr "Servidores"
|
||||
msgid "Failure"
|
||||
msgstr "Fallo"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Completado"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Fallido"
|
||||
@@ -1933,6 +1968,54 @@ msgstr "Mes"
|
||||
msgid "Year"
|
||||
msgstr "Año"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Día del mes"
|
||||
@@ -2752,6 +2835,36 @@ msgstr ""
|
||||
"Lista de extensiones de archivo que se deben eliminar después de la descarga "
|
||||
"<br /> Por ejemplo : . <b>nfo</ b> o <b>nfo, sfv < /b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Guardar cambios"
|
||||
@@ -2780,10 +2893,6 @@ msgstr ""
|
||||
"¡Ayúdanos a traducir SABnzbd en tu idioma!<br/>Traduce textos que aun no "
|
||||
"tienen ninguna traducción o mejora los que ya lo están traducidos aquí:"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Clave API"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr ""
|
||||
@@ -3089,14 +3198,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Descartar"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Abortar"
|
||||
@@ -3149,6 +3262,16 @@ 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 "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Habilitar renombrado de directorios"
|
||||
@@ -3384,14 +3507,7 @@ msgstr ""
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3750,10 +3866,6 @@ msgstr "Habilitar Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Enviar notificaciones a Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Dirección del Servidor"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Usar sólo para un servidor Growl remoto (servidor:puerto)"
|
||||
@@ -4157,7 +4269,7 @@ msgstr "Editar Detalles de NZB"
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Superior"
|
||||
|
||||
@@ -4169,7 +4281,7 @@ msgstr "Encima"
|
||||
msgid "Down"
|
||||
msgstr "Abajo"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Último"
|
||||
|
||||
@@ -4302,6 +4414,10 @@ msgstr "Cargando"
|
||||
msgid "articles"
|
||||
msgstr "artículos"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Renombrar"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Reparar cola"
|
||||
@@ -4804,7 +4920,7 @@ msgstr "Error al renombrar ficheros similares: %s a %s"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "No se puede resolver el nombre de servidor"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Acceso no autorizado"
|
||||
|
||||
@@ -5098,9 +5214,6 @@ msgstr "Error al recuperar la URL; %s"
|
||||
#~ msgid "Storage"
|
||||
#~ msgstr "Almacenamiento"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Renombrar"
|
||||
|
||||
#~ msgid "Access"
|
||||
#~ msgstr "Acceso"
|
||||
|
||||
|
||||
223
po/main/fi.po
223
po/main/fi.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2017-06-22 07:07+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"Language-Team: Finnish <fi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:53+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -107,7 +107,7 @@ msgid "Error"
|
||||
msgstr "Virhe"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd sammutus valmis"
|
||||
|
||||
@@ -427,13 +427,37 @@ msgstr "Huonosti muotoiltu yEnc artikkeli %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Tuntematon virhe dekoodattaessa %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode-koodaus havaittiin, vain yEnc-koodausta tuetaan [%s]"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => puuttuu kaikilta palvelimilta, hylätään"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode-koodaus havaittiin, vain yEnc-koodausta tuetaan [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Valmistunut"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Purettiin %s tiedostoa/kansiota kohteeseen %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
@@ -631,7 +655,7 @@ msgstr ""
|
||||
"Authentikointi puuttuu, ole hyvä ja syötä käyttäjänimi/salasana Asetukset-"
|
||||
">Yleiset kolmannen osapuolen ohjelmaasi:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -804,8 +828,6 @@ msgstr "[%s] Virhe \"%s\" purettaessa RAR tiedostoja"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Virhe \"%s\" ajettaessa rar_unpack kohteelle %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -888,10 +910,6 @@ msgstr "Käyttökelvoton RAR arkisto"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Korruptoitunut RAR arkisto"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Purettiin %s tiedostoa/kansiota kohteeseen %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s tiedostoa kohteessa %s"
|
||||
@@ -992,6 +1010,11 @@ msgstr "Korjataan"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Korjattiin ajassa %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -999,19 +1022,15 @@ msgstr "Levy täynnä"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Varmennetaan"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Tarkistetaan"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1071,7 +1090,7 @@ msgid "Not available"
|
||||
msgstr "Ei saatavilla"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Ei voida lähettää, vaaditut tiedot ovat puutteelliset"
|
||||
|
||||
@@ -1165,7 +1184,7 @@ msgstr "Ohitetaan kaksoiskappale NZB \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1173,6 +1192,12 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Keskeytetään kaksoiskappale NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Peruutettu, ei voi valmistua"
|
||||
@@ -1272,7 +1297,7 @@ msgid "Limit Speed"
|
||||
msgstr "Nopeusrajoitus"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Keskeytä"
|
||||
@@ -1490,10 +1515,6 @@ msgstr "Lataaminen saattaa epäonnistua, vain %s osaa %s osasta saatavilla"
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Lataus epäonnistui - Ei ole palvelimilla"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Ei voitu luoda lopullista kansiota %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Jälkikäsittelyä ei suoritettu, koska varmennus epäonnistui"
|
||||
@@ -1558,6 +1579,10 @@ msgstr "Virhe poistettaessa työkansiota (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Lataus valmistui"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Ei voitu luoda lopullista kansiota %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Jälkikäsittely"
|
||||
@@ -1618,6 +1643,20 @@ msgstr "Virhe sammutettaessa järjestelmää"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Indeksoijan id:tä (%s) ei löydetty arviointitiedostolle"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Palvelimen osoite"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API avain"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Virheellinen RSS syötteen kuvaus \"%s\""
|
||||
@@ -1704,10 +1743,6 @@ msgstr "Palvelimet"
|
||||
msgid "Failure"
|
||||
msgstr "Epäonnistui"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Valmistunut"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Epäonnistunut"
|
||||
@@ -1916,6 +1951,54 @@ msgstr "Kuukausi"
|
||||
msgid "Year"
|
||||
msgstr "Vuosi"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Kuukauden päivä"
|
||||
@@ -2742,6 +2825,36 @@ msgstr ""
|
||||
"Lista tiedostopäätteistä jotka poistetaan latauksen valmistuttua.<br "
|
||||
"/>Esimerkiksi: <b>nfo</b> tai <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Tallenna muutokset"
|
||||
@@ -2770,10 +2883,6 @@ msgstr ""
|
||||
"Auta meitä kääntämään SABnzbd sinun kielellesi!<br/>Käännä tai muokkaa "
|
||||
"olemassaolevia käännöksiä täällä:"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API avain"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr ""
|
||||
@@ -3082,14 +3191,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Hylkää"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Peruuta"
|
||||
@@ -3142,6 +3255,16 @@ 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 "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Kansion uudelleennimeäminen käytössä"
|
||||
@@ -3372,14 +3495,7 @@ msgstr ""
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3735,10 +3851,6 @@ msgstr "Growl käytössä"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Lähetä ilmoitukset Growliin"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Palvelimen osoite"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Käytä vain Growl etäpalvelimelle (isäntä:portti)"
|
||||
@@ -4148,7 +4260,7 @@ msgstr "NZB tietojen muokkaus"
|
||||
msgid "Delete"
|
||||
msgstr "Poista"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Ylin"
|
||||
|
||||
@@ -4160,7 +4272,7 @@ msgstr "Ylös"
|
||||
msgid "Down"
|
||||
msgstr "Alas"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Alin"
|
||||
|
||||
@@ -4293,6 +4405,10 @@ msgstr "Ladataan"
|
||||
msgid "articles"
|
||||
msgstr "artikkeleita"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Uudelleennimeä"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Jonon korjaus"
|
||||
@@ -4795,7 +4911,7 @@ msgstr "Samankaltaisen tiedoston uudelleennimeäminen epäonnistui: %s %s"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Palvelimen osoitetta ei voitu selvittää"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Luvaton käyttö"
|
||||
|
||||
@@ -5209,9 +5325,6 @@ msgstr "Osoitteen nouto epäonnistui; %s"
|
||||
#~ msgid "Left"
|
||||
#~ msgstr "Jäljellä"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Uudelleennimeä"
|
||||
|
||||
#~ msgid "Pause for 12 hours"
|
||||
#~ msgstr "Keskeytä 12:ksi tunniksi"
|
||||
|
||||
|
||||
245
po/main/fr.po
245
po/main/fr.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"PO-Revision-Date: 2017-06-27 19:41+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2017-08-07 18:53+0000\n"
|
||||
"Last-Translator: Fred <88com88@gmail.com>\n"
|
||||
"Language-Team: French <fr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-28 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-08 05:33+0000\n"
|
||||
"X-Generator: Launchpad (build 18446)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -111,7 +111,7 @@ msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Arrêt de SABnzbd terminé"
|
||||
|
||||
@@ -448,13 +448,40 @@ msgstr "Article yEnc mal construit dans %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Erreur inconnue lors du décodage de %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode détecté, seul l'encodage yEnc est compatible [%s]"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => absent de tous les serveurs, rejeté"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode détecté, seul l'encodage yEnc est compatible [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr "Décompression Directe"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Terminé"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "%s fichier(s)/dossier(s) extrait(s) en %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr "La Décompression Directe a été activée automatiquement."
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
"Les tâches seront décompréssées pendant le téléchargement pour réduire le "
|
||||
"temps de post-traitement. Fonctionne uniquement pour les tâches qui ne "
|
||||
"nécessitent aucune réparation."
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
@@ -657,7 +684,7 @@ msgstr ""
|
||||
"Authentification manquante, entrez vos identifiant/mot de passe de la "
|
||||
"configuration générale dans votre application tierce :"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -831,8 +858,6 @@ msgstr "[%s] Erreur \"%s\" lors de l'extraction des fichiers RAR"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Erreur \"%s\" lors de l'exécution de rar_unpack sur %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -919,10 +944,6 @@ msgstr "Fichier RAR inutilisable"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Fichier RAR corrompu"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "%s fichier(s)/dossier(s) extrait(s) en %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s fichiers dans %s"
|
||||
@@ -1027,6 +1048,11 @@ msgstr "Réparation en cours"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Réparé(s) dans %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr "Vérification de la réparation"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -1034,19 +1060,15 @@ msgstr "Disque plein"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Vérification en cours"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Vérification"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr "Vérification de la réparation"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1111,7 +1133,7 @@ msgid "Not available"
|
||||
msgstr "Non disponible"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Impossible d'envoyer, données requises manquantes"
|
||||
|
||||
@@ -1205,7 +1227,7 @@ msgstr "Doublon NZB ignoré \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Échec de duplication du NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Dupliquer NZB"
|
||||
|
||||
@@ -1213,6 +1235,14 @@ msgstr "Dupliquer NZB"
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Mise en pause du doublon NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
"%d fichiers avec des noms en double ont été rejetés pour \"%s\". Cochez "
|
||||
"\"allow_duplicate_files\" pour autoriser les noms de fichiers en double."
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Interrompu, ne peut être achevé"
|
||||
@@ -1312,7 +1342,7 @@ msgid "Limit Speed"
|
||||
msgstr "Limiter la vitesse"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Mettre en pause"
|
||||
@@ -1541,10 +1571,6 @@ msgstr ""
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Le téléchargement a échoué - absent de vos serveur(s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Impossible de créer le dossier final %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Pas de post-traitement car la vérification a echoué"
|
||||
@@ -1609,6 +1635,10 @@ msgstr "Erreur lors de la suppression du dossier de travail (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Téléchargement terminé"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Impossible de créer le dossier final %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Post-traitement"
|
||||
@@ -1669,6 +1699,22 @@ msgstr "Erreur lors de l'arrêt du système"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "id de l'Indexer (%s) non trouvé pour le fichier des classements"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Adresse du serveur"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Clé API"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
"Cette clé fournit l'identité à l'indexeur. Vérifiez votre profil sur le site "
|
||||
"web de l'indexeur."
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Description du flux RSS incorrecte \"%s\""
|
||||
@@ -1757,10 +1803,6 @@ msgstr "Serveurs"
|
||||
msgid "Failure"
|
||||
msgstr "Échec"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Terminé"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Échoué"
|
||||
@@ -1969,6 +2011,54 @@ msgstr "Mois"
|
||||
msgid "Year"
|
||||
msgstr "Année"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr "Janvier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr "Février"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr "Mars"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr "Avril"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr "Mai"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr "Juin"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr "Juillet"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr "Août"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr "Septembre"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr "Octobre"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr "Novembre"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr "Décembre"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Jour du mois"
|
||||
@@ -2800,6 +2890,39 @@ msgstr ""
|
||||
"Liste des extensions de fichiers qui doivent être supprimés après le "
|
||||
"téléchargement.<br /><Par exemple: <b>nfo</b> ou <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr "Conservation de l'historique"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
"Supprimer automatiquement les tâches terminées de l'historique. Attention, "
|
||||
"la Détection des Doublons et certains outils externes s'appuient sur les "
|
||||
"informations de l'historique."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr "Conserver toutes les tâches"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr "Nombre maximum de tâches complétées historisées"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr "Durée maximale d'historisation des tâches complétées"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr "Ne conserver aucune tâche terminée"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr "Tâches"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Enregistrer les modifications"
|
||||
@@ -2828,10 +2951,6 @@ msgstr ""
|
||||
"Aidez-nous à traduire SABnzbd dans votre langue ! <br/>Améliorez les "
|
||||
"traductions existantes ou ajoutez celles qui manquent ici :"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Clé API"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr ""
|
||||
@@ -3149,14 +3268,18 @@ msgstr ""
|
||||
"Détecter les épisodes de série identiques (en fonction du modèle "
|
||||
"\"nom/saison/épisode\" des éléments de votre historique)"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Rejeter"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr "Faire échouer la tâche (déplacer vers l'historique)"
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr "Taguer la tâche"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Annuler"
|
||||
@@ -3211,6 +3334,19 @@ msgstr ""
|
||||
"Certains serveurs proposent un NZB alternatif lorsqu'un téléchargement "
|
||||
"échoue."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use tags from indexer"
|
||||
msgstr "Utiliser les tags de l'indexeur"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
"Lors du tri, utiliser les tags de l'indexeur pour le titre, la saison, "
|
||||
"l'episode, etc. Sinon, toutes les dénominations seront dérivées du fichier "
|
||||
"NZB."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Activer le renommage du dossier"
|
||||
@@ -3449,21 +3585,11 @@ msgstr "Activer l'intégration de l'indexeur"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
"Les indexeurs peuvent fournir des informations de notation lorsqu'une tâche "
|
||||
"est ajoutée, et SABnzbd peut signaler à l'indexeur si une tâche n'a pu être "
|
||||
"terminée. Le paramètre de clé API peut être laissé vide en fonction de votre "
|
||||
"indexeur."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
"Cette clé fournit l'identité à l'indexeur. Vérifiez votre profil sur le site "
|
||||
"web de l'indexeur."
|
||||
"est ajoutée, et SABnzbd peut signaler à l'indexeur si une tâche n'a pas pu "
|
||||
"être terminée."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Filtering"
|
||||
@@ -3825,10 +3951,6 @@ msgstr "Activer Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Envoie les notifications à Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Adresse du serveur"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Utiliser seulement pour le serveur Growl à distance (hôte:port)"
|
||||
@@ -4240,7 +4362,7 @@ msgstr "Éditer les détails du NZB"
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Tout en haut"
|
||||
|
||||
@@ -4252,7 +4374,7 @@ msgstr "Monter"
|
||||
msgid "Down"
|
||||
msgstr "Descendre"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Tout en bas"
|
||||
|
||||
@@ -4385,6 +4507,10 @@ msgstr "Chargement"
|
||||
msgid "articles"
|
||||
msgstr "articles"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Renommer"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Réparer la file d'attente"
|
||||
@@ -4890,7 +5016,7 @@ msgstr "Impossible de renommer le fichier similaire : %s en %s"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Resolution du nom de serveur impossible"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Accès non autorisé"
|
||||
|
||||
@@ -5073,9 +5199,6 @@ msgstr "Échec de récupération de l'URL ; %s"
|
||||
#~ msgid "Pause for 24 hours"
|
||||
#~ msgstr "Pause pour 24 heures"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Renommer"
|
||||
|
||||
#~ msgid "Open Source URL"
|
||||
#~ msgstr "Ouvrir URL Source"
|
||||
|
||||
|
||||
257
po/main/he.po
257
po/main/he.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"PO-Revision-Date: 2017-06-28 21:20+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2017-08-15 20:47+0000\n"
|
||||
"Last-Translator: ION IL <Unknown>\n"
|
||||
"Language-Team: Hebrew <he@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-29 05:29+0000\n"
|
||||
"X-Generator: Launchpad (build 18418)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-16 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 18446)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -102,7 +102,7 @@ msgid "Error"
|
||||
msgstr "שגיאה"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "הסתיים SABnzbd כיבוי"
|
||||
|
||||
@@ -421,13 +421,39 @@ msgstr "%s-נוצר באופן גרוע ב yEnc מאמר"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "%s שגיאה בלתי ידועה בעת פענוח"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "[%s] נתמכת yEnc התגלה, רק הצפנת UUencode"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "חסר מכל השרתים, משליך <= %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "[%s] נתמכת yEnc התגלה, רק הצפנת UUencode"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr "פריקה ישירה"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "הושלם"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "%s-פורקו %s קבצים/תיקיות ב"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ".פריקה ישירה אופשרה באופן אוטומטי"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
".עבודות יתחילו להיפרק במהלך ההורדה כדי להפחית זמן לאחר-עיבוד. עובד רק עבור "
|
||||
"עבודות שאינן צריכות תיקון"
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
@@ -622,7 +648,7 @@ msgstr ""
|
||||
":אימות חסר, אנא הכנס שם משתמש/סיסמה מתוך תצורה->כללי לתוך תכנית הצד השלישי "
|
||||
"שלך"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -794,8 +820,6 @@ msgstr "RAR [%s] שגיאה \"%s\" בזמן פריקת קבצי"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "%s על rar_unpack שגיאת \"%s\" בזמן הרצת"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -878,10 +902,6 @@ msgstr "בלתי שמיש RAR קובץ"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "פגום RAR קובץ"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "%s-פורקו %s קבצים/תיקיות ב"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s קבצים ב %s"
|
||||
@@ -980,6 +1000,11 @@ msgstr "מתקן"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "%s-תוקן ב [%s]"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr "מוודא תיקון"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -987,19 +1012,15 @@ msgstr "דיסק מלא"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "מוודא"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "בודק"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr "מוודא תיקון"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "(+x) אין ערכת הרשאות ביצוע \"%s\" לתסריט פייתון"
|
||||
@@ -1061,7 +1082,7 @@ msgid "Not available"
|
||||
msgstr "לא זמין"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "לא ניתן לשלוח, נתונים דרושים חסרים"
|
||||
|
||||
@@ -1153,7 +1174,7 @@ msgstr "\"%s\" כפול NZB-מתעלם מ"
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "\"%s\" NZB נכשל בשכפול"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "NZB שכפל"
|
||||
|
||||
@@ -1161,6 +1182,14 @@ msgstr "NZB שכפל"
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "\"%s\" NZB משהה שכפול"
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
".כדי להתיר שמות כפולים של קבצים \"allow_duplicate_files\" אפשר את .\"%s\" "
|
||||
"הושלכו %d קבצים עם שמות כפולים עבור"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "בוטל, לא יכול להיות שלם"
|
||||
@@ -1260,7 +1289,7 @@ msgid "Limit Speed"
|
||||
msgstr "הגבל מהירות"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "השהה"
|
||||
@@ -1477,10 +1506,6 @@ msgstr "הורדה עשויה להיכשל, רק %s מתוך %s דרושים ז
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "הורדה נכשלה - לא בשרת(ים) שלך"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "%s לא יכול ליצור תיקייה סופית"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "אין לאחר-עיבוד בגלל וידוא כושל"
|
||||
@@ -1545,6 +1570,10 @@ msgstr "(%s) שגיאה בהסרת תיקיית עבודה"
|
||||
msgid "Download Completed"
|
||||
msgstr "הורדה הושלמה"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "%s לא יכול ליצור תיקייה סופית"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "לאחר-עיבוד"
|
||||
@@ -1587,7 +1616,7 @@ msgstr "נכשלו בוידוא RAR קבצי"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py [Error message]
|
||||
msgid "Removing %s failed"
|
||||
msgstr "הסרת %s נכשלה"
|
||||
msgstr "נכשלה %s הסרת"
|
||||
|
||||
#: sabnzbd/powersup.py [Error message]
|
||||
msgid "Failed to hibernate system"
|
||||
@@ -1605,6 +1634,20 @@ msgstr "שגיאה בזמן כיבוי מערכת"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "לא נמצאה עבור קובץ מידרגים (%s) זהות מדדן"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "כתובת שרת"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API מפתח"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ".מפתח זה מספק זהות למדדן. בדוק את המתאר שלך באתר של המדדן"
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "\"%s\" לא נכון RSS תיאור הזנת"
|
||||
@@ -1691,10 +1734,6 @@ msgstr "שרתים"
|
||||
msgid "Failure"
|
||||
msgstr "כישלון"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "הושלם"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "נכשל"
|
||||
@@ -1785,7 +1824,7 @@ msgstr "RSS קרא הזנות"
|
||||
|
||||
#: sabnzbd/skintext.py [Config->Scheduler]
|
||||
msgid "Remove failed jobs"
|
||||
msgstr "הסר עבודות כושלות"
|
||||
msgstr "הסר עבודות נכשלות"
|
||||
|
||||
#: sabnzbd/skintext.py [Config->Scheduler]
|
||||
msgid "Remove completed jobs"
|
||||
@@ -1903,6 +1942,54 @@ msgstr "חודש"
|
||||
msgid "Year"
|
||||
msgstr "שנה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr "ינואר"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr "פברואר"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr "מרץ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr "אפריל"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr "מאי"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr "יוני"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr "יולי"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr "אוגוסט"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr "ספטמבר"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr "אוקטובר"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr "נובמבר"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr "דצמבר"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "יום בחודש"
|
||||
@@ -2242,15 +2329,15 @@ msgstr "ומחק קבצים NZB טהר"
|
||||
|
||||
#: sabnzbd/skintext.py [Retry all failed jobs dialog box]
|
||||
msgid "Retry all failed jobs"
|
||||
msgstr "נסה שוב את כל העבודות שנכשלו"
|
||||
msgstr "נסה שוב את כל העבודות הנכשלות"
|
||||
|
||||
#: sabnzbd/skintext.py [Queue page button]
|
||||
msgid "Remove NZB"
|
||||
msgstr "הסר NZB"
|
||||
msgstr "NZB הסר"
|
||||
|
||||
#: sabnzbd/skintext.py [Queue page button] # sabnzbd/skintext.py
|
||||
msgid "Remove NZB & Delete Files"
|
||||
msgstr "הסר NZB ומחק קבצים"
|
||||
msgstr "ומחק קבצים NZB הסר"
|
||||
|
||||
#: sabnzbd/skintext.py [Queue page, as in "4G *of* 10G"]
|
||||
msgid "of"
|
||||
@@ -2298,11 +2385,11 @@ msgstr "גודל"
|
||||
|
||||
#: sabnzbd/skintext.py [Button to delete all failed jobs in History]
|
||||
msgid "Purge Failed NZBs"
|
||||
msgstr "שנכשלו NZB טהר"
|
||||
msgstr "נכשלים NZB טהר"
|
||||
|
||||
#: sabnzbd/skintext.py [Button to delete all failed jobs in History, including files]
|
||||
msgid "Purge Failed NZBs & Delete Files"
|
||||
msgstr "שנכשלו ומחק קבצים NZB טהר"
|
||||
msgstr "נכשלים ומחק קבצים NZB טהר"
|
||||
|
||||
#: sabnzbd/skintext.py [Button to delete all completed jobs in History]
|
||||
msgid "Purge Completed NZBs"
|
||||
@@ -2717,6 +2804,38 @@ msgstr ""
|
||||
".רשימת סיומות של קבצים שצריכים להימחק לאחר הורדה<br /><b>nfo, sfv</b> או "
|
||||
"<b>nfo</b> :לדוגמה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr "שימור היסטוריה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
".מחק באופן אוטומטי עבודות שלמות מההיסטוריה. שים לב ששימור כפול ומספר כלים "
|
||||
"חיצוניים מסתמכים על מידע היסטוריה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr "שמור את כל העבודות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr "שמור מספר מרבי של עבודות שלמות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr "שמור מספר ימים מרבי של עבודות שלמות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr "אל תשמור עבודות שלמות כלשהן"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr "עבודות"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "שמור שינויים"
|
||||
@@ -2745,10 +2864,6 @@ msgstr ""
|
||||
"!לעברית SABnzbd עזור לנו לתרגם את<br/>הוסף מלל לא מתורגם או שפר תרגומים "
|
||||
"קיימים כאן:"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API מפתח"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr ".SABnzbd מפתח זה יתן לתכניות צד שלישי גישה מלאה אל"
|
||||
@@ -3043,14 +3158,18 @@ msgid ""
|
||||
msgstr ""
|
||||
"(גלה פרקים זהים בסדרות (על סמך \"שם/עונה/פרק\" של פריטים בהיסטוריה שלך"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "השלך"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr "הכשל עבודה (העבר להיסטוריה)"
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr "הצמד תג לעבודה"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "בטל"
|
||||
@@ -3100,6 +3219,18 @@ msgstr "חלופי NZB בכישלון, נסה"
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ".חלופי כאשר הורדת נכשלת NZB מספר שרתים מספקים"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use tags from indexer"
|
||||
msgstr "השתמש בתגים ממדדן"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
".NZB-בעת מיון, השתמש בתגים ממדדן עבור כותרת, עונה, פרק וכדומה. אחרת כל מתן "
|
||||
"השמות נגזר משם ה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "אפשר שינוי שם תיקייה"
|
||||
@@ -3323,18 +3454,10 @@ msgstr "אפשר מיזוג מדדן"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
".יכול לדווח למדדן במקרה שעבודה לא יכלה להיות מושלמת SABnzbd-מדדנים יכולים "
|
||||
"לספק מידע מידרג כאשר עבודה מתווספת ו\r\n"
|
||||
".שלך יכולה להישאר ריקה API-תלוי במדדן שלך, קביעת מפתח ה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ".מפתח זה מספק זהות למדדן. בדוק את המתאר שלך באתר של המדדן"
|
||||
"יכול לדווח למדדן במקרה שעבודה לא יכלה להישלם SABnzbd-מדדנים יכולים לספק מידע "
|
||||
"מידרג כאשר עבודה מתווספת ו"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Filtering"
|
||||
@@ -3688,10 +3811,6 @@ msgstr "Growl אפשר"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Growl שלח התראות אל"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "כתובת שרת"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "מרוחק (מארח:פתחה) Growl השתמש רק עבור שרת"
|
||||
@@ -4091,13 +4210,13 @@ msgstr "ערכים"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page]
|
||||
msgid "Edit NZB Details"
|
||||
msgstr "ערוך פרטי NZB"
|
||||
msgstr "NZB ערוך פרטי"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, delete button]
|
||||
msgid "Delete"
|
||||
msgstr "מחק"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "ראש"
|
||||
|
||||
@@ -4109,7 +4228,7 @@ msgstr "למעלה"
|
||||
msgid "Down"
|
||||
msgstr "למטה"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "תחתית"
|
||||
|
||||
@@ -4241,6 +4360,10 @@ msgstr "טוען"
|
||||
msgid "articles"
|
||||
msgstr "מאמרים"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "שנה שם"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "תיקון תור"
|
||||
@@ -4471,7 +4594,7 @@ msgstr "?לטהר את התור"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Retry all failed jobs in History?"
|
||||
msgstr "לנסות שוב את כל העבודות שנכשלו בהיסטוריה?"
|
||||
msgstr "לנסות שוב את כל העבודות הנכשלות בהיסטוריה?"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Purge"
|
||||
@@ -4549,7 +4672,7 @@ msgstr "מחק שלמים"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Delete the all failed items from the history?"
|
||||
msgstr "למחוק את כל הפריטים שנכשלו מההיסטוריה?"
|
||||
msgstr "למחוק את כל הפריטים הנכשלים מההיסטוריה?"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Delete Failed"
|
||||
@@ -4557,7 +4680,7 @@ msgstr "מחק נכשלים"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Retry all failed jobs?"
|
||||
msgstr "לנסות שוב את העבודות שנכשלו?"
|
||||
msgstr "לנסות שוב את העבודות הנכשלות?"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Links"
|
||||
@@ -4738,7 +4861,7 @@ msgstr "%s אל %s :נכשל בשינוי שם של קובץ דומה"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "שם השרת אינו פותר"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "גישה בלתי מורשת"
|
||||
|
||||
|
||||
223
po/main/nb.po
223
po/main/nb.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2017-05-23 11:46+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:53+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -106,7 +106,7 @@ msgid "Error"
|
||||
msgstr "Feil"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd er nå avsluttet"
|
||||
|
||||
@@ -423,13 +423,37 @@ msgstr "Feilaktigt utformet yEnc artikkel i %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Ukjent feil oppstod under dekoding av %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode oppdaget, bare yEnc koding er støttet[%s]"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => mangler på alle servere, fjerner"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode oppdaget, bare yEnc koding er støttet[%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Ferdig"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Utpakket %s filer/mapper på %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
@@ -627,7 +651,7 @@ msgstr ""
|
||||
"Autentisering mangler, angi brukernavn/passord fra Konfigurasjon->Generelt i "
|
||||
"ditt tredjepartsprogram:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -800,8 +824,6 @@ msgstr "[%s] Feil \"%s\" under utpakking av RAR fil(er)"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Feil \"%s\" under kjøring av rar_unpack på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -884,10 +906,6 @@ msgstr "Ubrukelig RAR-fil"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Utpakket %s filer/mapper på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s filer på %s"
|
||||
@@ -988,6 +1006,11 @@ msgstr "Reparerer"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Reparert på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -995,19 +1018,15 @@ msgstr "Harddisken er full"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verifiserer"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Undersøker"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1067,7 +1086,7 @@ msgid "Not available"
|
||||
msgstr "Ikke tilgjengelig"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Kan ikke sendes, mangler nødvendig data"
|
||||
|
||||
@@ -1159,7 +1178,7 @@ msgstr "Ignorerer duplikatfil \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1167,6 +1186,12 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Stanser duplikatfil \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Avbrutt, kan ikke fullføres"
|
||||
@@ -1266,7 +1291,7 @@ msgid "Limit Speed"
|
||||
msgstr "Hastighetsbegrensning"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Stans midlertidig"
|
||||
@@ -1482,10 +1507,6 @@ msgstr "Nedlasting kan feile, kun %s av kravet på %s tilgjengelig"
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Nedlastning feilet - Finnes ikke på din(e) server(e)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Kan ikke opprette mappe %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Ingen etterbehandling, på grunn av misslykket verifisering"
|
||||
@@ -1550,6 +1571,10 @@ msgstr "Kunne ikke fjerne arbeidsmappe (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Nedlasting ferdig"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Kan ikke opprette mappe %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Etterbehandling"
|
||||
@@ -1610,6 +1635,20 @@ msgstr "Feil under avslutting av systemet"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Fant ikke indekser id (%s) for rangeringsfil."
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Tjeneradresse"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-nøkkel"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Feilaktig RSS-kilde beskrivelse \"%s\""
|
||||
@@ -1696,10 +1735,6 @@ msgstr "Servere"
|
||||
msgid "Failure"
|
||||
msgstr "Feil"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Ferdig"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Mislyktes"
|
||||
@@ -1908,6 +1943,54 @@ msgstr "Måned"
|
||||
msgid "Year"
|
||||
msgstr "År"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Dag i måneden"
|
||||
@@ -2724,6 +2807,36 @@ msgstr ""
|
||||
"Liste over filtyper som skal slettes etter nedlasting.<br />For eksempel: "
|
||||
"<b>nfo</b> eller <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Lagre endringer"
|
||||
@@ -2750,10 +2863,6 @@ msgid ""
|
||||
"improved existing translations here:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-nøkkel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr "Denne nøkkelen vil gi tredjepartsprogrammer full tilgang til SABnzbd"
|
||||
@@ -3052,14 +3161,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Forkast"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Avbryt"
|
||||
@@ -3111,6 +3224,16 @@ msgstr "Når den feiler, prøv alternativ NZB-fil"
|
||||
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 "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Aktiver omdøping av mappe"
|
||||
@@ -3336,14 +3459,7 @@ msgstr ""
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3695,10 +3811,6 @@ msgstr "Aktiver Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Send varsler til Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Tjeneradresse"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Brukes kun for fjerntliggende Growl tjener (vert:port)"
|
||||
@@ -4103,7 +4215,7 @@ msgstr "Endre NZB detaljer"
|
||||
msgid "Delete"
|
||||
msgstr "Fjern"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Topp"
|
||||
|
||||
@@ -4115,7 +4227,7 @@ msgstr "Opp"
|
||||
msgid "Down"
|
||||
msgstr "Ned"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Bunn"
|
||||
|
||||
@@ -4248,6 +4360,10 @@ msgstr "Laster"
|
||||
msgid "articles"
|
||||
msgstr "artikler"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Endre navn"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Reparer Kø"
|
||||
@@ -4746,7 +4862,7 @@ msgstr "Kunne ikke endre navn på lik fil: %s til %s"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Kunne ikke finne servernavn"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Uautorisert tilgang"
|
||||
|
||||
@@ -5289,9 +5405,6 @@ msgstr "URL henting mislyktes; %s"
|
||||
#~ msgid "Storage"
|
||||
#~ msgstr "Lagring"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Endre navn"
|
||||
|
||||
#~ msgid "OZnzb"
|
||||
#~ msgstr "OZnzb"
|
||||
|
||||
|
||||
251
po/main/nl.po
251
po/main/nl.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"PO-Revision-Date: 2017-07-10 06:45+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2017-08-09 21:46+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"Language-Team: Dutch <nl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-07-11 06:05+0000\n"
|
||||
"X-Generator: Launchpad (build 18419)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-10 06:03+0000\n"
|
||||
"X-Generator: Launchpad (build 18446)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -109,7 +109,7 @@ msgid "Error"
|
||||
msgstr "Fout"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd is afgesloten"
|
||||
|
||||
@@ -441,13 +441,40 @@ msgstr "Slecht opgemaakt yEnc-artikel in %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Onbekende fout tijdens het decoderen van %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode gevonden, SABnzbd verwerkt alleen yEnc-codering [%s]"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => ontbreekt op alle servers, overslaan"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "UUencode gevonden, SABnzbd verwerkt alleen yEnc-codering [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr "Direct Uitpakken"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Voltooid"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "%s bestanden/mappen uitgepakt in %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr "Direct Uitpakken is automatisch ingeschakeld."
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
"Het uitpakken van opdrachten wordt al gestart tijdens het downloaden. Dit "
|
||||
"verkort de tijd die nodig is voor het nabewerken. Dit werkt alleen als de "
|
||||
"opdracht niet beschadigd is."
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
@@ -646,7 +673,7 @@ msgstr ""
|
||||
"Autenticatie ontbreekt; vul gebruikersnaam en wachtwoord van 'Configuratie' "
|
||||
"=> 'Algemeen' in bij het externe programma:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -820,8 +847,6 @@ msgstr "[%s] Fout \"%s\" bij het uitpakken van RAR-bestanden"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Fout \"%s\" bij uitvoeren van 'rar_unpack' op %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -904,10 +929,6 @@ msgstr "Onbruikbaar RAR-bestand"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "Beschadigd RAR-bestand"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "%s bestanden/mappen uitgepakt in %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s bestanden in %s"
|
||||
@@ -1007,6 +1028,11 @@ msgstr "Repareren"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Reparatie in %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr "Reparatie controleren"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -1014,19 +1040,15 @@ msgstr "Schijf is vol"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verifiëren"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Controleren"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr "Reparatie controleren"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Python-script '%s' heeft geen uitvoerpermissie (+x)"
|
||||
@@ -1089,7 +1111,7 @@ msgid "Not available"
|
||||
msgstr "Niet beschikbaar"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Versturen kan niet, vereiste gegevens ontbreken"
|
||||
|
||||
@@ -1181,7 +1203,7 @@ msgstr "Dubbele NZB \"%s\" overgeslagen"
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "Opdracht '%s' geweigerd omdat het een dubbele is"
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "Dubbele NZB"
|
||||
|
||||
@@ -1189,6 +1211,15 @@ msgstr "Dubbele NZB"
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pauzeer dubbele NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
"Er zijn %d bestanden met dezelfde bestandsnaam niet toegevoegd aan opdracht "
|
||||
"\"%s\". Zet \"allow_duplicate_files\" aan om dubbele bestandsnamen toe te "
|
||||
"staan."
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Afgebroken, kan niet voltooid worden"
|
||||
@@ -1288,7 +1319,7 @@ msgid "Limit Speed"
|
||||
msgstr "Beperk snelheid"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Pauze"
|
||||
@@ -1509,10 +1540,6 @@ msgstr ""
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Download mislukt - Niet meer op je server(s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Kan bestemmingsmap %s niet maken"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Geen nabewerking vanwege mislukte verificatie"
|
||||
@@ -1577,6 +1604,10 @@ msgstr "Fout bij verwijderen van werkmap %s"
|
||||
msgid "Download Completed"
|
||||
msgstr "Download voltooid"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Kan bestemmingsmap %s niet maken"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Nabewerking"
|
||||
@@ -1637,6 +1668,22 @@ msgstr "Fout bij het afsluiten van het systeem"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Indexer id (%s) niet gevonden in het bestand met beoordelingen"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Server adres"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-sleutel"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
"Deze sleutel is voor je identificatie door de indexer. Kijk in je profiel op "
|
||||
"de website van de indexer."
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Foutieve RSS-feed definitie \"%s\""
|
||||
@@ -1723,10 +1770,6 @@ msgstr "Servers"
|
||||
msgid "Failure"
|
||||
msgstr "Mislukt"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Voltooid"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Mislukt"
|
||||
@@ -1821,7 +1864,7 @@ msgstr "Verwijder mislukte opdrachten"
|
||||
|
||||
#: sabnzbd/skintext.py [Config->Scheduler]
|
||||
msgid "Remove completed jobs"
|
||||
msgstr "Verwijder afgehandelde taken"
|
||||
msgstr "Verwijder voltooide opdrachten"
|
||||
|
||||
#: sabnzbd/skintext.py [Config->Scheduler]
|
||||
msgid "Pause low prioirty jobs"
|
||||
@@ -1935,6 +1978,54 @@ msgstr "maand"
|
||||
msgid "Year"
|
||||
msgstr "jaar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr "Januari"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr "Februari"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr "Maart"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr "April"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr "Mei"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr "Juni"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr "Juli"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr "Augustus"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr "September"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr "Oktober"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr "November"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr "December"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Dag van de maand"
|
||||
@@ -2763,6 +2854,39 @@ msgstr ""
|
||||
"Lijst van extensies die na downloaden verwijderd moeten worden.<br "
|
||||
"/>Voorbeeld: <b>nfo</b> of <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr "Geschiedenis Bewaren"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
"Automatisch verwijderen van voltooide downloads. Let er op dat Dubbele "
|
||||
"Opdracht Detectie en andere externe tools Geschiedenis informatie nodig "
|
||||
"hebben."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr "Behoud alle downloads"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr "Maximum aantal voltooide downloads"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr "Behoud voltooide downloads maximaal aantal dagen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr "Behoud geen enkele download"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr "Downloads"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Opslaan"
|
||||
@@ -2791,10 +2915,6 @@ msgstr ""
|
||||
"Help ons om SABnzbd in jouw taal te vertalen! <br/>Met nieuwe vertalingen of "
|
||||
"verbeteringen kun je hier terecht:"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-sleutel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr ""
|
||||
@@ -3098,14 +3218,18 @@ msgstr ""
|
||||
"Detecteer identieke afleveringen in series (gebaseerd op "
|
||||
"\"naam/seizoen/aflevering\" in opdrachten in je Geschiedenis)."
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Verwerpen"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr "Keur opdracht af"
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr "Label download"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Afbreken"
|
||||
@@ -3158,6 +3282,19 @@ 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 "Use tags from indexer"
|
||||
msgstr "Gebruik indexer informatie"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
"Maak tijdens het sorteren gebruik van informatie van de indexer zoals titel, "
|
||||
"seizoen, aflevering, enz. Anders wordt alle informatie uit de naam van de "
|
||||
"download gehaald."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Gebruik tijdelijke mapnamen"
|
||||
@@ -3180,7 +3317,7 @@ msgstr "Wordt uitgevoerd vóór een NZB de wachtrij in gaat"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Extra PAR2 Parameters"
|
||||
msgstr "Extra PAR2 parameters:"
|
||||
msgstr "Extra PAR2 parameters"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Nice Parameters"
|
||||
@@ -3391,20 +3528,11 @@ msgstr "Sta integratie met index websites toe"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
"Indexers kunnen waarderingsinformatie leveren wanneer een NZB wordt "
|
||||
"opgehaald. SABnzbd kan mislukte downloads aanmelden bij de indexer. Sommige "
|
||||
"indexers hebben een API sleutel nodig."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
"Deze sleutel is voor je identificatie door de indexer. Kijk in je profiel op "
|
||||
"de website van de indexer."
|
||||
"Indexers kunnen beoordelingen meesturen wanneer een opdracht wordt "
|
||||
"toegevoegd en SABnzbd kan de indexer informeren wanneer een download niet "
|
||||
"slaagt."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Filtering"
|
||||
@@ -3766,10 +3894,6 @@ msgstr "Growl meldingen activeren"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Zend meldingen naar Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Server adres"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr ""
|
||||
@@ -4180,7 +4304,7 @@ msgstr "Bewerk NZB Details"
|
||||
msgid "Delete"
|
||||
msgstr "Verwijder"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Boven"
|
||||
|
||||
@@ -4192,7 +4316,7 @@ msgstr "Hoger"
|
||||
msgid "Down"
|
||||
msgstr "Lager"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Onder"
|
||||
|
||||
@@ -4324,6 +4448,10 @@ msgstr "Laden"
|
||||
msgid "articles"
|
||||
msgstr "artikelen"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Naam"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Wachtrij reparatie"
|
||||
@@ -4824,7 +4952,7 @@ msgstr "Hernoemen van gelijkaardig bestand %s naar %s mislukt"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Servernaam niet te vinden"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Geen toegangsrechten"
|
||||
|
||||
@@ -5099,9 +5227,6 @@ msgstr "URL ophalen mislukt; %s"
|
||||
#~ msgid "Pause for 24 hours"
|
||||
#~ msgstr "Pauzeer 24 uur"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Naam"
|
||||
|
||||
#~ msgid "Left"
|
||||
#~ msgstr "Over"
|
||||
|
||||
|
||||
221
po/main/pl.po
221
po/main/pl.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2015-12-28 10:22+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:53+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -100,7 +100,7 @@ msgid "Error"
|
||||
msgstr "Błąd"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd został wyłączony"
|
||||
|
||||
@@ -423,12 +423,36 @@ msgstr "Źle zbudowany artykuł yEnc w %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Nieznany błąd podczas dekodowania %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => nie znaleziono na żadnym serwerze, porzucam"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Ukończone"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Rozpakowano %s plików/katalogów w %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
@@ -629,7 +653,7 @@ msgstr ""
|
||||
"Brak danych uwierzytelniających, wprowadź nazwę użytkownika/hasło z sekcji "
|
||||
"Konfiguracja->Ogólne do zewnętrznego programu:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -803,8 +827,6 @@ msgstr "[%s] Błąd \"%s\" podczas rozpakowywania plików RAR"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Błąd \"%s\" podczas uruchamiania rar_unpack na %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -887,10 +909,6 @@ msgstr "Bezużyteczny plik RAR"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Rozpakowano %s plików/katalogów w %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s plików w %s"
|
||||
@@ -993,6 +1011,11 @@ msgstr "Naprawianie"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Naprawiono w %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -1000,19 +1023,15 @@ msgstr "Dysk pełny"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Weryfikowanie"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Sprawdzanie"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1072,7 +1091,7 @@ msgid "Not available"
|
||||
msgstr "Niedostępne"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Nie można wysłać wiadomości, brak wymaganych danych"
|
||||
|
||||
@@ -1166,7 +1185,7 @@ msgstr "Ignoruję zduplikowany NZB \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1174,6 +1193,12 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Wstrzymuję zduplikowany NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Przerwano, nie można ukończyć"
|
||||
@@ -1273,7 +1298,7 @@ msgid "Limit Speed"
|
||||
msgstr "Ogranicz prędkość"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Wstrzymaj"
|
||||
@@ -1489,10 +1514,6 @@ msgstr "Pobieranie może się nie udać, dostępne jedynie %s z wymaganych %s"
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Pobieranie nieudane - Dane niedostępne na skonfigurowanych serwerach"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Nie można utworzyć ostatecznego katalogu %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr ""
|
||||
@@ -1558,6 +1579,10 @@ msgstr "Błąd usuwania katalogu roboczego (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Zakończono pobieranie"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Nie można utworzyć ostatecznego katalogu %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Przetwarzanie końcowe"
|
||||
@@ -1618,6 +1643,20 @@ msgstr "Wyłączenie systemu nie powiodło się"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Identyfikator indeksera (%s) nie został znaleziony w pliku ocen"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Adres serwera"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Klucz API"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Nieprawidłowy opis kanału RSS \"%s\""
|
||||
@@ -1704,10 +1743,6 @@ msgstr "Serwery"
|
||||
msgid "Failure"
|
||||
msgstr "Niepowodzenie"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Ukończone"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Nieudane"
|
||||
@@ -1916,6 +1951,54 @@ msgstr "Miesiąc"
|
||||
msgid "Year"
|
||||
msgstr "Rok"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Dzień miesiąca"
|
||||
@@ -2733,6 +2816,36 @@ msgstr ""
|
||||
"Lista rozszerzeń plików, które mają zostać usunięte po pobraniu.<br />Na "
|
||||
"przykład: <b>nfo</b> lub <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Zapisz zmiany"
|
||||
@@ -2759,10 +2872,6 @@ msgid ""
|
||||
"improved existing translations here:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Klucz API"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr "Ten klucz umożliwi innym programom dostęp do SABnzbd"
|
||||
@@ -3064,14 +3173,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Odrzuć"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Przerwij"
|
||||
@@ -3126,6 +3239,16 @@ msgstr ""
|
||||
"Niektóre serwery udostępniają alternatywne NZB, kiedy pobieranie kończy się "
|
||||
"niepowodzeniem"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Włącz zmianę nazw katalogów"
|
||||
@@ -3354,14 +3477,7 @@ msgstr ""
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3713,10 +3829,6 @@ msgstr "Włącz Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Wysyłaj powiadomienia Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Adres serwera"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Tylko dla zdalnych serwerów Growl (host:port)"
|
||||
@@ -4121,7 +4233,7 @@ msgstr "Edytuj szczegóły NZB"
|
||||
msgid "Delete"
|
||||
msgstr "Usuń"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Na górę"
|
||||
|
||||
@@ -4133,7 +4245,7 @@ msgstr "Wyżej"
|
||||
msgid "Down"
|
||||
msgstr "Niżej"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Na dół"
|
||||
|
||||
@@ -4266,6 +4378,10 @@ msgstr "Ładowanie"
|
||||
msgid "articles"
|
||||
msgstr "artykułów"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Zmień nazwę"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Naprawa kolejki"
|
||||
@@ -4763,7 +4879,7 @@ msgstr "Nie udało się zmienić nazwy podobnego pliku %s na %s"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Nie udało się rozwiązać nazwy serwera"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Dostęp zabroniony"
|
||||
|
||||
@@ -5020,9 +5136,6 @@ msgstr "Pobieranie URL nie powiodło się; %s"
|
||||
#~ msgid "Storage"
|
||||
#~ msgstr "Miejsce"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Zmień nazwę"
|
||||
|
||||
#~ msgid "Plush Options"
|
||||
#~ msgstr "Opcje Plush"
|
||||
|
||||
|
||||
221
po/main/pt_BR.po
221
po/main/pt_BR.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2016-01-01 22:58+0000\n"
|
||||
"Last-Translator: lrrosa <Unknown>\n"
|
||||
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:02+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:54+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -104,7 +104,7 @@ msgid "Error"
|
||||
msgstr "Erro"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Encerramento do SABnzbd concluído"
|
||||
|
||||
@@ -425,12 +425,36 @@ msgstr "Artigo yEnc mal formado em %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Erro desconhecido ao decodificar %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => faltando em todos os servidores. Descartando"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Concluído"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Descompactados %s arquivos/pastas em %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
@@ -630,7 +654,7 @@ msgstr ""
|
||||
"Autenticação faltando. Por favor insira usuário/senha de Configuração->Geral "
|
||||
"em seu programa de terceiros:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -803,8 +827,6 @@ msgstr "[%s] Erro \"%s\" ao descompactar os arquivos RAR"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Erro \"%s\" ao executar rar_unpack em %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -887,10 +909,6 @@ msgstr "Arquivo RAR inutilizável"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Descompactados %s arquivos/pastas em %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s arquivos em %s"
|
||||
@@ -990,6 +1008,11 @@ msgstr "Reparando"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Reparado em %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -997,19 +1020,15 @@ msgstr "Disco cheio"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verificando"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Verificando"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1069,7 +1088,7 @@ msgid "Not available"
|
||||
msgstr "Não disponível"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Não foi possível enviar, faltam dados obrigatórios"
|
||||
|
||||
@@ -1163,7 +1182,7 @@ msgstr "Ignorando NZB duplicado \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1171,6 +1190,12 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pausando NZB duplicado \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Cancelado, não é possível concluir"
|
||||
@@ -1270,7 +1295,7 @@ msgid "Limit Speed"
|
||||
msgstr "Limitar Velocidade"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Pausar"
|
||||
@@ -1488,10 +1513,6 @@ msgstr ""
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "O download falhou - Não está em seu(s) servidor(s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Não é possível criar a pasta final %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Sem pós-processamento por causa de falha na verificação"
|
||||
@@ -1556,6 +1577,10 @@ msgstr "Erro ao remover a pasta de trabalho (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Download concluído"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Não é possível criar a pasta final %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Pós-processamento"
|
||||
@@ -1616,6 +1641,20 @@ msgstr "Erro ao desligar o sistema"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Indexador id (%s) não foi encontrador para avaliar arquivos"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Endereço do servidor"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Chave API"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Descrição de feed RSS incorreta \"%s\""
|
||||
@@ -1703,10 +1742,6 @@ msgstr "Servidores"
|
||||
msgid "Failure"
|
||||
msgstr "Falha"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Concluído"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Falhou"
|
||||
@@ -1915,6 +1950,54 @@ msgstr "Mês"
|
||||
msgid "Year"
|
||||
msgstr "Ano"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Dia do mês"
|
||||
@@ -2732,6 +2815,36 @@ msgstr ""
|
||||
"Lista de extensões de arquivo que devem ser excluídos após o download.<br "
|
||||
"/>Por exemplo: <b>nfo</b> ou <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Salvar Alterações"
|
||||
@@ -2758,10 +2871,6 @@ msgid ""
|
||||
"improved existing translations here:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Chave API"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr "Esta chave dará a programas de terceiros pleno acesso ao SABnzbd."
|
||||
@@ -3064,14 +3173,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Descartar"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Cancelar"
|
||||
@@ -3124,6 +3237,16 @@ 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 "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Habilitar renomeação de pasta"
|
||||
@@ -3351,14 +3474,7 @@ msgstr ""
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3711,10 +3827,6 @@ msgstr "Habilitar Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Enviar notificações ao Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Endereço do servidor"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Utilize apenas para servidor remoto Growl (host: porta)"
|
||||
@@ -4119,7 +4231,7 @@ msgstr "Editar Detalhes do NZB"
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Topo"
|
||||
|
||||
@@ -4131,7 +4243,7 @@ msgstr "Para cima"
|
||||
msgid "Down"
|
||||
msgstr "Para baixo"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Base"
|
||||
|
||||
@@ -4264,6 +4376,10 @@ msgstr "Carregando"
|
||||
msgid "articles"
|
||||
msgstr "artigos"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Renomear"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Reparação da fila"
|
||||
@@ -4763,7 +4879,7 @@ msgstr "Falha ao renomear arquivo similar: %s para %s"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Nome de servidor não encontrado"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Acesso não autorizado"
|
||||
|
||||
@@ -5202,9 +5318,6 @@ msgstr "A busca da URL falhou; %s"
|
||||
#~ msgid "Left"
|
||||
#~ msgstr "Restantes"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Renomear"
|
||||
|
||||
#~ msgid "Open Source URL"
|
||||
#~ msgstr "Abrir URL de Origem"
|
||||
|
||||
|
||||
221
po/main/ro.po
221
po/main/ro.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2016-07-29 16:20+0000\n"
|
||||
"Last-Translator: nicusor <Unknown>\n"
|
||||
"Language-Team: Romanian <ro@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:53+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -104,7 +104,7 @@ msgid "Error"
|
||||
msgstr "Eroare"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Închidere SABnzbd terminată"
|
||||
|
||||
@@ -427,12 +427,36 @@ msgstr "Articoul yEnc invalid în %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Eroare Necunoscută în timpul decodării %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => lipsă de pe toate serverele, ignorare"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Finalizat"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Dezarhivat %s fişierele/dosarele în %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
@@ -632,7 +656,7 @@ msgstr ""
|
||||
"Autentificare lipsă, vă rugăm să introduceţi numele de utilizator/parola de "
|
||||
"la Configurare->General în programul dumneavoastră terţ:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -806,8 +830,6 @@ msgstr "[%s] Eroare \"%s\" în timpul dezarhivării fişierelor RAR"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Eroare \"%s\" în timpul rar_unpack a %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -890,10 +912,6 @@ msgstr "Fișier RAR ce poate fi folosit"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Dezarhivat %s fişierele/dosarele în %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s fişiere în %s"
|
||||
@@ -994,6 +1012,11 @@ msgstr "Se repară"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Reparat în %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -1001,19 +1024,15 @@ msgstr "Disc plin"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Se verifică"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Se verifică"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1073,7 +1092,7 @@ msgid "Not available"
|
||||
msgstr "Indisponibil"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Nu pot trimite, informații necesare lipsă"
|
||||
|
||||
@@ -1168,7 +1187,7 @@ msgstr "Ignorăm duplicat NZB \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1176,6 +1195,12 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Întrerupem duplicat NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Anulat nu poate fi finalizat"
|
||||
@@ -1275,7 +1300,7 @@ msgid "Limit Speed"
|
||||
msgstr "Limitare de Viteză"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Pauză"
|
||||
@@ -1494,10 +1519,6 @@ msgstr "Descărcarea ar putea eşua, doar %s din %s disponibil"
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Descărcare euată, - Nu este pe serverul(ele) dumneavoastră"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Nu pot crea dosar final %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Nici o post-procesare din cauza verificării nereuşite"
|
||||
@@ -1562,6 +1583,10 @@ msgstr "Eroare ştergere dosar curent (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Descărcare terminată"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Nu pot crea dosar final %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Post-procesare"
|
||||
@@ -1622,6 +1647,20 @@ msgstr "Eroare la oprirea sistemului"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Id-ul indexului (%s) nu a fost găsit pentru fișierul de rating"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Adresă server"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Cheie API"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Descriere flux RSS incorectă \"%s\""
|
||||
@@ -1708,10 +1747,6 @@ msgstr "Servere"
|
||||
msgid "Failure"
|
||||
msgstr "Nereuşit"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Finalizat"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Nereuşit"
|
||||
@@ -1920,6 +1955,54 @@ msgstr "Lună"
|
||||
msgid "Year"
|
||||
msgstr "An"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Zi din lună"
|
||||
@@ -2737,6 +2820,36 @@ msgstr ""
|
||||
"Listă de extensii fișiere ce trebuie să fie șterse după descărcare.<br />De "
|
||||
"exemplu: <b>nfo</b> or <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Salvează Modificările"
|
||||
@@ -2763,10 +2876,6 @@ msgid ""
|
||||
"improved existing translations here:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Cheie API"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr "Această cheie va oferi programelor terţe acces deplin la SABnzbd."
|
||||
@@ -3065,14 +3174,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Ignoră"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Renunță"
|
||||
@@ -3123,6 +3236,16 @@ msgstr "La eroare, încearcă NZB alternativ"
|
||||
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 "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Activează redenumire dosar"
|
||||
@@ -3353,14 +3476,7 @@ msgstr ""
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3716,10 +3832,6 @@ msgstr "Activează Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Trimite notificări Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Adresă server"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Foloseşte doar pentru server Growl de la distanţă (gazdă:port)"
|
||||
@@ -4123,7 +4235,7 @@ msgstr "Editează Detalii NZB"
|
||||
msgid "Delete"
|
||||
msgstr "Şterge"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Vârf"
|
||||
|
||||
@@ -4135,7 +4247,7 @@ msgstr "Sus"
|
||||
msgid "Down"
|
||||
msgstr "Jos"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Coadă"
|
||||
|
||||
@@ -4267,6 +4379,10 @@ msgstr "Se încarcă"
|
||||
msgid "articles"
|
||||
msgstr "articole"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Redenumește"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Coadă reparare"
|
||||
@@ -4769,7 +4885,7 @@ msgstr "Redenumire fişiere similare : %s în %s nereuşită"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Numele de server nu se rezolvă la DNS"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Acces neautorizat"
|
||||
|
||||
@@ -5183,9 +5299,6 @@ msgstr "Descărcare URL nereuşită; %s"
|
||||
#~ msgid "Storage"
|
||||
#~ msgstr "Stocare"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Redenumește"
|
||||
|
||||
#~ msgid "Plush Options"
|
||||
#~ msgstr "Opţiuni Plush"
|
||||
|
||||
|
||||
221
po/main/ru.po
221
po/main/ru.po
@@ -2,15 +2,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-0.7.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2013-05-05 14:50+0000\n"
|
||||
"Last-Translator: Pavel Maryanov <Unknown>\n"
|
||||
"Language-Team: Russian <gmu@mx.ru>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:54+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
@@ -100,7 +100,7 @@ msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Завершение работы SABnzbd закончено"
|
||||
|
||||
@@ -416,12 +416,36 @@ msgstr "Неверно сформированная статья yEnc в %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Неизвестная ошибка декодирования %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => отсутствует на всех серверах, отброшен"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Завершено"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Распаковка %s файлов или папок в %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
@@ -622,7 +646,7 @@ msgstr ""
|
||||
"Отсутствуют учётные данные. Введите в сторонней программе имя пользователя и "
|
||||
"пароль из раздела «Настройка -> Общие»:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -793,8 +817,6 @@ msgstr "[%s] Ошибка распаковки RAR-файлов: %s"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Ошибка «%s» выполнения rar_unpack для %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -877,10 +899,6 @@ msgstr ""
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Распаковка %s файлов или папок в %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s файлов в %s"
|
||||
@@ -982,6 +1000,11 @@ msgstr "Исправление"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Исправлено за %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -989,19 +1012,15 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Проверка"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Проверка"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1061,7 +1080,7 @@ msgid "Not available"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr ""
|
||||
|
||||
@@ -1153,7 +1172,7 @@ msgstr "Пропущен повторяющийся NZB-файл «%s»"
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1161,6 +1180,12 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Приостановлен повторяющийся NZB-файл «%s»"
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr ""
|
||||
@@ -1260,7 +1285,7 @@ msgid "Limit Speed"
|
||||
msgstr "Ограничение скорости"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Приостановить"
|
||||
@@ -1480,10 +1505,6 @@ msgstr ""
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Не удаётся создать конечную папку %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Отмена пост-обработка из-за ошибки проверки"
|
||||
@@ -1548,6 +1569,10 @@ msgstr "Не удалось удалить рабочий каталог (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Загрузка завершена"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Не удаётся создать конечную папку %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Пост-обработка"
|
||||
@@ -1608,6 +1633,20 @@ msgstr "Не удалось завершить работу системы"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Адрес сервера"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Ключ API"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Неправильное описание RSS-ленты «%s»"
|
||||
@@ -1694,10 +1733,6 @@ msgstr "Серверы"
|
||||
msgid "Failure"
|
||||
msgstr "Сбой"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Завершено"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Ошибка"
|
||||
@@ -1906,6 +1941,54 @@ msgstr "Месяц"
|
||||
msgid "Year"
|
||||
msgstr "Год"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "День месяца"
|
||||
@@ -2719,6 +2802,36 @@ msgid ""
|
||||
"example: <b>nfo</b> or <b>nfo, sfv</b>"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Сохранить изменения"
|
||||
@@ -2745,10 +2858,6 @@ msgid ""
|
||||
"improved existing translations here:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "Ключ API"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr ""
|
||||
@@ -3047,14 +3156,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Отменить"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr ""
|
||||
@@ -3102,6 +3215,16 @@ msgstr ""
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Переименовывать папки"
|
||||
@@ -3328,14 +3451,7 @@ msgstr ""
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3694,10 +3810,6 @@ msgstr "Использовать Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Отправлять уведомления в Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Адрес сервера"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Используется только для удалённого сервера Growl (адрес:порт)"
|
||||
@@ -4101,7 +4213,7 @@ msgstr "Изменить данные NZB"
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "В начало"
|
||||
|
||||
@@ -4113,7 +4225,7 @@ msgstr "Вверх"
|
||||
msgid "Down"
|
||||
msgstr "Вниз"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "В конец"
|
||||
|
||||
@@ -4245,6 +4357,10 @@ msgstr ""
|
||||
msgid "articles"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Переименовать"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Исправление очереди"
|
||||
@@ -4746,7 +4862,7 @@ msgstr "Не удалось переименовать похожий файл:
|
||||
msgid "Server name does not resolve"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr ""
|
||||
|
||||
@@ -5202,9 +5318,6 @@ msgstr "Не удалось загрузить URL: %s"
|
||||
#~ msgid "Pause for 24 hours"
|
||||
#~ msgstr "Приостановить на 24 часа"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Переименовать"
|
||||
|
||||
#~ msgid "Left"
|
||||
#~ msgstr "осталось"
|
||||
|
||||
|
||||
221
po/main/sr.po
221
po/main/sr.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: ОZZII <ozzii.translate@gmail.com>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2015-12-28 10:25+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"Language-Team: Serbian <sr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:54+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -102,7 +102,7 @@ msgid "Error"
|
||||
msgstr "Грeшкa"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "Гашење SABnzbd је завршено"
|
||||
|
||||
@@ -420,12 +420,36 @@ msgstr "Лоше формиран yEnc артикал у %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Nepoznata greška pri dešifrovanju %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => фали на свим серверима, одбацивање"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Завршено"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Издвојено %s датотека/фасцикла у %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
@@ -622,7 +646,7 @@ msgstr ""
|
||||
"Недостаје аутентификација, унети у спољни програм име/лозинку из Подешавања-"
|
||||
">Опште:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -795,8 +819,6 @@ msgstr "[%s] Greška \"%s\" pri raspakivanju RAR datoteka"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Грешка \"%s\" док сам радио 'rar_unpack' на %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -879,10 +901,6 @@ msgstr "Neupotrebljiva RAR datoteka"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Издвојено %s датотека/фасцикла у %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s датотека у %s"
|
||||
@@ -983,6 +1001,11 @@ msgstr "Поправљање"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Поправљено за %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -990,19 +1013,15 @@ msgstr "Диск је пун"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Проверавање"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Провера"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1062,7 +1081,7 @@ msgid "Not available"
|
||||
msgstr "Недоступно"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Nemoguće poslati, nedostaju obavezni podaci"
|
||||
|
||||
@@ -1154,7 +1173,7 @@ msgstr "Игнорисање дуплог NZB-а \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1162,6 +1181,12 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Паузирам због дуплог NZB-а \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Поништено, не може да се заврши"
|
||||
@@ -1261,7 +1286,7 @@ msgid "Limit Speed"
|
||||
msgstr "Ограничење брзине"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Пауза"
|
||||
@@ -1474,10 +1499,6 @@ msgstr "Преузимање је можда погрешно. има %s од п
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Неуспешно преузимање - није на вашем серверу"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Немогуће креирање фасцикле %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Нема пост-процесирање пошто провера није успела"
|
||||
@@ -1542,6 +1563,10 @@ msgstr "Грешка у брисању радне фасцикле (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Преузимање завршено"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Немогуће креирање фасцикле %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Пост-процесирање"
|
||||
@@ -1602,6 +1627,20 @@ msgstr "Greška pri gašenju sistema"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Indekser id (%s) nije pronađen za datoteku ocenjivanja"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Адреса сервера"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API кључ"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Погрешан опис RSS фида \"%s\""
|
||||
@@ -1688,10 +1727,6 @@ msgstr "Сервери"
|
||||
msgid "Failure"
|
||||
msgstr "Грешка"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Завршено"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Неуспешно"
|
||||
@@ -1900,6 +1935,54 @@ msgstr "Месец"
|
||||
msgid "Year"
|
||||
msgstr "Година"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Дан у месецу"
|
||||
@@ -2711,6 +2794,36 @@ msgstr ""
|
||||
"Листа ектензије за брисање после преузимања.<br />На пример: <b>nfo</b> или "
|
||||
"<b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Сачувај промене"
|
||||
@@ -2737,10 +2850,6 @@ msgid ""
|
||||
"improved existing translations here:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API кључ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr "Овај кључ допушта пун приступ SABnzbd-а другим програмима."
|
||||
@@ -3040,14 +3149,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Одбаци"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Прекини"
|
||||
@@ -3098,6 +3211,16 @@ msgstr "U slučaju neuspeha, pokušaj sa alternativnim NZB-om"
|
||||
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 "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Упали преименовање фасцикле"
|
||||
@@ -3322,14 +3445,7 @@ msgstr ""
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3680,10 +3796,6 @@ msgstr "Упали „Growl“"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Пошаљи обавештења у „Growl“"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Адреса сервера"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Користи само удаљен „Growl“ сервер (хост:порт)"
|
||||
@@ -4087,7 +4199,7 @@ msgstr "Уреди детаље NZB-а"
|
||||
msgid "Delete"
|
||||
msgstr "Обриши"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Врх"
|
||||
|
||||
@@ -4099,7 +4211,7 @@ msgstr "Горе"
|
||||
msgid "Down"
|
||||
msgstr "Доле"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Дно"
|
||||
|
||||
@@ -4232,6 +4344,10 @@ msgstr "Учитавам"
|
||||
msgid "articles"
|
||||
msgstr "artikli"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "Преименуј"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Поправљење реда"
|
||||
@@ -4729,7 +4845,7 @@ msgstr "Неуспешно преименовање сличне датотек
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Ime servera se ne može odrediti"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Neautorizovan pristup"
|
||||
|
||||
@@ -4804,9 +4920,6 @@ msgstr "Погрешно учитавање УРЛ-а; %s"
|
||||
#~ msgid "Plush Options"
|
||||
#~ msgstr "Опције Plush"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "Преименуј"
|
||||
|
||||
#~ msgid "Pause for 12 hours"
|
||||
#~ msgstr "Паузирај 12 сати"
|
||||
|
||||
|
||||
218
po/main/sv.po
218
po/main/sv.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2016-02-20 20:34+0000\n"
|
||||
"Last-Translator: shypike <Unknown>\n"
|
||||
"Language-Team: Swedish <sv@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:01+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:54+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -102,7 +102,7 @@ msgid "Error"
|
||||
msgstr "Fel"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd nedstängning utförd."
|
||||
|
||||
@@ -421,12 +421,36 @@ msgstr "Felaktigt utformad yEnc artikel i %s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "Okänt fel under avkodning av %s"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => saknas från alla servrar, kastar"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Färdig"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Uppackad %s filer/mappar i %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
@@ -625,7 +649,7 @@ msgstr ""
|
||||
"Autentisering saknas, ange användarnamn / lösenord från Konfiguration-> "
|
||||
"Allmänt i ditt tredjepartsprogram:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -799,8 +823,6 @@ msgstr "[%s] Fel \"%s\" under uppackning av RAR fil(er)"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "Fel \"%s\" när du kör rar_unpack på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -883,10 +905,6 @@ msgstr "Oanvändbar RAR-fil"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "Uppackad %s filer/mappar i %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s filer i %s"
|
||||
@@ -988,6 +1006,11 @@ msgstr "Reparerar"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] Reparerad i %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -995,19 +1018,15 @@ msgstr "Disken är full"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "Verifierar"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "Kontrollerar"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr ""
|
||||
@@ -1067,7 +1086,7 @@ msgid "Not available"
|
||||
msgstr "Ej tillgänglig"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "Kunde inte skicka, saknar nödvändig data"
|
||||
|
||||
@@ -1159,7 +1178,7 @@ msgstr "Ignorerar dubblett för NZB \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr ""
|
||||
|
||||
@@ -1167,6 +1186,12 @@ msgstr ""
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "Pausar dubblett för NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "Avbrutet, kan inte slutföras"
|
||||
@@ -1266,7 +1291,7 @@ msgid "Limit Speed"
|
||||
msgstr "Hastighetsbegränsning"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
@@ -1485,10 +1510,6 @@ msgstr ""
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "Nerladdning misslyckades - Inte på din server eller servrar"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Kan inte skapa slutgiltig mapp %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "Ingen efterbehandling på grund av misslyckad verifiering"
|
||||
@@ -1553,6 +1574,10 @@ msgstr "Det gick inte att ta bort arbetsmapp (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "Hämtningen slutfördes"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "Kan inte skapa slutgiltig mapp %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "Efterbehandling"
|
||||
@@ -1613,6 +1638,20 @@ msgstr "Fel uppstod då systemet skulle stängas"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "Index id (%s) inte hittad för betygsfil"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Serveradress"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-nyckel"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "Felaktigt RSS-flödesbeskrivning \"%s\""
|
||||
@@ -1699,10 +1738,6 @@ msgstr "Servrar"
|
||||
msgid "Failure"
|
||||
msgstr "Misslyckades"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "Färdig"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "Misslyckades"
|
||||
@@ -1911,6 +1946,54 @@ msgstr "Månad"
|
||||
msgid "Year"
|
||||
msgstr "År"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "Månadsdag"
|
||||
@@ -2725,6 +2808,36 @@ msgstr ""
|
||||
"Lista av filändelser som skall bli borttagna efter nerladdning.<br/> Till "
|
||||
"exempel: <b>nfo</b> or <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "Spara ändringar"
|
||||
@@ -2751,10 +2864,6 @@ msgid ""
|
||||
"improved existing translations here:"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API-nyckel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr "Denna nyckel ger tredjepartsprogram full tillgång till SABnzbd."
|
||||
@@ -3052,14 +3161,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "Kasta"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "Avbryt"
|
||||
@@ -3111,6 +3224,16 @@ 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 "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "Döp om mappar"
|
||||
@@ -3336,14 +3459,7 @@ msgstr ""
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3695,10 +3811,6 @@ msgstr "Aktivera Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "Skicka notis till Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "Serveradress"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "Använd endast för extern Growl.server (host:port)"
|
||||
@@ -4102,7 +4214,7 @@ msgstr "Ändra NZB detaljer"
|
||||
msgid "Delete"
|
||||
msgstr "Ta bort"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "Topp"
|
||||
|
||||
@@ -4114,7 +4226,7 @@ msgstr "Upp"
|
||||
msgid "Down"
|
||||
msgstr "Ner"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "Botten"
|
||||
|
||||
@@ -4246,6 +4358,10 @@ msgstr "Laddar"
|
||||
msgid "articles"
|
||||
msgstr "artiklar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "Köreparation"
|
||||
@@ -4747,7 +4863,7 @@ msgstr "Det gick inte att döpa om liknande fil: %s till %s"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "Servernamn kunde inte läsas"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "Otillåten åtkomst"
|
||||
|
||||
|
||||
224
po/main/zh_CN.po
224
po/main/zh_CN.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-06-26 23:00+0000\n"
|
||||
"POT-Creation-Date: 2017-08-06 09:51+0000\n"
|
||||
"PO-Revision-Date: 2017-06-22 07:06+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2017-06-27 06:02+0000\n"
|
||||
"X-Generator: Launchpad (build 18416)\n"
|
||||
"X-Launchpad-Export-Date: 2017-08-07 05:54+0000\n"
|
||||
"X-Generator: Launchpad (build 18441)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -100,7 +100,7 @@ msgid "Error"
|
||||
msgstr "错误"
|
||||
|
||||
#: SABnzbd.py # sabnzbd/interface.py # sabnzbd/interface.py
|
||||
#: sabnzbd/osxmenu.py
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/wizard.py
|
||||
msgid "SABnzbd shutdown finished"
|
||||
msgstr "SABnzbd 关闭完成"
|
||||
|
||||
@@ -415,13 +415,37 @@ msgstr "yEnc 文章格式错误:%s"
|
||||
msgid "Unknown Error while decoding %s"
|
||||
msgstr "解码 %s 时发生未知错误"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "检测到 UUencode,但是仅有 yEnc 编码受支持 [%s]"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "%s => missing from all servers, discarding"
|
||||
msgstr "%s => 所有服务器均缺失,正在舍弃"
|
||||
|
||||
#: sabnzbd/decoder.py
|
||||
msgid "UUencode detected, only yEnc encoding is supported [%s]"
|
||||
msgstr "检测到 UUencode,但是仅有 yEnc 编码受支持 [%s]"
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
|
||||
msgid "Direct Unpack"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "完成"
|
||||
|
||||
#: sabnzbd/directunpacker.py # sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "已解压 %s 个文件/文件夹,耗时 %s"
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message]
|
||||
msgid "Direct Unpack was automatically enabled."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/directunpacker.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/dirscanner.py [Error message] # sabnzbd/dirscanner.py [Error message]
|
||||
msgid "Error removing %s"
|
||||
@@ -612,7 +636,7 @@ msgid ""
|
||||
"into your 3rd party program:"
|
||||
msgstr "缺身份认证信息,请在第三方程序中输入“配置”->“常规”中的用户名/密码:"
|
||||
|
||||
#: sabnzbd/interface.py [Warning message]
|
||||
#: sabnzbd/interface.py [Warning message] # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Try our new skin Glitter! Fresh new design that is optimized for desktop and "
|
||||
"mobile devices. Go to Config -> General to change your skin."
|
||||
@@ -782,8 +806,6 @@ msgstr "[%s] \"%s\" 解压 RAR 文件时出错"
|
||||
msgid "Error \"%s\" while running rar_unpack on %s"
|
||||
msgstr "出现错误 \"%s\",正对 %s 执行 rar_unpack 操作"
|
||||
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
#: sabnzbd/newsunpack.py [Warning message] # sabnzbd/newsunpack.py [Warning message]
|
||||
@@ -866,10 +888,6 @@ msgstr "无法使用的 RAR 文件"
|
||||
msgid "Corrupt RAR file"
|
||||
msgstr "损坏的 RAR 文件"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Unpacked %s files/folders in %s"
|
||||
msgstr "已解压 %s 个文件/文件夹,耗时 %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "%s files in %s"
|
||||
msgstr "%s 个文件,耗时 %s"
|
||||
@@ -968,6 +986,11 @@ msgstr "正在修复"
|
||||
msgid "[%s] Repaired in %s"
|
||||
msgstr "[%s] 已修复,耗时 %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Disk full"
|
||||
@@ -975,19 +998,15 @@ msgstr "磁盘空间已满"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Verifying"
|
||||
msgstr "正在验证"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/skintext.py [PP status]
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
|
||||
msgid "Checking"
|
||||
msgstr "正在检查"
|
||||
|
||||
#: sabnzbd/newsunpack.py
|
||||
msgid "Verifying repair"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py [Error message]
|
||||
msgid "Python script \"%s\" does not have execute (+x) permission set"
|
||||
msgstr "Python 脚本 \"%s\" 不具有执行 (+x) 权限"
|
||||
@@ -1047,7 +1066,7 @@ msgid "Not available"
|
||||
msgstr "不可用"
|
||||
|
||||
#: sabnzbd/notifier.py # sabnzbd/notifier.py # sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py
|
||||
#: sabnzbd/notifier.py # sabnzbd/rating.py # sabnzbd/rating.py
|
||||
msgid "Cannot send, missing required data"
|
||||
msgstr "无法发送,缺少必要的数据"
|
||||
|
||||
@@ -1139,7 +1158,7 @@ msgstr "正在忽略重复 NZB \"%s\""
|
||||
msgid "Failing duplicate NZB \"%s\""
|
||||
msgstr "失败于重复的 NZB 文件 \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
#: sabnzbd/nzbstuff.py # sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid "Duplicate NZB"
|
||||
msgstr "重复的 NZB 文件"
|
||||
|
||||
@@ -1147,6 +1166,12 @@ msgstr "重复的 NZB 文件"
|
||||
msgid "Pausing duplicate NZB \"%s\""
|
||||
msgstr "正在暂停重复 NZB \"%s\""
|
||||
|
||||
#: sabnzbd/nzbstuff.py [Warning message]
|
||||
msgid ""
|
||||
"%d files with duplicate filenames were discared for \"%s\". Enable "
|
||||
"\"allow_duplicate_files\" to allow duplicate filenames."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/nzbstuff.py
|
||||
msgid "Aborted, cannot be completed"
|
||||
msgstr "已中止,无法完成"
|
||||
@@ -1246,7 +1271,7 @@ msgid "Limit Speed"
|
||||
msgstr "限速"
|
||||
|
||||
#: sabnzbd/osxmenu.py # sabnzbd/sabtray.py # sabnzbd/sabtraylinux.py
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler] # sabnzbd/skintext.py [Pause downloading] # sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Config->Scheduling]
|
||||
msgid "Pause"
|
||||
msgstr "暂停"
|
||||
@@ -1458,10 +1483,6 @@ msgstr "下载可能会失败,只有 %s 块 (需要 %s) 可用"
|
||||
msgid "Download failed - Not on your server(s)"
|
||||
msgstr "下载失败 - 不在该服务器上"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "无法创建最终文件夹 %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "由于验证失败,未进行后期处理"
|
||||
@@ -1526,6 +1547,10 @@ msgstr "移除工作目录出错 (%s)"
|
||||
msgid "Download Completed"
|
||||
msgstr "下载完成"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Cannot create final folder %s"
|
||||
msgstr "无法创建最终文件夹 %s"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "后期处理"
|
||||
@@ -1586,6 +1611,20 @@ msgstr "关闭系统时出错"
|
||||
msgid "Indexer id (%s) not found for ratings file"
|
||||
msgstr "评分文件的索引器 id (%s) 未找到"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "服务器地址"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API Key"
|
||||
|
||||
#: sabnzbd/rating.py # sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr "这个密钥用来向服务器表明身份。查看您在索引网站上的个人档案。"
|
||||
|
||||
#: sabnzbd/rss.py [Error message] # sabnzbd/rss.py
|
||||
msgid "Incorrect RSS feed description \"%s\""
|
||||
msgstr "RSS feed 描述不正确 \"%s\""
|
||||
@@ -1672,10 +1711,6 @@ msgstr "服务器"
|
||||
msgid "Failure"
|
||||
msgstr "失败"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py [History: job status]
|
||||
msgid "Completed"
|
||||
msgstr "完成"
|
||||
|
||||
#: sabnzbd/skintext.py [PP status] # sabnzbd/skintext.py
|
||||
msgid "Failed"
|
||||
msgstr "失败"
|
||||
@@ -1884,6 +1919,54 @@ msgstr "月"
|
||||
msgid "Year"
|
||||
msgstr "年"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Day of month"
|
||||
msgstr "每月特定一天"
|
||||
@@ -2687,6 +2770,36 @@ msgid ""
|
||||
"example: <b>nfo</b> or <b>nfo, sfv</b>"
|
||||
msgstr "下载后应删除的文件扩展名列表。<br />例如: <b>nfo</b> 或 <b>nfo, sfv</b>"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "History Retention"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Automatically delete completed jobs from History. Beware that Duplicate "
|
||||
"Detection and some external tools rely on History information."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep all jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep maximum number of completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Keep completed jobs maximum number of days"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Do not keep any completed jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Save Changes"
|
||||
msgstr "保存更改"
|
||||
@@ -2713,10 +2826,6 @@ msgid ""
|
||||
"improved existing translations here:"
|
||||
msgstr "帮助我们来本地化 SABnzbd !<br/>您可以在这里来添加未被翻译的文字或者改进现有的翻译:"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "API Key"
|
||||
msgstr "API Key"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "This key will give 3rd party programs full access to SABnzbd."
|
||||
msgstr "该 key 将授予第三方程序 SABnzbd 的完整权限。"
|
||||
@@ -2993,14 +3102,18 @@ msgid ""
|
||||
"items in your History)"
|
||||
msgstr "在剧目中检测相同的剧集 (基于您的历史项目,参照 \"name/season/episode\" 的规则)"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Discard"
|
||||
msgstr "舍弃"
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for duplicates]
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Fail job (move to History)"
|
||||
msgstr "失败的任务 (移动到历史)"
|
||||
|
||||
#: sabnzbd/skintext.py [Four way switch for duplicates]
|
||||
msgid "Tag job"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
|
||||
msgid "Abort"
|
||||
msgstr "中止"
|
||||
@@ -3048,6 +3161,16 @@ msgstr "失败时,尝试备用 NZB"
|
||||
msgid "Some servers provide an alternative NZB when a download fails."
|
||||
msgstr "部分服务器在下载失败时可提供备用 NZB 文件。"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Use tags from indexer"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"When sorting, use tags from indexer for title, season, episode, etc. "
|
||||
"Otherwise all naming is derived from the NZB name."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable folder rename"
|
||||
msgstr "启用文件夹重命名"
|
||||
@@ -3265,16 +3388,8 @@ msgstr "启用索引集成"
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Indexers can supply rating information when a job is added and SABnzbd can "
|
||||
"report to the indexer if a job couldn't be completed. Depending on your "
|
||||
"indexer, the API key setting can be left blank."
|
||||
"report to the indexer if a job couldn't be completed."
|
||||
msgstr ""
|
||||
"当任务添加时,索引服务可提供评分信息。当任务无法完成时,SABnzbd 也可发送报告给索引服务。有些时候 API 密钥设定可以留空,取决于索引服务的要求。"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"This key provides identity to indexer. Check your profile on the indexer's "
|
||||
"website."
|
||||
msgstr "这个密钥用来向服务器表明身份。查看您在索引网站上的个人档案。"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Enable Filtering"
|
||||
@@ -3623,10 +3738,6 @@ msgstr "启用 Growl"
|
||||
msgid "Send notifications to Growl"
|
||||
msgstr "将通知发送到 Growl"
|
||||
|
||||
#: sabnzbd/skintext.py [Address of Growl server]
|
||||
msgid "Server address"
|
||||
msgstr "服务器地址"
|
||||
|
||||
#: sabnzbd/skintext.py [Don't translate "Growl"]
|
||||
msgid "Only use for remote Growl server (host:port)"
|
||||
msgstr "仅当使用远程 Growl 服务器时需要 (主机:端口)"
|
||||
@@ -4029,7 +4140,7 @@ msgstr "编辑 NZB 详情"
|
||||
msgid "Delete"
|
||||
msgstr "删除"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to top] # sabnzbd/skintext.py
|
||||
msgid "Top"
|
||||
msgstr "置顶"
|
||||
|
||||
@@ -4041,7 +4152,7 @@ msgstr "上移"
|
||||
msgid "Down"
|
||||
msgstr "下移"
|
||||
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom]
|
||||
#: sabnzbd/skintext.py [Job details page, move file to bottom] # sabnzbd/skintext.py
|
||||
msgid "Bottom"
|
||||
msgstr "置底"
|
||||
|
||||
@@ -4173,6 +4284,10 @@ msgstr "正在加载"
|
||||
msgid "articles"
|
||||
msgstr "篇文章"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Rename"
|
||||
msgstr "重命名"
|
||||
|
||||
#: sabnzbd/skintext.py # sabnzbd/skintext.py
|
||||
msgid "Queue repair"
|
||||
msgstr "队列修复"
|
||||
@@ -4666,7 +4781,7 @@ msgstr "重命名相似文件失败: %s 为 %s"
|
||||
msgid "Server name does not resolve"
|
||||
msgstr "服务器名无法解析"
|
||||
|
||||
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
|
||||
#: sabnzbd/urlgrabber.py
|
||||
msgid "Unauthorized access"
|
||||
msgstr "未授权访问"
|
||||
|
||||
@@ -5102,9 +5217,6 @@ msgstr "URL 装取失败; %s"
|
||||
#~ msgid "Pause for 24 hours"
|
||||
#~ msgstr "暂停 24 小时"
|
||||
|
||||
#~ msgid "Rename"
|
||||
#~ msgstr "重命名"
|
||||
|
||||
#~ msgid "Left"
|
||||
#~ msgstr "剩余"
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ import sabnzbd.lang as lang
|
||||
import sabnzbd.api
|
||||
import sabnzbd.directunpacker as directunpacker
|
||||
from sabnzbd.decorators import synchronized, notify_downloader
|
||||
from sabnzbd.constants import NORMAL_PRIORITY, VALID_ARCHIVES, GIGI, \
|
||||
from sabnzbd.constants import NORMAL_PRIORITY, VALID_ARCHIVES, \
|
||||
REPAIR_REQUEST, QUEUE_FILE_NAME, QUEUE_VERSION, QUEUE_FILE_TMPL
|
||||
import sabnzbd.getipaddress as getipaddress
|
||||
|
||||
@@ -308,6 +308,7 @@ def initialize(pause_downloader=False, clean_up=False, evalSched=False, repair=0
|
||||
if cfg.sched_converted() != 2:
|
||||
cfg.schedules.set(['%s %s' % (1, schedule) for schedule in cfg.schedules()])
|
||||
cfg.sched_converted.set(2)
|
||||
config.save_config()
|
||||
|
||||
if check_repair_request():
|
||||
repair = 2
|
||||
@@ -597,27 +598,22 @@ def backup_nzb(filename, data):
|
||||
|
||||
def save_compressed(folder, filename, data):
|
||||
""" Save compressed NZB file in folder """
|
||||
# Need to go to the save folder to
|
||||
# prevent the pathname being embedded in the GZ file
|
||||
here = os.getcwd()
|
||||
os.chdir(folder)
|
||||
|
||||
if filename.endswith('.nzb'):
|
||||
filename += '.gz'
|
||||
else:
|
||||
filename += '.nzb.gz'
|
||||
logging.info("Backing up %s", os.path.join(folder, filename))
|
||||
try:
|
||||
f = gzip.GzipFile(filename, 'wb')
|
||||
f.write(data)
|
||||
f.flush()
|
||||
f.close()
|
||||
# Have to get around the path being put inside the tgz
|
||||
with open(os.path.join(folder, filename), 'wb') as tgz_file:
|
||||
f = gzip.GzipFile(filename, fileobj=tgz_file)
|
||||
f.write(data)
|
||||
f.flush()
|
||||
f.close()
|
||||
except:
|
||||
logging.error(T('Saving %s failed'), os.path.join(folder, filename))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
|
||||
os.chdir(here)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Unsynchronized methods
|
||||
@@ -842,16 +838,6 @@ def keep_awake():
|
||||
sleepless.allow_sleep()
|
||||
|
||||
|
||||
def CheckFreeSpace():
|
||||
""" Check if enough disk space is free, if not pause downloader and send email """
|
||||
if cfg.download_free() and not sabnzbd.downloader.Downloader.do.paused:
|
||||
if misc.diskspace(force=True)['download_dir'][1] < cfg.download_free.get_float() / GIGI:
|
||||
logging.warning(T('Too little diskspace forcing PAUSE'))
|
||||
# Pause downloader, but don't save, since the disk is almost full!
|
||||
Downloader.do.pause(save=False)
|
||||
emailer.diskfull()
|
||||
|
||||
|
||||
################################################################################
|
||||
# Data IO #
|
||||
################################################################################
|
||||
@@ -872,6 +858,7 @@ def get_new_id(prefix, folder, check_list=None):
|
||||
except:
|
||||
logging.error(T('Failure in tempfile.mkstemp'))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
break
|
||||
# Cannot create unique id, crash the process
|
||||
raise IOError
|
||||
|
||||
|
||||
@@ -906,7 +906,7 @@ def _api_server_stats(name, output, kwargs):
|
||||
|
||||
stats['servers'] = {}
|
||||
for svr in config.get_servers():
|
||||
t, m, w, d = BPSMeter.do.amounts(svr)
|
||||
t, m, w, d, _ = BPSMeter.do.amounts(svr)
|
||||
stats['servers'][svr] = {'total': t or 0, 'month': m or 0, 'week': w or 0, 'day': d or 0}
|
||||
|
||||
return report(output, keyword='', data=stats)
|
||||
|
||||
@@ -30,13 +30,8 @@ from sabnzbd.constants import GIGI, ANFO
|
||||
|
||||
ARTICLE_LOCK = threading.Lock()
|
||||
|
||||
|
||||
class ArticleCache(object):
|
||||
""" Operations on lists/dicts are atomic enough that we
|
||||
do not have to put locks. Only the cache-size needs
|
||||
a lock since the integer needs to stay synced.
|
||||
With less locking, the decoder and assembler do not
|
||||
have to wait on each other.
|
||||
"""
|
||||
do = None
|
||||
|
||||
def __init__(self):
|
||||
@@ -47,9 +42,11 @@ class ArticleCache(object):
|
||||
self.__article_table = {} # Dict of buffered articles
|
||||
ArticleCache.do = self
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def cache_info(self):
|
||||
return ANFO(len(self.__article_list), abs(self.__cache_size), self.__cache_limit_org)
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def new_limit(self, limit):
|
||||
""" Called when cache limit changes """
|
||||
self.__cache_limit_org = limit
|
||||
@@ -59,28 +56,23 @@ class ArticleCache(object):
|
||||
self.__cache_limit = min(limit, GIGI)
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def increase_cache_size(self, value):
|
||||
self.__cache_size += value
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def decrease_cache_size(self, value):
|
||||
self.__cache_size -= value
|
||||
|
||||
def reserve_space(self, data):
|
||||
""" Is there space left in the set limit? """
|
||||
data_size = sys.getsizeof(data) * 64
|
||||
self.increase_cache_size(data_size)
|
||||
self.__cache_size += data_size
|
||||
if self.__cache_size + data_size > self.__cache_limit:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def free_reserve_space(self, data):
|
||||
""" Remove previously reserved space """
|
||||
data_size = sys.getsizeof(data) * 64
|
||||
self.decrease_cache_size(data_size)
|
||||
self.__cache_size -= data_size
|
||||
return self.__cache_size + data_size < self.__cache_limit
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def save_article(self, article, data):
|
||||
nzf = article.nzf
|
||||
nzo = nzf.nzo
|
||||
@@ -98,6 +90,7 @@ class ArticleCache(object):
|
||||
if self.__cache_limit:
|
||||
if self.__cache_limit < 0:
|
||||
self.__add_to_cache(article, data)
|
||||
|
||||
else:
|
||||
data_size = len(data)
|
||||
|
||||
@@ -106,7 +99,7 @@ class ArticleCache(object):
|
||||
# Flush oldest article in cache
|
||||
old_article = self.__article_list.pop(0)
|
||||
old_data = self.__article_table.pop(old_article)
|
||||
self.decrease_cache_size(len(old_data))
|
||||
self.__cache_size -= len(old_data)
|
||||
# No need to flush if this is a refreshment article
|
||||
if old_article != article:
|
||||
self.__flush_article(old_article, old_data)
|
||||
@@ -120,6 +113,7 @@ class ArticleCache(object):
|
||||
else:
|
||||
self.__flush_article(article, data)
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def load_article(self, article):
|
||||
data = None
|
||||
nzo = article.nzf.nzo
|
||||
@@ -127,7 +121,7 @@ class ArticleCache(object):
|
||||
if article in self.__article_list:
|
||||
data = self.__article_table.pop(article)
|
||||
self.__article_list.remove(article)
|
||||
self.decrease_cache_size(len(data))
|
||||
self.__cache_size -= len(data)
|
||||
elif article.art_id:
|
||||
data = sabnzbd.load_data(article.art_id, nzo.workpath, remove=True,
|
||||
do_pickle=False, silent=True)
|
||||
@@ -137,19 +131,21 @@ class ArticleCache(object):
|
||||
|
||||
return data
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def flush_articles(self):
|
||||
self.__cache_size = 0
|
||||
while self.__article_list:
|
||||
article = self.__article_list.pop(0)
|
||||
data = self.__article_table.pop(article)
|
||||
self.__flush_article(article, data)
|
||||
self.__cache_size = 0
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def purge_articles(self, articles):
|
||||
for article in articles:
|
||||
if article in self.__article_list:
|
||||
self.__article_list.remove(article)
|
||||
data = self.__article_table.pop(article)
|
||||
self.decrease_cache_size(len(data))
|
||||
self.__cache_size -= len(data)
|
||||
if article.art_id:
|
||||
sabnzbd.remove_data(article.art_id, article.nzf.nzo.workpath)
|
||||
|
||||
@@ -172,12 +168,11 @@ class ArticleCache(object):
|
||||
|
||||
def __add_to_cache(self, article, data):
|
||||
if article in self.__article_table:
|
||||
self.decrease_cache_size(len(self.__article_table[article]))
|
||||
self.__cache_size -= len(self.__article_table[article])
|
||||
else:
|
||||
self.__article_list.append(article)
|
||||
|
||||
self.__article_table[article] = data
|
||||
self.increase_cache_size(len(data))
|
||||
self.__cache_size += len(data)
|
||||
|
||||
|
||||
# Create the instance
|
||||
|
||||
@@ -30,8 +30,8 @@ import hashlib
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.misc import get_filepath, sanitize_filename, get_unique_filename, renamer, \
|
||||
set_permissions, long_path, clip_path, has_win_device, get_all_passwords
|
||||
from sabnzbd.constants import Status
|
||||
set_permissions, long_path, clip_path, has_win_device, get_all_passwords, diskspace
|
||||
from sabnzbd.constants import Status, GIGI
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.articlecache import ArticleCache
|
||||
from sabnzbd.postproc import PostProcessor
|
||||
@@ -69,17 +69,31 @@ class Assembler(Thread):
|
||||
nzo, nzf = job
|
||||
|
||||
if nzf:
|
||||
sabnzbd.CheckFreeSpace()
|
||||
# Check if enough disk space is free, if not pause downloader and send email
|
||||
if diskspace(force=True)['download_dir'][1] < (cfg.download_free.get_float() + nzf.bytes) / GIGI:
|
||||
# Only warn and email once
|
||||
if not sabnzbd.downloader.Downloader.do.paused:
|
||||
logging.warning(T('Too little diskspace forcing PAUSE'))
|
||||
# Pause downloader, but don't save, since the disk is almost full!
|
||||
sabnzbd.downloader.Downloader.do.pause(save=False)
|
||||
sabnzbd.emailer.diskfull()
|
||||
# Abort all direct unpackers, just to be sure
|
||||
sabnzbd.directunpacker.abort_all()
|
||||
|
||||
filename = sanitize_filename(nzf.filename)
|
||||
nzf.filename = filename
|
||||
dupe = nzo.check_for_dupe(nzf)
|
||||
filepath = get_filepath(long_path(cfg.download_dir.get_path()), nzo, filename)
|
||||
# Place job back in queue and wait 30 seconds to hope it gets resolved
|
||||
self.process(job)
|
||||
sleep(30)
|
||||
continue
|
||||
|
||||
# Prepare filename
|
||||
nzo.verify_nzf_filename(nzf)
|
||||
nzf.filename = sanitize_filename(nzf.filename)
|
||||
filepath = get_filepath(long_path(cfg.download_dir.get_path()), nzo, nzf.filename)
|
||||
|
||||
if filepath:
|
||||
logging.info('Decoding %s %s', filepath, nzf.type)
|
||||
try:
|
||||
filepath = self.assemble(nzf, filepath, dupe)
|
||||
filepath = self.assemble(nzf, filepath)
|
||||
except IOError, (errno, strerror):
|
||||
# If job was deleted, ignore error
|
||||
if not nzo.is_gone():
|
||||
@@ -95,19 +109,23 @@ class Assembler(Thread):
|
||||
logging.error(T('Fatal error in Assembler'), exc_info=True)
|
||||
break
|
||||
|
||||
# Clean-up admin data
|
||||
nzf.remove_admin()
|
||||
setname = nzf.setname
|
||||
if nzf.is_par2 and (nzo.md5packs.get(setname) is None):
|
||||
pack = self.parse_par2_file(filepath, nzo.md5of16k)
|
||||
if pack:
|
||||
nzo.md5packs[setname] = pack
|
||||
logging.debug('Got md5pack for set %s', setname)
|
||||
# Valid md5pack, so use this par2-file as main par2 file for the set
|
||||
if setname in nzo.partable:
|
||||
# First copy the set of extrapars, we need them later
|
||||
nzf.extrapars = nzo.partable[setname].extrapars
|
||||
nzo.partable[setname] = nzf
|
||||
|
||||
# Parse par2 files
|
||||
if nzf.is_par2:
|
||||
# Always parse par2 files to get new md5of16k info
|
||||
pack = self.parse_par2_file(nzf, filepath)
|
||||
if pack and (nzo.md5packs.get(nzf.setname) is None):
|
||||
nzo.md5packs[nzf.setname] = pack
|
||||
logging.debug('Got md5pack for set %s', nzf.setname)
|
||||
# Valid md5pack, so use this par2-file as main par2 file for the set
|
||||
if nzf.setname in nzo.partable:
|
||||
# First copy the set of extrapars, we need them later
|
||||
nzf.extrapars = nzo.partable[nzf.setname].extrapars
|
||||
nzo.partable[nzf.setname] = nzf
|
||||
|
||||
# Encryption and unwanted extension detection
|
||||
rar_encrypted, unwanted_file = check_encrypted_and_unwanted_files(nzo, filepath)
|
||||
if rar_encrypted:
|
||||
if cfg.pause_on_pwrar() == 1:
|
||||
@@ -146,15 +164,8 @@ class Assembler(Thread):
|
||||
sabnzbd.nzbqueue.NzbQueue.do.remove(nzo.nzo_id, add_to_history=False, cleanup=False)
|
||||
PostProcessor.do.process(nzo)
|
||||
|
||||
def assemble(self, nzf, path, dupe):
|
||||
def assemble(self, nzf, path):
|
||||
""" Assemble a NZF from its table of articles """
|
||||
if os.path.exists(path):
|
||||
unique_path = get_unique_filename(path)
|
||||
if dupe:
|
||||
path = unique_path
|
||||
else:
|
||||
renamer(path, unique_path)
|
||||
|
||||
md5 = hashlib.md5()
|
||||
fout = open(path, 'ab')
|
||||
decodetable = nzf.decodetable
|
||||
@@ -185,7 +196,7 @@ class Assembler(Thread):
|
||||
|
||||
return path
|
||||
|
||||
def parse_par2_file(self, fname, table16k):
|
||||
def parse_par2_file(self, nzf, fname):
|
||||
""" Get the hash table and the first-16k hash table from a PAR2 file
|
||||
Return as dictionary, indexed on names or hashes for the first-16 table
|
||||
For a full description of the par2 specification, visit:
|
||||
@@ -205,10 +216,11 @@ class Assembler(Thread):
|
||||
name, hash, hash16k = parse_par2_file_packet(f, header)
|
||||
if name:
|
||||
table[name] = hash
|
||||
if hash16k not in table16k:
|
||||
table16k[hash16k] = name
|
||||
else:
|
||||
# Not unique, remove to avoid false-renames
|
||||
if hash16k not in nzf.nzo.md5of16k:
|
||||
nzf.nzo.md5of16k[hash16k] = name
|
||||
elif nzf.nzo.md5of16k[hash16k] != name:
|
||||
# Not unique and not already linked to this file
|
||||
# Remove to avoid false-renames
|
||||
duplicates16k.append(hash16k)
|
||||
|
||||
header = f.read(8)
|
||||
@@ -225,10 +237,18 @@ class Assembler(Thread):
|
||||
# Have to remove duplicates at the end to make sure
|
||||
# no trace is left in case of multi-duplicates
|
||||
for hash16k in duplicates16k:
|
||||
if hash16k in table16k:
|
||||
old_name = table16k.pop(hash16k)
|
||||
if hash16k in nzf.nzo.md5of16k:
|
||||
old_name = nzf.nzo.md5of16k.pop(hash16k)
|
||||
logging.debug('Par2-16k signature of %s not unique, discarding', old_name)
|
||||
|
||||
# If the filename was changed (duplicate filename) check if we already have the set
|
||||
base_fname = os.path.split(fname)[1]
|
||||
if table and base_fname != nzf.filename and table not in nzf.nzo.md5packs.values():
|
||||
# Re-parse this par2 file to create new set
|
||||
nzf.filename = base_fname
|
||||
nzf.is_par2 = False
|
||||
nzf.nzo.handle_par2(nzf, True)
|
||||
|
||||
return table
|
||||
|
||||
|
||||
|
||||
@@ -118,6 +118,9 @@ class BPSMeter(object):
|
||||
self.month_total = {}
|
||||
self.grand_total = {}
|
||||
|
||||
self.timeline_total = {}
|
||||
|
||||
self.day_label = time.strftime("%Y-%m-%d")
|
||||
self.end_of_day = tomorrow(t) # Time that current day will end
|
||||
self.end_of_week = next_week(t) # Time that current day will end
|
||||
self.end_of_month = next_month(t) # Time that current month will end
|
||||
@@ -136,7 +139,7 @@ class BPSMeter(object):
|
||||
data = (self.last_update, self.grand_total,
|
||||
self.day_total, self.week_total, self.month_total,
|
||||
self.end_of_day, self.end_of_week, self.end_of_month,
|
||||
self.quota, self.left, self.q_time
|
||||
self.quota, self.left, self.q_time, self.timeline_total
|
||||
)
|
||||
sabnzbd.save_admin(data, BYTES_FILE_NAME)
|
||||
|
||||
@@ -171,12 +174,15 @@ class BPSMeter(object):
|
||||
self.last_update, self.grand_total, \
|
||||
self.day_total, self.week_total, self.month_total, \
|
||||
self.end_of_day, self.end_of_week, self.end_of_month = data[:8]
|
||||
if len(data) == 11:
|
||||
self.quota, self.left, self.q_time = data[8:]
|
||||
if len(data) >= 11:
|
||||
self.quota, self.left, self.q_time = data[8:11]
|
||||
logging.debug('Read quota q=%s l=%s reset=%s',
|
||||
self.quota, self.left, self.q_time)
|
||||
if abs(quota - self.quota) > 0.5:
|
||||
self.change_quota()
|
||||
# Get timeline stats
|
||||
if len(data) == 12:
|
||||
self.timeline_total = data[11]
|
||||
else:
|
||||
self.quota = self.left = cfg.quota_size.get_float()
|
||||
res = self.reset_quota()
|
||||
@@ -199,6 +205,7 @@ class BPSMeter(object):
|
||||
t = time.time()
|
||||
if t > self.end_of_day:
|
||||
# current day passed. get new end of day
|
||||
self.day_label = time.strftime("%Y-%m-%d")
|
||||
self.day_total = {}
|
||||
self.end_of_day = tomorrow(t) - 1.0
|
||||
|
||||
@@ -227,6 +234,12 @@ class BPSMeter(object):
|
||||
self.grand_total[server] = 0L
|
||||
self.grand_total[server] += amount
|
||||
|
||||
if server not in self.timeline_total:
|
||||
self.timeline_total[server] = {}
|
||||
if self.day_label not in self.timeline_total[server]:
|
||||
self.timeline_total[server][self.day_label]= 0L
|
||||
self.timeline_total[server][self.day_label] += amount
|
||||
|
||||
# Quota check
|
||||
if self.have_quota and self.quota_enabled:
|
||||
self.left -= amount
|
||||
@@ -290,7 +303,8 @@ class BPSMeter(object):
|
||||
return self.grand_total.get(server, 0L), \
|
||||
self.month_total.get(server, 0L), \
|
||||
self.week_total.get(server, 0L), \
|
||||
self.day_total.get(server, 0L)
|
||||
self.day_total.get(server, 0L), \
|
||||
self.timeline_total.get(server, {})
|
||||
|
||||
def clear_server(self, server):
|
||||
""" Clean counters for specified server """
|
||||
@@ -302,6 +316,8 @@ class BPSMeter(object):
|
||||
del self.month_total[server]
|
||||
if server in self.grand_total:
|
||||
del self.grand_total[server]
|
||||
if server in self.timeline_total:
|
||||
del self.timeline_total[server]
|
||||
self.save()
|
||||
|
||||
def get_bps(self):
|
||||
|
||||
318
sabnzbd/cfg.py
318
sabnzbd/cfg.py
@@ -59,56 +59,121 @@ if sabnzbd.WIN32:
|
||||
else:
|
||||
DEF_FOLDER_MAX = 256
|
||||
|
||||
##############################################################################
|
||||
# Configuration instances
|
||||
##############################################################################
|
||||
sfv_check = OptionBool('misc', 'sfv_check', True)
|
||||
quick_check_ext_ignore = OptionList('misc', 'quick_check_ext_ignore', ['nfo', 'sfv', 'srr'])
|
||||
|
||||
email_server = OptionStr('misc', 'email_server', validation=validate_server)
|
||||
email_to = OptionList('misc', 'email_to', validation=validate_email)
|
||||
email_from = OptionStr('misc', 'email_from', validation=validate_email)
|
||||
email_account = OptionStr('misc', 'email_account')
|
||||
email_pwd = OptionPassword('misc', 'email_pwd')
|
||||
email_endjob = OptionNumber('misc', 'email_endjob', 0, 0, 2)
|
||||
email_full = OptionBool('misc', 'email_full', False)
|
||||
email_dir = OptionDir('misc', 'email_dir', create=True)
|
||||
email_rss = OptionBool('misc', 'email_rss', False)
|
||||
email_cats = OptionList('misc', 'email_cats', ['*'])
|
||||
##############################################################################
|
||||
# Special settings
|
||||
##############################################################################
|
||||
pre_script = OptionStr('misc', 'pre_script', 'None')
|
||||
queue_complete = OptionStr('misc', 'queue_complete')
|
||||
queue_complete_pers = OptionBool('misc', 'queue_complete_pers', False)
|
||||
bandwidth_perc = OptionNumber('misc', 'bandwidth_perc', 0, 0, 100)
|
||||
refresh_rate = OptionNumber('misc', 'refresh_rate', 0)
|
||||
log_level = OptionNumber('logging', 'log_level', 1, -1, 2)
|
||||
log_size = OptionStr('logging', 'max_log_size', '5242880')
|
||||
log_backups = OptionNumber('logging', 'log_backups', 5, 1, 1024)
|
||||
queue_limit = OptionNumber('misc', 'queue_limit', 20, 0)
|
||||
|
||||
configlock = OptionBool('misc', 'config_lock', 0)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# One time trackers
|
||||
##############################################################################
|
||||
converted_nzo_pickles = OptionBool('misc', 'converted_nzo_pickles', False)
|
||||
warned_old_queue = OptionNumber('misc', 'warned_old_queue', QUEUE_VERSION)
|
||||
sched_converted = OptionBool('misc', 'sched_converted', False)
|
||||
notified_new_skin = OptionNumber('misc', 'notified_new_skin', 0)
|
||||
direct_unpack_tested = OptionBool('misc', 'direct_unpack_tested', False)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Config - General
|
||||
##############################################################################
|
||||
version_check = OptionNumber('misc', 'check_new_rel', 1)
|
||||
autobrowser = OptionBool('misc', 'auto_browser', True)
|
||||
replace_illegal = OptionBool('misc', 'replace_illegal', True)
|
||||
pre_script = OptionStr('misc', 'pre_script', 'None')
|
||||
script_can_fail = OptionBool('misc', 'script_can_fail', False)
|
||||
start_paused = OptionBool('misc', 'start_paused', False)
|
||||
language = OptionStr('misc', 'language', 'en')
|
||||
enable_https_verification = OptionBool('misc', 'enable_https_verification', True)
|
||||
selftest_host = OptionStr('misc', 'selftest_host', 'self-test.sabnzbd.org')
|
||||
cherryhost = OptionStr('misc', 'host', DEF_HOST)
|
||||
cherryport = OptionStr('misc', 'port', DEF_PORT)
|
||||
https_port = OptionStr('misc', 'https_port')
|
||||
username = OptionStr('misc', 'username')
|
||||
password = OptionPassword('misc', 'password')
|
||||
bandwidth_max = OptionStr('misc', 'bandwidth_max')
|
||||
cache_limit = OptionStr('misc', 'cache_limit')
|
||||
web_dir = OptionStr('misc', 'web_dir', DEF_STDINTF)
|
||||
web_color = OptionStr('misc', 'web_color', '')
|
||||
https_cert = OptionDir('misc', 'https_cert', 'server.cert', create=False)
|
||||
https_key = OptionDir('misc', 'https_key', 'server.key', create=False)
|
||||
https_chain = OptionDir('misc', 'https_chain', create=False)
|
||||
enable_https = OptionBool('misc', 'enable_https', False)
|
||||
inet_exposure = OptionNumber('misc', 'inet_exposure', 0, protect=True) # 0=local-only, 1=nzb, 2=api, 3=full_api, 4=webui, 5=webui with login for external
|
||||
local_ranges = OptionList('misc', 'local_ranges', protect=True)
|
||||
api_key = OptionStr('misc', 'api_key', create_api_key())
|
||||
nzb_key = OptionStr('misc', 'nzb_key', create_api_key())
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Config - Folders
|
||||
##############################################################################
|
||||
umask = OptionStr('misc', 'permissions', '', validation=validate_octal)
|
||||
download_dir = OptionDir('misc', 'download_dir', DEF_DOWNLOAD_DIR, create=False, validation=validate_safedir)
|
||||
download_free = OptionStr('misc', 'download_free')
|
||||
complete_dir = OptionDir('misc', 'complete_dir', DEF_COMPLETE_DIR, create=False, apply_umask=True, validation=validate_notempty)
|
||||
script_dir = OptionDir('misc', 'script_dir', create=True, writable=False)
|
||||
nzb_backup_dir = OptionDir('misc', 'nzb_backup_dir', DEF_NZBBACK_DIR)
|
||||
admin_dir = OptionDir('misc', 'admin_dir', DEF_ADMIN_DIR, validation=validate_safedir)
|
||||
dirscan_dir = OptionDir('misc', 'dirscan_dir', create=False)
|
||||
dirscan_speed = OptionNumber('misc', 'dirscan_speed', DEF_SCANRATE, 0, 3600)
|
||||
password_file = OptionDir('misc', 'password_file', '', create=False)
|
||||
log_dir = OptionDir('misc', 'log_dir', 'logs', validation=validate_notempty)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Config - Switches
|
||||
##############################################################################
|
||||
max_art_tries = OptionNumber('misc', 'max_art_tries', 3, 2)
|
||||
load_balancing = OptionNumber('misc', 'load_balancing', 2)
|
||||
top_only = OptionBool('misc', 'top_only', False)
|
||||
sfv_check = OptionBool('misc', 'sfv_check', True)
|
||||
quick_check_ext_ignore = OptionList('misc', 'quick_check_ext_ignore', ['nfo', 'sfv', 'srr'])
|
||||
script_can_fail = OptionBool('misc', 'script_can_fail', False)
|
||||
ssl_ciphers = OptionStr('misc', 'ssl_ciphers', '')
|
||||
|
||||
enable_unrar = OptionBool('misc', 'enable_unrar', True)
|
||||
enable_unzip = OptionBool('misc', 'enable_unzip', True)
|
||||
enable_7zip = OptionBool('misc', 'enable_7zip', True)
|
||||
enable_recursive = OptionBool('misc', 'enable_recursive', True)
|
||||
enable_filejoin = OptionBool('misc', 'enable_filejoin', True)
|
||||
enable_tsjoin = OptionBool('misc', 'enable_tsjoin', True)
|
||||
enable_par_cleanup = OptionBool('misc', 'enable_par_cleanup', True)
|
||||
enable_all_par = OptionBool('misc', 'enable_all_par', False)
|
||||
ignore_unrar_dates = OptionBool('misc', 'ignore_unrar_dates', False)
|
||||
overwrite_files = OptionBool('misc', 'overwrite_files', False)
|
||||
flat_unpack = OptionBool('misc', 'flat_unpack', False)
|
||||
|
||||
par_option = OptionStr('misc', 'par_option', '', validation=no_nonsense)
|
||||
pre_check = OptionBool('misc', 'pre_check', False)
|
||||
nice = OptionStr('misc', 'nice', '', validation=no_nonsense)
|
||||
ionice = OptionStr('misc', 'ionice', '', validation=no_nonsense)
|
||||
ignore_wrong_unrar = OptionBool('misc', 'ignore_wrong_unrar', False)
|
||||
multipar = OptionBool('misc', 'multipar', sabnzbd.WIN32)
|
||||
pre_check = OptionBool('misc', 'pre_check', False)
|
||||
fail_hopeless_jobs = OptionBool('misc', 'fail_hopeless_jobs', True)
|
||||
req_completion_rate = OptionNumber('misc', 'req_completion_rate', 100.2, 100, 200)
|
||||
autodisconnect = OptionBool('misc', 'auto_disconnect', True)
|
||||
no_dupes = OptionNumber('misc', 'no_dupes', 0)
|
||||
no_series_dupes = OptionNumber('misc', 'no_series_dupes', 0)
|
||||
pause_on_pwrar = OptionNumber('misc', 'pause_on_pwrar', 1)
|
||||
ignore_samples = OptionBool('misc', 'ignore_samples', False)
|
||||
auto_sort = OptionBool('misc', 'auto_sort', False)
|
||||
direct_unpack = OptionBool('misc', 'direct_unpack', False)
|
||||
direct_unpack_threads = OptionNumber('misc', 'direct_unpack_threads', 3, 1)
|
||||
propagation_delay = OptionNumber('misc', 'propagation_delay', 0)
|
||||
folder_rename = OptionBool('misc', 'folder_rename', True)
|
||||
replace_spaces = OptionBool('misc', 'replace_spaces', False)
|
||||
replace_dots = OptionBool('misc', 'replace_dots', False)
|
||||
safe_postproc = OptionBool('misc', 'safe_postproc', True)
|
||||
pause_on_post_processing = OptionBool('misc', 'pause_on_post_processing', False)
|
||||
sanitize_safe = OptionBool('misc', 'sanitize_safe', False)
|
||||
cleanup_list = OptionList('misc', 'cleanup_list')
|
||||
unwanted_extensions = OptionList('misc', 'unwanted_extensions')
|
||||
action_on_unwanted_extensions = OptionNumber('misc', 'action_on_unwanted_extensions', 0)
|
||||
new_nzb_on_failure = OptionBool('misc', 'new_nzb_on_failure', False)
|
||||
history_retention = OptionStr('misc', 'history_retention', '0')
|
||||
enable_meta = OptionBool('misc', 'enable_meta', True)
|
||||
|
||||
quota_size = OptionStr('misc', 'quota_size')
|
||||
quota_day = OptionStr('misc', 'quota_day')
|
||||
quota_resume = OptionBool('misc', 'quota_resume', False)
|
||||
quota_period = OptionStr('misc', 'quota_period', 'm')
|
||||
|
||||
rating_enable = OptionBool('misc', 'rating_enable', False)
|
||||
rating_host = OptionStr('misc', 'rating_host', 'api.oznzb.com')
|
||||
rating_host = OptionStr('misc', 'rating_host')
|
||||
rating_api_key = OptionStr('misc', 'rating_api_key')
|
||||
rating_filter_enable = OptionBool('misc', 'rating_filter_enable', False)
|
||||
rating_filter_abort_audio = OptionNumber('misc', 'rating_filter_abort_audio', 0)
|
||||
@@ -128,41 +193,14 @@ rating_filter_pause_spam_confirm = OptionBool('misc', 'rating_filter_pause_spam_
|
||||
rating_filter_pause_downvoted = OptionBool('misc', 'rating_filter_pause_downvoted', False)
|
||||
rating_filter_pause_keywords = OptionStr('misc', 'rating_filter_pause_keywords')
|
||||
|
||||
top_only = OptionBool('misc', 'top_only', False)
|
||||
autodisconnect = OptionBool('misc', 'auto_disconnect', True)
|
||||
queue_complete = OptionStr('misc', 'queue_complete')
|
||||
queue_complete_pers = OptionBool('misc', 'queue_complete_pers', False)
|
||||
|
||||
replace_spaces = OptionBool('misc', 'replace_spaces', False)
|
||||
replace_dots = OptionBool('misc', 'replace_dots', False)
|
||||
no_dupes = OptionNumber('misc', 'no_dupes', 0)
|
||||
no_series_dupes = OptionNumber('misc', 'no_series_dupes', 0)
|
||||
backup_for_duplicates = OptionBool('misc', 'backup_for_duplicates', True)
|
||||
|
||||
ignore_samples = OptionBool('misc', 'ignore_samples', False)
|
||||
auto_sort = OptionBool('misc', 'auto_sort', False)
|
||||
direct_unpack = OptionBool('misc', 'direct_unpack', False)
|
||||
direct_unpack_tested = OptionBool('misc', 'direct_unpack_tested', False)
|
||||
propagation_delay = OptionNumber('misc', 'propagation_delay', 0)
|
||||
folder_rename = OptionBool('misc', 'folder_rename', True)
|
||||
folder_max_length = OptionNumber('misc', 'folder_max_length', DEF_FOLDER_MAX, 20, 65000)
|
||||
pause_on_pwrar = OptionNumber('misc', 'pause_on_pwrar', 1)
|
||||
|
||||
safe_postproc = OptionBool('misc', 'safe_postproc', True)
|
||||
empty_postproc = OptionBool('misc', 'empty_postproc', False)
|
||||
pause_on_post_processing = OptionBool('misc', 'pause_on_post_processing', False)
|
||||
ampm = OptionBool('misc', 'ampm', False)
|
||||
rss_filenames = OptionBool('misc', 'rss_filenames', False)
|
||||
rss_odd_titles = OptionList('misc', 'rss_odd_titles', ['nzbindex.nl/', 'nzbindex.com/', 'nzbclub.com/'])
|
||||
|
||||
schedules = OptionList('misc', 'schedlines')
|
||||
sched_converted = OptionBool('misc', 'sched_converted', False)
|
||||
|
||||
##############################################################################
|
||||
# Config - Sorting
|
||||
##############################################################################
|
||||
enable_tv_sorting = OptionBool('misc', 'enable_tv_sorting', False)
|
||||
tv_sort_string = OptionStr('misc', 'tv_sort_string')
|
||||
tv_sort_countries = OptionNumber('misc', 'tv_sort_countries', 1)
|
||||
tv_categories = OptionList('misc', 'tv_categories', '')
|
||||
movie_rename_limit = OptionStr('misc', 'movie_rename_limit', '100M')
|
||||
|
||||
enable_movie_sorting = OptionBool('misc', 'enable_movie_sorting', False)
|
||||
movie_sort_string = OptionStr('misc', 'movie_sort_string')
|
||||
@@ -174,74 +212,84 @@ enable_date_sorting = OptionBool('misc', 'enable_date_sorting', False)
|
||||
date_sort_string = OptionStr('misc', 'date_sort_string')
|
||||
date_categories = OptionList('misc', 'date_categories', ['tv'])
|
||||
|
||||
configlock = OptionBool('misc', 'config_lock', 0)
|
||||
|
||||
umask = OptionStr('misc', 'permissions', '', validation=validate_octal)
|
||||
download_dir = OptionDir('misc', 'download_dir', DEF_DOWNLOAD_DIR, create=False, validation=validate_safedir)
|
||||
download_free = OptionStr('misc', 'download_free')
|
||||
complete_dir = OptionDir('misc', 'complete_dir', DEF_COMPLETE_DIR, create=False,
|
||||
apply_umask=True, validation=validate_notempty)
|
||||
script_dir = OptionDir('misc', 'script_dir', create=True, writable=False)
|
||||
nzb_backup_dir = OptionDir('misc', 'nzb_backup_dir', DEF_NZBBACK_DIR)
|
||||
admin_dir = OptionDir('misc', 'admin_dir', DEF_ADMIN_DIR, validation=validate_safedir)
|
||||
dirscan_dir = OptionDir('misc', 'dirscan_dir', create=False)
|
||||
dirscan_speed = OptionNumber('misc', 'dirscan_speed', DEF_SCANRATE, 0, 3600)
|
||||
size_limit = OptionStr('misc', 'size_limit', '0')
|
||||
password_file = OptionDir('misc', 'password_file', '', create=False)
|
||||
fsys_type = OptionNumber('misc', 'fsys_type', 0, 0, 2)
|
||||
##############################################################################
|
||||
# Config - Scheduling and RSS
|
||||
##############################################################################
|
||||
schedules = OptionList('misc', 'schedlines')
|
||||
rss_rate = OptionNumber('misc', 'rss_rate', 60, 15, 24 * 60)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Config - Specials
|
||||
##############################################################################
|
||||
# Bool switches
|
||||
ampm = OptionBool('misc', 'ampm', False)
|
||||
replace_illegal = OptionBool('misc', 'replace_illegal', True)
|
||||
start_paused = OptionBool('misc', 'start_paused', False)
|
||||
enable_all_par = OptionBool('misc', 'enable_all_par', False)
|
||||
enable_par_cleanup = OptionBool('misc', 'enable_par_cleanup', True)
|
||||
enable_unrar = OptionBool('misc', 'enable_unrar', True)
|
||||
enable_unzip = OptionBool('misc', 'enable_unzip', True)
|
||||
enable_7zip = OptionBool('misc', 'enable_7zip', True)
|
||||
enable_filejoin = OptionBool('misc', 'enable_filejoin', True)
|
||||
enable_tsjoin = OptionBool('misc', 'enable_tsjoin', True)
|
||||
overwrite_files = OptionBool('misc', 'overwrite_files', False)
|
||||
ignore_unrar_dates = OptionBool('misc', 'ignore_unrar_dates', False)
|
||||
ignore_wrong_unrar = OptionBool('misc', 'ignore_wrong_unrar', False)
|
||||
multipar = OptionBool('misc', 'multipar', sabnzbd.WIN32)
|
||||
backup_for_duplicates = OptionBool('misc', 'backup_for_duplicates', True)
|
||||
empty_postproc = OptionBool('misc', 'empty_postproc', False)
|
||||
wait_for_dfolder = OptionBool('misc', 'wait_for_dfolder', False)
|
||||
warn_empty_nzb = OptionBool('misc', 'warn_empty_nzb', True)
|
||||
sanitize_safe = OptionBool('misc', 'sanitize_safe', False)
|
||||
rss_filenames = OptionBool('misc', 'rss_filenames', False)
|
||||
api_logging = OptionBool('misc', 'api_logging', True)
|
||||
|
||||
cherryhost = OptionStr('misc', 'host', DEF_HOST)
|
||||
cherryport = OptionStr('misc', 'port', DEF_PORT)
|
||||
https_port = OptionStr('misc', 'https_port')
|
||||
|
||||
username = OptionStr('misc', 'username')
|
||||
password = OptionPassword('misc', 'password')
|
||||
html_login = OptionBool('misc', 'html_login', True)
|
||||
bandwidth_perc = OptionNumber('misc', 'bandwidth_perc', 0, 0, 100)
|
||||
bandwidth_max = OptionStr('misc', 'bandwidth_max')
|
||||
refresh_rate = OptionNumber('misc', 'refresh_rate', 0)
|
||||
rss_rate = OptionNumber('misc', 'rss_rate', 60, 15, 24 * 60)
|
||||
cache_limit = OptionStr('misc', 'cache_limit')
|
||||
web_dir = OptionStr('misc', 'web_dir', DEF_STDINTF)
|
||||
web_color = OptionStr('misc', 'web_color', '')
|
||||
cleanup_list = OptionList('misc', 'cleanup_list')
|
||||
warned_old_queue = OptionNumber('misc', 'warned_old_queue', QUEUE_VERSION)
|
||||
notified_new_skin = OptionNumber('misc', 'notified_new_skin', 0)
|
||||
converted_nzo_pickles = OptionBool('misc', 'converted_nzo_pickles', False)
|
||||
|
||||
unwanted_extensions = OptionList('misc', 'unwanted_extensions')
|
||||
action_on_unwanted_extensions = OptionNumber('misc', 'action_on_unwanted_extensions', 0)
|
||||
|
||||
log_dir = OptionDir('misc', 'log_dir', 'logs', validation=validate_notempty)
|
||||
log_level = OptionNumber('logging', 'log_level', 1, -1, 2)
|
||||
log_size = OptionStr('logging', 'max_log_size', '5242880')
|
||||
log_backups = OptionNumber('logging', 'log_backups', 5, 1, 1024)
|
||||
|
||||
https_cert = OptionDir('misc', 'https_cert', 'server.cert', create=False)
|
||||
https_key = OptionDir('misc', 'https_key', 'server.key', create=False)
|
||||
https_chain = OptionDir('misc', 'https_chain', create=False)
|
||||
enable_https = OptionBool('misc', 'enable_https', False)
|
||||
|
||||
language = OptionStr('misc', 'language', 'en')
|
||||
no_penalties = OptionBool('misc', 'no_penalties', False)
|
||||
load_balancing = OptionNumber('misc', 'load_balancing', 2)
|
||||
ipv6_servers = OptionNumber('misc', 'ipv6_servers', 1, 0, 2)
|
||||
|
||||
api_key = OptionStr('misc', 'api_key', create_api_key())
|
||||
nzb_key = OptionStr('misc', 'nzb_key', create_api_key())
|
||||
disable_key = OptionBool('misc', 'disable_api_key', False, protect=True)
|
||||
api_warnings = OptionBool('misc', 'api_warnings', True, protect=True)
|
||||
local_ranges = OptionList('misc', 'local_ranges', protect=True)
|
||||
inet_exposure = OptionNumber('misc', 'inet_exposure', 0, protect=True) # 0=local-only, 1=nzb, 2=api, 3=full_api, 4=webui, 5=webui with login for external
|
||||
max_art_tries = OptionNumber('misc', 'max_art_tries', 3, 2)
|
||||
osx_menu = OptionBool('misc', 'osx_menu', True)
|
||||
osx_speed = OptionBool('misc', 'osx_speed', True)
|
||||
warn_dupl_jobs = OptionBool('misc', 'warn_dupl_jobs', True)
|
||||
keep_awake = OptionBool('misc', 'keep_awake', True)
|
||||
win_menu = OptionBool('misc', 'win_menu', True)
|
||||
allow_incomplete_nzb = OptionBool('misc', 'allow_incomplete_nzb', False)
|
||||
enable_bonjour = OptionBool('misc', 'enable_bonjour', True)
|
||||
allow_duplicate_files = OptionBool('misc', 'allow_duplicate_files', False)
|
||||
max_art_opt = OptionBool('misc', 'max_art_opt', False)
|
||||
use_pickle = OptionBool('misc', 'use_pickle', False)
|
||||
ipv6_hosting = OptionBool('misc', 'ipv6_hosting', False)
|
||||
fixed_ports = OptionBool('misc', 'fixed_ports', False)
|
||||
api_warnings = OptionBool('misc', 'api_warnings', True, protect=True)
|
||||
disable_key = OptionBool('misc', 'disable_api_key', False, protect=True)
|
||||
no_penalties = OptionBool('misc', 'no_penalties', False)
|
||||
|
||||
# Text values
|
||||
rss_odd_titles = OptionList('misc', 'rss_odd_titles', ['nzbindex.nl/', 'nzbindex.com/', 'nzbclub.com/'])
|
||||
folder_max_length = OptionNumber('misc', 'folder_max_length', DEF_FOLDER_MAX, 20, 65000)
|
||||
req_completion_rate = OptionNumber('misc', 'req_completion_rate', 100.2, 100, 200)
|
||||
selftest_host = OptionStr('misc', 'selftest_host', 'self-test.sabnzbd.org')
|
||||
movie_rename_limit = OptionStr('misc', 'movie_rename_limit', '100M')
|
||||
size_limit = OptionStr('misc', 'size_limit', '0')
|
||||
fsys_type = OptionNumber('misc', 'fsys_type', 0, 0, 2)
|
||||
show_sysload = OptionNumber('misc', 'show_sysload', 2, 0, 2)
|
||||
history_limit = OptionNumber('misc', 'history_limit', 10, 0)
|
||||
wait_ext_drive = OptionNumber('misc', 'wait_ext_drive', 5, 1, 60)
|
||||
marker_file = OptionStr('misc', 'nomedia_marker', '')
|
||||
ipv6_servers = OptionNumber('misc', 'ipv6_servers', 1, 0, 2)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Config - Notifications
|
||||
##############################################################################
|
||||
# [email]
|
||||
email_server = OptionStr('misc', 'email_server', validation=validate_server)
|
||||
email_to = OptionList('misc', 'email_to', validation=validate_email)
|
||||
email_from = OptionStr('misc', 'email_from', validation=validate_email)
|
||||
email_account = OptionStr('misc', 'email_account')
|
||||
email_pwd = OptionPassword('misc', 'email_pwd')
|
||||
email_endjob = OptionNumber('misc', 'email_endjob', 0, 0, 2)
|
||||
email_full = OptionBool('misc', 'email_full', False)
|
||||
email_dir = OptionDir('misc', 'email_dir', create=True)
|
||||
email_rss = OptionBool('misc', 'email_rss', False)
|
||||
email_cats = OptionList('misc', 'email_cats', ['*'])
|
||||
|
||||
# [ncenter]
|
||||
ncenter_enable = OptionBool('ncenter', 'ncenter_enable', sabnzbd.DARWIN)
|
||||
@@ -373,26 +421,6 @@ nscript_prio_error = OptionBool('nscript', 'nscript_prio_error', False)
|
||||
nscript_prio_queue_done = OptionBool('nscript', 'nscript_prio_queue_done', True)
|
||||
nscript_prio_other = OptionBool('nscript', 'nscript_prio_other', False)
|
||||
|
||||
quota_size = OptionStr('misc', 'quota_size')
|
||||
quota_day = OptionStr('misc', 'quota_day')
|
||||
quota_resume = OptionBool('misc', 'quota_resume', False)
|
||||
quota_period = OptionStr('misc', 'quota_period', 'm')
|
||||
|
||||
osx_menu = OptionBool('misc', 'osx_menu', True)
|
||||
osx_speed = OptionBool('misc', 'osx_speed', True)
|
||||
keep_awake = OptionBool('misc', 'keep_awake', True)
|
||||
win_menu = OptionBool('misc', 'win_menu', True)
|
||||
allow_incomplete_nzb = OptionBool('misc', 'allow_incomplete_nzb', False)
|
||||
marker_file = OptionStr('misc', 'nomedia_marker', '')
|
||||
wait_ext_drive = OptionNumber('misc', 'wait_ext_drive', 5, 1, 60)
|
||||
queue_limit = OptionNumber('misc', 'queue_limit', 20, 0)
|
||||
history_limit = OptionNumber('misc', 'history_limit', 10, 0)
|
||||
show_sysload = OptionNumber('misc', 'show_sysload', 2, 0, 2)
|
||||
enable_bonjour = OptionBool('misc', 'enable_bonjour', True)
|
||||
allow_duplicate_files = OptionBool('misc', 'allow_duplicate_files', False)
|
||||
warn_dupl_jobs = OptionBool('misc', 'warn_dupl_jobs', True)
|
||||
new_nzb_on_failure = OptionBool('misc', 'new_nzb_on_failure', False)
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Set root folders for Folder config-items
|
||||
|
||||
@@ -852,6 +852,7 @@ def save_config(force=False):
|
||||
|
||||
# Write new config file
|
||||
try:
|
||||
logging.info('Writing settings to INI file %s', filename)
|
||||
CFG.write()
|
||||
shutil.copymode(bakname, filename)
|
||||
modified = False
|
||||
@@ -981,17 +982,21 @@ def get_rss():
|
||||
# We have to remove non-seperator commas by detecting if they are valid URL's
|
||||
for feed_key in database['rss']:
|
||||
feed = database['rss'][feed_key]
|
||||
# Only modify if we have to, to prevent repeated config-saving
|
||||
have_new_uri = False
|
||||
# Create a new corrected list
|
||||
new_feed_uris = []
|
||||
for feed_uri in feed.uri():
|
||||
if new_feed_uris and not urlparse(feed_uri).scheme and urlparse(new_feed_uris[-1]).scheme:
|
||||
# Current one has no scheme but previous one does, append to previous
|
||||
new_feed_uris[-1] += '%2C' + feed_uri
|
||||
have_new_uri = True
|
||||
continue
|
||||
# Add full working URL
|
||||
new_feed_uris.append(feed_uri)
|
||||
# Set new list
|
||||
feed.uri.set(new_feed_uris)
|
||||
if have_new_uri:
|
||||
feed.uri.set(new_feed_uris)
|
||||
|
||||
return database['rss']
|
||||
except KeyError:
|
||||
|
||||
@@ -81,6 +81,7 @@ MAX_DECODE_QUEUE = 10
|
||||
LIMIT_DECODE_QUEUE = 100
|
||||
MAX_WARNINGS = 20
|
||||
MAX_WIN_DFOLDER = 60
|
||||
MAX_BAD_ARTICLES = 5
|
||||
|
||||
REPAIR_PRIORITY = 3
|
||||
TOP_PRIORITY = 2
|
||||
|
||||
@@ -40,7 +40,7 @@ from sabnzbd.constants import DB_HISTORY_NAME, STAGES
|
||||
from sabnzbd.encoding import unicoder
|
||||
from sabnzbd.bpsmeter import this_week, this_month
|
||||
from sabnzbd.decorators import synchronized
|
||||
from sabnzbd.misc import get_all_passwords
|
||||
from sabnzbd.misc import get_all_passwords, int_conv
|
||||
|
||||
DB_LOCK = threading.RLock()
|
||||
|
||||
@@ -154,7 +154,8 @@ class HistoryDB(object):
|
||||
return 'duplicate column name' not in error
|
||||
else:
|
||||
logging.error(T('SQL Command Failed, see log'))
|
||||
logging.debug("SQL: %s", command)
|
||||
logging.info("SQL: %s", command)
|
||||
logging.info("Arguments: %s", repr(args))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
try:
|
||||
self.con.rollback()
|
||||
@@ -249,6 +250,30 @@ class HistoryDB(object):
|
||||
|
||||
self.save()
|
||||
|
||||
def auto_history_purge(self):
|
||||
""" Remove history items based on the configured history-retention """
|
||||
if sabnzbd.cfg.history_retention() == "0":
|
||||
return
|
||||
|
||||
if sabnzbd.cfg.history_retention() == "-1":
|
||||
# Delete all non-failed ones
|
||||
self.remove_completed()
|
||||
|
||||
if "d" in sabnzbd.cfg.history_retention():
|
||||
# How many days to keep?
|
||||
days_to_keep = int_conv(sabnzbd.cfg.history_retention().strip()[:-1])
|
||||
seconds_to_keep = int(time.time()) - days_to_keep*3600*24
|
||||
if days_to_keep > 0:
|
||||
logging.info('Removing completed jobs older than %s days from history', days_to_keep)
|
||||
return self.execute("""DELETE FROM history WHERE status = 'Completed' AND completed < ?""", (seconds_to_keep,), save=True)
|
||||
else:
|
||||
# How many to keep?
|
||||
to_keep = int_conv(sabnzbd.cfg.history_retention())
|
||||
if to_keep > 0:
|
||||
logging.info('Removing all but last %s completed jobs from history', to_keep)
|
||||
return self.execute("""DELETE FROM history WHERE id NOT IN ( SELECT id FROM history WHERE status = 'Completed' ORDER BY completed DESC LIMIT ? )""", (to_keep,), save=True)
|
||||
|
||||
|
||||
def add_history_db(self, nzo, storage, path, postproc_time, script_output, script_line):
|
||||
""" Add a new job entry to the database """
|
||||
t = build_history_info(nzo, storage, path, postproc_time, script_output, script_line)
|
||||
@@ -262,19 +287,20 @@ class HistoryDB(object):
|
||||
|
||||
def fetch_history(self, start=None, limit=None, search=None, failed_only=0, categories=None):
|
||||
""" Return records for specified jobs """
|
||||
search = convert_search(search)
|
||||
command_args = [convert_search(search)]
|
||||
|
||||
post = ''
|
||||
if categories:
|
||||
categories = ['*' if c == 'Default' else c for c in categories]
|
||||
post = " AND (CATEGORY = '"
|
||||
post += "' OR CATEGORY = '".join(categories)
|
||||
post += "' )"
|
||||
post = " AND (CATEGORY = ?"
|
||||
post += " OR CATEGORY = ? " * (len(categories)-1)
|
||||
post += ")"
|
||||
command_args.extend(categories)
|
||||
if failed_only:
|
||||
post += ' AND STATUS = "Failed"'
|
||||
|
||||
cmd = 'SELECT COUNT(*) FROM history WHERE name LIKE ?'
|
||||
res = self.execute(cmd + post, (search,))
|
||||
res = self.execute(cmd + post, tuple(command_args))
|
||||
total_items = -1
|
||||
if res:
|
||||
try:
|
||||
@@ -287,9 +313,9 @@ class HistoryDB(object):
|
||||
if not limit:
|
||||
limit = total_items
|
||||
|
||||
t = (search, start, limit)
|
||||
command_args.extend([start, limit])
|
||||
cmd = 'SELECT * FROM history WHERE name LIKE ?'
|
||||
fetch_ok = self.execute(cmd + post + ' ORDER BY completed desc LIMIT ?, ?', t)
|
||||
fetch_ok = self.execute(cmd + post + ' ORDER BY completed desc LIMIT ?, ?', tuple(command_args))
|
||||
|
||||
if fetch_ok:
|
||||
items = self.c.fetchall()
|
||||
@@ -540,6 +566,13 @@ def unpack_history_info(item):
|
||||
return item
|
||||
|
||||
|
||||
def midnight_history_purge():
|
||||
logging.info('Scheduled history purge')
|
||||
history_db = HistoryDB()
|
||||
history_db.auto_history_purge()
|
||||
history_db.close()
|
||||
|
||||
|
||||
def decode_factory(text):
|
||||
""" Recursively looks through the supplied argument
|
||||
and converts and text to Unicode
|
||||
|
||||
@@ -31,8 +31,8 @@ from sabnzbd.constants import Status, MAX_DECODE_QUEUE, LIMIT_DECODE_QUEUE, SABY
|
||||
import sabnzbd.articlecache
|
||||
import sabnzbd.downloader
|
||||
import sabnzbd.nzbqueue
|
||||
from sabnzbd.encoding import yenc_name_fixer, platform_encode
|
||||
from sabnzbd.misc import match_str, is_obfuscated_filename
|
||||
from sabnzbd.encoding import yenc_name_fixer
|
||||
from sabnzbd.misc import match_str
|
||||
|
||||
# Check for basic-yEnc
|
||||
try:
|
||||
@@ -196,9 +196,9 @@ class Decoder(Thread):
|
||||
|
||||
if logme:
|
||||
if killed:
|
||||
nzo.inc_log('killed_art_log', art_id)
|
||||
nzo.increase_bad_articles_counter('killed_articles')
|
||||
else:
|
||||
nzo.inc_log('bad_art_log', art_id)
|
||||
nzo.increase_bad_articles_counter('bad_articles')
|
||||
|
||||
else:
|
||||
new_server_found = self.search_new_server(article)
|
||||
@@ -320,7 +320,7 @@ class Decoder(Thread):
|
||||
|
||||
msg = T('%s => missing from all servers, discarding') % article
|
||||
logging.info(msg)
|
||||
article.nzf.nzo.inc_log('missing_art_log', msg)
|
||||
article.nzf.nzo.increase_bad_articles_counter('missing_articles')
|
||||
return False
|
||||
|
||||
def verify_filename(self, article, decoded_data, yenc_filename):
|
||||
@@ -336,26 +336,8 @@ class Decoder(Thread):
|
||||
if article.partnum == nzf.lowest_partnum:
|
||||
nzf.md5of16k = hashlib.md5(decoded_data[:16384]).digest()
|
||||
|
||||
# If we have the md5, use it to rename
|
||||
if nzf.md5of16k:
|
||||
# Don't check again, even if no match
|
||||
nzf.filename_checked = True
|
||||
# Find the match and rename
|
||||
if nzf.md5of16k in nzf.nzo.md5of16k:
|
||||
new_filename = platform_encode(nzf.nzo.md5of16k[nzf.md5of16k])
|
||||
# Was it even new?
|
||||
if new_filename != nzf.filename:
|
||||
logging.info('Detected filename based on par2: %s -> %s', nzf.filename, new_filename)
|
||||
nzf.nzo.renamed_file(new_filename, nzf.filename)
|
||||
nzf.filename = new_filename
|
||||
return
|
||||
|
||||
# Fallback to yenc/nzb name (also when there is no partnum=1)
|
||||
# We also keep the NZB name in case it ends with ".par2" (usually correct)
|
||||
if yenc_filename != nzf.filename and not is_obfuscated_filename(yenc_filename) and not nzf.filename.endswith('.par2'):
|
||||
logging.info('Detected filename from yenc: %s -> %s', nzf.filename, yenc_filename)
|
||||
nzf.nzo.renamed_file(yenc_filename, nzf.filename)
|
||||
nzf.filename = yenc_filename
|
||||
# Try the rename
|
||||
nzf.nzo.verify_nzf_filename(nzf, yenc_filename)
|
||||
|
||||
|
||||
def yCheck(data):
|
||||
|
||||
@@ -21,6 +21,7 @@ sabnzbd.directunpacker
|
||||
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
import threading
|
||||
import subprocess
|
||||
import logging
|
||||
@@ -28,9 +29,10 @@ import logging
|
||||
import sabnzbd
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.misc import int_conv, clip_path, remove_all, globber, format_time_string, has_win_device
|
||||
from sabnzbd.encoding import unicoder
|
||||
from sabnzbd.newsunpack import build_command
|
||||
from sabnzbd.encoding import TRANS, unicoder
|
||||
from sabnzbd.newsunpack import build_command, EXTRACTFROM_RE, rar_volumelist
|
||||
from sabnzbd.postproc import prepare_extraction_path
|
||||
from sabnzbd.utils.rarfile import RarFile
|
||||
from sabnzbd.utils.diskspeed import diskspeedmeasure
|
||||
|
||||
if sabnzbd.WIN32:
|
||||
@@ -42,7 +44,6 @@ else:
|
||||
|
||||
MAX_ACTIVE_UNPACKERS = 10
|
||||
ACTIVE_UNPACKERS = []
|
||||
CONCURRENT_LOCK = threading.RLock()
|
||||
|
||||
RAR_NR = re.compile(r'(.*?)(\.part(\d*).rar|\.r(\d*))$', re.IGNORECASE)
|
||||
|
||||
@@ -58,11 +59,13 @@ class DirectUnpacker(threading.Thread):
|
||||
self.next_file_lock = threading.Condition(threading.RLock())
|
||||
|
||||
self.unpack_dir_info = None
|
||||
self.rarfile_nzf = None
|
||||
self.cur_setname = None
|
||||
self.cur_volume = 0
|
||||
self.total_volumes = {}
|
||||
self.unpack_time = 0.0
|
||||
|
||||
self.success_sets = []
|
||||
self.success_sets = {}
|
||||
self.next_sets = []
|
||||
|
||||
nzo.direct_unpacker = self
|
||||
@@ -73,22 +76,14 @@ class DirectUnpacker(threading.Thread):
|
||||
def save(self):
|
||||
pass
|
||||
|
||||
def release_concurrent_lock(self):
|
||||
""" Let other unpackers go """
|
||||
try:
|
||||
CONCURRENT_LOCK.release()
|
||||
except:
|
||||
pass
|
||||
|
||||
def reset_active(self):
|
||||
self.active_instance = None
|
||||
self.cur_setname = None
|
||||
self.cur_volume = 0
|
||||
# Release lock to be sure
|
||||
self.release_concurrent_lock()
|
||||
self.rarfile_nzf = None
|
||||
|
||||
def check_requirements(self):
|
||||
if self.killed or not self.nzo.unpack or cfg.direct_unpack() < 1 or sabnzbd.newsunpack.RAR_PROBLEM:
|
||||
if not cfg.direct_unpack() or self.killed or not self.nzo.unpack or self.nzo.bad_articles or sabnzbd.newsunpack.RAR_PROBLEM:
|
||||
return False
|
||||
return True
|
||||
|
||||
@@ -103,7 +98,7 @@ class DirectUnpacker(threading.Thread):
|
||||
found_counter += 1
|
||||
if nzf.setname not in self.total_volumes:
|
||||
self.total_volumes[nzf.setname] = 0
|
||||
self.total_volumes[nzf.setname] += 1
|
||||
self.total_volumes[nzf.setname] = max(self.total_volumes[nzf.setname], nzf.vol)
|
||||
else:
|
||||
none_counter += 1
|
||||
|
||||
@@ -134,12 +129,12 @@ class DirectUnpacker(threading.Thread):
|
||||
# Is this the first one of the first set?
|
||||
if not self.active_instance and not self.is_alive() and self.have_next_volume():
|
||||
# Too many runners already?
|
||||
if len(ACTIVE_UNPACKERS) >= MAX_ACTIVE_UNPACKERS:
|
||||
if len(ACTIVE_UNPACKERS) >= cfg.direct_unpack_threads():
|
||||
logging.info('Too many DirectUnpackers currently to start %s', self.cur_setname)
|
||||
return
|
||||
|
||||
# Start the unrar command and the loop
|
||||
self.create_unrar_instance(nzf)
|
||||
self.create_unrar_instance()
|
||||
self.start()
|
||||
elif not any(test_nzf.setname == nzf.setname for test_nzf in self.next_sets):
|
||||
# Need to store this for the future, only once per set!
|
||||
@@ -152,7 +147,10 @@ class DirectUnpacker(threading.Thread):
|
||||
def run(self):
|
||||
# Input and output
|
||||
linebuf = ''
|
||||
last_volume_linebuf = ''
|
||||
unrar_log = []
|
||||
rarfiles = []
|
||||
start_time = time.time()
|
||||
|
||||
# Need to read char-by-char because there's no newline after new-disk message
|
||||
while 1:
|
||||
@@ -174,55 +172,78 @@ class DirectUnpacker(threading.Thread):
|
||||
logging.info('Error in DirectUnpack of %s', self.cur_setname)
|
||||
self.abort()
|
||||
|
||||
if linebuf.startswith('Extracting from') and linebuf.endswith('\n'):
|
||||
filename = TRANS((re.search(EXTRACTFROM_RE, linebuf.strip()).group(1)))
|
||||
if filename not in rarfiles:
|
||||
rarfiles.append(filename)
|
||||
|
||||
# Did we reach the end?
|
||||
if linebuf.endswith('All OK'):
|
||||
# Add to success
|
||||
self.success_sets.append(self.cur_setname)
|
||||
logging.info('DirectUnpack completed for %s', self.cur_setname)
|
||||
# Stop timer and finish
|
||||
self.unpack_time += time.time() - start_time
|
||||
ACTIVE_UNPACKERS.remove(self)
|
||||
|
||||
# Make sure to release the lock
|
||||
self.release_concurrent_lock()
|
||||
# Add to success
|
||||
rarfile_path = os.path.join(self.nzo.downpath, self.rarfile_nzf.filename)
|
||||
self.success_sets[self.cur_setname] = rar_volumelist(rarfile_path, self.nzo.password, rarfiles)
|
||||
logging.info('DirectUnpack completed for %s', self.cur_setname)
|
||||
self.nzo.set_action_line(T('Direct Unpack'), T('Completed'))
|
||||
|
||||
# Write current log and clear
|
||||
unrar_log.append(linebuf.strip())
|
||||
linebuf = ''
|
||||
logging.debug('DirectUnpack Unrar output %s', '\n'.join(unrar_log))
|
||||
unrar_log = []
|
||||
rarfiles = []
|
||||
|
||||
# Are there more files left?
|
||||
if self.nzo.files:
|
||||
while self.nzo.files and not self.next_sets:
|
||||
with self.next_file_lock:
|
||||
self.next_file_lock.wait()
|
||||
|
||||
# Is there another set to do?
|
||||
if self.next_sets:
|
||||
# Write current log
|
||||
unrar_log.append(linebuf.strip())
|
||||
linebuf = ''
|
||||
logging.debug('DirectUnpack Unrar output %s', '\n'.join(unrar_log))
|
||||
unrar_log = []
|
||||
|
||||
# Start new instance
|
||||
nzf = self.next_sets.pop(0)
|
||||
self.reset_active()
|
||||
self.cur_setname = nzf.setname
|
||||
# Wait for the 1st volume to appear
|
||||
self.wait_for_next_volume()
|
||||
self.create_unrar_instance(nzf)
|
||||
self.create_unrar_instance()
|
||||
start_time = time.time()
|
||||
else:
|
||||
self.killed = True
|
||||
break
|
||||
|
||||
if linebuf.endswith('[C]ontinue, [Q]uit '):
|
||||
# Next one can go now
|
||||
self.release_concurrent_lock()
|
||||
# Stop timer
|
||||
self.unpack_time += time.time() - start_time
|
||||
|
||||
# Wait for the next one..
|
||||
self.wait_for_next_volume()
|
||||
|
||||
# Send "Enter" to proceed, only 1 at a time via lock
|
||||
CONCURRENT_LOCK.acquire()
|
||||
# Possible that the instance was deleted while locked
|
||||
if not self.killed:
|
||||
# Next volume
|
||||
self.cur_volume += 1
|
||||
# Give unrar some time to do it's thing
|
||||
self.active_instance.stdin.write('\n')
|
||||
self.nzo.set_action_line(T('Unpacking'), self.get_formatted_stats())
|
||||
logging.info('DirectUnpacked volume %s for %s', self.cur_volume, self.cur_setname)
|
||||
start_time = time.time()
|
||||
time.sleep(0.1)
|
||||
|
||||
# Did we unpack a new volume? Sometimes UnRar hangs on 1 volume
|
||||
if not last_volume_linebuf or last_volume_linebuf != linebuf:
|
||||
# Next volume
|
||||
self.cur_volume += 1
|
||||
self.nzo.set_action_line(T('Direct Unpack'), self.get_formatted_stats())
|
||||
logging.info('DirectUnpacked volume %s for %s', self.cur_volume, self.cur_setname)
|
||||
|
||||
# If lines did not change and we don't have the next volume, this download is missing files!
|
||||
if last_volume_linebuf == linebuf and not self.have_next_volume():
|
||||
logging.info('DirectUnpack failed due to missing files %s', self.cur_setname)
|
||||
self.abort()
|
||||
|
||||
last_volume_linebuf = linebuf
|
||||
|
||||
# Show the log
|
||||
if linebuf.endswith('\n'):
|
||||
unrar_log.append(linebuf.strip())
|
||||
linebuf = ''
|
||||
@@ -233,32 +254,39 @@ class DirectUnpacker(threading.Thread):
|
||||
|
||||
# Save information if success
|
||||
if self.success_sets:
|
||||
msg = T('Unpacked %s files/folders in %s') % (len(globber(self.unpack_dir_info[0])), format_time_string(0))
|
||||
# The number is wrong if one_folder, just leave empty
|
||||
nr_files = '' if self.unpack_dir_info[3] else len(globber(self.unpack_dir_info[0]))
|
||||
msg = T('Unpacked %s files/folders in %s') % (nr_files, format_time_string(self.unpack_time))
|
||||
msg = '%s - %s' % (T('Direct Unpack'), msg)
|
||||
self.nzo.set_unpack_info('Unpack', '[%s] %s' % (unicoder(self.cur_setname), msg))
|
||||
|
||||
# Make more space
|
||||
self.reset_active()
|
||||
ACTIVE_UNPACKERS.remove(self)
|
||||
if self in ACTIVE_UNPACKERS:
|
||||
ACTIVE_UNPACKERS.remove(self)
|
||||
|
||||
# Make sure to release the lock
|
||||
self.release_concurrent_lock()
|
||||
# Set the thread to killed so it never gets restarted by accident
|
||||
self.killed = True
|
||||
|
||||
def have_next_volume(self):
|
||||
""" Check if next volume of set is available, start
|
||||
from the end of the list where latest completed files are """
|
||||
from the end of the list where latest completed files are
|
||||
Make sure that files are 100% written to disk by checking md5sum
|
||||
"""
|
||||
for nzf_search in reversed(self.nzo.finished_files):
|
||||
if nzf_search.setname == self.cur_setname and nzf_search.vol == self.cur_volume+1:
|
||||
return True
|
||||
if nzf_search.setname == self.cur_setname and nzf_search.vol == (self.cur_volume+1) and nzf_search.md5sum:
|
||||
return nzf_search
|
||||
return False
|
||||
|
||||
def wait_for_next_volume(self):
|
||||
""" Wait for the correct volume to appear
|
||||
But stop if it was killed or the NZB is done """
|
||||
But stop if it was killed or the NZB is done
|
||||
"""
|
||||
while not self.have_next_volume() and not self.killed and self.nzo.files:
|
||||
with self.next_file_lock:
|
||||
self.next_file_lock.wait()
|
||||
|
||||
def create_unrar_instance(self, rarfile_nzf):
|
||||
def create_unrar_instance(self):
|
||||
""" Start the unrar instance using the user's options """
|
||||
# Generate extraction path and save for post-proc
|
||||
if not self.unpack_dir_info:
|
||||
@@ -276,8 +304,11 @@ class DirectUnpacker(threading.Thread):
|
||||
else:
|
||||
action = 'x'
|
||||
|
||||
# The first NZF
|
||||
self.rarfile_nzf = self.have_next_volume()
|
||||
|
||||
# Generate command
|
||||
rarfile_path = os.path.join(self.nzo.downpath, rarfile_nzf.filename)
|
||||
rarfile_path = os.path.join(self.nzo.downpath, self.rarfile_nzf.filename)
|
||||
if sabnzbd.WIN32:
|
||||
if not has_win_device(rarfile_path):
|
||||
command = ['%s' % sabnzbd.newsunpack.RAR_COMMAND, action, '-vp', '-idp', '-o+', '-ai', password_command,
|
||||
@@ -294,10 +325,10 @@ class DirectUnpacker(threading.Thread):
|
||||
if cfg.ignore_unrar_dates():
|
||||
command.insert(3, '-tsm-')
|
||||
|
||||
# Let's start from the first one!
|
||||
self.cur_volume = 1
|
||||
stup, need_shell, command, creationflags = build_command(command)
|
||||
logging.debug('Running unrar for DirectUnpack %s', command)
|
||||
|
||||
# Aquire lock and go
|
||||
self.active_instance = Popen(command, shell=need_shell, stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
|
||||
startupinfo=stup, creationflags=creationflags)
|
||||
@@ -313,6 +344,9 @@ class DirectUnpacker(threading.Thread):
|
||||
logging.info('Aborting DirectUnpack for %s', self.cur_setname)
|
||||
self.killed = True
|
||||
|
||||
# Save reference to the first rarfile
|
||||
rarfile_nzf = self.rarfile_nzf
|
||||
|
||||
# Abort Unrar
|
||||
if self.active_instance:
|
||||
self.active_instance.kill()
|
||||
@@ -325,12 +359,28 @@ class DirectUnpacker(threading.Thread):
|
||||
|
||||
# No new sets
|
||||
self.next_sets = []
|
||||
self.success_sets = []
|
||||
self.success_sets = {}
|
||||
|
||||
# Remove files
|
||||
if self.unpack_dir_info:
|
||||
extraction_path, _, _, _, _ = self.unpack_dir_info
|
||||
remove_all(extraction_path, recursive=True)
|
||||
extraction_path, _, _, one_folder, _ = self.unpack_dir_info
|
||||
# In case of flat-unpack we need to remove the files manually
|
||||
if one_folder:
|
||||
# RarFile can fail for mysterious reasons
|
||||
try:
|
||||
rar_contents = RarFile(os.path.join(self.nzo.downpath, rarfile_nzf.filename), all_names=True).filelist()
|
||||
for rm_file in rar_contents:
|
||||
# Flat-unpack, so remove foldername from RarFile output
|
||||
f = os.path.join(extraction_path, os.path.basename(rm_file))
|
||||
logging.debug('Removing file %s', f)
|
||||
os.remove(f)
|
||||
except:
|
||||
# The user will have to remove it themselves
|
||||
logging.info('Failed to clean Direct Unpack after aborting %s', rarfile_nzf.filename, exc_info=True)
|
||||
pass
|
||||
else:
|
||||
# We can just remove the whole path
|
||||
remove_all(extraction_path, recursive=True)
|
||||
# Remove dir-info
|
||||
self.unpack_dir_info = None
|
||||
|
||||
@@ -341,14 +391,15 @@ class DirectUnpacker(threading.Thread):
|
||||
""" Get percentage or number of rar's done """
|
||||
if self.cur_setname and self.cur_setname in self.total_volumes:
|
||||
# This won't work on obfuscated posts
|
||||
if self.total_volumes[self.cur_setname] > self.cur_volume and self.cur_volume:
|
||||
return '%.0f%%' % (100*float(self.cur_volume)/self.total_volumes[self.cur_setname])
|
||||
if self.total_volumes[self.cur_setname] >= self.cur_volume and self.cur_volume:
|
||||
return '%02d/%02d' % (self.cur_volume, self.total_volumes[self.cur_setname])
|
||||
return self.cur_volume
|
||||
|
||||
|
||||
def analyze_rar_filename(filename):
|
||||
""" Extract volume number and setname from rar-filenames
|
||||
Both ".part01.rar" and ".r01" """
|
||||
Both ".part01.rar" and ".r01"
|
||||
"""
|
||||
m = RAR_NR.search(filename)
|
||||
if m:
|
||||
if m.group(4):
|
||||
@@ -357,7 +408,7 @@ def analyze_rar_filename(filename):
|
||||
return m.group(1), int_conv(m.group(3))
|
||||
else:
|
||||
# Detect if first of "rxx" set
|
||||
if filename.endswith('.rar') and '.part' not in filename:
|
||||
if filename.endswith('.rar'):
|
||||
return os.path.splitext(filename)[0], 1
|
||||
return None, None
|
||||
|
||||
@@ -371,9 +422,12 @@ def abort_all():
|
||||
|
||||
def test_disk_performance():
|
||||
""" Test the incomplete-dir performance and enable
|
||||
Direct Unpack if good enough (> 60MB/s)
|
||||
Direct Unpack if good enough (> 40MB/s)
|
||||
"""
|
||||
if diskspeedmeasure(sabnzbd.cfg.download_dir.get_path()) > 60:
|
||||
if diskspeedmeasure(sabnzbd.cfg.download_dir.get_path()) > 40:
|
||||
cfg.direct_unpack.set(True)
|
||||
logging.warning(T('Enabled Direct Unpack:') + ' ' + T('Jobs will start unpacking during the download, reduces post-processing time but requires capable hard drive. Only works for jobs that do not need repair.'))
|
||||
logging.warning(T('Direct Unpack was automatically enabled.') + ' ' + T('Jobs will start unpacking during the downloading to reduce post-processing time. Only works for jobs that do not need repair.'))
|
||||
else:
|
||||
logging.info('Direct Unpack was not enabled, incomplete folder disk speed below 40MB/s')
|
||||
cfg.direct_unpack_tested.set(True)
|
||||
sabnzbd.config.save_config()
|
||||
|
||||
@@ -73,6 +73,7 @@ def is_archive(path):
|
||||
zf = zipfile.ZipFile(path)
|
||||
return 0, zf, '.zip'
|
||||
except:
|
||||
logging.info(T('Cannot read %s'), path, exc_info=True)
|
||||
return -1, None, ''
|
||||
elif rarfile.is_rarfile(path):
|
||||
try:
|
||||
@@ -81,14 +82,17 @@ def is_archive(path):
|
||||
zf = rarfile.RarFile(path)
|
||||
return 0, zf, '.rar'
|
||||
except:
|
||||
logging.info(T('Cannot read %s'), path, exc_info=True)
|
||||
return -1, None, ''
|
||||
elif is_sevenfile(path):
|
||||
try:
|
||||
zf = SevenZip(path)
|
||||
return 0, zf, '.7z'
|
||||
except:
|
||||
logging.info(T('Cannot read %s'), path, exc_info=True)
|
||||
return -1, None, ''
|
||||
else:
|
||||
logging.info('Archive %s is not a real archive!', os.path.basename(path))
|
||||
return 1, None, ''
|
||||
|
||||
|
||||
@@ -127,17 +131,24 @@ def ProcessArchiveFile(filename, path, pp=None, script=None, cat=None, catdir=No
|
||||
try:
|
||||
data = zf.read(name)
|
||||
except:
|
||||
logging.error(T('Cannot read %s'), name, exc_info=True)
|
||||
zf.close()
|
||||
return -1, []
|
||||
name = os.path.basename(name)
|
||||
if data:
|
||||
nzo = None
|
||||
try:
|
||||
nzo = nzbstuff.NzbObject(name, pp, script, data, cat=cat, url=url,
|
||||
priority=priority, nzbname=nzbname)
|
||||
if not nzo.password:
|
||||
nzo.password = password
|
||||
except (TypeError, ValueError) as e:
|
||||
# Duplicate or empty, ignore
|
||||
pass
|
||||
except:
|
||||
nzo = None
|
||||
# Something else is wrong, show error
|
||||
logging.error(T('Error while adding %s, removing'), name, exc_info=True)
|
||||
|
||||
if nzo:
|
||||
if nzo_id:
|
||||
# Re-use existing nzo_id, when a "future" job gets it payload
|
||||
@@ -222,6 +233,8 @@ def ProcessSingleFile(filename, path, pp=None, script=None, cat=None, catdir=Non
|
||||
# Looks like an incomplete file, retry
|
||||
return -2, nzo_ids
|
||||
else:
|
||||
# Something else is wrong, show error
|
||||
logging.error(T('Error while adding %s, removing'), name, exc_info=True)
|
||||
return -1, nzo_ids
|
||||
|
||||
if nzo:
|
||||
|
||||
@@ -83,6 +83,10 @@ class Server(object):
|
||||
|
||||
self.categories = categories
|
||||
|
||||
# Temporary deprication warning
|
||||
if categories and (len(categories) > 1 or 'Default' not in categories):
|
||||
logging.warning('[%s] Server specific categories option is scheduled to be removed in the next release of SABnzbd', self.host)
|
||||
|
||||
self.busy_threads = []
|
||||
self.idle_threads = []
|
||||
self.active = True
|
||||
@@ -651,7 +655,7 @@ class Downloader(Thread):
|
||||
logging.error(T('Failed login for server %s'), server.id)
|
||||
penalty = _PENALTY_PERM
|
||||
block = True
|
||||
elif ecode == '502':
|
||||
elif ecode in ('502', '482'):
|
||||
# Cannot connect (other reasons), block this server
|
||||
if server.active:
|
||||
errormsg = T('Cannot connect to server %s [%s]') % ('', display_msg)
|
||||
@@ -791,11 +795,8 @@ class Downloader(Thread):
|
||||
# Remove this server from try_list
|
||||
article.fetcher = None
|
||||
|
||||
nzf = article.nzf
|
||||
nzo = nzf.nzo
|
||||
|
||||
# Allow all servers to iterate over each nzo/nzf again ##
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(nzf, nzo)
|
||||
# Allow all servers to iterate over each nzo/nzf again
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(article.nzf, article.nzf.nzo)
|
||||
|
||||
if destroy:
|
||||
nw.terminate(quit=quit)
|
||||
@@ -938,7 +939,8 @@ def clues_too_many(text):
|
||||
""" Check for any "too many connections" clues in the response code """
|
||||
text = text.lower()
|
||||
for clue in ('exceed', 'connections', 'too many', 'threads', 'limit'):
|
||||
if clue in text:
|
||||
# Not 'download limit exceeded' error
|
||||
if (clue in text) and ('download' not in text):
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -955,7 +957,7 @@ def clues_too_many_ip(text):
|
||||
def clues_pay(text):
|
||||
""" Check for messages about payments """
|
||||
text = text.lower()
|
||||
for clue in ('credits', 'paym', 'expired'):
|
||||
for clue in ('credits', 'paym', 'expired', 'exceeded'):
|
||||
if clue in text:
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -327,7 +327,7 @@ class MainPage(object):
|
||||
if not check_login():
|
||||
raise NeedLogin()
|
||||
|
||||
if not cfg.notified_new_skin() and cfg.web_dir() != 'Glitter':
|
||||
if not cfg.notified_new_skin() and cfg.web_dir() not in ('Glitter', 'Plush'):
|
||||
logging.warning(T('Try our new skin Glitter! Fresh new design that is optimized for desktop and mobile devices. Go to Config -> General to change your skin.'))
|
||||
if not cfg.notified_new_skin():
|
||||
cfg.notified_new_skin.set(1)
|
||||
@@ -1300,12 +1300,12 @@ class ConfigFolders(object):
|
||||
|
||||
##############################################################################
|
||||
SWITCH_LIST = \
|
||||
('par_option', 'top_only', 'ssl_ciphers', 'direct_unpack',
|
||||
('par_option', 'top_only', 'ssl_ciphers', 'direct_unpack', 'enable_meta',
|
||||
'auto_sort', 'propagation_delay', 'auto_disconnect', 'flat_unpack',
|
||||
'safe_postproc', 'no_dupes', 'replace_spaces', 'replace_dots',
|
||||
'ignore_samples', 'pause_on_post_processing', 'nice', 'ionice',
|
||||
'pre_script', 'pause_on_pwrar', 'sfv_check', 'folder_rename', 'load_balancing',
|
||||
'quota_size', 'quota_day', 'quota_resume', 'quota_period',
|
||||
'quota_size', 'quota_day', 'quota_resume', 'quota_period', 'history_retention',
|
||||
'pre_check', 'max_art_tries', 'fail_hopeless_jobs', 'enable_all_par',
|
||||
'enable_recursive', 'no_series_dupes', 'script_can_fail', 'new_nzb_on_failure',
|
||||
'unwanted_extensions', 'action_on_unwanted_extensions', 'sanitize_safe',
|
||||
@@ -1384,8 +1384,8 @@ SPECIAL_BOOL_LIST = \
|
||||
)
|
||||
SPECIAL_VALUE_LIST = \
|
||||
('size_limit', 'folder_max_length', 'fsys_type', 'movie_rename_limit', 'nomedia_marker',
|
||||
'req_completion_rate', 'wait_ext_drive', 'history_limit', 'show_sysload',
|
||||
'ipv6_servers', 'selftest_host', 'rating_host'
|
||||
'req_completion_rate', 'wait_ext_drive', 'show_sysload',
|
||||
'direct_unpack_threads', 'ipv6_servers', 'selftest_host', 'rating_host'
|
||||
)
|
||||
SPECIAL_LIST_LIST = ('rss_odd_titles', 'quick_check_ext_ignore')
|
||||
|
||||
@@ -1612,9 +1612,9 @@ class ConfigServer(object):
|
||||
server_names = sorted(servers.keys(), key=lambda svr: '%d%02d%s' % (int(not servers[svr].enable()), servers[svr].priority(), servers[svr].displayname().lower()))
|
||||
for svr in server_names:
|
||||
new.append(servers[svr].get_dict(safe=True))
|
||||
t, m, w, d = BPSMeter.do.amounts(svr)
|
||||
t, m, w, d, timeline = BPSMeter.do.amounts(svr)
|
||||
if t:
|
||||
new[-1]['amounts'] = to_units(t), to_units(m), to_units(w), to_units(d)
|
||||
new[-1]['amounts'] = to_units(t), to_units(m), to_units(w), to_units(d), timeline
|
||||
conf['servers'] = new
|
||||
conf['cats'] = list_cats(default=True)
|
||||
conf['have_ssl_context'] = sabnzbd.HAVE_SSL_CONTEXT
|
||||
@@ -2414,7 +2414,7 @@ LOG_API_RE = re.compile(r"(apikey|api)(=|:)[\w]+", re.I)
|
||||
LOG_API_JSON_RE = re.compile(r"u'(apikey|api)': u'[\w]+'", re.I)
|
||||
LOG_USER_RE = re.compile(r"(user|username)\s?=\s?[\S]+", re.I)
|
||||
LOG_PASS_RE = re.compile(r"(password)\s?=\s?[\S]+", re.I)
|
||||
LOG_INI_HIDE_RE = re.compile(r"(email_pwd|rating_api_key|pushover_token|pushover_userkey|pushbullet_apikey|prowl_apikey|growl_password|growl_server|IPv[4|6] address)\s?=\s?[\S]+", re.I)
|
||||
LOG_INI_HIDE_RE = re.compile(r"(email_pwd|email_account|email_to|rating_api_key|pushover_token|pushover_userkey|pushbullet_apikey|prowl_apikey|growl_password|growl_server|IPv[4|6] address)\s?=\s?[\S]+", re.I)
|
||||
LOG_HASH_RE = re.compile(r"([a-fA-F\d]{25})", re.I)
|
||||
|
||||
class Status(object):
|
||||
|
||||
242
sabnzbd/misc.py
242
sabnzbd/misc.py
@@ -42,9 +42,11 @@ import sabnzbd.config as config
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.encoding import unicoder, special_fixer, gUTF
|
||||
|
||||
RE_VERSION = re.compile(r'(\d+)\.(\d+)\.(\d+)([a-zA-Z]*)(\d*)')
|
||||
RE_UNITS = re.compile(r'(\d+\.*\d*)\s*([KMGTP]{0,1})', re.I)
|
||||
TAB_UNITS = ('', 'K', 'M', 'G', 'T', 'P')
|
||||
RE_UNITS = re.compile(r'(\d+\.*\d*)\s*([KMGTP]{0,1})', re.I)
|
||||
RE_VERSION = re.compile(r'(\d+)\.(\d+)\.(\d+)([a-zA-Z]*)(\d*)')
|
||||
RE_IP4 = re.compile(r'inet\s+(addr:\s*){0,1}(\d+\.\d+\.\d+\.\d+)')
|
||||
RE_IP6 = re.compile(r'inet6\s+(addr:\s*){0,1}([0-9a-f:]+)', re.I)
|
||||
|
||||
# Check if strings are defined for AM and PM
|
||||
HAVE_AMPM = bool(time.strftime('%p', time.localtime()))
|
||||
@@ -92,6 +94,15 @@ def calc_age(date, trans=False):
|
||||
return age
|
||||
|
||||
|
||||
def monthrange(start, finish):
|
||||
""" Calculate months between 2 dates, used in the Config template """
|
||||
months = (finish.year - start.year) * 12 + finish.month + 1
|
||||
for i in xrange(start.month, months):
|
||||
year = (i - 1) / 12 + start.year
|
||||
month = (i - 1) % 12 + 1
|
||||
yield datetime.date(year, month, 1)
|
||||
|
||||
|
||||
def safe_lower(txt):
|
||||
""" Return lowercased string. Return '' for None """
|
||||
if txt:
|
||||
@@ -100,13 +111,22 @@ def safe_lower(txt):
|
||||
return ''
|
||||
|
||||
|
||||
def safe_fnmatch(f, pattern):
|
||||
""" fnmatch will fail if the pattern contains any of it's
|
||||
key characters, like [, ] or !.
|
||||
"""
|
||||
try:
|
||||
return fnmatch.fnmatch(f, pattern)
|
||||
except re.error:
|
||||
return False
|
||||
|
||||
|
||||
def globber(path, pattern=u'*'):
|
||||
""" Return matching base file/folder names in folder `path` """
|
||||
# Cannot use glob.glob() because it doesn't support Windows long name notation
|
||||
if os.path.exists(path):
|
||||
return [f for f in os.listdir(path) if fnmatch.fnmatch(f, pattern)]
|
||||
else:
|
||||
return []
|
||||
return [f for f in os.listdir(path) if safe_fnmatch(f, pattern)]
|
||||
return []
|
||||
|
||||
|
||||
def globber_full(path, pattern=u'*'):
|
||||
@@ -114,13 +134,12 @@ def globber_full(path, pattern=u'*'):
|
||||
# Cannot use glob.glob() because it doesn't support Windows long name notation
|
||||
if os.path.exists(path):
|
||||
try:
|
||||
return [os.path.join(path, f) for f in os.listdir(path) if fnmatch.fnmatch(f, pattern)]
|
||||
return [os.path.join(path, f) for f in os.listdir(path) if safe_fnmatch(f, pattern)]
|
||||
except UnicodeDecodeError:
|
||||
# This happens on Linux when names are incorrectly encoded, retry using a non-Unicode path
|
||||
path = path.encode('utf-8')
|
||||
return [os.path.join(path, f) for f in os.listdir(path) if fnmatch.fnmatch(f, pattern)]
|
||||
else:
|
||||
return []
|
||||
return [os.path.join(path, f) for f in os.listdir(path) if safe_fnmatch(f, pattern)]
|
||||
return []
|
||||
|
||||
|
||||
def cat_to_opts(cat, pp=None, script=None, priority=None):
|
||||
@@ -843,9 +862,11 @@ def get_cache_limit():
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Directory operations
|
||||
# Locked directory operations to avoid problems with simultaneous add/remove
|
||||
##############################################################################
|
||||
DIR_LOCK = threading.RLock()
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def get_unique_path(dirpath, n=0, create_dir=True):
|
||||
""" Determine a unique folder or filename """
|
||||
|
||||
@@ -865,6 +886,7 @@ def get_unique_path(dirpath, n=0, create_dir=True):
|
||||
return get_unique_path(dirpath, n=n + 1, create_dir=create_dir)
|
||||
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def get_unique_filename(path):
|
||||
""" Check if path is unique. If not, add number like: "/path/name.NUM.ext". """
|
||||
num = 1
|
||||
@@ -877,6 +899,7 @@ def get_unique_filename(path):
|
||||
return path
|
||||
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def create_dirs(dirpath):
|
||||
""" Create directory tree, obeying permissions """
|
||||
if not os.path.exists(dirpath):
|
||||
@@ -887,6 +910,7 @@ def create_dirs(dirpath):
|
||||
return dirpath
|
||||
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def move_to_path(path, new_path):
|
||||
""" Move a file to a new path, optionally give unique filename
|
||||
Return (ok, new_path)
|
||||
@@ -927,6 +951,7 @@ def move_to_path(path, new_path):
|
||||
return ok, new_path
|
||||
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def cleanup_empty_directories(path):
|
||||
""" Remove all empty folders inside (and including) 'path' """
|
||||
path = os.path.normpath(path)
|
||||
@@ -947,6 +972,7 @@ def cleanup_empty_directories(path):
|
||||
pass
|
||||
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def get_filepath(path, nzo, filename):
|
||||
""" Create unique filepath """
|
||||
# This procedure is only used by the Assembler thread
|
||||
@@ -983,6 +1009,94 @@ def get_filepath(path, nzo, filename):
|
||||
return fullPath
|
||||
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def renamer(old, new):
|
||||
""" Rename file/folder with retries for Win32 """
|
||||
# Sanitize last part of new name
|
||||
path, name = os.path.split(new)
|
||||
# Use the more stringent folder rename to end up with a nicer name,
|
||||
# but do not trim size
|
||||
new = os.path.join(path, sanitize_foldername(name, False))
|
||||
|
||||
logging.debug('Renaming "%s" to "%s"', old, new)
|
||||
if sabnzbd.WIN32:
|
||||
retries = 15
|
||||
while retries > 0:
|
||||
# First we try 3 times with os.rename
|
||||
if retries > 12:
|
||||
try:
|
||||
os.rename(old, new)
|
||||
return
|
||||
except:
|
||||
retries -= 1
|
||||
time.sleep(3)
|
||||
continue
|
||||
|
||||
# Now we try the back-up method
|
||||
logging.debug('Could not rename, trying move for %s to %s', old, new)
|
||||
try:
|
||||
shutil.move(old, new)
|
||||
return
|
||||
except WindowsError, err:
|
||||
logging.debug('Error renaming "%s" to "%s" <%s>', old, new, err)
|
||||
if err[0] == 32:
|
||||
logging.debug('Retry rename %s to %s', old, new)
|
||||
retries -= 1
|
||||
else:
|
||||
raise WindowsError(err)
|
||||
time.sleep(3)
|
||||
raise WindowsError(err)
|
||||
else:
|
||||
shutil.move(old, new)
|
||||
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def remove_dir(path):
|
||||
""" Remove directory with retries for Win32 """
|
||||
logging.debug('Removing dir %s', path)
|
||||
if sabnzbd.WIN32:
|
||||
retries = 15
|
||||
while retries > 0:
|
||||
try:
|
||||
os.rmdir(path)
|
||||
return
|
||||
except WindowsError, err:
|
||||
if err[0] == 32:
|
||||
logging.debug('Retry delete %s', path)
|
||||
retries -= 1
|
||||
else:
|
||||
raise WindowsError(err)
|
||||
time.sleep(3)
|
||||
raise WindowsError(err)
|
||||
else:
|
||||
os.rmdir(path)
|
||||
|
||||
|
||||
@synchronized(DIR_LOCK)
|
||||
def remove_all(path, pattern='*', keep_folder=False, recursive=False):
|
||||
""" Remove folder and all its content (optionally recursive) """
|
||||
if os.path.exists(path):
|
||||
files = globber_full(path, pattern)
|
||||
if pattern == '*' and not sabnzbd.WIN32:
|
||||
files.extend(globber_full(path, '.*'))
|
||||
|
||||
for f in files:
|
||||
if os.path.isfile(f):
|
||||
try:
|
||||
logging.debug('Removing file %s', f)
|
||||
os.remove(f)
|
||||
except:
|
||||
logging.info('Cannot remove file %s', f)
|
||||
elif recursive:
|
||||
remove_all(f, pattern, False, True)
|
||||
if not keep_folder:
|
||||
try:
|
||||
logging.debug('Removing dir %s', path)
|
||||
os.rmdir(path)
|
||||
except:
|
||||
logging.info('Cannot remove folder %s', path)
|
||||
|
||||
|
||||
def trim_win_path(path):
|
||||
""" Make sure Windows path stays below 70 by trimming last part """
|
||||
if sabnzbd.WIN32 and len(path) > 69:
|
||||
@@ -1245,6 +1359,7 @@ def get_all_passwords(nzo):
|
||||
pw = nzo.nzo_info.get('password')
|
||||
if pw:
|
||||
meta_passwords.append(pw)
|
||||
|
||||
if meta_passwords:
|
||||
if nzo.password == meta_passwords[0]:
|
||||
# this nzo.password came from meta, so don't use it twice
|
||||
@@ -1252,19 +1367,23 @@ def get_all_passwords(nzo):
|
||||
else:
|
||||
passwords.extend(meta_passwords)
|
||||
logging.info('Read %s passwords from meta data in NZB: %s', len(meta_passwords), meta_passwords)
|
||||
|
||||
pw_file = cfg.password_file.get_path()
|
||||
if pw_file:
|
||||
try:
|
||||
pwf = open(pw_file, 'r')
|
||||
lines = pwf.read().split('\n')
|
||||
with open(pw_file, 'r') as pwf:
|
||||
lines = pwf.read().split('\n')
|
||||
# Remove empty lines and space-only passwords and remove surrounding spaces
|
||||
pws = [pw.strip('\r\n ') for pw in lines if pw.strip('\r\n ')]
|
||||
logging.debug('Read these passwords from file: %s', pws)
|
||||
passwords.extend(pws)
|
||||
pwf.close()
|
||||
logging.info('Read %s passwords from file %s', len(pws), pw_file)
|
||||
except IOError:
|
||||
logging.info('Failed to read the passwords file %s', pw_file)
|
||||
except:
|
||||
logging.warning('Failed to read the passwords file %s', pw_file)
|
||||
|
||||
# Check size
|
||||
if len(passwords) > 30:
|
||||
logging.warning(T('Your password file contains more than 30 passwords, testing all these passwords takes a lot of time. Try to only list useful passwords.'))
|
||||
|
||||
if nzo.password:
|
||||
# If an explicit password was set, add a retry without password, just in case.
|
||||
@@ -1294,8 +1413,6 @@ def find_on_path(targets):
|
||||
return None
|
||||
|
||||
|
||||
_RE_IP4 = re.compile(r'inet\s+(addr:\s*){0,1}(\d+\.\d+\.\d+\.\d+)')
|
||||
_RE_IP6 = re.compile(r'inet6\s+(addr:\s*){0,1}([0-9a-f:]+)', re.I)
|
||||
def ip_extract():
|
||||
""" Return list of IP addresses of this system """
|
||||
ips = []
|
||||
@@ -1322,99 +1439,14 @@ def ip_extract():
|
||||
output = p.stdout.read()
|
||||
p.wait()
|
||||
for line in output.split('\n'):
|
||||
m = _RE_IP4.search(line)
|
||||
m = RE_IP4.search(line)
|
||||
if not (m and m.group(2)):
|
||||
m = _RE_IP6.search(line)
|
||||
m = RE_IP6.search(line)
|
||||
if m and m.group(2):
|
||||
ips.append(m.group(2))
|
||||
return ips
|
||||
|
||||
|
||||
def renamer(old, new):
|
||||
""" Rename file/folder with retries for Win32 """
|
||||
# Sanitize last part of new name
|
||||
path, name = os.path.split(new)
|
||||
# Use the more stringent folder rename to end up with a nicer name,
|
||||
# but do not trim size
|
||||
new = os.path.join(path, sanitize_foldername(name, False))
|
||||
|
||||
logging.debug('Renaming "%s" to "%s"', old, new)
|
||||
if sabnzbd.WIN32:
|
||||
retries = 15
|
||||
while retries > 0:
|
||||
# First we try 3 times with os.rename
|
||||
if retries > 12:
|
||||
try:
|
||||
os.rename(old, new)
|
||||
return
|
||||
except:
|
||||
retries -= 1
|
||||
time.sleep(3)
|
||||
continue
|
||||
|
||||
# Now we try the back-up method
|
||||
logging.debug('Could not rename, trying move for %s to %s', old, new)
|
||||
try:
|
||||
shutil.move(old, new)
|
||||
return
|
||||
except WindowsError, err:
|
||||
logging.debug('Error renaming "%s" to "%s" <%s>', old, new, err)
|
||||
if err[0] == 32:
|
||||
logging.debug('Retry rename %s to %s', old, new)
|
||||
retries -= 1
|
||||
else:
|
||||
raise WindowsError(err)
|
||||
time.sleep(3)
|
||||
raise WindowsError(err)
|
||||
else:
|
||||
shutil.move(old, new)
|
||||
|
||||
|
||||
def remove_dir(path):
|
||||
""" Remove directory with retries for Win32 """
|
||||
logging.debug('Removing dir %s', path)
|
||||
if sabnzbd.WIN32:
|
||||
retries = 15
|
||||
while retries > 0:
|
||||
try:
|
||||
os.rmdir(path)
|
||||
return
|
||||
except WindowsError, err:
|
||||
if err[0] == 32:
|
||||
logging.debug('Retry delete %s', path)
|
||||
retries -= 1
|
||||
else:
|
||||
raise WindowsError(err)
|
||||
time.sleep(3)
|
||||
raise WindowsError(err)
|
||||
else:
|
||||
os.rmdir(path)
|
||||
|
||||
|
||||
def remove_all(path, pattern='*', keep_folder=False, recursive=False):
|
||||
""" Remove folder and all its content (optionally recursive) """
|
||||
if os.path.exists(path):
|
||||
files = globber_full(path, pattern)
|
||||
if pattern == '*' and not sabnzbd.WIN32:
|
||||
files.extend(globber_full(path, '.*'))
|
||||
|
||||
for f in files:
|
||||
if os.path.isfile(f):
|
||||
try:
|
||||
logging.debug('Removing file %s', f)
|
||||
os.remove(f)
|
||||
except:
|
||||
logging.info('Cannot remove file %s', f)
|
||||
elif recursive:
|
||||
remove_all(f, pattern, False, True)
|
||||
if not keep_folder:
|
||||
try:
|
||||
logging.debug('Removing dir %s', path)
|
||||
os.rmdir(path)
|
||||
except:
|
||||
logging.info('Cannot remove folder %s', path)
|
||||
|
||||
|
||||
def is_writable(path):
|
||||
""" Return True is file is writable (also when non-existent) """
|
||||
if os.path.isfile(path):
|
||||
@@ -1461,7 +1493,7 @@ def starts_with_path(path, prefix):
|
||||
def set_chmod(path, permissions, report):
|
||||
""" Set 'permissions' on 'path', report any errors when 'report' is True """
|
||||
try:
|
||||
logging.debug('Applying %s to %s', permissions, path)
|
||||
logging.debug('Applying permissions %s (octal) to %s', oct(permissions), path)
|
||||
os.chmod(path, permissions)
|
||||
except:
|
||||
lpath = path.lower()
|
||||
|
||||
@@ -33,7 +33,7 @@ from sabnzbd.encoding import TRANS, UNTRANS, unicoder, platform_encode, deunicod
|
||||
import sabnzbd.utils.rarfile as rarfile
|
||||
from sabnzbd.misc import format_time_string, find_on_path, make_script_path, int_conv, \
|
||||
real_path, globber, globber_full, get_all_passwords, renamer, clip_path, \
|
||||
has_win_device, calc_age
|
||||
has_win_device, calc_age, long_path
|
||||
from sabnzbd.tvsort import SeriesSorter
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.constants import Status
|
||||
@@ -226,9 +226,10 @@ def unpack_magic(nzo, workdir, workdir_complete, dele, one_folder, joinables, zi
|
||||
# First time, ignore anything in workdir_complete
|
||||
xjoinables, xzips, xrars, xsevens, xts = build_filelists(workdir)
|
||||
else:
|
||||
xjoinables, xzips, xrars, xsevens, xts = build_filelists(workdir, workdir_complete)
|
||||
xjoinables, xzips, xrars, xsevens, xts = build_filelists(workdir, workdir_complete, check_both=dele)
|
||||
|
||||
rerun = False
|
||||
force_rerun = False
|
||||
newfiles = []
|
||||
error = 0
|
||||
new_joins = new_rars = new_zips = new_ts = None
|
||||
@@ -290,7 +291,14 @@ def unpack_magic(nzo, workdir, workdir_complete, dele, one_folder, joinables, zi
|
||||
if nzo.reuse and depth == 1 and any(build_filelists(workdir, workdir_complete)):
|
||||
rerun = True
|
||||
|
||||
if rerun and (cfg.enable_recursive() or new_ts or new_joins):
|
||||
# Double-check that we didn't miss any files in workdir
|
||||
# But only if dele=True, otherwise of course there will be files left
|
||||
if rerun and dele and depth == 1 and any(build_filelists(workdir)):
|
||||
force_rerun = True
|
||||
# Clear lists to force re-scan of files
|
||||
xjoinables, xzips, xrars, xsevens, xts = ([], [], [], [], [])
|
||||
|
||||
if rerun and (cfg.enable_recursive() or new_ts or new_joins or force_rerun):
|
||||
z, y = unpack_magic(nzo, workdir, workdir_complete, dele, one_folder,
|
||||
xjoinables, xzips, xrars, xsevens, xts, depth)
|
||||
if z:
|
||||
@@ -475,20 +483,18 @@ def rar_unpack(nzo, workdir, workdir_complete, delete, one_folder, rars):
|
||||
if nzo.direct_unpacker:
|
||||
while nzo.direct_unpacker.is_alive():
|
||||
logging.debug('DirectUnpacker still alive for %s', nzo)
|
||||
time.sleep(2)
|
||||
|
||||
# Bump the file-lock in case it's stuck
|
||||
with nzo.direct_unpacker.next_file_lock:
|
||||
nzo.direct_unpacker.next_file_lock.notify()
|
||||
time.sleep(2)
|
||||
|
||||
# Did we already direct-unpack it? Not when recursive-unpacking
|
||||
if nzo.direct_unpacker and rar_set in nzo.direct_unpacker.success_sets:
|
||||
logging.info("Set %s completed by DirectUnpack", rar_set)
|
||||
fail = 0
|
||||
success = 1
|
||||
rars = rar_sets[rar_set]
|
||||
fail = False
|
||||
success = True
|
||||
rars = nzo.direct_unpacker.success_sets.pop(rar_set)
|
||||
newfiles = globber(extraction_path)
|
||||
nzo.direct_unpacker.success_sets.remove(rar_set)
|
||||
else:
|
||||
logging.info("Extracting rarfile %s (belonging to %s) to %s",
|
||||
rarpath, rar_set, extraction_path)
|
||||
@@ -497,7 +503,7 @@ def rar_unpack(nzo, workdir, workdir_complete, delete, one_folder, rars):
|
||||
one_folder, nzo, rar_set, extraction_path)
|
||||
# Was it aborted?
|
||||
if not nzo.pp_active:
|
||||
fail = 1
|
||||
fail = True
|
||||
break
|
||||
success = not fail
|
||||
except:
|
||||
@@ -516,6 +522,23 @@ def rar_unpack(nzo, workdir, workdir_complete, delete, one_folder, rars):
|
||||
logging.debug('rar_unpack(): Newfiles: %s', newfiles)
|
||||
extracted_files.extend(newfiles)
|
||||
|
||||
# Do not fail if this was a recursive unpack
|
||||
if fail and rarpath.startswith(workdir_complete):
|
||||
# Do not delete the files, leave it to user!
|
||||
logging.info('Ignoring failure to do recursive unpack of %s', rarpath)
|
||||
fail = 0
|
||||
success = True
|
||||
newfiles = []
|
||||
|
||||
# Do not fail if this was maybe just some duplicate fileset
|
||||
# Multipar and par2tbb will detect and log them, par2cmdline will not
|
||||
if fail and rar_set.endswith(('.1', '.2')):
|
||||
# Just in case, we leave the raw files
|
||||
logging.info('Ignoring failure of unpack for possible duplicate file %s', rarpath)
|
||||
fail = 0
|
||||
success = True
|
||||
newfiles = []
|
||||
|
||||
# Delete the old files if we have to
|
||||
if success and delete and newfiles:
|
||||
for rar in rars:
|
||||
@@ -600,6 +623,10 @@ def rar_extract_core(rarfile_path, numrars, one_folder, nzo, setname, extraction
|
||||
command = ['%s' % RAR_COMMAND, action, '-idp', overwrite, rename, '-ai', password_command,
|
||||
'%s' % clip_path(rarfile_path), '%s\\' % extraction_path]
|
||||
|
||||
# The subprocess_fix requires time to clear the buffers to work,
|
||||
# otherwise the inputs get send incorrectly and unrar breaks
|
||||
time.sleep(0.5)
|
||||
|
||||
elif RAR_PROBLEM:
|
||||
# Use only oldest options (specifically no "-or")
|
||||
command = ['%s' % RAR_COMMAND, action, '-idp', overwrite, password_command,
|
||||
@@ -616,8 +643,6 @@ def rar_extract_core(rarfile_path, numrars, one_folder, nzo, setname, extraction
|
||||
|
||||
# Get list of all the volumes part of this set
|
||||
logging.debug("Analyzing rar file ... %s found", rarfile.is_rarfile(rarfile_path))
|
||||
rarfiles = rarfile.RarFile(rarfile_path).volumelist()
|
||||
|
||||
logging.debug("Running unrar %s", command)
|
||||
p = Popen(command, shell=need_shell, stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
|
||||
@@ -632,6 +657,7 @@ def rar_extract_core(rarfile_path, numrars, one_folder, nzo, setname, extraction
|
||||
# Loop over the output from rar!
|
||||
curr = 0
|
||||
extracted = []
|
||||
rarfiles = []
|
||||
fail = 0
|
||||
inrecovery = False
|
||||
lines = []
|
||||
@@ -654,6 +680,9 @@ def rar_extract_core(rarfile_path, numrars, one_folder, nzo, setname, extraction
|
||||
lines.append(line)
|
||||
|
||||
if line.startswith('Extracting from'):
|
||||
filename = TRANS((re.search(EXTRACTFROM_RE, line).group(1)))
|
||||
if filename not in rarfiles:
|
||||
rarfiles.append(filename)
|
||||
curr += 1
|
||||
nzo.set_action_line(T('Unpacking'), '%02d/%02d' % (curr, numrars))
|
||||
|
||||
@@ -778,6 +807,9 @@ def rar_extract_core(rarfile_path, numrars, one_folder, nzo, setname, extraction
|
||||
proc.close()
|
||||
p.wait()
|
||||
|
||||
# Which files did we use to extract this?
|
||||
rarfiles = rar_volumelist(rarfile_path, password, rarfiles)
|
||||
|
||||
logging.debug('UNRAR output %s', '\n'.join(lines))
|
||||
nzo.fail_msg = ''
|
||||
msg = T('Unpacked %s files/folders in %s') % (str(len(extracted)), format_time_string(time.time() - start))
|
||||
@@ -802,7 +834,7 @@ def unzip(nzo, workdir, workdir_complete, delete, one_folder, zips):
|
||||
|
||||
for _zip in zips:
|
||||
logging.info("Starting extract on zipfile: %s ", _zip)
|
||||
nzo.set_action_line(T('Unpacking'), '%s' % unicoder(_zip))
|
||||
nzo.set_action_line(T('Unpacking'), '%s' % unicoder(os.path.basename(_zip)))
|
||||
|
||||
if workdir_complete and _zip.startswith(workdir):
|
||||
extraction_path = workdir_complete
|
||||
@@ -1218,6 +1250,8 @@ def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False):
|
||||
verifytotal = 0
|
||||
verified = 0
|
||||
|
||||
in_verify_repaired = False
|
||||
|
||||
# Loop over the output, whee
|
||||
while 1:
|
||||
char = proc.read(1)
|
||||
@@ -1279,6 +1313,9 @@ def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False):
|
||||
format_time_string(time.time() - start))
|
||||
start = time.time()
|
||||
verified = 1
|
||||
# Reset to use them again for verification of repair
|
||||
verifytotal = 0
|
||||
verifynum = 0
|
||||
|
||||
elif line.startswith('Loading "'):
|
||||
# Found an extra par2 file. Only the next line will tell whether it's usable
|
||||
@@ -1370,9 +1407,7 @@ def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False):
|
||||
|
||||
else:
|
||||
block_table.pop(block_size)
|
||||
|
||||
logging.info('Added %s blocks to %s',
|
||||
added_blocks, nzo.final_name)
|
||||
logging.info('Added %s blocks to %s', added_blocks, nzo.final_name)
|
||||
|
||||
if not force:
|
||||
msg = T('Fetching %s blocks...') % str(added_blocks)
|
||||
@@ -1402,6 +1437,20 @@ def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False):
|
||||
logging.info('Repaired in %s', format_time_string(time.time() - start))
|
||||
finished = 1
|
||||
|
||||
elif verified and line.endswith(('are missing.', 'exist but are damaged.')):
|
||||
# Files that will later be verified after repair
|
||||
chunks = line.split()
|
||||
verifytotal += int(chunks[0])
|
||||
|
||||
elif line.startswith('Verifying repaired files'):
|
||||
in_verify_repaired = True
|
||||
nzo.set_action_line(T('Verifying repair'), '%02d/%02d' % (verifynum, verifytotal))
|
||||
|
||||
elif in_verify_repaired and line.startswith('Target'):
|
||||
verifynum += 1
|
||||
if verifynum <= verifytotal:
|
||||
nzo.set_action_line(T('Verifying repair'), '%02d/%02d' % (verifynum, verifytotal))
|
||||
|
||||
elif line.startswith('File:') and line.find('data blocks from') > 0:
|
||||
m = _RE_BLOCK_FOUND.search(line)
|
||||
if m:
|
||||
@@ -1493,7 +1542,12 @@ def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False):
|
||||
verifynum += 1
|
||||
nzo.set_action_line(T('Verifying'), '%02d/%02d' % (verifynum, verifytotal))
|
||||
nzo.status = Status.VERIFYING
|
||||
datafiles.append(TRANS(m.group(1)))
|
||||
|
||||
# Remove redundant extra files that are just duplicates of original ones
|
||||
if 'duplicate data blocks' in line:
|
||||
used_for_repair.append(TRANS(m.group(1)))
|
||||
else:
|
||||
datafiles.append(TRANS(m.group(1)))
|
||||
continue
|
||||
|
||||
# Verify done
|
||||
@@ -1742,6 +1796,7 @@ def MultiPar_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False)
|
||||
elif line.startswith('Finding available slice'):
|
||||
# The actual scanning of the files
|
||||
in_verify = True
|
||||
nzo.set_action_line(T('Verifying'), T('Checking'))
|
||||
elif in_verify:
|
||||
m = _RE_FILENAME.search(line)
|
||||
if m:
|
||||
@@ -1914,7 +1969,7 @@ def MultiPar_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False)
|
||||
if renames:
|
||||
# If succes, we also remove the possibly previously renamed ones
|
||||
if finished:
|
||||
reconstructed.extend(nzo.renames)
|
||||
reconstructed.extend(renames.values())
|
||||
|
||||
# Adding to the collection
|
||||
nzo.renamed_file(renames)
|
||||
@@ -1979,6 +2034,7 @@ def userxbit(filename):
|
||||
xbitset = (rwxbits & userxbit) > 0
|
||||
return xbitset
|
||||
|
||||
|
||||
def build_command(command):
|
||||
""" Prepare list from running an external program """
|
||||
if not sabnzbd.WIN32:
|
||||
@@ -2030,6 +2086,31 @@ def build_command(command):
|
||||
return stup, need_shell, command, creationflags
|
||||
|
||||
|
||||
def rar_volumelist(rarfile_path, password, known_volumes):
|
||||
""" Extract volumes that are part of this rarset
|
||||
and merge them with existing list, removing duplicates
|
||||
"""
|
||||
# UnRar is required to read some RAR files
|
||||
rarfile.UNRAR_TOOL = RAR_COMMAND
|
||||
zf = rarfile.RarFile(rarfile_path)
|
||||
|
||||
# setpassword can fail due to bugs in RarFile
|
||||
if password:
|
||||
try:
|
||||
zf.setpassword(password)
|
||||
except:
|
||||
pass
|
||||
zf_volumes = zf.volumelist()
|
||||
|
||||
# Remove duplicates
|
||||
known_volumes_base = [os.path.basename(vol) for vol in known_volumes]
|
||||
for zf_volume in zf_volumes:
|
||||
if os.path.basename(zf_volume) not in known_volumes_base:
|
||||
# Long-path notation just to be sure
|
||||
known_volumes.append(long_path(zf_volume))
|
||||
return known_volumes
|
||||
|
||||
|
||||
# Sort the various RAR filename formats properly :\
|
||||
def rar_sort(a, b):
|
||||
""" Define sort method for rar file names """
|
||||
@@ -2046,8 +2127,9 @@ def rar_sort(a, b):
|
||||
return cmp(a, b)
|
||||
|
||||
|
||||
def build_filelists(workdir, workdir_complete=None, check_rar=True):
|
||||
def build_filelists(workdir, workdir_complete=None, check_both=False, check_rar=True):
|
||||
""" Build filelists, if workdir_complete has files, ignore workdir.
|
||||
Optionally scan both directories.
|
||||
Optionally test content to establish RAR-ness
|
||||
"""
|
||||
sevens, joinables, zips, rars, ts, filelist = ([], [], [], [], [], [])
|
||||
@@ -2063,7 +2145,7 @@ def build_filelists(workdir, workdir_complete=None, check_rar=True):
|
||||
# Just skip failing names
|
||||
pass
|
||||
|
||||
if workdir and not filelist:
|
||||
if workdir and (not filelist or check_both):
|
||||
for root, dirs, files in os.walk(workdir):
|
||||
for _file in files:
|
||||
if '.AppleDouble' not in root and '.DS_Store' not in root:
|
||||
|
||||
@@ -42,12 +42,14 @@ from sabnzbd.newsunpack import external_script
|
||||
from gntp.core import GNTPRegister
|
||||
from gntp.notifier import GrowlNotifier
|
||||
import gntp.errors
|
||||
|
||||
try:
|
||||
import Growl
|
||||
# Detect classic Growl (older than 1.3)
|
||||
_HAVE_CLASSIC_GROWL = os.path.isfile('/Library/PreferencePanes/Growl.prefPane/Contents/MacOS/Growl')
|
||||
except ImportError:
|
||||
_HAVE_CLASSIC_GROWL = False
|
||||
|
||||
try:
|
||||
import warnings
|
||||
# Make any warnings exceptions, so that pynotify is ignored
|
||||
@@ -56,6 +58,10 @@ try:
|
||||
warnings.simplefilter("error")
|
||||
import pynotify
|
||||
_HAVE_NTFOSD = True
|
||||
|
||||
# Check for working version, not all pynotify are the same
|
||||
if not hasattr(pynotify, 'init'):
|
||||
_HAVE_NTFOSD = False
|
||||
except:
|
||||
_HAVE_NTFOSD = False
|
||||
|
||||
@@ -136,8 +142,8 @@ def check_cat(section, job_cat):
|
||||
section_cats = sabnzbd.config.get_config(section, '%s_cats' % section)()
|
||||
return ('*' in section_cats or job_cat in section_cats)
|
||||
except TypeError:
|
||||
logging.debug('Incorrect Notify option %s:%s_prio_%s', section, section, gtype)
|
||||
return False
|
||||
logging.debug('Incorrect Notify option %s:%s_cats', section, section)
|
||||
return True
|
||||
|
||||
|
||||
def send_notification(title, msg, gtype, job_cat=None):
|
||||
|
||||
@@ -111,6 +111,7 @@ class NzbQueue(object):
|
||||
if sabnzbd.OLD_QUEUE and cfg.warned_old_queue() < QUEUE_VERSION:
|
||||
logging.warning(T('Old queue detected, use Status->Repair to convert the queue'))
|
||||
cfg.warned_old_queue.set(QUEUE_VERSION)
|
||||
sabnzbd.config.save_config()
|
||||
else:
|
||||
# Try to process
|
||||
try:
|
||||
@@ -142,6 +143,7 @@ class NzbQueue(object):
|
||||
|
||||
# Done converting
|
||||
cfg.converted_nzo_pickles.set(True)
|
||||
sabnzbd.config.save_config()
|
||||
nzo_ids = []
|
||||
return nzo_ids
|
||||
|
||||
@@ -766,10 +768,6 @@ class NzbQueue(object):
|
||||
def end_job(self, nzo):
|
||||
""" Send NZO to the post-processing queue """
|
||||
logging.info('Ending job %s', nzo.final_name)
|
||||
if self.actives(grabs=False) < 2 and cfg.autodisconnect():
|
||||
# This was the last job, close server connections
|
||||
if sabnzbd.downloader.Downloader.do:
|
||||
sabnzbd.downloader.Downloader.do.disconnect()
|
||||
|
||||
# Notify assembler to call postprocessor
|
||||
if not nzo.deleted:
|
||||
@@ -859,6 +857,7 @@ class NzbQueue(object):
|
||||
for nzo in self.__nzo_list:
|
||||
if not nzo.futuretype and not nzo.files and nzo.status not in (Status.PAUSED, Status.GRABBING):
|
||||
empty.append(nzo)
|
||||
|
||||
for nzo in empty:
|
||||
self.end_job(nzo)
|
||||
|
||||
|
||||
@@ -41,11 +41,11 @@ import sabnzbd
|
||||
from sabnzbd.constants import GIGI, ATTRIB_FILE, JOB_ADMIN, \
|
||||
DEFAULT_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY, \
|
||||
PAUSED_PRIORITY, TOP_PRIORITY, DUP_PRIORITY, REPAIR_PRIORITY, \
|
||||
RENAMES_FILE, Status, PNFO
|
||||
RENAMES_FILE, MAX_BAD_ARTICLES, Status, PNFO
|
||||
from sabnzbd.misc import to_units, cat_to_opts, cat_convert, sanitize_foldername, \
|
||||
get_unique_path, get_admin_path, remove_all, sanitize_filename, globber_full, \
|
||||
int_conv, set_permissions, format_time_string, long_path, trim_win_path, \
|
||||
fix_unix_encoding, calc_age
|
||||
fix_unix_encoding, calc_age, is_obfuscated_filename
|
||||
from sabnzbd.decorators import synchronized
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg as cfg
|
||||
@@ -60,6 +60,8 @@ SUBJECT_FN_MATCHER = re.compile(r'"([^"]*)"')
|
||||
PROBABLY_PAR2_RE = re.compile(r'(.*)\.vol(\d*)[\+\-](\d*)\.par2', re.I)
|
||||
REJECT_PAR2_RE = re.compile(r'\.par2\.\d+', re.I) # Reject duplicate par2 files
|
||||
RE_NORMAL_NAME = re.compile(r'\.\w{2,5}$') # Test reasonably sized extension at the end
|
||||
RE_QUICK_PAR2_CHECK = re.compile(r'\.par2\W*', re.I)
|
||||
RE_RAR = re.compile(r'(\.rar|\.r\d\d|\.s\d\d|\.t\d\d|\.u\d\d|\.v\d\d)$', re.I)
|
||||
|
||||
|
||||
##############################################################################
|
||||
@@ -277,7 +279,7 @@ class NzbFile(TryList):
|
||||
self.decodetable[partnum] = article
|
||||
|
||||
self.import_finished = True
|
||||
else:
|
||||
elif not self.nzo.is_gone():
|
||||
# TEMPORARY ERRORS
|
||||
if not os.path.exists(os.path.join(self.nzf_id, self.nzo.workpath)):
|
||||
logging.warning('Article DB file not found %s', self)
|
||||
@@ -305,13 +307,27 @@ class NzbFile(TryList):
|
||||
self.blocks = int(blocks)
|
||||
|
||||
def get_article(self, server, servers):
|
||||
""" Get next article to be downloaded """
|
||||
""" Get next article to be downloaded from this server
|
||||
Returns None when there are still articles to try
|
||||
Returns False when all articles are tried
|
||||
"""
|
||||
# Make sure all articles have tried this server before
|
||||
# adding to the NZF-TryList, otherwise there will be stalls!
|
||||
tried_all_articles = True
|
||||
for article in self.articles:
|
||||
article = article.get_article(server, servers)
|
||||
if article:
|
||||
return article
|
||||
article_return = article.get_article(server, servers)
|
||||
if article_return:
|
||||
return article_return
|
||||
elif tried_all_articles and not article.server_in_try_list(server):
|
||||
tried_all_articles = False
|
||||
|
||||
self.add_to_try_list(server)
|
||||
# We are sure they are all tried
|
||||
if tried_all_articles:
|
||||
self.add_to_try_list(server)
|
||||
return False
|
||||
|
||||
# Still articles left to try
|
||||
return None
|
||||
|
||||
def reset_all_try_lists(self):
|
||||
""" Clear all lists of visited servers """
|
||||
@@ -457,7 +473,7 @@ class NzbParser(xml.sax.handler.ContentHandler):
|
||||
if segm != self.article_db[partnum][0]:
|
||||
msg = 'Duplicate part %s, but different ID-s (%s // %s)' % (partnum, self.article_db[partnum][0], segm)
|
||||
logging.info(msg)
|
||||
self.nzo.inc_log('dup_art_log', msg)
|
||||
self.nzo.increase_bad_articles_counter('duplicate_articles')
|
||||
else:
|
||||
logging.info("Skipping duplicate article (%s)", segm)
|
||||
else:
|
||||
@@ -490,6 +506,11 @@ class NzbParser(xml.sax.handler.ContentHandler):
|
||||
nzo_matches = filter(lambda x: (x.filename == nzf.filename), self.nzo.files)
|
||||
if nzo_matches:
|
||||
logging.info('File %s occured twice in NZB, discarding smaller file', nzf.filename)
|
||||
# Keep some logging how many were duplicates
|
||||
if 'duplicate_files' not in self.nzo.nzo_info:
|
||||
self.nzo.nzo_info['duplicate_files'] = 0
|
||||
self.nzo.nzo_info['duplicate_files'] += 1
|
||||
|
||||
# Which is smaller? Current or old one
|
||||
if nzo_matches[0].bytes >= nzf.bytes:
|
||||
# Skip this new one
|
||||
@@ -551,9 +572,9 @@ NzbObjectSaver = (
|
||||
'filename', 'work_name', 'final_name', 'created', 'bytes', 'bytes_downloaded', 'bytes_tried',
|
||||
'repair', 'unpack', 'delete', 'script', 'cat', 'url', 'groups', 'avg_date', 'md5of16k',
|
||||
'partable', 'extrapars', 'md5packs', 'files', 'files_table', 'finished_files', 'status',
|
||||
'avg_bps_freq', 'avg_bps_total', 'priority', 'dupe_table', 'saved_articles', 'nzo_id',
|
||||
'avg_bps_freq', 'avg_bps_total', 'priority', 'saved_articles', 'nzo_id',
|
||||
'futuretype', 'deleted', 'parsed', 'action_line', 'unpack_info', 'fail_msg', 'nzo_info',
|
||||
'custom_name', 'password', 'next_save', 'save_timeout', 'encrypted',
|
||||
'custom_name', 'password', 'next_save', 'save_timeout', 'encrypted', 'bad_articles',
|
||||
'duplicate', 'oversized', 'precheck', 'incomplete', 'reuse', 'meta',
|
||||
'md5sum', 'servercount', 'unwanted_ext', 'renames', 'rating_filtered'
|
||||
)
|
||||
@@ -608,6 +629,7 @@ class NzbObject(TryList):
|
||||
self.bytes = 0 # Original bytesize
|
||||
self.bytes_downloaded = 0 # Downloaded byte
|
||||
self.bytes_tried = 0 # Which bytes did we try
|
||||
self.bad_articles = 0 # How many bad (non-recoverable) articles
|
||||
self.repair = r # True if we want to repair this set
|
||||
self.unpack = u # True if we want to unpack this set
|
||||
self.delete = d # True if we want to delete this set
|
||||
@@ -643,8 +665,6 @@ class NzbObject(TryList):
|
||||
priority = DEFAULT_PRIORITY
|
||||
self.priority = priority
|
||||
|
||||
self.dupe_table = {}
|
||||
|
||||
self.saved_articles = []
|
||||
|
||||
self.nzo_id = None
|
||||
@@ -848,17 +868,23 @@ class NzbObject(TryList):
|
||||
if duplicate and ((not series and cfg.no_dupes() == 3) or (series and cfg.no_series_dupes() == 3)):
|
||||
if cfg.warn_dupl_jobs():
|
||||
logging.warning(T('Failing duplicate NZB "%s"'), filename)
|
||||
# Move to history, utlizing the same code as accept&fail from pre-queue script
|
||||
# Move to history, utilizing the same code as accept&fail from pre-queue script
|
||||
self.fail_msg = T('Duplicate NZB')
|
||||
accept = 2
|
||||
duplicate = False
|
||||
|
||||
if duplicate or self.priority == DUP_PRIORITY:
|
||||
if cfg.warn_dupl_jobs():
|
||||
logging.warning(T('Pausing duplicate NZB "%s"'), filename)
|
||||
self.duplicate = True
|
||||
self.pause()
|
||||
self.priority = NORMAL_PRIORITY
|
||||
if cfg.no_dupes() == 4 or cfg.no_series_dupes() == 4:
|
||||
if cfg.warn_dupl_jobs():
|
||||
logging.warning('%s: "%s"', T('Duplicate NZB'), filename)
|
||||
self.duplicate = True
|
||||
self.priority = NORMAL_PRIORITY
|
||||
else:
|
||||
if cfg.warn_dupl_jobs():
|
||||
logging.warning(T('Pausing duplicate NZB "%s"'), filename)
|
||||
self.duplicate = True
|
||||
self.pause()
|
||||
self.priority = NORMAL_PRIORITY
|
||||
|
||||
if self.priority == PAUSED_PRIORITY:
|
||||
self.pause()
|
||||
@@ -872,6 +898,10 @@ class NzbObject(TryList):
|
||||
else:
|
||||
self.files.sort(cmp=nzf_cmp_name)
|
||||
|
||||
# Warn if there were many duplicate files
|
||||
if 'duplicate_files' in self.nzo_info and self.nzo_info['duplicate_files'] >= 10:
|
||||
logging.warning(T('%d files with duplicate filenames were discared for "%s". Enable "allow_duplicate_files" to allow duplicate filenames.'), self.nzo_info['duplicate_files'], self.final_name)
|
||||
|
||||
# In the hunt for Unwanted Extensions:
|
||||
# The file with the unwanted extension often is in the first or the last rar file
|
||||
# So put the last rar immediately after the first rar file so that it gets detected early
|
||||
@@ -908,8 +938,8 @@ class NzbObject(TryList):
|
||||
if not self.password and self.meta.get('password'):
|
||||
self.password = self.meta.get('password', [None])[0]
|
||||
|
||||
# Set nzo save-delay to minimum 30 seconds
|
||||
self.save_timeout = max(30, min(6.0 * float(self.bytes) / GIGI, 300.0))
|
||||
# Set nzo save-delay to minimum 120 seconds
|
||||
self.save_timeout = max(120, min(6.0 * float(self.bytes) / GIGI, 300.0))
|
||||
|
||||
# In case pre-queue script or duplicate check want to move
|
||||
# to history we first need an nzo_id by entering the NzbQueue
|
||||
@@ -921,21 +951,6 @@ class NzbObject(TryList):
|
||||
# Raise error, so it's not added
|
||||
raise TypeError
|
||||
|
||||
def check_for_dupe(self, nzf):
|
||||
filename = nzf.filename
|
||||
|
||||
dupe = False
|
||||
|
||||
if filename in self.dupe_table:
|
||||
old_nzf = self.dupe_table[filename]
|
||||
if nzf.article_count <= old_nzf.article_count:
|
||||
dupe = True
|
||||
|
||||
if not dupe:
|
||||
self.dupe_table[filename] = nzf
|
||||
|
||||
return dupe
|
||||
|
||||
@synchronized(NZO_LOCK)
|
||||
def update_download_stats(self, bps, serverid, bytes):
|
||||
if bps:
|
||||
@@ -976,8 +991,9 @@ class NzbObject(TryList):
|
||||
head, vol, block = analyse_par2(name)
|
||||
if head and matcher(lparset, head.lower()):
|
||||
xnzf.set_par2(parset, vol, block)
|
||||
# Don't postpone if all par2 should be kept
|
||||
if cfg.enable_par_cleanup():
|
||||
# Don't postpone if all par2 are desired and should be kept
|
||||
# Also don't postpone header-only-files, to extract all possible md5of16k
|
||||
if not(cfg.enable_all_par() and not cfg.enable_par_cleanup()) and block:
|
||||
self.extrapars[parset].append(xnzf)
|
||||
self.files.remove(xnzf)
|
||||
|
||||
@@ -1054,9 +1070,12 @@ class NzbObject(TryList):
|
||||
if not found:
|
||||
# Add extra parfiles when there was a damaged article and not pre-checking
|
||||
if self.extrapars and not self.precheck:
|
||||
self.abort_direct_unpacker()
|
||||
self.prospective_add(nzf)
|
||||
|
||||
# Sometimes a few CRC errors are still fine, so we continue
|
||||
if self.bad_articles > MAX_BAD_ARTICLES:
|
||||
self.abort_direct_unpacker()
|
||||
|
||||
post_done = False
|
||||
if not self.files:
|
||||
post_done = True
|
||||
@@ -1085,7 +1104,7 @@ class NzbObject(TryList):
|
||||
if name in files:
|
||||
files.remove(name)
|
||||
files.append(renames[name])
|
||||
self.renames = renames
|
||||
self.renames = renames
|
||||
|
||||
# Looking for the longest name first, minimizes the chance on a mismatch
|
||||
files.sort(lambda x, y: len(y) - len(x))
|
||||
@@ -1230,19 +1249,10 @@ class NzbObject(TryList):
|
||||
if self.partable and _set in self.partable and self.partable[_set] and parfile in self.partable[_set].extrapars:
|
||||
self.partable[_set].extrapars.remove(parfile)
|
||||
|
||||
__re_quick_par2_check = re.compile(r'\.par2\W*', re.I)
|
||||
|
||||
@synchronized(NZO_LOCK)
|
||||
def prospective_add(self, nzf):
|
||||
""" Add par2 files to compensate for missing articles
|
||||
"""
|
||||
# How many do we need?
|
||||
bad = len(self.nzo_info.get('bad_art_log', []))
|
||||
miss = len(self.nzo_info.get('missing_art_log', []))
|
||||
killed = len(self.nzo_info.get('killed_art_log', []))
|
||||
dups = len(self.nzo_info.get('dup_art_log', []))
|
||||
total_need = bad + miss + killed + dups
|
||||
|
||||
# How many do we already have?
|
||||
blocks_already = 0
|
||||
for nzf_check in self.files:
|
||||
@@ -1254,16 +1264,16 @@ class NzbObject(TryList):
|
||||
original_filename = self.renames.get(nzf.filename, '')
|
||||
|
||||
# Need more?
|
||||
if not nzf.is_par2 and blocks_already < total_need:
|
||||
if not nzf.is_par2 and blocks_already < self.bad_articles:
|
||||
# We have to find the right par-set
|
||||
for parset in self.extrapars.keys():
|
||||
if (parset in nzf.filename or parset in original_filename) and self.extrapars[parset]:
|
||||
extrapars_sorted = sorted(self.extrapars[parset], key=lambda x: x.blocks, reverse=True)
|
||||
# Loop until we have enough
|
||||
while blocks_already < total_need and extrapars_sorted:
|
||||
while blocks_already < self.bad_articles and extrapars_sorted:
|
||||
new_nzf = extrapars_sorted.pop()
|
||||
# Reset NZF TryList, in case something was on it before it became extrapar
|
||||
new_nzf.reset_try_list()
|
||||
new_nzf.reset_all_try_lists()
|
||||
self.add_parfile(new_nzf)
|
||||
self.extrapars[parset] = extrapars_sorted
|
||||
blocks_already = blocks_already + int_conv(new_nzf.blocks)
|
||||
@@ -1286,6 +1296,12 @@ class NzbObject(TryList):
|
||||
""" Determine amount of articles present on servers
|
||||
and return (gross available, nett) bytes
|
||||
"""
|
||||
# Few missing articles in RAR-only job might still work
|
||||
if self.bad_articles <= MAX_BAD_ARTICLES:
|
||||
logging.debug('Download Quality: bad-articles=%s', self.bad_articles)
|
||||
return True, 200
|
||||
|
||||
# Do the full check
|
||||
need = 0L
|
||||
pars = 0L
|
||||
short = 0L
|
||||
@@ -1294,7 +1310,7 @@ class NzbObject(TryList):
|
||||
nzf = self.files_table[nzf_id]
|
||||
if nzf.deleted:
|
||||
short += nzf.bytes_left
|
||||
if self.__re_quick_par2_check.search(nzf.subject):
|
||||
if RE_QUICK_PAR2_CHECK.search(nzf.subject):
|
||||
pars += nzf.bytes
|
||||
anypars = True
|
||||
else:
|
||||
@@ -1326,35 +1342,38 @@ class NzbObject(TryList):
|
||||
msg1 = T('Downloaded in %s at an average of %sB/s') % (complete_time, to_units(avg_bps * 1024, dec_limit=1))
|
||||
msg1 += u'<br/>' + T('Age') + ': ' + calc_age(self.avg_date, True)
|
||||
|
||||
bad = self.nzo_info.get('bad_art_log', [])
|
||||
miss = self.nzo_info.get('missing_art_log', [])
|
||||
killed = self.nzo_info.get('killed_art_log', [])
|
||||
dups = self.nzo_info.get('dup_art_log', [])
|
||||
bad = self.nzo_info.get('bad_articles', 0)
|
||||
miss = self.nzo_info.get('missing_articles', 0)
|
||||
killed = self.nzo_info.get('killed_articles', 0)
|
||||
dups = self.nzo_info.get('duplicate_articles', 0)
|
||||
msg2 = msg3 = msg4 = msg5 = ''
|
||||
if bad:
|
||||
msg2 = (u'<br/>' + T('%s articles were malformed')) % len(bad)
|
||||
msg2 = (u'<br/>' + T('%s articles were malformed')) % bad
|
||||
if miss:
|
||||
msg3 = (u'<br/>' + T('%s articles were missing')) % len(miss)
|
||||
msg3 = (u'<br/>' + T('%s articles were missing')) % miss
|
||||
if dups:
|
||||
msg4 = (u'<br/>' + T('%s articles had non-matching duplicates')) % len(dups)
|
||||
msg4 = (u'<br/>' + T('%s articles had non-matching duplicates')) % dups
|
||||
if killed:
|
||||
msg5 = (u'<br/>' + T('%s articles were removed')) % len(killed)
|
||||
msg5 = (u'<br/>' + T('%s articles were removed')) % killed
|
||||
msg = u''.join((msg1, msg2, msg3, msg4, msg5, ))
|
||||
self.set_unpack_info('Download', msg, unique=True)
|
||||
if self.url:
|
||||
self.set_unpack_info('Source', self.url, unique=True)
|
||||
servers = config.get_servers()
|
||||
|
||||
if len(self.servercount) > 0:
|
||||
msgs = ['%s=%sB' % (servers[server].displayname(), to_units(self.servercount[server])) for server in self.servercount if server in servers]
|
||||
# Sort the servers first
|
||||
servers = config.get_servers()
|
||||
server_names = sorted(servers.keys(), key=lambda svr: '%d%02d%s' % (int(not servers[svr].enable()), servers[svr].priority(), servers[svr].displayname().lower()))
|
||||
msgs = ['%s=%sB' % (servers[server_name].displayname(), to_units(self.servercount[server_name])) for server_name in server_names if server_name in self.servercount]
|
||||
self.set_unpack_info('Servers', ', '.join(msgs), unique=True)
|
||||
|
||||
@synchronized(NZO_LOCK)
|
||||
def inc_log(self, log, txt):
|
||||
""" Append string txt to nzo_info element "log" """
|
||||
try:
|
||||
self.nzo_info[log].append(txt)
|
||||
except:
|
||||
self.nzo_info[log] = [txt]
|
||||
def increase_bad_articles_counter(self, type):
|
||||
""" Record information about bad articles """
|
||||
if type not in self.nzo_info:
|
||||
self.nzo_info[type] = 0
|
||||
self.nzo_info[type] += 1
|
||||
self.bad_articles += 1
|
||||
|
||||
def server_allowed(self, server):
|
||||
if not server.categories:
|
||||
@@ -1369,6 +1388,7 @@ class NzbObject(TryList):
|
||||
def get_article(self, server, servers):
|
||||
article = None
|
||||
nzf_remove_list = []
|
||||
tried_all_articles = True
|
||||
|
||||
for nzf in self.files:
|
||||
if nzf.deleted:
|
||||
@@ -1392,16 +1412,21 @@ class NzbObject(TryList):
|
||||
article = nzf.get_article(server, servers)
|
||||
if article:
|
||||
break
|
||||
if article == None:
|
||||
# None is returned by NZF when server is not tried for all articles
|
||||
tried_all_articles = False
|
||||
|
||||
# Remove all files for which admin could not be read
|
||||
for nzf in nzf_remove_list:
|
||||
nzf.deleted = True
|
||||
self.files.remove(nzf)
|
||||
|
||||
# If cleanup emptied the active files list, end this job
|
||||
if nzf_remove_list and not self.files:
|
||||
sabnzbd.NzbQueue.do.end_job(self)
|
||||
|
||||
if not article:
|
||||
# Only add to trylist when server has been tried for all articles of all NZF's
|
||||
if not article and tried_all_articles:
|
||||
# No articles for this server, block for next time
|
||||
self.add_to_try_list(server)
|
||||
return article
|
||||
@@ -1474,6 +1499,33 @@ class NzbObject(TryList):
|
||||
self.files[pos + 1] = nzf
|
||||
self.files[pos] = tmp_nzf
|
||||
|
||||
def verify_nzf_filename(self, nzf, yenc_filename=None):
|
||||
""" Get filename from par2-info or from yenc """
|
||||
# Already done?
|
||||
if nzf.filename_checked:
|
||||
return
|
||||
|
||||
# If we have the md5, use it to rename
|
||||
if nzf.md5of16k and self.md5of16k:
|
||||
# Don't check again, even if no match
|
||||
nzf.filename_checked = True
|
||||
# Find the match and rename
|
||||
if nzf.md5of16k in self.md5of16k:
|
||||
new_filename = platform_encode(self.md5of16k[nzf.md5of16k])
|
||||
# Was it even new?
|
||||
if new_filename != nzf.filename:
|
||||
logging.info('Detected filename based on par2: %s -> %s', nzf.filename, new_filename)
|
||||
self.renamed_file(new_filename, nzf.filename)
|
||||
nzf.filename = new_filename
|
||||
return
|
||||
|
||||
# Fallback to yenc/nzb name (also when there is no partnum=1)
|
||||
# We also keep the NZB name in case it ends with ".par2" (usually correct)
|
||||
if yenc_filename and yenc_filename != nzf.filename and not is_obfuscated_filename(yenc_filename) and not nzf.filename.endswith('.par2'):
|
||||
logging.info('Detected filename from yenc: %s -> %s', nzf.filename, yenc_filename)
|
||||
self.renamed_file(yenc_filename, nzf.filename)
|
||||
nzf.filename = yenc_filename
|
||||
|
||||
@synchronized(NZO_LOCK)
|
||||
def renamed_file(self, name_set, old_name=None):
|
||||
""" Save renames at various stages (Download/PP)
|
||||
@@ -1582,7 +1634,7 @@ class NzbObject(TryList):
|
||||
self.files if full else [],
|
||||
queued_files,
|
||||
self.status, self.priority,
|
||||
len(self.nzo_info.get('missing_art_log', [])),
|
||||
self.nzo_info.get('missing_articles', 0),
|
||||
self.bytes_tried - self.bytes_downloaded,
|
||||
self.direct_unpacker.get_formatted_stats() if self.direct_unpacker else 0)
|
||||
|
||||
@@ -1710,6 +1762,8 @@ class NzbObject(TryList):
|
||||
self.md5of16k = {}
|
||||
if self.renames is None:
|
||||
self.renames = {}
|
||||
if self.bad_articles is None:
|
||||
self.bad_articles = 0
|
||||
if self.bytes_tried is None:
|
||||
# Fill with old info
|
||||
self.bytes_tried = 0
|
||||
@@ -1767,8 +1821,6 @@ def nzf_cmp_name(nzf1, nzf2, name=True):
|
||||
|
||||
if name:
|
||||
# Prioritize .rar files above any other type of file (other than vol-par)
|
||||
# Useful for nzb streaming
|
||||
RE_RAR = re.compile(r'(\.rar|\.r\d\d|\.s\d\d|\.t\d\d|\.u\d\d|\.v\d\d)$', re.I)
|
||||
m1 = RE_RAR.search(name1)
|
||||
m2 = RE_RAR.search(name2)
|
||||
if m1 and not (is_par2 or m2):
|
||||
|
||||
@@ -59,25 +59,18 @@ class PostProcessor(Thread):
|
||||
""" PostProcessor thread, designed as Singleton """
|
||||
do = None # Link to instance of the thread
|
||||
|
||||
def __init__(self, queue=None, history_queue=None):
|
||||
""" Initialize, optionally passing existing queue """
|
||||
def __init__(self):
|
||||
""" Initialize PostProcessor thread """
|
||||
Thread.__init__(self)
|
||||
|
||||
# This history queue is simply used to log what active items to display in the web_ui
|
||||
if history_queue:
|
||||
self.history_queue = history_queue
|
||||
else:
|
||||
self.load()
|
||||
self.load()
|
||||
|
||||
if self.history_queue is None:
|
||||
self.history_queue = []
|
||||
|
||||
if queue:
|
||||
self.queue = queue
|
||||
else:
|
||||
self.queue = Queue.Queue()
|
||||
for nzo in self.history_queue:
|
||||
self.process(nzo)
|
||||
self.queue = Queue.Queue()
|
||||
for nzo in self.history_queue:
|
||||
self.process(nzo)
|
||||
self.__stop = False
|
||||
self.paused = False
|
||||
PostProcessor.do = self
|
||||
@@ -144,8 +137,10 @@ class PostProcessor(Thread):
|
||||
def cancel_pp(self, nzo_id):
|
||||
""" Change the status, so that the PP is canceled """
|
||||
for nzo in self.history_queue:
|
||||
if nzo.nzo_id == nzo_id and nzo.pp_active:
|
||||
nzo.pp_active = False
|
||||
if nzo.nzo_id == nzo_id:
|
||||
nzo.abort_direct_unpacker()
|
||||
if nzo.pp_active:
|
||||
nzo.pp_active = False
|
||||
return True
|
||||
return None
|
||||
|
||||
@@ -313,6 +308,11 @@ def process_job(nzo):
|
||||
# Try to get more par files
|
||||
return False
|
||||
|
||||
# If we don't need extra par2, we can disconnect
|
||||
if sabnzbd.nzbqueue.NzbQueue.do.actives(grabs=False) == 0 and cfg.autodisconnect():
|
||||
# This was the last job, close server connections
|
||||
sabnzbd.downloader.Downloader.do.disconnect()
|
||||
|
||||
# Sanitize the resulting files
|
||||
if sabnzbd.WIN32:
|
||||
sanitize_files_in_folder(workdir)
|
||||
@@ -552,6 +552,8 @@ def process_job(nzo):
|
||||
# Add the nzo to the database. Only the path, script and time taken is passed
|
||||
# Other information is obtained from the nzo
|
||||
history_db.add_history_db(nzo, clip_path(workdir_complete), nzo.downpath, postproc_time, script_log, script_line)
|
||||
# Purge items
|
||||
history_db.auto_history_purge()
|
||||
# The connection is only used once, so close it here
|
||||
history_db.close()
|
||||
sabnzbd.history_updated()
|
||||
@@ -564,6 +566,7 @@ def prepare_extraction_path(nzo):
|
||||
Seperated so it can be called from DirectUnpacker
|
||||
"""
|
||||
one_folder = False
|
||||
marker_file = None
|
||||
# Determine class directory
|
||||
catdir = config.get_categories(nzo.cat).dir()
|
||||
if catdir.endswith('*'):
|
||||
@@ -573,7 +576,10 @@ def prepare_extraction_path(nzo):
|
||||
complete_dir = long_path(complete_dir)
|
||||
|
||||
# TV/Movie/Date Renaming code part 1 - detect and construct paths
|
||||
file_sorter = Sorter(nzo, nzo.cat)
|
||||
if cfg.enable_meta():
|
||||
file_sorter = Sorter(nzo, nzo.cat)
|
||||
else:
|
||||
file_sorter = Sorter(None, nzo.cat)
|
||||
complete_dir = file_sorter.detect(nzo.final_name, complete_dir)
|
||||
if file_sorter.sort_file:
|
||||
one_folder = False
|
||||
@@ -587,7 +593,7 @@ def prepare_extraction_path(nzo):
|
||||
marker_file = set_marker(workdir_complete)
|
||||
|
||||
if not workdir_complete or not os.path.exists(workdir_complete):
|
||||
crash_msg = T('Cannot create final folder %s') % unicoder(os.path.join(complete_dir, nzo.final_name))
|
||||
logging.error(T('Cannot create final folder %s') % unicoder(os.path.join(complete_dir, nzo.final_name)))
|
||||
raise IOError
|
||||
|
||||
if cfg.folder_rename() and not one_folder:
|
||||
|
||||
@@ -28,12 +28,28 @@ import time
|
||||
##############################################################################
|
||||
# Power management for Windows
|
||||
##############################################################################
|
||||
try:
|
||||
import win32security
|
||||
import win32api
|
||||
import ntsecuritycon
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
def win_power_privileges():
|
||||
""" To do any power-options, the process needs higher privileges """
|
||||
flags = ntsecuritycon.TOKEN_ADJUST_PRIVILEGES | ntsecuritycon.TOKEN_QUERY
|
||||
htoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), flags)
|
||||
id_ = win32security.LookupPrivilegeValue(None, ntsecuritycon.SE_SHUTDOWN_NAME)
|
||||
newPrivileges = [(id_, ntsecuritycon.SE_PRIVILEGE_ENABLED)]
|
||||
win32security.AdjustTokenPrivileges(htoken, 0, newPrivileges)
|
||||
|
||||
|
||||
def win_hibernate():
|
||||
""" Hibernate Windows system, returns after wakeup """
|
||||
try:
|
||||
subprocess.Popen("rundll32 powrprof.dll,SetSuspendState Hibernate")
|
||||
time.sleep(10)
|
||||
win_power_privileges()
|
||||
win32api.SetSystemPowerState(False, True)
|
||||
except:
|
||||
logging.error(T('Failed to hibernate system'))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
@@ -42,8 +58,8 @@ def win_hibernate():
|
||||
def win_standby():
|
||||
""" Standby Windows system, returns after wakeup """
|
||||
try:
|
||||
subprocess.Popen("rundll32 powrprof.dll,SetSuspendState Standby")
|
||||
time.sleep(10)
|
||||
win_power_privileges()
|
||||
win32api.SetSystemPowerState(True, True)
|
||||
except:
|
||||
logging.error(T('Failed to standby system'))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
@@ -52,15 +68,7 @@ def win_standby():
|
||||
def win_shutdown():
|
||||
""" Shutdown Windows system, never returns """
|
||||
try:
|
||||
import win32security
|
||||
import win32api
|
||||
import ntsecuritycon
|
||||
|
||||
flags = ntsecuritycon.TOKEN_ADJUST_PRIVILEGES | ntsecuritycon.TOKEN_QUERY
|
||||
htoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), flags)
|
||||
id_ = win32security.LookupPrivilegeValue(None, ntsecuritycon.SE_SHUTDOWN_NAME)
|
||||
newPrivileges = [(id_, ntsecuritycon.SE_PRIVILEGE_ENABLED)]
|
||||
win32security.AdjustTokenPrivileges(htoken, 0, newPrivileges)
|
||||
win_power_privileges()
|
||||
win32api.InitiateSystemShutdown("", "", 30, 1, 0)
|
||||
finally:
|
||||
os._exit(0)
|
||||
|
||||
@@ -271,8 +271,6 @@ class Rating(Thread):
|
||||
api_key = cfg.rating_api_key()
|
||||
rating_host = cfg.rating_host()
|
||||
rating_url = _RATING_URL
|
||||
if not api_key:
|
||||
return True
|
||||
|
||||
requests = []
|
||||
_headers = {'User-agent': 'SABnzbd+/%s' % sabnzbd.version.__version__, 'Content-type': 'application/x-www-form-urlencoded'}
|
||||
@@ -283,8 +281,15 @@ class Rating(Thread):
|
||||
# Is it an URL or just a HOST?
|
||||
if host_parsed.path and host_parsed.path != '/':
|
||||
rating_url = host_parsed.path + '?' + host_parsed.query if host_parsed.query else host_parsed.path
|
||||
|
||||
if not rating_host:
|
||||
_warn('%s: %s' % (T('Cannot send, missing required data'), T('Server address')))
|
||||
return True
|
||||
|
||||
if not api_key:
|
||||
_warn('%s [%s]: %s - %s' % (T('Cannot send, missing required data'), rating_host, T('API Key'), T('This key provides identity to indexer. Check your profile on the indexer\'s website.')))
|
||||
return True
|
||||
|
||||
if rating.changed & Rating.CHANGED_USER_VIDEO:
|
||||
requests.append({'m': 'r', 'r': 'videoQuality', 'rn': rating.user_video})
|
||||
if rating.changed & Rating.CHANGED_USER_AUDIO:
|
||||
|
||||
@@ -193,6 +193,11 @@ def init():
|
||||
__SCHED.add_daytime_task(action, 'quota_reset', range(1, 8), None, (hour, minute),
|
||||
kronos.method.sequential, [], None)
|
||||
|
||||
if sabnzbd.misc.int_conv(cfg.history_retention()) > 0:
|
||||
logging.info('Setting schedule for midnight auto history-purge')
|
||||
__SCHED.add_daytime_task(sabnzbd.database.midnight_history_purge, 'midnight_history_purge', range(1, 8), None, (0, 0),
|
||||
kronos.method.sequential, [], None)
|
||||
|
||||
logging.info('Setting schedule for midnight BPS reset')
|
||||
__SCHED.add_daytime_task(sabnzbd.bpsmeter.midnight_action, 'midnight_bps', range(1, 8), None, (0, 0),
|
||||
kronos.method.sequential, [], None)
|
||||
|
||||
@@ -102,6 +102,18 @@ SKIN_TEXT = {
|
||||
'week' : TT('week'),
|
||||
'month' : TT('Month'),
|
||||
'year' : TT('Year'),
|
||||
'January': TT('January'),
|
||||
'February': TT('February'),
|
||||
'March': TT('March'),
|
||||
'April': TT('April'),
|
||||
'May': TT('May'),
|
||||
'June': TT('June'),
|
||||
'July': TT('July'),
|
||||
'August': TT('August'),
|
||||
'September': TT('September'),
|
||||
'October': TT('October'),
|
||||
'November': TT('November'),
|
||||
'December': TT('December'),
|
||||
'monday' : TT('Monday'),
|
||||
'tuesday' : TT('Tuesday'),
|
||||
'wednesday' : TT('Wednesday'),
|
||||
@@ -175,6 +187,7 @@ SKIN_TEXT = {
|
||||
'ft-newRelease@1' : TT('New release %s available at'), # Used in Footer
|
||||
|
||||
# Main page
|
||||
'useGlitter': TT('Try our new skin Glitter! Fresh new design that is optimized for desktop and mobile devices. Go to Config -> General to change your skin.'),
|
||||
'shutdownOK?' : TT('Are you sure you want to shutdown SABnzbd?'),
|
||||
'link-shutdown' : TT('Shutdown'), #: Shutdown SABnzbd
|
||||
'link-pause' : TT('Pause'), #: Pause downloading
|
||||
@@ -351,6 +364,13 @@ SKIN_TEXT = {
|
||||
'explain-cache_limitstr' : TT('Cache articles in memory to reduce disk access.<br /><i>In bytes, optionally follow with K,M,G. For example: "64M" or "128M"</i>'),
|
||||
'opt-cleanup_list' : TT('Cleanup List'),
|
||||
'explain-cleanup_list' : TT('List of file extensions that should be deleted after download.<br />For example: <b>nfo</b> or <b>nfo, sfv</b>'),
|
||||
'opt-history_retention' : TT('History Retention'),
|
||||
'explain-history_retention' : TT('Automatically delete completed jobs from History. Beware that Duplicate Detection and some external tools rely on History information.'),
|
||||
'history_retention-all' : TT('Keep all jobs'),
|
||||
'history_retention-number' : TT('Keep maximum number of completed jobs'),
|
||||
'history_retention-days' : TT('Keep completed jobs maximum number of days'),
|
||||
'history_retention-none' : TT('Do not keep any completed jobs'),
|
||||
'history_retention-limit': TT('Jobs'),
|
||||
'button-saveChanges' : TT('Save Changes'),
|
||||
'button-restoreDefaults' : TT('Restore Defaults'),
|
||||
'explain-restoreDefaults' : TT('Reset'),
|
||||
@@ -425,9 +445,10 @@ SKIN_TEXT = {
|
||||
'opt-no_series_dupes' : TT('Detect duplicate episodes in series'),
|
||||
'explain-no_series_dupes' : TT('Detect identical episodes in series (based on "name/season/episode" of items in your History)'),
|
||||
'nodupes-off' : TT('Off'), #: Three way switch for duplicates
|
||||
'nodupes-ignore' : TT('Discard'), #: Three way switch for duplicates
|
||||
'nodupes-pause' : TT('Pause'), #: Three way switch for duplicates
|
||||
'nodupes-fail' : TT('Fail job (move to History)'), #: Three way switch for duplicates
|
||||
'nodupes-ignore' : TT('Discard'), #: Four way switch for duplicates
|
||||
'nodupes-pause' : TT('Pause'), #: Four way switch for duplicates
|
||||
'nodupes-fail' : TT('Fail job (move to History)'), #: Four way switch for duplicates
|
||||
'nodupes-tag' : TT('Tag job'), #: Four way switch for duplicates
|
||||
'abort' : TT('Abort'), #: Three way switch for encrypted posts
|
||||
'opt-action_on_unwanted_extensions' : TT('Action when unwanted extension detected'),
|
||||
'explain-action_on_unwanted_extensions' : TT('Action when an unwanted extension is detected in RAR files'),
|
||||
@@ -439,6 +460,8 @@ SKIN_TEXT = {
|
||||
'explain-script_can_fail' : TT('When the user script returns a non-zero exit code, the job will be flagged as failed.'),
|
||||
'opt-new_nzb_on_failure' : TT('On failure, try alternative NZB'),
|
||||
'explain-new_nzb_on_failure' : TT('Some servers provide an alternative NZB when a download fails.'),
|
||||
'opt-enable_meta' : TT('Use tags from indexer'),
|
||||
'explain-enable_meta' : TT('When sorting, use tags from indexer for title, season, episode, etc. Otherwise all naming is derived from the NZB name.'),
|
||||
'opt-folder_rename' : TT('Enable folder rename'),
|
||||
'explain-folder_rename' : TT('Use temporary names during post processing. Disable when your system doesn\'t handle that properly.'),
|
||||
'opt-pre_script' : TT('Pre-queue user script'),
|
||||
@@ -454,7 +477,7 @@ SKIN_TEXT = {
|
||||
'opt-auto_sort' : TT('Sort by Age'),
|
||||
'explain-auto_sort' : TT('Automatically sort items by (average) age.'),
|
||||
'opt-direct_unpack' : TT('Direct Unpack'),
|
||||
'explain-direct_unpack' : TT('Jobs will start unpacking during the download, reduces post-processing time but requires capable hard drive. Only works for jobs that do not need repair.'),
|
||||
'explain-direct_unpack' : TT('Jobs will start unpacking during the downloading to reduce post-processing time. Only works for jobs that do not need repair.'),
|
||||
'opt-propagation_delay' : TT('Propagation delay'),
|
||||
'explain-propagation_delay' : TT('Posts will be paused untill they are at least this age. Setting job priority to Force will skip the delay.'),
|
||||
'opt-check_new_rel' : TT('Check for New Release'),
|
||||
@@ -498,7 +521,7 @@ SKIN_TEXT = {
|
||||
'opt-fail_hopeless_jobs' : TT('Abort jobs that cannot be completed'),
|
||||
'explain-fail_hopeless_jobs' : TT('When during download it becomes clear that too much data is missing, abort the job'),
|
||||
'opt-rating_enable' : TT('Enable Indexer Integration'),
|
||||
'explain-rating_enable' : TT('Indexers can supply rating information when a job is added and SABnzbd can report to the indexer if a job couldn\'t be completed. Depending on your indexer, the API key setting can be left blank.'),
|
||||
'explain-rating_enable' : TT('Indexers can supply rating information when a job is added and SABnzbd can report to the indexer if a job couldn\'t be completed.'),
|
||||
'opt-rating_api_key' : TT('API Key'),
|
||||
'explain-rating_api_key' : TT('This key provides identity to indexer. Check your profile on the indexer\'s website.'),
|
||||
'opt-rating_filter_enable' : TT('Enable Filtering'),
|
||||
@@ -788,6 +811,7 @@ SKIN_TEXT = {
|
||||
'Glitter-page' : TT('page'),
|
||||
'Glitter-loading' : TT('Loading'),
|
||||
'Glitter-articles' : TT('articles'),
|
||||
'Glitter-rename' : TT('Rename'),
|
||||
'Glitter-repairQueue' : TT('Queue repair'),
|
||||
'Glitter-showActiveConnections' : TT('Show active connections'),
|
||||
'Glitter-unblockServer' : TT('Unblock'),
|
||||
@@ -969,5 +993,6 @@ SKIN_TEXT = {
|
||||
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 GNU GENERAL PUBLIC LICENSE Version 2 or (at your option) any later version.
|
||||
''')
|
||||
'''),
|
||||
'wizard-ad': TT('In order to download from Usenet you will require access to a provider. Your ISP may provide you with access, however a premium provider is recommended. Don\'t have a Usenet provider? We recommend trying %s.''')
|
||||
}
|
||||
|
||||
@@ -311,9 +311,6 @@ def _analyse(fn, url):
|
||||
logging.debug('Received nothing from indexer, retry after 60 sec')
|
||||
return None, fn.msg, True, 60, data
|
||||
|
||||
if '.oznzb.com' in url and 'login?' in fn.url:
|
||||
return None, T('Unauthorized access'), False, 0, data
|
||||
|
||||
return fn, fn.msg, False, 0, data
|
||||
|
||||
|
||||
|
||||
@@ -692,7 +692,7 @@ class RarFile(object):
|
||||
return [f.filename for f in self.infolist()]
|
||||
|
||||
def filelist(self):
|
||||
'''Return list of file and foldernames in archive.'''
|
||||
'''Return list of filenames in archive.'''
|
||||
return [f.filename for f in self.infolist() if not f.isdir()]
|
||||
|
||||
def infolist(self):
|
||||
|
||||
@@ -86,17 +86,20 @@ def CreateProcess(executable, args, _p_attr, _t_attr,
|
||||
Python implementation of CreateProcess using CreateProcessW for Win32
|
||||
|
||||
"""
|
||||
|
||||
si = STARTUPINFOW(
|
||||
dwFlags=startup_info.dwFlags,
|
||||
wShowWindow=startup_info.wShowWindow,
|
||||
cb=sizeof(STARTUPINFOW),
|
||||
## XXXvlab: not sure of the casting here to ints.
|
||||
hStdInput=int(startup_info.hStdInput),
|
||||
hStdOutput=int(startup_info.hStdOutput),
|
||||
hStdError=int(startup_info.hStdError),
|
||||
)
|
||||
|
||||
# Only cast to ints when it's given
|
||||
if startup_info.hStdInput:
|
||||
si.hStdInput = int(startup_info.hStdInput)
|
||||
if startup_info.hStdOutput:
|
||||
si.hStdOutput = int(startup_info.hStdOutput)
|
||||
if startup_info.hStdError:
|
||||
si.hStdError = int(startup_info.hStdError)
|
||||
|
||||
wenv = None
|
||||
if env is not None:
|
||||
## LPCWSTR seems to be c_wchar_p, so let's say CWSTR is c_wchar
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
|
||||
# You MUST use double quotes (so " and not ')
|
||||
|
||||
__version__ = "2.2.0-develop"
|
||||
__baseline__ = "unknown"
|
||||
__version__ = "2.2.0"
|
||||
__baseline__ = "b061e582b63491f5a7dca02277b1ccd490bbd388"
|
||||
|
||||
@@ -47,6 +47,11 @@ class Wizard(object):
|
||||
@cherrypy.expose
|
||||
def index(self, **kwargs):
|
||||
""" Show the language selection page """
|
||||
if cfg.configlock() or not sabnzbd.interface.check_access():
|
||||
return sabnzbd.interface.Protected()
|
||||
if not sabnzbd.interface.check_login():
|
||||
raise sabnzbd.interface.NeedLogin()
|
||||
|
||||
info = self.info.copy()
|
||||
lng = None
|
||||
if sabnzbd.WIN32:
|
||||
@@ -72,15 +77,25 @@ class Wizard(object):
|
||||
@cherrypy.expose
|
||||
def exit(self, **kwargs):
|
||||
""" Stop SABnzbd """
|
||||
yield "Initiating shutdown..."
|
||||
if cfg.configlock() or not sabnzbd.interface.check_access():
|
||||
return sabnzbd.interface.Protected()
|
||||
if not sabnzbd.interface.check_login():
|
||||
raise sabnzbd.interface.NeedLogin()
|
||||
|
||||
logging.info('Shutdown requested by wizard')
|
||||
sabnzbd.halt()
|
||||
yield "<br>SABnzbd-%s shutdown finished" % sabnzbd.__version__
|
||||
cherrypy.engine.exit()
|
||||
sabnzbd.SABSTOP = True
|
||||
return T('SABnzbd shutdown finished')
|
||||
|
||||
@cherrypy.expose
|
||||
def one(self, **kwargs):
|
||||
""" Accept language and show server page """
|
||||
if cfg.configlock() or not sabnzbd.interface.check_access():
|
||||
return sabnzbd.interface.Protected()
|
||||
if not sabnzbd.interface.check_login():
|
||||
raise sabnzbd.interface.NeedLogin()
|
||||
|
||||
language = kwargs.get('lang') if kwargs.get('lang') else cfg.language()
|
||||
cfg.language.set(language)
|
||||
set_language(language)
|
||||
@@ -125,6 +140,11 @@ class Wizard(object):
|
||||
@cherrypy.expose
|
||||
def two(self, **kwargs):
|
||||
""" Accept server and show the final page for restart """
|
||||
if cfg.configlock() or not sabnzbd.interface.check_access():
|
||||
return sabnzbd.interface.Protected()
|
||||
if not sabnzbd.interface.check_login():
|
||||
raise sabnzbd.interface.NeedLogin()
|
||||
|
||||
# Save server details
|
||||
if kwargs:
|
||||
kwargs['enable'] = 1
|
||||
|
||||
@@ -95,7 +95,8 @@ def set_bonjour(host=None, port=None):
|
||||
domain=domain,
|
||||
host=zhost,
|
||||
port=int(port),
|
||||
txtRecord=pybonjour.TXTRecord({'path': '/sabnzbd/'}),
|
||||
txtRecord=pybonjour.TXTRecord({'path': '/sabnzbd/',
|
||||
'https': cfg.enable_https()}),
|
||||
callBack=_zeroconf_callback)
|
||||
except sabnzbd.utils.pybonjour.BonjourError:
|
||||
_BONJOUR_OBJECT = None
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
@echo off
|
||||
rem Example of a post processing script for SABnzbd
|
||||
|
||||
echo.
|
||||
echo Running in directory "%~d0%~p0"
|
||||
echo.
|
||||
echo The first parameter (result-dir) = %1
|
||||
echo The second parameter (nzb-name) = %2
|
||||
echo The third parameter (nice name) = %3
|
||||
echo The fourth parameter (newzbin #) = %4
|
||||
echo The fifth parameter (category) = %5
|
||||
echo The sixth parameter (group) = %6
|
||||
echo The seventh parameter (status) = %7
|
||||
echo The eight parameter (failure_url)= %8
|
||||
echo.
|
||||
@echo off
|
||||
rem Example of a post processing script for SABnzbd
|
||||
|
||||
echo.
|
||||
echo Running in directory "%~d0%~p0"
|
||||
echo.
|
||||
echo The first parameter (result-dir) = %1
|
||||
echo The second parameter (nzb-name) = %2
|
||||
echo The third parameter (nice name) = %3
|
||||
echo The fourth parameter (newzbin #) = %4
|
||||
echo The fifth parameter (category) = %5
|
||||
echo The sixth parameter (group) = %6
|
||||
echo The seventh parameter (status) = %7
|
||||
echo The eight parameter (failure_url)= %8
|
||||
echo.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user