Compare commits

...

231 Commits

Author SHA1 Message Date
Safihre
1cc2e25cda Update to 2.2.0 2017-08-17 10:47:04 +02:00
SABnzbd Automation
0dc2c6687d Automatic translation update 2017-08-17 08:43:38 +00:00
Safihre
b061e582b6 Update text files for 2.2.0 2017-08-16 22:56:10 +02:00
Safihre
690731fd79 Update wizard Ad URL 2017-08-16 13:34:01 +02:00
Safihre
068b7ed7f5 Disk-speed test for Direct Unpack would cause restart 2017-08-15 21:53:24 +02:00
Safihre
aae2fdcd32 Update Unrar to 5.5.0 for Windows and macOS
Right on time.
Closes #935
2017-08-14 20:37:11 +02:00
Safihre
d3628a1eb7 CherryPy 8.1.2 - Catch the [Errno 0] Error
Untill a fix is found.
2017-08-13 16:58:20 +02:00
Safihre
9cc8176d87 Server-tests were broken due to deprecation warning
Linked #996
2017-08-12 14:52:34 +02:00
Safihre
27f83f21be Update text files for 2.2.0RC3 2017-08-12 11:39:28 +02:00
Safihre
5e31a31a21 Make Server charts timezone-proof
Closes #997
2017-08-12 21:23:18 +12:00
Safihre
a077012478 Windows fix for subprocess would break when options were not specified 2017-08-12 09:42:47 +02:00
Safihre
fed0e0f765 Use win32api for power-options on Windows 2017-08-12 09:39:25 +02:00
Safihre
fbdbf7ab22 Improve par2 handeling by always parsing md5of16k and checking new sets
- We postpone only par2-files with actual blocks, in case of duplicate named par2 files that are of different sets we want all base-par2 files.
- The md5of16k is now calculated for every par2 file we get so we can rename everything.
- We also check during assembly if maybe a md5of16k is now available, in case the par2 file came in later.
- If a par2 file comes in, we double check if maybe this pack was not known yet. The setname might not be unique. This way we make sure that everything gets verified at the end.

Still need obfuscation improvements, but that's for later.
Linked #998
2017-08-12 00:33:32 +02:00
SABnzbd Automation
f013d38d00 Automatic translation update 2017-08-10 11:45:54 +00:00
Safihre
93b9c8a6da Correctly escape the values in EN.po 2017-08-10 13:33:11 +02:00
SABnzbd Automation
e3a779bbc6 Automatic translation update 2017-08-09 21:44:13 +00:00
Safihre
adfce8c8b6 Update text files for 2.2.0RC2 2017-08-09 23:03:44 +02:00
Safihre
a49d68c0db Double check that we have pynotify version we can work with
Closes #992
2017-08-09 22:56:07 +02:00
Safihre
e4156e76d1 Disable auto-zoom on mobile for adaptive pages 2017-08-09 22:50:53 +02:00
Safihre
35b66eea0e Add more space to Config header just in case 2017-08-09 18:45:01 +03:00
Safihre
4d0cf8d45f Correct naming and small style fix 2017-08-09 18:36:20 +03:00
Safihre
ad9fef5f41 Prevent SQL injection via category-argument with ' in them 2017-08-09 17:43:17 +03:00
Safihre
6235174995 CherryPy 8.1.2 - Correct f6c163b: macOS "Protocol wrong type for socket"
https://github.com/cherrypy/cheroot/pull/31
https://github.com/cherrypy/cheroot/pull/44
2017-08-09 09:55:04 +03:00
Safihre
4b9ca989c4 Correctly log the rar-files used by DirectUnpack
Not just assume we used them all.
2017-08-08 13:39:03 +03:00
Safihre
4d54aecceb Check the workdir after extraction if we got everything
Sometimes there might be a file left that we did not extract. For example there are NZBs that have the main download in abc.part01.rar etc but also a abc.rar file with the NFO or other things. 
SABnzbd would detect this as 1 set and not unpack both.
2017-08-08 13:37:09 +03:00
Safihre
11eeb6f2e9 Glitter filelist would not show 100% for very small files
Plus some cleanup of move-to-top/bottom code
2017-08-08 12:19:07 +03:00
Safihre
00364b1317 Only update RSS URI if it was modified
See #993
2017-08-08 12:04:54 +03:00
shypike
6666663f78 Fix typo in text about "allow duplicate files" 2017-08-08 09:17:25 +02:00
Safihre
3d6dfec47a Disk-space check in Assembler and check if space to write current file 2017-08-06 19:01:59 +03:00
Safihre
0f3d44aa4b safe_fnmatch should only do the matching
Oops, globber and globber_full are not the same!
2017-08-06 12:57:23 +03:00
SABnzbd Automation
d2d2471950 Automatic translation update 2017-08-06 09:42:54 +00:00
Safihre
b71343e8ab Safe fnmatch everywhere, just to be sure
Linked #990
2017-08-06 11:46:00 +03:00
Safihre
489f3f4ba0 Catch special chars like "[]!*" to break fnmatch and thus repair
Closes #990
2017-08-06 11:25:27 +03:00
Safihre
3765e8c350 Add warning when many duplicate files were discarded
Linked #531, Closes #986
2017-08-02 12:50:26 +02:00
Safihre
28d4f527b8 Fix the server-graphs
They did not display anything if it was the first of the month. Plus some style-fixes.
2017-08-01 13:31:18 +02:00
Safihre
1d8af8f97d Correct counts if one_folder is enabled 2017-08-01 11:28:34 +02:00
Safihre
829ef4bee8 Only one_folder is a reason not to delete the folder in DircetUnpack 2017-08-01 11:06:40 +02:00
Safihre
7e40c12e47 Get rarfiles to delete from both RarFile and parsing Unrar output
RarFile will fail to list all volumes when the job is encrypted, it will only list the first volume. But parsing the output of Unrar will fail on special-char filenames (probably limited to Windows). So now only jobs that are encrypted *and* have many special-chars will not have all rars deleted correctly,
2017-07-31 23:45:56 +02:00
Safihre
37d8d659f5 Show deprication warning for Server Categories 2017-07-31 22:26:21 +02:00
Safihre
0a29291be2 Abort all direct unpackers when disk-full 2017-07-31 22:26:04 +02:00
Safihre
7f3a5f309b Don't postpone if all par2 are desired and should be kept
Prevents downloading of all par2 in case people just wanted to keep some par2, but not all. If people really want all and no-cleanup, they should enable 'All par2'
2017-07-31 16:51:48 +02:00
Safihre
60ec5f9191 Less aggresive cache-busting 2017-07-31 10:38:45 +02:00
Safihre
d03e801e74 Only show import warnings when not gone
Can be removed if #952 is resolved
2017-07-30 20:29:28 +02:00
Safihre
56bf484e77 Also show Verifying Repair status for par2cmdline 2017-07-30 16:51:28 +02:00
Safihre
66674469d5 Return of the DIR_LOCK
Yeah, turns out we probably do need that. In case automation adds a new job while the old one is still getting deleted. Hopefully solving #952
2017-07-30 15:57:34 +02:00
Safihre
09a86683e5 Retry icon was too red in Glitter Night 2017-07-30 15:56:49 +02:00
Safihre
fc9a13879e CSS Tweaks to Night theme 2017-07-30 11:32:35 +02:00
Safihre
73f0885566 Schedule to deprecate Categories setting for Servers in next release
This option only gives headaches because users do not use it correctly or edge cases where downloads stall. 
If users report that they really want to keep this option, we can of course consider it.
2017-07-29 13:29:10 +02:00
Safihre
090b22f193 Revert "CherryPy 8.1.2 - Catch error of Python 2 in combination with new OpenSSL"
Not catching the right error because it's of the general Error class, not SSLError.
2017-07-28 18:46:46 +02:00
Safihre
f9c092ae8f Move Notification Script up on the Config page and add Wiki-link
So they can see other services
2017-07-28 09:52:25 +02:00
Safihre
4605c3fd30 Set version to 2.1.0 and make identical to develop 2017-06-09 11:35:46 +02:00
Safihre
ed7dc3f827 Merge branch 'develop' 2017-06-09 11:30:43 +02:00
Safihre
e69eeebdd8 Merge branch 'develop' - Update to 2.0.1 2017-05-24 12:14:56 +02:00
Safihre
5da5f1adc1 Set version to 2.0.0 2017-04-09 12:25:05 +02:00
Safihre
f47e92dec0 Merge branch 'develop' 2017-04-09 11:59:13 +02:00
Safihre
a894ca5171 Set version to 1.2.3 2017-03-18 13:05:04 +01:00
Safihre
5abe1140ae Merge branch '1.2.x' 2017-03-18 13:03:36 +01:00
Safihre
d34e14370c Chain certificates not loaded in all situations of extra servers 2017-03-18 11:43:46 +01:00
Safihre
c4f4a3131c Update 1.2.3 text files for extra bugfix 2017-03-18 11:40:57 +01:00
Safihre
dcbd9b57f3 CherryPy would fallback to (non-existing) pyopenssl for extra servers
Causing failed starts
2017-03-18 11:39:40 +01:00
Safihre
aad3b54a17 Update Text Files for 1.2.3
These patches were already tested within 2.0.0Alpha/Beta, so considerd safe.
2017-03-18 11:04:57 +01:00
Safihre
cde142a371 Windows paths can't end in a dot 2017-03-18 11:02:14 +01:00
Safihre
8bfc98ffc6 Glitter server unblock button wasn't working
Closes #864
2017-03-18 11:01:51 +01:00
Jonathon Saine
e46f21d566 Fix -w option as it no longer needs arguments. 2017-03-18 11:00:46 +01:00
Safihre
0e45fdcdfd Fix BPS manager breaking the downloader due to Quota 2017-03-18 10:28:31 +01:00
Safihre
eec7af16d7 Improve log obfuscation
It needs to match any charachters not just alpha-numeric
2017-03-18 10:28:03 +01:00
Safihre
6532425902 Kill the UnRar after a Windows failure
On Windows Server it seems unrar otherwise won't stop: https://forums.sabnzbd.org/viewtopic.php?f=3&t=22492
2017-03-18 10:27:57 +01:00
Safihre
44b896522c Unzip needs clipped paths
(7zip doesn't)
2017-03-18 10:26:32 +01:00
Safihre
1b16ee44cb Set version to 1.2.2 2017-02-28 11:17:24 +01:00
Safihre
d5f608c28c Merged branch 1.2.x into master 2017-02-28 11:16:59 +01:00
Safihre
555d8418e7 Update text files for 1.2.2 2017-02-25 22:12:34 +01:00
Safihre
8c22e35da4 Script paths were not clipped correctly 2017-02-25 22:07:25 +01:00
Safihre
95a7924b31 Set version to 1.2.1 and fix small discrepancies 2017-02-24 11:22:55 +01:00
Safihre
5830bebd95 Merge branch '1.2.x' 2017-02-24 11:16:18 +01:00
shypike
d32cf57c75 Update translations 2017-02-24 10:03:07 +01:00
Safihre
6d9242ebc5 Update text files for 1.2.1 Final 2017-02-23 11:53:56 +01:00
Safihre
cbc4f6a964 When retry of unpack due to Windows bug, send the actual password
We converted the password to "-p<password>" and when we had to retry it due to a Windows long-path fail, it would become "-p-p<password" and would incorrectly report that the password was wrong.
2017-02-21 20:09:07 +01:00
Safihre
2a3b2b9556 Forced diskspace check seperate from cached one
Closes #826. Otherwise the complete/incomplete get out of sync.
2017-02-20 15:43:55 +01:00
Safihre
53a219f12b Tooltip for Download/Incomplete in Status Windows
Closes #827
2017-02-20 09:03:45 +01:00
Safihre
48519dcfa0 Correct mistake in Diskspace calculation for Unix 2017-02-19 16:12:15 +01:00
Safihre
92542c58fe Diskspace for Complete folder was not calculated 2017-02-19 16:12:07 +01:00
Safihre
7eafe730f9 Modify RarFile to properly handle testrar on Windows
Because unrar doesn't support \\?\ notation for the path to the rarfile we used to clip the path. However, the Python functions that RarFile uses then fail on unicode or jobs with '?' in the filename. Now this is handled correctly, at the very last moment before testing the RAR.
2017-02-19 01:47:29 +01:00
Safihre
494e72a996 Update to 1.2.0 and set version 2017-01-13 17:00:51 +01:00
Safihre
84cc86f1d3 Update to 1.1.1 and set version (#731) 2016-11-11 13:58:07 +01:00
shypike
64479e2e5d Correct the merge of release 1.1.0 to the "master" branch. 2016-09-14 08:26:02 +02:00
shypike
13b523d9bd Merge pull request #681 from Safihre/master
Master to 1.1.0
2016-09-13 16:25:05 +02:00
Safihre
181881a21b Merge branch 'develop' 2016-09-11 22:16:42 +02:00
shypike
86d11095ac Merge pull request #592 from sabnzbd/1.0.x
Update master to 1.0.3
2016-06-10 19:01:03 +02:00
shypike
927ba3cd9d Update text files for 1.0.3 2016-06-04 13:34:11 +02:00
Safihre
6296fc1762 #568 Add code 482 to check for too-many-connections 2016-06-03 23:24:07 +02:00
shypike
60fbe44724 Support X-DNZB-PASSWORD header. 2016-06-03 22:18:56 +02:00
shypike
29e45da431 Fix NZB association for Windows.
Make sure that the second SABnzbd instance sends an UTF-8 encoded URL to the first instance.
Otherwise CherryPy will reject the API call.
2016-06-03 22:07:44 +02:00
shypike
d82e69eef4 Handle checksum error reports from unrar. 2016-06-02 23:19:57 +02:00
shypike
8c7d557252 Prevent job from hanging when adding back par2 files.
Sometimes already completed par2 files are being re-added to the queue as extra par2 files.
Because these files are already complete, there will be no attempt to download them
and as a result they will never leave the queue.
2016-06-02 22:11:59 +02:00
shypike
a56d6e5517 Merge pull request #577 from sabnzbd/1.0.x
1.0.x to master
2016-05-23 18:11:23 +02:00
shypike
7548d9e975 Correct base version number for 1.0.x releases. 2016-05-10 14:43:14 +02:00
shypike
b7e2bd9684 Update text files for 1.0.2 2016-05-03 19:39:45 +02:00
shypike
f0a243e3d3 Fix API status issues.
Remove the "ToPP" status, it serves no purpose.
Only truly deleted jobs should get the "Deleted" status,
not jobs moving from Download to PP queue.
2016-05-01 14:42:07 +02:00
shypike
6e108c9ef2 Prevent Completed and Failed jobs from getting status Deleted. 2016-04-30 11:47:03 +02:00
shypike
89edcc1924 Log the preferred character encoding 2016-04-30 11:18:32 +02:00
shypike
8a6aca47a1 Prevent stalling at 100% when QuickCheck is Off and "Download-all-pars" is On.
The repair function sent all extra par2 files back to the queue
even though they were already downloaded.
2016-04-28 22:42:51 +02:00
shypike
d03e5780b8 Fix API compatibility of queue statuses.
The new statuses TO_PP and DELETED should not be returned by the API.
Tools may not be able to handle them and they are only useful for internal purposes.
2016-04-27 12:03:37 +02:00
shypike
209d8f9b40 NNTP error 502 should not aways be interpreted as bad login.
It can also mean "too many connections".
2016-04-27 11:52:56 +02:00
shypike
c257b1be3d Update text files for 1.0.1 2016-04-26 19:57:22 +02:00
Safihre
2c48c8de2e Force MIME types for CSS and JS files
Caused problems on Windows if external programs overwriten it in registery.
See: http://forums.sabnzbd.org/viewtopic.php?f=2&t=20490
And: https://www.reddit.com/r/usenet/comments/4fkmcx/my_sab_interface_is_text_only/
2016-04-26 19:48:47 +02:00
shypike
a767ef6aed Fix API compatibility of queue.
The new statuses TO_PP and DELETED should not be returned by the API.
Tools may not be able to handle them and they are only useful for internal purposes.
2016-04-26 19:47:38 +02:00
shypike
ad61d1dd03 The pre-queue script can now return an accept value of 2, meaning immediate failure.
Supports front-ends which need the signal that an NZB has been
rejected by the pre-queue script.
2016-04-22 21:54:45 +02:00
shypike
33c3d187a0 Add start script for portable Windows installations 2016-04-22 16:44:37 +02:00
shypike
4eb486d4e2 Update text files for 1.0.0RC1 2016-04-16 15:31:48 +02:00
shypike
bfb6c167a4 Another attempt to set the default cache to 450M. 2016-04-16 15:27:35 +02:00
shypike
44abf3bdf6 Update text files for 1.0.1RC1 2016-04-15 23:12:22 +02:00
shypike
c950572592 Set default cache to 450M 2016-04-15 23:11:53 +02:00
shypike
3999cb13fd Update text files for 1.0.1RC1 2016-04-15 21:06:55 +02:00
shypike
af65075f0c Update text files for 1.0.0RC1 2016-04-15 21:05:53 +02:00
shypike
de2a2b465b Update text files for 1.0.1RC1 2016-04-13 22:41:13 +02:00
shypike
cd7a77f02d Revert "Set default cache size to 750MB on Windows and OSX."
This reverts commit 9b420e91c9.
2016-04-13 22:30:05 +02:00
shypike
f4a5394b63 Prevent creating orphan items in "incomplete" when deleting downloading jobs.
Due to previous issues where articles could be lost,
the nzf.deleted and no.deleted flags were not obeyed.
This could lead to creation of orphans when lost articles would be flushed.

Better solution: drop articles only when job is in a final state.
Also prevent NZO files from being saved when job is in "deleted" state.
2016-04-13 18:32:23 +02:00
jdfalk
3fb6a8dedb Update sabnzbd@.service
1. Added requirement for network to be up before sab starts.
2. Explicitly set service type to simple.
3. Enabled sabnzbd restart on service failure via systemd.
2016-04-13 18:22:11 +02:00
Safihre
50c8f84eba #448-#126 Forced item with missing articles caused overflow in paused queue
Closes #448
Closes #126
2016-04-13 18:21:41 +02:00
Safihre
2c7ecdee92 #464 Grabbing items don't always have status=grabbing
But now they do!
2016-04-07 21:45:28 +02:00
Safihre
72390a793a Add Optional label to Retry password 2016-04-07 21:45:17 +02:00
Safihre
04ad4e5d3e Update cache text to more 2016 values 2016-04-07 21:45:05 +02:00
Safihre
5ef9c6a433 #530 do not ignore files in QuickCheck
Par2 wouldn't ignore them either
2016-04-07 21:44:51 +02:00
shypike
e6baffc839 Prevent API crashes when 'mode' or 'name' have double entries. 2016-04-07 21:35:07 +02:00
shypike
e361eb25a5 Fix potential race condition in BPSmeter. 2016-04-01 21:18:19 +02:00
shypike
9b420e91c9 Set default cache size to 750MB on Windows and OSX.
To make handling of posts with large files more efficient.
2016-04-01 21:09:15 +02:00
Safihre
3a4bf971b2 #529 Fix unicode strip in OptionStr 2016-04-01 20:47:11 +02:00
Safihre
1128691c5d #527 Fix "Download all par2 files" behavior 2016-03-29 21:03:48 +02:00
Safihre
15043aef3f DB Strings should be encapsulated in ' not " 2016-03-29 21:03:30 +02:00
savef
2a3b4afa03 Treat ambiguous numeric values as number of minutes for custom pause time.
Currently if you just type "100" into the custom pause field it'll think you want 143015 minutes, that's useless. A lot of people are probably used to the old Plush behaviour of entering the number of minutes you want to pause for, it's also a much saner default. So in the case that the user just enters some numbers and nothing else, this assumes they want to pause for that many minutes.
2016-03-24 21:01:04 +01:00
shypike
00a98efa81 Fix race-condition when deleting an actively downloading job.
Closes #237
2016-03-24 20:57:27 +01:00
shypike
f013dd7f0d Accept MIME records that have only LF line endings.
Some tool developers just ignore the rule requiring CRLF.
2016-03-23 23:29:12 +01:00
shypike
7b91b1c769 Fix race condition when API and postprocessor both want to delete a history item. 2016-03-23 23:03:28 +01:00
shypike
5583cce322 When urlgrabber receives a 404, stop trying. 2016-03-23 23:00:38 +01:00
shypike
b995c5f992 Fix PushOver support.
Adjust priority levels to the current PushOver API.
Re-enable device field now that the PushOver API supports readable device labels.
2016-03-22 21:25:05 +01:00
shypike
214ac4a53d Prevent incompatibility due to missing 'script_log' field.
Fixes commit c0f2f59fc1
2016-03-20 15:24:07 +01:00
shypike
fc7e87f0df Merge branch '1.0.x' 2016-03-19 11:49:11 +01:00
Safihre
c0f2f59fc1 Fix breaking Glitter bug with large script_log 2016-03-18 14:11:54 +01:00
shypike
b90a847a6f Fix omission in README.mkd 2016-03-15 21:42:16 +01:00
shypike
a58bb385f5 Update text files for 1.0.0 2016-03-15 20:12:50 +01:00
shypike
9754baeb1c Fix handling of changed "ignore_samples" option.
Closes #510
2016-03-15 20:08:35 +01:00
shypike
ffcd154966 Update text files for 1.0.0 Final. 2016-03-14 19:12:59 +01:00
shypike
97cfe9488c Update text files for 1.0.0RC5 2016-03-11 19:24:27 +01:00
shypike
374b6f616a Fix crash in CherryPy when it reports problems with some IPv6 addresses.
A bug in Python's traceback logging causes a crash when an IPv6 address with an embedded % is reported.
2016-03-11 19:22:49 +01:00
Sander Jonkers
e2f51595b6 Because of dual IPv4/IPv6 clients, finding the public ipv4 needs special attention 2016-03-10 22:52:22 +01:00
shypike
04091a16aa Fix display of SABnzbd's icon by OSX Notification Center.
El Capitan doesn't accept the -sender parameter, so just omit it.
2016-03-08 16:40:44 +01:00
shypike
9d9d2fd9a2 Revert "Fix Plush dashboard"
This reverts commit 42f1a4926c.
2016-03-08 16:00:24 +01:00
shypike
5746115331 Suppress errors/warnings about bad "Rating" files when the feature is disabled. 2016-03-08 15:53:52 +01:00
Safihre
42f1a4926c Fix Plush dashboard 2016-03-05 11:23:19 +01:00
Safihre
7d87fd461b Fix Glitter display in <1MB/s range 2016-03-05 11:22:57 +01:00
shypike
1ba9976979 Update text files for 1.0.0RC4 2016-03-05 08:52:09 +01:00
shypike
659c199043 Fix --ipv6_hosting option.
Repairs commit 1cbff28
2016-03-05 08:50:13 +01:00
shypike
81a3f53226 Update text files for 1.0.0RC3 2016-03-04 20:39:01 +01:00
shypike
1cbff28f67 Disable listening on IPv6 addresses by the internal web server.
Setting Config->Special->ipv6_hosting to 1 will enable IPv6 listening.
Command line option --ipv6_hosting allows forcing the choice, should SABnzbd not start.
Closes #492
2016-03-04 19:26:50 +01:00
shypike
8e15acbf30 Update translations 2016-03-04 18:55:20 +01:00
Safihre
e07be60db6 #489 wrongly encoded & in the preload 2016-03-01 22:20:51 +01:00
Safihre
539c9662ff 'Default' not translated in Server-category 2016-03-01 22:20:35 +01:00
shypike
b396014f8d Fix IP test at startup.
Correction of problem introduced by commit afff88b "Use self-test.sabnzbd.org for connection tests".
2016-02-24 22:30:02 +01:00
shypike
1db32415b6 Update translations 2016-02-24 21:37:22 +01:00
shypike
b24629db6b Update text files for 1.0.0RC2 2016-02-24 21:11:43 +01:00
Safihre
9b5cdcf8fb Add trailing "/" to href's 2016-02-24 21:05:12 +01:00
shypike
4831415d14 Use self-test.sabnzbd.org for connection tests 2016-02-24 20:34:04 +01:00
Chris Thorn
a4c51f0b20 Parse bandwidth limit as a float instead of an integer so that non-integer values can be used as bandwidth limit 2016-02-24 20:09:02 +01:00
shypike
ec3ba1fb93 Changing server priorities during a download could lead to unexpected results and lockups.
Target priority of articles must be kept at the TryList level so that they
are reset when the try_list is reset.
Closes #378
2016-02-24 20:08:51 +01:00
Safihre
61966f7036 Plush dashboard local IPv4 wouldn't show if external failed
Typo!
For 1.0.0
2016-02-24 20:08:38 +01:00
Safihre
4f69e81841 Add link to information about SSL/yEnc 2016-02-24 20:07:48 +01:00
Safihre
d0d90581df Tweak first Config page 2016-02-24 20:07:35 +01:00
Safihre
8ea5c27633 Improve display of message on blocked server 2016-02-24 20:07:16 +01:00
shypike
517500fdf3 Add link to issue list on support site. 2016-02-19 22:42:30 +01:00
shypike
c4c1c9b6ab Prevent UI errors due to history_db handle not being available. 2016-02-19 22:22:42 +01:00
Safihre
2388889ede Filegrabber did not sanatize filename 2016-02-19 22:21:28 +01:00
Safihre
55cfe878d7 Catch failing Windows Notification
I assumed Windows notifications could not fail, but clearly they can:
http://forums.sabnzbd.org/viewtopic.php?f=11&t=20211&p=104438
When no tray-icon is available, it will fail and in the case of
completed NZB message it will restart the whole of SABnzbd.
2016-02-17 21:25:42 +01:00
Safihre
a2daaee468 Add Pystone score to Glitter status 2016-02-17 21:06:43 +01:00
Safihre
2c360e395e Limit to max 250 items per page (realistic limit) 2016-02-17 21:05:55 +01:00
Jonathon Saine
399cfee594 Add pyOpenSSL info to startup/utility/config base. Add OpenSSL & yEnc to config base as well. 2016-02-17 21:04:13 +01:00
shypike
be646ae6ab Set default for https verification to off. 2016-02-17 20:50:24 +01:00
shypike
b470253d9f Disable https verification when uploading NZB to running instance of SABnzbd. 2016-02-13 16:12:04 +01:00
shypike
b83c493492 Update translations 2016-02-11 01:06:52 +01:00
Safihre
991277bb01 Glitter broke on empty preload strings
See
http://forums.sabnzbd.org/viewtopic.php?f=11&t=20192&p=104368#p104368
In case of UnicodeError
2016-02-10 22:59:11 +01:00
Safihre
5626013b81 Don't allow name change or filesview on grabbing 2016-02-10 22:58:56 +01:00
Safihre
2810d37758 Make disabled servers look more disabled 2016-02-10 22:58:40 +01:00
Safihre
c2f08f01e0 #408 Show red when Add-NZB left empty 2016-02-10 22:57:30 +01:00
Safihre
17ff087e06 Do not confirm clearing warnings 2016-02-05 23:36:47 +01:00
Safihre
77de565b7c Link in message about Orphans was broken 2016-02-05 23:36:36 +01:00
Safihre
54d238aa4d Message labels were not translated
INFO and WARNING
2016-02-05 23:36:23 +01:00
Safihre
379d09f8cc Improve message about no localStorage
It happens more than I expected, so better make a proper message.
2016-02-05 23:35:23 +01:00
shypike
00de72b127 Update text files for 1.0.xRC1 2016-02-03 21:18:42 +01:00
shypike
f9c84fa7dd Fix trouble with disk speed meter (especially on Windows) Part 2.
Improve the benchmark by reducing Python overhead by writing larger blocks.
2016-02-03 21:08:47 +01:00
shypike
c8e46691bb Solve file name encoding issues for OSX.
- Names returned by unrar-commandline need to be Unicoded.
- For yEnc embedded names, only test for UTF-8 and CP1252, but not the local codepage.
- Suppress some bogus warnings
- Log the output of the unrar tool
2016-02-03 20:59:12 +01:00
shypike
df1bb636e5 Fix links in text files to pooit to 1.0.0 entries in the Wiki. 2016-02-03 20:51:19 +01:00
shypike
ff886fad0d Fix all links in the templates to point to 1.0.0 (or 1-0) entries in the Wiki. 2016-02-03 20:50:13 +01:00
shypike
6dbee7a413 Fix trouble with disk speed meter (especially on Windows) Part 2.
Move fix outside of the measurement loop.
Don't remove the test-file within the loop, but only after it's finished,
otherwise we'll still get a "Permission denied".
2016-01-30 10:52:28 +01:00
shypike
3f8fcd7172 Fix trouble with disk speed meter (especially on Windows).
Better handling when folder is not available or writable.
Windows requires some access outside of the Python code to avoid "permission denied".
2016-01-29 23:54:32 +01:00
shypike
d94f7388e6 Add a link on the main Config page, to the "issues" page on the Wiki 2016-01-29 19:55:04 +01:00
Safihre
ad8b49fea8 #408 Firefox-fix: word-wrap instead of word-break 2016-01-29 19:21:59 +01:00
Safihre
ce00270c12 #447 only show arguments-field for speedlimit 2016-01-29 19:21:41 +01:00
Safihre
8c501f8f58 #447 Servers in scheduler more clear 2016-01-29 19:21:30 +01:00
Safihre
ce313ebc65 #445 Reduce statusinfo timeout on startup 2016-01-29 19:21:18 +01:00
Safihre
887ad881a2 #444 HTTPS instead of HTTP for RSS favicon 2016-01-29 19:21:07 +01:00
Safihre
ce40827552 Fix breaking RSS page
Fixes http://forums.sabnzbd.org/viewtopic.php?f=11&t=20114
2016-01-29 19:20:52 +01:00
shypike
2777d89482 Fix typos that prevented notifications about disk full being sent. 2016-01-28 23:19:36 +01:00
shypike
727b300a0e Update translations 2016-01-24 16:34:40 +01:00
shypike
652b021a8e Update text files for 0.8.0Beta6 2016-01-24 16:26:26 +01:00
shypike
fdf33acfbb Allow "None" as selection for secondary skin. 2016-01-24 16:15:02 +01:00
shypike
b001bc9b6f Prevent multiple resume notifications.
Only report "Resume" when coming from Paused mode.
2016-01-24 15:18:24 +01:00
shypike
8802cb1d8c Notifications template contained two instances of "ncenter_enable", leading to problems.
The result was a list instead of a single value.
2016-01-24 15:18:07 +01:00
shypike
e19a2fbae7 Improve handling of an old queue when upgrading to 0.8.0+
Warn only for a non-empty queue.
For Windows, when using a relative "download_dir" based on the user profile,
prepend the path with "Documents".
No action when the -f parameter was used.
This way it will be easier to restore existing jobs.
2016-01-24 15:17:47 +01:00
Safihre
53e38f98f9 Firefox needs more time to process the Server AJAX 2016-01-24 15:16:52 +01:00
Safihre
e783e227f6 #438 Try to stop Firefox from checking checkboxes 2016-01-24 15:16:39 +01:00
shypike
f3dfbe4181 Fix problem where a stray RAR file would cause a failed unpack run.
When a job of which the RAR files are renamed by par2,
needs repair of one more more files, the original damaged files will stay behind.
This will cause SABnzbd to try a doomed attempt at unpacking.
SABnzbd should keep track of such files and delete them after repair.
2016-01-24 15:15:57 +01:00
shypike
bcd8ca8bc4 Fix potential crash when reverting par2 renames.
Can happen when files have been modified outside of SABnzbd's control.
2016-01-24 15:12:06 +01:00
shypike
816d6a63cd For SSL protocol choice, default to auto-negotiation.
The "V23" method is interpreted by OpenSSL as "negotiate the highest available protocol"
and should therefor be a safe choice (best chance of working and best security).
If a user wants to, it is possible to fix the protocol, to prevent interference in the negotiation.
We cannot just assume that we can use our highest fixed protocol, because some Usenet servers
are being slow with implementing TLS1.2
2016-01-24 15:11:30 +01:00
shypike
88d3f25700 Perform IPv6 test on port 443 instead of 80.
Works better with some proxies.
Closes issue #274
2016-01-19 18:13:42 +01:00
shypike
80f69b11db When trying to connect to another SABnzbd instance over HTTPS, don't verify certificates.
Very few SABnzbd installations will have valid certificates.
2016-01-19 18:03:33 +01:00
Safihre
81a11f20c8 Re-order Switches page 2016-01-19 17:30:01 +01:00
Safihre
9e2a839953 Config fixes 2016-01-19 17:30:01 +01:00
Safihre
3cefcde270 #408 Refresh on Config Special save to update the * 2016-01-19 17:30:01 +01:00
Safihre
87a1eacfe7 #408 Also close history-details on history-row click
Before it would only open
2016-01-19 17:30:01 +01:00
Safihre
7cbc1a8419 #408 Browser navbar to black on mobile 2016-01-19 17:30:01 +01:00
Safihre
7b5570eb0b #408 Extra space next to Folder icon 2016-01-19 17:30:00 +01:00
Safihre
1a43a4dcf0 #432 Change filename to name in Add NZB 2016-01-19 17:30:00 +01:00
Safihre
2c2a6592c7 End of queue script was forgotten in Glitter 2016-01-19 17:30:00 +01:00
shypike
f31de6ee4e The compiled OSX build wasn't restarted with original command line arguments.
Rare use case where the App was originally started with parameters.
Essential for correct preservation of the -f parameter.
2016-01-19 17:29:11 +01:00
shypike
8fcd1f6b6c Merge branch 'develop' into R0.8.0 2016-01-16 12:25:38 +01:00
shypike
d7f3a473d7 Merge branch 'develop' into R0.8.0 2016-01-13 21:51:51 +01:00
shypike
ab2eb0c94e Update text files for 0.8.0Beta5 2016-01-13 20:17:32 +01:00
shypike
e51f4fc45a Merge pull request #181 from discordianfish/add-dockerfile
Add Dockerfile
2014-10-08 21:38:15 +02:00
Johannes 'fish' Ziemke
65278120e2 Add Dockerfile
Usage:

        docker build -t sabnzbd .
        docker run -p 127.0.0.1:8080:8080 sabnzbd
2014-09-24 13:46:43 +02:00
shypike
2eed355e9c Revert "newsunpack.py: also handle output of unrar5 with password protected files"
This reverts commit 12fd63c1cf.
2013-11-11 20:24:11 +01:00
shypike
018955f4d5 Merge pull request #122 from sanderjo/patch-4
newsunpack.py: also handle output of unrar5 with password protected file...
2013-11-11 11:19:20 -08:00
sanderjo
12fd63c1cf newsunpack.py: also handle output of unrar5 with password protected files
as discussed http://forums.sabnzbd.org/viewtopic.php?f=3&t=16166&p=89054#p89054
2013-11-07 17:02:24 +01:00
54 changed files with 9471 additions and 8971 deletions

View File

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

View File

@@ -1,4 +1,4 @@
Release Notes - SABnzbd 2.2.0 Release Candidate 1
Release Notes - SABnzbd 2.2.0
=========================================================
NOTE: Due to changes in this release, the queue will be converted when 2.2.0
@@ -19,25 +19,28 @@ fetching before the upgrade will be lost!
- New option "History Retention" to automatically purge jobs from History
- Jobs outside server retention are processed faster
- Obfuscated filenames are renamed during downloading, if possible
- 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
- Correct value in "Speed" Extra History Column
- 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 enable_par_cleanup is disabled all par2 files be downloaded
- 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 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: Move enable_multipar to Specials
- Windows: MultiPar verification of a job is skipped after blocks are fetched
- 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 "Extra par2 parameters" turn out to be wrong
- RSS URLs with commas in the URL were broken
@@ -49,10 +52,17 @@ 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
@@ -60,7 +70,11 @@ fetching before the upgrade will be lost!
## 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

View File

@@ -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

View File

@@ -85,7 +85,7 @@ class BuiltinSSLAdapter(wsgiserver.SSLAdapter):
# Check if it's one of the known errors
# Errors that are caught by PyOpenSSL, but thrown by built-in ssl
_block_errors = ('unknown protocol', 'unknown ca', 'unknown error', 'errno 0',
_block_errors = ('unknown protocol', 'unknown ca', 'unknown_ca', 'unknown error',
'https proxy request', 'inappropriate fallback', 'wrong version number',
'no shared cipher', 'certificate unknown', 'ccs received early')
for error_text in _block_errors:
@@ -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

View File

@@ -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" />
@@ -33,7 +33,7 @@
<link rel="stylesheet" type="text/css" href="${root}staticcfg/bootstrap/css/bootstrap.min.css?v=$version" />
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/chartist.min.css" />
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/style.css?p=$pid" />
<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" />

View File

@@ -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 -->

View File

@@ -116,7 +116,7 @@
var serverData = {}
var chartOptions = {
fullWidth: true,
showPoint: false,
showArea: true,
axisX: {
labelOffset: {
x: -5
@@ -140,21 +140,24 @@
<!--
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
the number of days passed as an estimate of the months we have.
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]), int(split_date[2])))#-->
<!--#set min_date = min(min_date, datetime.date(int(split_date[0]), int(split_date[1]), 1))#-->
<!--#end for#-->
<!--#set months_recorded = int((datetime.date.today()-min_date).days / (365/12))#-->
<!--#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 $i in range(months_recorded+1)#-->
<!--#set cur_date = (datetime.date.today() - datetime.timedelta($i*365/12))#-->
<!--#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>
@@ -258,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')
@@ -300,7 +303,7 @@
// Server data
serverData[${cur}] = <!--#echo json.dumps($server['amounts'][4])#-->
\$(document).ready(function() {
showChart(${cur})
showChart(${cur}, \$('#chart-selector-${cur}').val())
})
</script>
<!--#end if#-->
@@ -317,13 +320,9 @@
var thisDay = new Date()
// What month are we doing?
if(month) {
var inputDate = new Date(month+'-01')
} else {
var inputDate = new Date()
}
var baseDate = new Date(inputDate.getFullYear(), inputDate.getMonth(), 1)
var maxDaysInMonth = new Date(baseDate.getYear(), baseDate.getMonth()+1, 0).getDate()
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 = {
@@ -378,15 +377,16 @@
// 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,
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
})

View File

@@ -3,7 +3,7 @@
<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" />

View File

@@ -619,7 +619,6 @@ h2.activeRSS {
padding: 0 0 .5em;
}
.feed-row div {
padding-right: 10px;
overflow:hidden;
white-space: nowrap;
text-overflow: ellipsis;
@@ -1010,6 +1009,15 @@ input[type="checkbox"] {
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;
@@ -1159,7 +1167,7 @@ input[type="checkbox"] {
.navbar-nav {
/* For extra wide languages like Polish */
margin-right: -50px;
margin-right: -150px;
}
}

View File

@@ -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 -->

View File

@@ -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)))
}
}

View File

@@ -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;

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +1,2 @@
dojo.hostenv.conditionalLoadModule({"common": ["MochiKit.MochiKit"]});
dojo.hostenv.moduleLoaded("MochiKit.*");
dojo.hostenv.conditionalLoadModule({"common": ["MochiKit.MochiKit"]});
dojo.hostenv.moduleLoaded("MochiKit.*");

View File

@@ -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" />

View File

@@ -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.

View File

@@ -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. ;-)

View File

Binary file not shown.

View File

@@ -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-07-22 17:36+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>\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-07-23 06:02+0000\n"
"X-Generator: Launchpad (build 18419)\n"
"X-Launchpad-Export-Date: 2017-08-02 06:03+0000\n"
"X-Generator: Launchpad (build 18441)\n"
#: email/email.tmpl:1
msgid ""
@@ -72,11 +72,11 @@ msgstr ""
"## !שורות חדשות ורווחים לבנים הם משמעותיים\n"
"##\n"
"## אלו כותרות הדוא\"ל\n"
"To: $to\n"
"From: $from\n"
"Date: $date\n"
"Subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> "
"job $name\n"
"$to :אל\n"
"$from :מאת\n"
"תאריך: $date\n"
"<!--#if $status then \"completed\" else \"failed\" #--> $name יש עבודה אשר "
"SABnzbd-נושא: ל\n"
"## !אחרי זה בא הגוף, השורה הריקה דרושה\n"
"\n"
",היי\n"
@@ -87,7 +87,7 @@ msgstr ""
"SABnzbd נכשל להוריד את \"$name\" <!--#if $msgid==\"\" then \"\" else "
"\"(newzbin #\" + $msgid + \")\"#-->\n"
"<!--#end if#-->\n"
"הסתיים ב $end_time\n"
"הסתיים ב-$end_time\n"
"הורדו $size\n"
"\n"
":תוצאות העבודה\n"
@@ -143,10 +143,10 @@ msgstr ""
"## !שורות חדשות ורווחים לבנים הם משמעותיים\n"
"##\n"
"## אלו כותרות הדוא\"ל\n"
"To: $to\n"
"From: $from\n"
"Date: $date\n"
"הוסיף $amount עבודות לתור Subject: SABnzbd\n"
"$to :אל\n"
"$from :מאת\n"
"תאריך: $date\n"
"הוסיף $amount עבודות לתור SABnzbd :נושא\n"
"## !אחרי זה בא הגוף, השורה הריקה דרושה\n"
"\n"
",היי\n"
@@ -185,18 +185,17 @@ msgid ""
"Bye\n"
msgstr ""
"##\n"
"## Bad URL Fetch Email template for SABnzbd רעה עבור URL תבנית דוא\"ל של "
"משיכת\n"
"## SABnzbd רעה עבור URL תבנית דוא\"ל של משיכת\n"
"## זאת תבנית ברדלס\n"
"## http://sabnzbd.wikidot.com/email-templates :תיעוד\n"
"##\n"
"## !שורות חדשות ורווחים לבנים הם משמעותיים\n"
"##\n"
"## אלו כותרות הדוא\"ל\n"
"To: $to\n"
"From: $from\n"
"Date: $date\n"
"NZB נכשל במשיכת Subject: SABnzbd\n"
"$to :אל\n"
"$from :מאת\n"
"תאריך: $date\n"
"NZB נכשל במשיכת SABnzbd :נושא\n"
"## !אחרי זה בא הגוף, השורה הריקה דרושה\n"
"\n"
",היי\n"

View File

@@ -12,7 +12,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 7bit\n"
"POT-Creation-Date: 2017-07-27 15:58+W. Europe Daylight Time\n"
"POT-Creation-Date: 2017-08-16 13:33+W. Europe Daylight Time\n"
"Generated-By: pygettext.py 1.5\n"
@@ -178,10 +178,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 +225,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 ""
@@ -946,6 +946,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"
@@ -962,10 +967,6 @@ msgstr ""
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 ""
@@ -1123,6 +1124,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 ""
@@ -4568,6 +4573,10 @@ 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. Don't have a Usenet provider? We recommend trying %s."
msgstr ""
#: sabnzbd/tvsort.py [Error message]
msgid "Error getting TV info (%s)"
msgstr ""

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:10+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -656,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."
@@ -1012,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"
@@ -1028,10 +1033,6 @@ msgstr "Bekræfter"
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"
@@ -1091,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"
@@ -1191,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"
@@ -1632,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\""
@@ -2823,9 +2846,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Historie Elementbegrænsning"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2855,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."
@@ -3227,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"
@@ -3455,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"
@@ -3822,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)"
@@ -4349,6 +4362,10 @@ msgstr "Brug globale grænseflade indstillinger"
msgid "Queue item limit"
msgstr "Køen elementbegrænsning"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Historie Elementbegrænsning"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Datoformat"
@@ -4878,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"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+0000\n"
"PO-Revision-Date: 2017-07-27 00:34+0000\n"
"Last-Translator: Tobias Bannert <tobannert@gmail.com>\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-07-27 05:55+0000\n"
"X-Generator: Launchpad (build 18439)\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"
@@ -457,7 +457,7 @@ msgstr "%s wurde auf keinem Server gefunden und daher übersprungen"
#: sabnzbd/directunpacker.py # sabnzbd/directunpacker.py
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py
msgid "Direct Unpack"
msgstr ""
msgstr "Direkt entpacken"
#: sabnzbd/directunpacker.py # sabnzbd/skintext.py [PP status]
#: sabnzbd/skintext.py [History: job status]
@@ -470,13 +470,16 @@ msgstr "%s Datei(en)/Ordner entpackt in %s"
#: sabnzbd/directunpacker.py [Warning message]
msgid "Direct Unpack was automatically enabled."
msgstr ""
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"
@@ -678,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."
@@ -1039,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"
@@ -1055,10 +1063,6 @@ msgstr "Überprüfen"
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)"
@@ -1072,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]"
@@ -1118,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"
@@ -1223,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"
@@ -1512,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"
@@ -1677,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\""
@@ -2647,7 +2680,7 @@ msgstr "7zip aktivieren"
#: sabnzbd/skintext.py
msgid "Multicore Par2"
msgstr ""
msgstr "Multicore Par2"
#: sabnzbd/skintext.py
msgid ""
@@ -2851,17 +2884,19 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "History Retention"
msgstr ""
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 ""
msgstr "Alle Aufträge behalten"
#: sabnzbd/skintext.py
msgid "Keep maximum number of completed jobs"
@@ -2873,11 +2908,11 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "Do not keep any completed jobs"
msgstr ""
msgstr "Fertige Aufträge nicht behalten"
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limit der Objekte im Verlauf"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr "Aufträge"
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2907,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 ""
@@ -3292,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"
@@ -3534,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"
@@ -3680,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"
@@ -3902,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)"
@@ -4426,6 +4454,10 @@ msgstr "die globalen Interface-Einstellungen verwenden"
msgid "Queue item limit"
msgstr "Limit der Objekte in der Warteschlange"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limit der Objekte im Verlauf"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Datumsformat"
@@ -4957,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"

View File

@@ -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."

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -658,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."
@@ -1020,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"
@@ -1036,10 +1041,6 @@ msgstr "Verificando"
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 ""
@@ -1099,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"
@@ -1202,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"
@@ -1651,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\""
@@ -2840,9 +2861,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Límite del historial"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2872,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 ""
@@ -3245,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"
@@ -3480,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
@@ -3846,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)"
@@ -4370,6 +4386,10 @@ msgstr "Usar ajustes de la interfaz global"
msgid "Queue item limit"
msgstr "Límite de elementos encolables"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Límite del historial"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Formato de fecha"
@@ -4900,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"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:10+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -655,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."
@@ -1010,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"
@@ -1026,10 +1031,6 @@ msgstr "Varmennetaan"
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 ""
@@ -1089,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"
@@ -1191,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"
@@ -1636,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\""
@@ -2830,9 +2851,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Historian pituusrajoitus"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2862,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 ""
@@ -3238,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ä"
@@ -3468,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
@@ -3831,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)"
@@ -4361,6 +4377,10 @@ msgstr "Käytä yleisiä käyttöliittymän asetuksia"
msgid "Queue item limit"
msgstr "Jonon pituusrajoitus"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Historian pituusrajoitus"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Päivämäärän muoto"
@@ -4891,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ö"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+0000\n"
"PO-Revision-Date: 2017-07-24 20:58+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-07-25 06:10+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -684,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."
@@ -1048,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"
@@ -1064,10 +1069,6 @@ msgstr "Vérification en cours"
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 ""
@@ -1132,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"
@@ -1234,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é"
@@ -1690,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\""
@@ -2894,9 +2919,9 @@ msgstr "Durée maximale d'historisation des tâches complétées"
msgid "Do not keep any completed jobs"
msgstr "Ne conserver aucune tâche terminée"
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limite des éléments historisés"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr "Tâches"
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2926,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 ""
@@ -3313,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"
@@ -3551,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"
@@ -3927,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)"
@@ -4459,6 +4479,10 @@ msgstr "Utiliser les paramètres globaux de l'interface"
msgid "Queue item limit"
msgstr "Limite des éléments de la file d'attente"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limite des éléments historisés"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Format de la date"
@@ -4992,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é"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+0000\n"
"PO-Revision-Date: 2017-07-18 20: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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -648,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."
@@ -1000,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"
@@ -1016,10 +1021,6 @@ msgstr "מוודא"
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\" לתסריט פייתון"
@@ -1081,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 "לא ניתן לשלוח, נתונים דרושים חסרים"
@@ -1181,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 "בוטל, לא יכול להיות שלם"
@@ -1607,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"
@@ -1625,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 תיאור הזנת"
@@ -1801,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"
@@ -1921,51 +1944,51 @@ msgstr "שנה"
#: sabnzbd/skintext.py
msgid "January"
msgstr ""
msgstr "ינואר"
#: sabnzbd/skintext.py
msgid "February"
msgstr ""
msgstr "פברואר"
#: sabnzbd/skintext.py
msgid "March"
msgstr ""
msgstr "מרץ"
#: sabnzbd/skintext.py
msgid "April"
msgstr ""
msgstr "אפריל"
#: sabnzbd/skintext.py
msgid "May"
msgstr ""
msgstr "מאי"
#: sabnzbd/skintext.py
msgid "June"
msgstr ""
msgstr "יוני"
#: sabnzbd/skintext.py
msgid "July"
msgstr ""
msgstr "יולי"
#: sabnzbd/skintext.py
msgid "August"
msgstr ""
msgstr "אוגוסט"
#: sabnzbd/skintext.py
msgid "September"
msgstr ""
msgstr "ספטמבר"
#: sabnzbd/skintext.py
msgid "October"
msgstr ""
msgstr "אוקטובר"
#: sabnzbd/skintext.py
msgid "November"
msgstr ""
msgstr "נובמבר"
#: sabnzbd/skintext.py
msgid "December"
msgstr ""
msgstr "דצמבר"
#: sabnzbd/skintext.py
msgid "Day of month"
@@ -2306,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"
@@ -2362,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"
@@ -2783,33 +2806,35 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "History Retention"
msgstr ""
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 ""
msgstr "שמור את כל העבודות"
#: sabnzbd/skintext.py
msgid "Keep maximum number of completed jobs"
msgstr ""
msgstr "שמור מספר מרבי של עבודות שלמות"
#: sabnzbd/skintext.py
msgid "Keep completed jobs maximum number of days"
msgstr ""
msgstr "שמור מספר ימים מרבי של עבודות שלמות"
#: sabnzbd/skintext.py
msgid "Do not keep any completed jobs"
msgstr ""
msgstr "אל תשמור עבודות שלמות כלשהן"
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "מגבלת פריטי היסטוריה"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr "עבודות"
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2839,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 מפתח זה יתן לתכניות צד שלישי גישה מלאה אל"
@@ -3147,7 +3168,7 @@ msgstr "הכשל עבודה (העבר להיסטוריה)"
#: sabnzbd/skintext.py [Four way switch for duplicates]
msgid "Tag job"
msgstr ""
msgstr "הצמד תג לעבודה"
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
msgid "Abort"
@@ -3198,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 "אפשר שינוי שם תיקייה"
@@ -3421,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"
@@ -3786,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 השתמש רק עבור שרת"
@@ -4189,7 +4210,7 @@ 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"
@@ -4311,6 +4332,10 @@ msgstr "השתמש בקביעות ממשק עולמיות"
msgid "Queue item limit"
msgstr "מגבלת פריטי תור"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "מגבלת פריטי היסטוריה"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "תסדיר תאריך"
@@ -4337,7 +4362,7 @@ msgstr "מאמרים"
#: sabnzbd/skintext.py
msgid "Rename"
msgstr ""
msgstr "שנה שם"
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "Queue repair"
@@ -4569,7 +4594,7 @@ msgstr "?לטהר את התור"
#: sabnzbd/skintext.py
msgid "Retry all failed jobs in History?"
msgstr "לנסות שוב את כל העבודות שנכשלו בהיסטוריה?"
msgstr "לנסות שוב את כל העבודות הנכשלות בהיסטוריה?"
#: sabnzbd/skintext.py
msgid "Purge"
@@ -4647,7 +4672,7 @@ msgstr "מחק שלמים"
#: sabnzbd/skintext.py
msgid "Delete the all failed items from the history?"
msgstr "למחוק את כל הפריטים שנכשלו מההיסטוריה?"
msgstr "למחוק את כל הפריטים הנכשלים מההיסטוריה?"
#: sabnzbd/skintext.py
msgid "Delete Failed"
@@ -4655,7 +4680,7 @@ msgstr "מחק נכשלים"
#: sabnzbd/skintext.py
msgid "Retry all failed jobs?"
msgstr "לנסות שוב את העבודות שנכשלו?"
msgstr "לנסות שוב את העבודות הנכשלות?"
#: sabnzbd/skintext.py
msgid "Links"
@@ -4836,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 "גישה בלתי מורשת"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -651,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."
@@ -1006,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"
@@ -1022,10 +1027,6 @@ msgstr "Verifiserer"
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 ""
@@ -1085,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"
@@ -1185,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"
@@ -1628,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\""
@@ -2812,9 +2833,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Historikk-grense"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2842,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"
@@ -3207,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"
@@ -3432,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
@@ -3791,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)"
@@ -4316,6 +4332,10 @@ msgstr "Bruk globale grensesnittinnstillinger"
msgid "Queue item limit"
msgstr "Kø-grense"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Historikk-grense"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Datoformat"
@@ -4842,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"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+0000\n"
"PO-Revision-Date: 2017-07-25 11:01+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-26 05:37+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"
@@ -673,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."
@@ -1028,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"
@@ -1044,10 +1049,6 @@ msgstr "Verifiëren"
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)"
@@ -1110,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"
@@ -1210,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"
@@ -1658,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\""
@@ -1838,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"
@@ -2857,9 +2883,9 @@ msgstr "Behoud voltooide downloads maximaal aantal dagen"
msgid "Do not keep any completed jobs"
msgstr "Behoud geen enkele download"
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Items in geschiedenis"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr "Downloads"
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2889,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 ""
@@ -3260,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"
@@ -3493,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"
@@ -3868,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 ""
@@ -4398,6 +4420,10 @@ msgstr "Instellen voor alle sessies"
msgid "Queue item limit"
msgstr "Items in wachtrij"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Items in geschiedenis"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Datumnotatie"
@@ -4926,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"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -653,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."
@@ -1011,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"
@@ -1027,10 +1032,6 @@ msgstr "Weryfikowanie"
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 ""
@@ -1090,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"
@@ -1192,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ć"
@@ -1636,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\""
@@ -2821,9 +2842,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limit wyświetlanych pozycji historii"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2851,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"
@@ -3222,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"
@@ -3450,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
@@ -3809,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)"
@@ -4334,6 +4350,10 @@ msgstr "Użyj globalnych ustawień interfejsu"
msgid "Queue item limit"
msgstr "Limit wyświetlanych pozycji kolejki"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limit wyświetlanych pozycji historii"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Format daty"
@@ -4859,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"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -654,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."
@@ -1008,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"
@@ -1024,10 +1029,6 @@ msgstr "Verificando"
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 ""
@@ -1087,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"
@@ -1189,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"
@@ -1634,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\""
@@ -2820,9 +2841,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limite de itens no histórico"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2850,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."
@@ -3220,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"
@@ -3447,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
@@ -3807,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)"
@@ -4332,6 +4348,10 @@ msgstr "Usar configurações globais de interface"
msgid "Queue item limit"
msgstr "Limite de itens na fila"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limite de itens no histórico"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Formato da data"
@@ -4859,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"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -656,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."
@@ -1012,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"
@@ -1028,10 +1033,6 @@ msgstr "Se verifică"
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 ""
@@ -1091,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ă"
@@ -1194,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"
@@ -1640,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\""
@@ -2825,9 +2846,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limită maximă la Istoric"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2855,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."
@@ -3219,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"
@@ -3449,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
@@ -3812,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)"
@@ -4335,6 +4351,10 @@ msgstr "Folosește setările globale de interfață"
msgid "Queue item limit"
msgstr "Limită maximă la coadă"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limită maximă la Istoric"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Format dată"
@@ -4865,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"

View File

@@ -2,15 +2,15 @@ msgid ""
msgstr ""
"Project-Id-Version: SABnzbd-0.7.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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]
@@ -646,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."
@@ -1000,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"
@@ -1016,10 +1021,6 @@ msgstr "Проверка"
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 ""
@@ -1079,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 ""
@@ -1179,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 ""
@@ -1626,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»"
@@ -2807,8 +2828,8 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
@@ -2837,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 ""
@@ -3198,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 "Переименовывать папки"
@@ -3424,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
@@ -3790,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 (адрес:порт)"
@@ -4313,6 +4329,10 @@ msgstr ""
msgid "Queue item limit"
msgstr ""
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr ""
#: sabnzbd/skintext.py
msgid "Date format"
msgstr ""
@@ -4842,7 +4862,7 @@ msgstr "Не удалось переименовать похожий файл:
msgid "Server name does not resolve"
msgstr ""
#: sabnzbd/urlgrabber.py # sabnzbd/urlgrabber.py
#: sabnzbd/urlgrabber.py
msgid "Unauthorized access"
msgstr ""

View File

@@ -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-07-24 08:21+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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -646,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."
@@ -1001,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"
@@ -1017,10 +1022,6 @@ msgstr "Проверавање"
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 ""
@@ -1080,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"
@@ -1180,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 "Поништено, не може да се заврши"
@@ -1620,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\""
@@ -2799,9 +2820,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limit stavki u istoriji"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2829,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-а другим програмима."
@@ -3194,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 "Упали преименовање фасцикле"
@@ -3418,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
@@ -3776,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“ сервер (хост:порт)"
@@ -4300,6 +4316,10 @@ msgstr "Koristi globalna podešavanja interfejsa"
msgid "Queue item limit"
msgstr "Limit stavku u redu"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Limit stavki u istoriji"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Формат датума"
@@ -4825,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"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -649,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."
@@ -1006,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"
@@ -1022,10 +1027,6 @@ msgstr "Verifierar"
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 ""
@@ -1085,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"
@@ -1185,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"
@@ -1631,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\""
@@ -2813,9 +2834,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "Historik artikelgräns"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2843,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."
@@ -3207,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"
@@ -3432,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
@@ -3791,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)"
@@ -4314,6 +4330,10 @@ msgstr "Använda globala gränsnittsinställningar"
msgid "Queue item limit"
msgstr "Kö artikelgräns"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "Historik artikelgräns"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "Datumformat"
@@ -4843,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"

View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2017-07-24 08:21+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-07-25 06:11+0000\n"
"X-Generator: Launchpad (build 18419)\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"
@@ -636,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."
@@ -986,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"
@@ -1002,10 +1007,6 @@ msgstr "正在验证"
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) 权限"
@@ -1065,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 "无法发送,缺少必要的数据"
@@ -1165,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 "已中止,无法完成"
@@ -1604,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\""
@@ -2775,9 +2796,9 @@ msgstr ""
msgid "Do not keep any completed jobs"
msgstr ""
#: sabnzbd/skintext.py # sabnzbd/skintext.py
msgid "History item limit"
msgstr "历史数目限制"
#: sabnzbd/skintext.py
msgid "Jobs"
msgstr ""
#: sabnzbd/skintext.py
msgid "Save Changes"
@@ -2805,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 的完整权限。"
@@ -3144,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 "启用文件夹重命名"
@@ -3361,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"
@@ -3719,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 服务器时需要 (主机:端口)"
@@ -4241,6 +4256,10 @@ msgstr "使用全局界面设置"
msgid "Queue item limit"
msgstr "队列数目限制"
#: sabnzbd/skintext.py
msgid "History item limit"
msgstr "历史数目限制"
#: sabnzbd/skintext.py
msgid "Date format"
msgstr "日期格式"
@@ -4762,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 "未授权访问"

View File

@@ -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
@@ -843,16 +843,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 #
################################################################################

View File

@@ -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,8 +216,8 @@ 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
if hash16k not in nzf.nzo.md5of16k:
nzf.nzo.md5of16k[hash16k] = name
else:
# Not unique, remove to avoid false-renames
duplicates16k.append(hash16k)
@@ -225,10 +236,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

View File

@@ -982,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:

View File

@@ -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()
@@ -286,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:
@@ -311,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()

View File

@@ -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:
@@ -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):

View File

@@ -29,8 +29,8 @@ 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
@@ -65,7 +65,7 @@ class DirectUnpacker(threading.Thread):
self.total_volumes = {}
self.unpack_time = 0.0
self.success_sets = []
self.success_sets = {}
self.next_sets = []
nzo.direct_unpacker = self
@@ -149,6 +149,7 @@ class DirectUnpacker(threading.Thread):
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
@@ -171,6 +172,11 @@ 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'):
# Stop timer and finish
@@ -178,15 +184,17 @@ class DirectUnpacker(threading.Thread):
ACTIVE_UNPACKERS.remove(self)
# Add to success
self.success_sets.append(self.cur_setname)
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
# 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?
while self.nzo.files and not self.next_sets:
@@ -246,7 +254,9 @@ 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(self.unpack_time))
# 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))
@@ -349,13 +359,13 @@ 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, _, _, one_folder, _ = self.unpack_dir_info
# In case of flat-unpack we need to remove the files manually
if one_folder or cfg.flat_unpack():
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()
@@ -420,4 +430,4 @@ def test_disk_performance():
else:
logging.info('Direct Unpack was not enabled, incomplete folder disk speed below 40MB/s')
cfg.direct_unpack_tested.set(True)
config.save_config()
sabnzbd.config.save_config()

View File

@@ -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

View File

@@ -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:
@@ -1294,8 +1408,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 +1434,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):

View File

@@ -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:
@@ -483,11 +491,10 @@ def rar_unpack(nzo, workdir, workdir_complete, delete, one_folder, rars):
# 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)
@@ -496,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:
@@ -615,8 +622,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,
@@ -631,6 +636,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 = []
@@ -653,6 +659,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))
@@ -777,6 +786,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))
@@ -1217,6 +1229,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)
@@ -1278,6 +1292,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
@@ -1369,9 +1386,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)
@@ -1401,6 +1416,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:
@@ -1979,6 +2008,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 +2060,28 @@ 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
"""
zf = rarfile.RarFile(rarfile_path)
if password:
try:
# setpassword can fail due to bugs in RarFile
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 +2098,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 +2116,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:

View File

@@ -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

View File

@@ -45,7 +45,7 @@ from sabnzbd.constants import GIGI, ATTRIB_FILE, JOB_ADMIN, \
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
@@ -279,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)
@@ -492,6 +492,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
@@ -553,7 +558,7 @@ 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', 'bad_articles',
'duplicate', 'oversized', 'precheck', 'incomplete', 'reuse', 'meta',
@@ -646,8 +651,6 @@ class NzbObject(TryList):
priority = DEFAULT_PRIORITY
self.priority = priority
self.dupe_table = {}
self.saved_articles = []
self.nzo_id = None
@@ -881,6 +884,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
@@ -930,21 +937,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:
@@ -985,8 +977,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)
@@ -1480,6 +1473,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)

View File

@@ -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)

View File

@@ -993,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.''')
}

View File

@@ -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

View File

@@ -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"

View File

@@ -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.

View File

Binary file not shown.

View File

Binary file not shown.