mirror of
https://github.com/sabnzbd/sabnzbd.git
synced 2026-01-05 05:58:35 -05:00
Compare commits
83 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c87fd45c3 | ||
|
|
d0a258ce28 | ||
|
|
1cac5799eb | ||
|
|
a56e4f3650 | ||
|
|
9970d2ee6f | ||
|
|
f2695e9305 | ||
|
|
d333f1b56b | ||
|
|
00f5b29caa | ||
|
|
16aa43c120 | ||
|
|
b2179d5b3e | ||
|
|
8e2e9fd5c9 | ||
|
|
2e3181779a | ||
|
|
8a270e49be | ||
|
|
32e26c804b | ||
|
|
5cf87be51e | ||
|
|
781c45bf3b | ||
|
|
df5a85f851 | ||
|
|
8373994be6 | ||
|
|
437ff427f8 | ||
|
|
ea5e4dfee1 | ||
|
|
2e45f4028c | ||
|
|
d7cdce9278 | ||
|
|
38c329ade2 | ||
|
|
933d0c073c | ||
|
|
1f49bba343 | ||
|
|
0ac712dce1 | ||
|
|
f1ae9060c3 | ||
|
|
263231bb62 | ||
|
|
a7b964c153 | ||
|
|
78035eed12 | ||
|
|
0e7ac8ec5e | ||
|
|
00f262c90e | ||
|
|
68df476603 | ||
|
|
5da03f506d | ||
|
|
0c9540e41e | ||
|
|
c6226c6adb | ||
|
|
b8aab5c0f8 | ||
|
|
e29e7a65b5 | ||
|
|
eb46ed80b6 | ||
|
|
50b2d558eb | ||
|
|
3b4b3dcca2 | ||
|
|
e0f8410918 | ||
|
|
581942ca11 | ||
|
|
005fd399d0 | ||
|
|
6ff00bc992 | ||
|
|
ca66eb04ad | ||
|
|
91a2532c95 | ||
|
|
cb49f7bb53 | ||
|
|
0049f14d7f | ||
|
|
e414874910 | ||
|
|
5931beaa5c | ||
|
|
b3d80b7c65 | ||
|
|
9aa90083b2 | ||
|
|
0b939a9519 | ||
|
|
501867137a | ||
|
|
75d4b5deca | ||
|
|
442591f20c | ||
|
|
74b7f383db | ||
|
|
b966707247 | ||
|
|
eada7286d1 | ||
|
|
b9c312961b | ||
|
|
8389b4fedb | ||
|
|
7720cd60ec | ||
|
|
d1d437074a | ||
|
|
30d3d62e09 | ||
|
|
fd1975617b | ||
|
|
1d037dcb62 | ||
|
|
bd5fb3e88f | ||
|
|
5ca66bfeef | ||
|
|
c9fbadd097 | ||
|
|
f4568ad7dd | ||
|
|
74a395f584 | ||
|
|
dd703ace7f | ||
|
|
ddc8396260 | ||
|
|
e6724e347c | ||
|
|
7fa0508ae8 | ||
|
|
06c6f7d38e | ||
|
|
59ef400fec | ||
|
|
0acdf15755 | ||
|
|
40128f59dd | ||
|
|
286914f253 | ||
|
|
f9bd58bb74 | ||
|
|
30cfb9c6fc |
4
PKG-INFO
4
PKG-INFO
@@ -1,7 +1,7 @@
|
||||
Metadata-Version: 1.0
|
||||
Name: SABnzbd
|
||||
Version: 2.3.1
|
||||
Summary: SABnzbd-2.3.1
|
||||
Version: 2.3.2
|
||||
Summary: SABnzbd-2.3.2
|
||||
Home-page: https://sabnzbd.org
|
||||
Author: The SABnzbd Team
|
||||
Author-email: team@sabnzbd.org
|
||||
|
||||
73
README.mkd
73
README.mkd
@@ -1,48 +1,37 @@
|
||||
Release Notes - SABnzbd 2.3.1
|
||||
Release Notes - SABnzbd 2.3.2
|
||||
=========================================================
|
||||
|
||||
## Changes since 2.3.0
|
||||
- Added post-processing script Deobfuscate.py (in "scripts" folder)
|
||||
which can automatically process "rename.par2" after unpacking
|
||||
or rename the largest file in the folder to the job's name
|
||||
- Maximum Article Cache size increased to 4GB on 64 bit systems
|
||||
- New servers will have timeout of 60 seconds instead of 120
|
||||
- Last output of a running script is shown in history
|
||||
- Paths to par2, unrar, unzip and 7zip are passed to scripts
|
||||
- Path to gzipped NZB file of job is passed to scripts
|
||||
- Windows: Single click on tray icon pauses/unpauses queue
|
||||
## Changes since 2.3.1
|
||||
- SABYenc updated to 3.3.2 to fix rare crash during downloading
|
||||
- Minor updates of SABYenc (such as 3.3.2) are no longer mandatory
|
||||
- Article Cache is automatically set to 25% of system memory, if no
|
||||
custom value was set. Maximum set by auto-detect is 1GB
|
||||
- Simplify Config pages by hiding Advanced Settings
|
||||
- Added option '%dn' to Date Sorting to rename files as job name
|
||||
- Added 'Job Name as Folder Name' as Sorting Preset for de-obfuscation
|
||||
- Server usage graphs are now linked to make comparing servers easier
|
||||
- URLs that fail to fetch due to server errors will only be retried 10x
|
||||
- Delay between URL retries increases when not specified by server
|
||||
- First article of each file is downloaded first to identify filenames
|
||||
- Jobs finished by Direct Unpack will be post-processed first
|
||||
- If available, 7zip will be used instead of unzip
|
||||
- Job password entered by user is always shown in History
|
||||
- Password is also extracted from filename in case of custom job name
|
||||
- Add per-day download-statistics to 'server_stats' API-call
|
||||
- Added Hebrew date-time texts
|
||||
|
||||
## Bugfixes since 2.3.0
|
||||
- Abort Direct Unpack if not progressing 2 minutes after download
|
||||
- Direct Unpacker could crash on some downloads
|
||||
- Added measures to prevent "Failed to import" errors
|
||||
- Downloader could crash during first few seconds after start
|
||||
- Saving errors of renames-file prevented
|
||||
- More verbose logging of creating and deleting files
|
||||
- Remove ".par2" at end of job name, could cause failure of repair
|
||||
- Fix racing-condition for files coming in after a job finishes
|
||||
- When re-adding a job, the time left was not calculated
|
||||
- Priority of category was ignored when adding new job
|
||||
- Server information in Status window was not always updated
|
||||
- Always show Direct Unpack status on smaller screens
|
||||
- Correctly adapt date and time display to local time zone
|
||||
- Category folders cannot be sub-folders of Temporary Download Folder
|
||||
- Email notifications could not be limited to categories
|
||||
- Testing email notifications did not work
|
||||
- Added "with" to list of lowercase words in titles for Sorting
|
||||
- "From SxxEyy" RSS filter did not always work
|
||||
- Show clearly that RSS "From Show SxxEyy" is an "Accept"-type filter
|
||||
- Sorting failed when "Ignore folders inside archives" was enabled
|
||||
- Always send "failure_url" to post-processing scripts
|
||||
- Decoding of articles no longer logged by default to reduce logging
|
||||
- Windows: Remove incompatible "Extra Par2 Parameters" for MultiPar
|
||||
- Windows: Special filenames could cause failures during unpack
|
||||
- Windows: Message box is shown in case of fatal startup error
|
||||
- Windows: Unpacking to network shares could fail
|
||||
- macOS: Added Safari pinned tab icon
|
||||
|
||||
In case of "Article DB missing/empty" errors, enable +Debug logging
|
||||
and report here: https://github.com/sabnzbd/sabnzbd/issues/952
|
||||
## Bugfixes since 2.3.1
|
||||
- Dropped connections could result in stalled downloads
|
||||
- Pre-queue scripts would fail to run
|
||||
- Pre-queue script output was not always parsed correctly
|
||||
- Notifications were always sent for 'Default' category
|
||||
- 'History Retention' also checked on start of program
|
||||
- macOS: Restore full compatibility with macOS 10.11
|
||||
- Windows: Unpacking could fail due to paths not being quoted
|
||||
- Windows: All input parameters to scripts are now quoted
|
||||
- Windows: Complete folder in root of drive could crash post-processing
|
||||
- Windows: Automatically correct 'Extra Par2 Parameters' for MultiPar
|
||||
- Windows: Prevent potential pause/unpause loop after tray icon click
|
||||
|
||||
## Upgrading from 2.2.x and older
|
||||
- Finish queue
|
||||
|
||||
@@ -401,7 +401,7 @@ def print_modules():
|
||||
""" Log all detected optional or external modules """
|
||||
if sabnzbd.decoder.SABYENC_ENABLED:
|
||||
# Yes, we have SABYenc, and it's the correct version, so it's enabled
|
||||
logging.info("SABYenc module (v%s)... found!", sabnzbd.constants.SABYENC_VERSION_REQUIRED)
|
||||
logging.info("SABYenc module (v%s)... found!", sabnzbd.decoder.SABYENC_VERSION)
|
||||
else:
|
||||
# Something wrong with SABYenc, so let's determine and print what:
|
||||
if sabnzbd.decoder.SABYENC_VERSION:
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
<!--#if not $have_unzip #-->
|
||||
<!--#if not $have_unzip and not $have_7zip #-->
|
||||
<tr>
|
||||
<th scope="row">$T('opt-enable_unzip'):</th>
|
||||
<td>
|
||||
|
||||
@@ -3,6 +3,11 @@
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding alt section">
|
||||
<label for="advanced-settings-button" class="form-control advanced-button ">
|
||||
<input type="checkbox" id="advanced-settings-button" name="advanced-settings-button"> $T('button-advanced')
|
||||
</label>
|
||||
</div>
|
||||
<form action="saveDirectories" method="post" name="fullform" class="fullform" autocomplete="off">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<input type="hidden" id="ajax" name="ajax" value="1" />
|
||||
@@ -21,7 +26,7 @@
|
||||
<input type="text" name="download_dir" id="download_dir" value="$download_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-download_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="download_free">$T('opt-download_free')</label>
|
||||
<input type="text" name="download_free" id="download_free" value="$download_free" class="smaller_input" />
|
||||
<span class="desc">$T('explain-download_free')</span>
|
||||
@@ -32,7 +37,7 @@
|
||||
<span class="desc">$T('explain-complete_dir')</span>
|
||||
</div>
|
||||
<!--#if not $nt#-->
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="permissions">$T('opt-permissions')</label>
|
||||
<input type="text" name="permissions" id="permissions" value="$permissions" class="smaller_input" />
|
||||
<span class="desc">$T('explain-permissions')</span>
|
||||
@@ -43,7 +48,7 @@
|
||||
<input type="text" name="dirscan_dir" id="dirscan_dir" value="$dirscan_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-dirscan_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="dirscan_speed">$T('opt-dirscan_speed')</label>
|
||||
<input type="number" name="dirscan_speed" id="dirscan_speed" value="$dirscan_speed" min="0" max="3600" />
|
||||
<span class="desc">$T('explain-dirscan_speed')</span>
|
||||
@@ -53,12 +58,12 @@
|
||||
<input type="text" name="script_dir" id="script_dir" value="$script_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-script_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="email_dir">$T('opt-email_dir')</label>
|
||||
<input type="text" name="email_dir" id="email_dir" value="$email_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-email_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="password_file">$T('opt-password_file')</label>
|
||||
<input type="text" name="password_file" id="password_file" value="$password_file" />
|
||||
<span class="desc">$T('explain-password_file')</span>
|
||||
@@ -72,7 +77,7 @@
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="section advanced-settings">
|
||||
<div class="col2">
|
||||
<h3>$T('systemFolders') <a href="$helpuri$help_uri#toc1" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>$T('explain-folderConfig')</p>
|
||||
|
||||
@@ -3,6 +3,11 @@
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding alt section">
|
||||
<label for="advanced-settings-button" class="form-control advanced-button ">
|
||||
<input type="checkbox" id="advanced-settings-button" name="advanced-settings-button"> $T('button-advanced')
|
||||
</label>
|
||||
</div>
|
||||
<form action="saveGeneral" method="post" name="fullform" class="fullform" autocomplete="off">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<input type="hidden" id="ajax" name="ajax" value=1 />
|
||||
@@ -28,7 +33,7 @@
|
||||
<input type="checkbox" name="enable_https" id="enable_https" value="1" <!--#if int($enable_https) > 0 then 'checked="checked" data-original="1"' else ""#-->/>
|
||||
<span class="desc">$T('explain-enable_https')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="web_dir">$T('opt-web_dir')</label>
|
||||
<select name="web_dir" id="web_dir">
|
||||
<!--#for $webline in $web_list#-->
|
||||
@@ -89,7 +94,6 @@
|
||||
<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 sabnzbd_restart"><span class="glyphicon glyphicon-refresh"></span> $T('button-restart') SABnzbd</button>
|
||||
<button class="btn btn-default advancedButton enable_https_options"><span class="glyphicon glyphicon-cog"></span> $T('button-advanced')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
@@ -173,7 +177,7 @@
|
||||
</select>
|
||||
<span class="desc">$T('explain-check_new_rel')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if int($have_ssl_context) == 0 then "disabled" else ""#-->">
|
||||
<div class="field-pair advanced-settings <!--#if int($have_ssl_context) == 0 then "disabled" else ""#-->">
|
||||
<label class="config" for="enable_https_verification">$T('opt-enable_https_verification')</label>
|
||||
<input type="checkbox" name="enable_https_verification" id="enable_https_verification" value="1" <!--#if int($enable_https_verification) > 0 then 'checked="checked"' else ""#--> <!--#if int($have_ssl_context) == 0 then "disabled=\"disabled\"" else ""#--> />
|
||||
<span class="desc">$T('explain-enable_https_verification')</span>
|
||||
@@ -200,12 +204,12 @@
|
||||
</select>
|
||||
<input type="hidden" name="bandwidth_max" id="bandwidth_max" value="$bandwidth_max" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="bandwidth_perc">$T('opt-bandwidth_perc')</label>
|
||||
<input type="number" name="bandwidth_perc" id="bandwidth_perc" value="$bandwidth_perc" step="10" min="0" max="100"/>
|
||||
<span class="desc">$T('explain-bandwidth_perc')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="cache_limit">$T('opt-cache_limitstr')</label>
|
||||
<input type="text" name="cache_limit" id="cache_limit" value="$cache_limit" class="smaller_input" />
|
||||
<span class="desc">$T('explain-cache_limitstr').replace("64M", "256M").replace("128M", "512M")</span>
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
<input type="text" name="email_pwd" id="email_pwd" value="$email_pwd" />
|
||||
<span class="desc">$T('explain-email_pwd')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<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_email" rel="$T('askTestEmail')"><span class="glyphicon glyphicon-envelope"></span> $T('link-testEmail')</button>
|
||||
</div>
|
||||
@@ -115,7 +115,7 @@
|
||||
<div class="col1" <!--#if int($ncenter_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
$show_notify_checkboxes('ncenter')
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<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_notif"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
@@ -141,7 +141,7 @@
|
||||
<div class="col1" <!--#if int($acenter_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
$show_notify_checkboxes('acenter')
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<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_windows"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
@@ -167,7 +167,7 @@
|
||||
<div class="col1" <!--#if int($ntfosd_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
$show_notify_checkboxes('ntfosd')
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<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_osd"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
@@ -207,7 +207,7 @@
|
||||
<span class="desc">$T('Optional') - $T('explain-nscript_parameters')</span>
|
||||
</div>
|
||||
$show_notify_checkboxes('nscript')
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<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>
|
||||
@@ -241,7 +241,7 @@
|
||||
<span class="desc">$T('explain-growl_password')</span>
|
||||
</div>
|
||||
$show_notify_checkboxes('growl')
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<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_growl"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
@@ -286,7 +286,7 @@
|
||||
</select>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<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_prowl"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
@@ -352,7 +352,7 @@
|
||||
</select>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<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_pushover"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
@@ -389,7 +389,7 @@
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
$show_notify_checkboxes('pushbullet')
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<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_pushbullet"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
</div>
|
||||
@@ -417,6 +417,7 @@
|
||||
\$(this).parents('.col2').find('.col2-cats').hide()
|
||||
}
|
||||
\$('form').submit()
|
||||
addRowColor()
|
||||
})
|
||||
\$('#email_endjob').change(function() {
|
||||
if(\$(this).val() > 0) {
|
||||
|
||||
@@ -2,107 +2,298 @@
|
||||
<!--#set global $help_uri="configuration/2.3/servers"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<!--
|
||||
We need to find how many months we have recorded so far, so we
|
||||
loop over all the dates to find the lowest value and then use
|
||||
this to calculate the date-selector and maximum value per month.
|
||||
-->
|
||||
<!--#import json#-->
|
||||
<!--#import datetime#-->
|
||||
<!--#import sabnzbd.misc#-->
|
||||
|
||||
<!--#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()#-->
|
||||
<!--#set max_data_all = {}#-->
|
||||
|
||||
<!--#for $server in $servers #-->
|
||||
<!--#if 'amounts' in $server#-->
|
||||
<!--#set max_data_server = {}#-->
|
||||
<!--#for date in $server['amounts'][4]#-->
|
||||
<!--#set split_date = $date.split('-')#-->
|
||||
<!--#set min_date = min(min_date, datetime.date(int(split_date[0]), int(split_date[1]), 1))#-->
|
||||
|
||||
<!--#set month_date = $date[:7]#-->
|
||||
<!--#if $month_date not in $max_data_server#-->
|
||||
<!--#set max_data_server[$month_date] = 0#-->
|
||||
<!--#end if#-->
|
||||
<!--#set max_data_server[$month_date] = max(max_data_server[$month_date], $server['amounts'][4][$date])#-->
|
||||
<!--#end for#-->
|
||||
|
||||
<!--#for month_date in max_data_server#-->
|
||||
<!--#if $month_date not in $max_data_all#-->
|
||||
<!--#set max_data_all[$month_date] = 0#-->
|
||||
<!--#end if#-->
|
||||
<!--#set max_data_all[$month_date] = max(max_data_all[$month_date], max_data_server[$month_date])#-->
|
||||
<!--#end for#-->
|
||||
<!--#end if#-->
|
||||
<!--#end for#-->
|
||||
|
||||
<!--#set months_recorded = list(sabnzbd.misc.monthrange(min_date, datetime.date.today()))#-->
|
||||
<!--#$months_recorded.reverse()#-->
|
||||
|
||||
<script type="text/javascript">
|
||||
// Define variable needed for the server-plots
|
||||
var serverData = {}
|
||||
</script>
|
||||
|
||||
<div class="colmask">
|
||||
<form action="addServer" method="post" autocomplete="off" onsubmit="removeObfuscation();">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<div id="addServer">
|
||||
<div class="padding alt">
|
||||
<button type="button" class="btn btn-default" id="addServerButton"><span class="glyphicon glyphicon-plus"></span> $T('button-addServer')</button>
|
||||
<div class="padding alt section">
|
||||
<button type="button" class="btn btn-default" id="addServerButton"><span class="glyphicon glyphicon-plus"></span> $T('button-addServer')</button>
|
||||
<label for="advanced-settings-button" class="form-control advanced-button ">
|
||||
<input type="checkbox" id="advanced-settings-button" name="advanced-settings-button"> $T('button-advanced')
|
||||
</label>
|
||||
|
||||
<!--#if $months_recorded#-->
|
||||
<div class="advanced-buttonSeperator"></div>
|
||||
<div class="chart-selector-container" title="$T('srv-bandwidth')">
|
||||
<span class="glyphicon glyphicon-signal"></span>
|
||||
<select name="chart-selector" id="chart-selector">
|
||||
<!--#for $cur_date in months_recorded#-->
|
||||
<!--#set month_date = '%d-%02d' % ($cur_date.year, $cur_date.month)#-->
|
||||
<!--#if $month_date not in $max_data_all#-->
|
||||
<!--#set max_data_all[$month_date] = 0#-->
|
||||
<!--#end if#-->
|
||||
<option value="$month_date" data-max="$max_data_all[$month_date]">$month_names[$cur_date.month-1] $cur_date.year</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<div class="section" id="addServerContent" style="display: none;">
|
||||
<div class="col2">
|
||||
<h3>$T('addServer') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
</div>
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable">$T('srv-enable')</label>
|
||||
<input type="checkbox" name="enable" id="enable" value="1" checked="checked" />
|
||||
<span class="desc">$T('srv-enable')</span>
|
||||
<form action="addServer" method="post" autocomplete="off" onsubmit="removeObfuscation();">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable">$T('srv-enable')</label>
|
||||
<input type="checkbox" name="enable" id="enable" value="1" checked="checked" />
|
||||
<span class="desc">$T('srv-enable')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="host">$T('srv-host')</label>
|
||||
<input type="text" name="host" id="host" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="port">$T('srv-port')</label>
|
||||
<input type="number" name="port" id="port" size="8" value="119" min="0" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ssl">$T('srv-ssl')</label>
|
||||
<input type="checkbox" name="ssl" id="ssl" value="1" />
|
||||
<span class="desc">$T('explain-ssl')</span>
|
||||
</div>
|
||||
<!-- Tricks to avoid browser auto-fill, fixed on-submit with javascript -->
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_00">$T('srv-username')</label>
|
||||
<input type="text" name="${pid}_00" id="${pid}_00" data-hide="username" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_01">$T('srv-password')</label>
|
||||
<input type="text" name="${pid}_01" id="${pid}_01" data-hide="password" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="connections">$T('srv-connections')</label>
|
||||
<input type="number" name="connections" id="connections" min="1" max="100" value="8" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="priority">$T('srv-priority')</label>
|
||||
<input type="number" name="priority" id="priority" min="0" max="99" /> <i>$T('explain-svrprio')</i>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="retention">$T('srv-retention')</label>
|
||||
<input type="number" name="retention" id="retention" min="0" /> <i>$T('days')</i>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="timeout">$T('srv-timeout')</label>
|
||||
<input type="number" name="timeout" id="timeout" min="20" max="240" /> <i>$T('seconds')</i>
|
||||
</div>
|
||||
<div class="field-pair <!--#if int($have_ssl_context) == 0 then "disabled" else ""#--> advanced-settings">
|
||||
<label class="config" for="ssl_verify">$T('opt-ssl_verify')</label>
|
||||
<select name="ssl_verify" id="ssl_verify" <!--#if int($have_ssl_context) == 0 then "disabled=\"disabled\"" else ""#-->>
|
||||
<option value="2" selected>$T('ssl_verify-strict')</option>
|
||||
<option value="1">$T('ssl_verify-normal')</option>
|
||||
<option value="0">$T('ssl_verify-disabled')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-ssl_verify').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="send_group">$T('srv-send_group')</label>
|
||||
<input type="checkbox" name="send_group" id="send_group" value="1" />
|
||||
<span class="desc">$T('srv-explain-send_group')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="optional">$T('srv-optional')</label>
|
||||
<input type="checkbox" name="optional" id="optional" value="1" />
|
||||
<span class="desc">$T('explain-optional')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="displayname">$T('srv-displayname')</label>
|
||||
<input type="text" name="displayname" id="displayname" />
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="notes">$T('srv-notes')</label>
|
||||
<textarea name="notes" id="notes" rows="3" cols="50"></textarea>
|
||||
</div>
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<button class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> $T('button-addServer')</button>
|
||||
<button class="btn btn-default testServer" type="button"><span class="glyphicon glyphicon-sort"></span> $T('button-testServer')</button>
|
||||
</div>
|
||||
<div class="field-pair result-box">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--#set $prio_colors = ["#59cc33", "#3366cc","#7f33cc", "#cc33a6", "#cc3333"] #-->
|
||||
<!--#set $cur_prio_color = -1 #-->
|
||||
<!--#set $last_prio = -1 #-->
|
||||
<!--#for $cur, $server in enumerate($servers) #-->
|
||||
<form action="saveServer" method="post" class="fullform" autocomplete="off">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="server" value="$server['name']" />
|
||||
|
||||
<div class="section <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
<div class="col2 <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
<h3>$server['displayname'] <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<!--#if int($server['enable']) != 0 #-->
|
||||
<!--#if $last_prio != $server['priority'] and $cur_prio_color+1 < len($prio_colors) #-->
|
||||
<!--#set $cur_prio_color = $cur_prio_color+1 #-->
|
||||
<!--#set $last_prio = $server['priority'] #-->
|
||||
<!--#end if#-->
|
||||
<span class="label label-primary" style="background-color: $prio_colors[$cur_prio_color]">$server['priority']</span>
|
||||
<span class="label label-primary" style="background-color: $prio_colors[$cur_prio_color]">$T('srv-priority'):</span>
|
||||
<!--#end if#-->
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" class="toggleServerCheckbox" id="enable_$cur" name="$server['name']" value="1" <!--#if int($server['enable']) != 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="enable_$cur">$T('enabled')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<button type="button" class="btn btn-default showserver"><span class="glyphicon glyphicon-pencil"></span> $T('showDetails')</button>
|
||||
<button type="button" class="btn btn-default clrServer"><span class="glyphicon glyphicon-remove"></span> $T('button-clrServer')</button>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="host">$T('srv-host')</label>
|
||||
<input type="text" name="host" id="host" required />
|
||||
<div class="col1" style="display:none;">
|
||||
<input type="hidden" name="enable" id="enable$cur" value="$int($server['enable'])" />
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="host$cur">$T('srv-host')</label>
|
||||
<input type="text" name="host" id="host$cur" value="$server['host']" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="port$cur">$T('srv-port')</label>
|
||||
<input type="number" name="port" id="port$cur" value="$server['port']" size="8" min="0" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ssl$cur">$T('srv-ssl')</label>
|
||||
<input type="checkbox" name="ssl" id="ssl$cur" value="1" <!--#if int($server['ssl']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-ssl')</span>
|
||||
</div>
|
||||
<!-- Tricks to avoid browser auto-fill, fixed on-submit with javascript -->
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_${cur}0">$T('srv-username')</label>
|
||||
<input type="text" name="${pid}_${cur}0" id="${pid}_${cur}0" value="$server['username']" data-hide="username" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_${cur}1">$T('srv-password')</label>
|
||||
<input type="text" name="${pid}_${cur}1" id="${pid}_${cur}1" value="$server['password']" data-hide="password" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="connections$cur">$T('srv-connections')</label>
|
||||
<input type="number" name="connections" id="connections$cur" value="$server['connections']" min="1" max="100" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="priority$cur">$T('srv-priority')</label>
|
||||
<input type="number" name="priority" id="priority$cur" value="$server['priority']" min="0" max="99" required /> <i>$T('explain-svrprio')</i>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="retention$cur">$T('srv-retention')</label>
|
||||
<input type="number" name="retention" id="retention$cur" value="$server['retention']" min="0" required /> <i>$T('days')</i>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="timeout$cur">$T('srv-timeout')</label>
|
||||
<input type="number" name="timeout" id="timeout$cur" value="$server['timeout']" min="20" max="240" required /> <i>$T('seconds')</i>
|
||||
</div>
|
||||
|
||||
<div class="field-pair <!--#if int($have_ssl_context) == 0 then "disabled" else ""#--> advanced-settings">
|
||||
<label class="config" for="ssl_verify$cur">$T('opt-ssl_verify')</label>
|
||||
<select name="ssl_verify" id="ssl_verify$cur" <!--#if int($have_ssl_context) == 0 then "disabled=\"disabled\"" else ""#-->>
|
||||
<option value="2" <!--#if $server['ssl_verify'] == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
|
||||
<option value="1" <!--#if $server['ssl_verify'] == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-normal')</option>
|
||||
<option value="0" <!--#if $server['ssl_verify'] == 0 then 'selected="selected"' else ""#--> >$T('ssl_verify-disabled')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-ssl_verify').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="optional$cur">$T('srv-optional')</label>
|
||||
<input type="checkbox" name="optional" id="optional$cur" value="1" <!--#if int($server['optional']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-optional')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="send_group$cur">$T('srv-send_group')</label>
|
||||
<input type="checkbox" name="send_group" id="send_group$cur" value="1" <!--#if int($server['send_group']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('srv-explain-send_group')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="displayname$cur">$T('srv-displayname')</label>
|
||||
<input type="text" name="displayname" id="displayname$cur" value="$server['displayname']" />
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="notes$cur">$T('srv-notes')</label>
|
||||
<textarea name="notes" id="notes$cur" rows="3" cols="50">$server['notes']</textarea>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default testServer" type="button"><span class="glyphicon glyphicon-sort"></span> $T('button-testServer')</button>
|
||||
<button class="btn btn-default delServer"><span class="glyphicon glyphicon-trash"></span> $T('button-delServer')</button>
|
||||
</div>
|
||||
<div class="field-pair result-box">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="port">$T('srv-port')</label>
|
||||
<input type="number" name="port" id="port" size="8" value="119" min="0" />
|
||||
<div class="col1" style="display:block;">
|
||||
<!--#if 'amounts' in $server#-->
|
||||
<div class="server-amounts-text">
|
||||
<b>$T('srv-bandwidth'):</b><br/>
|
||||
$T('total'): $(server['amounts'][0])B<br/>
|
||||
$T('today'): $(server['amounts'][3])B<br/>
|
||||
$T('thisWeek'): $(server['amounts'][2])B<br/>
|
||||
$T('thisMonth'): $(server['amounts'][1])B<br/>
|
||||
<span id="server-data-label-${cur}"></span>: <span id="server-data-value-${cur}"></span>
|
||||
</div>
|
||||
<div class="server-chart" data-serverid="${cur}"s>
|
||||
<div id="server-chart-${cur}" class="ct-chart"></div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
// Server data
|
||||
serverData[${cur}] = <!--#echo json.dumps($server['amounts'][4])#-->
|
||||
</script>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ssl">$T('srv-ssl')</label>
|
||||
<input type="checkbox" name="ssl" id="ssl" value="1" />
|
||||
<span class="desc">$T('explain-ssl')</span>
|
||||
</div>
|
||||
<!-- Tricks to avoid browser auto-fill, fixed on-submit with javascript -->
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_00">$T('srv-username')</label>
|
||||
<input type="text" name="${pid}_00" id="${pid}_00" data-hide="username" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_01">$T('srv-password')</label>
|
||||
<input type="text" name="${pid}_01" id="${pid}_01" data-hide="password" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="connections">$T('srv-connections')</label>
|
||||
<input type="number" name="connections" id="connections" min="1" max="100" value="8" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="priority">$T('srv-priority')</label>
|
||||
<input type="number" name="priority" id="priority" min="0" max="99" /> <i>$T('explain-svrprio')</i>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="retention">$T('srv-retention')</label>
|
||||
<input type="number" name="retention" id="retention" min="0" /> <i>$T('days')</i>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="timeout">$T('srv-timeout')</label>
|
||||
<input type="number" name="timeout" id="timeout" min="20" max="240" /> <i>$T('seconds')</i>
|
||||
</div>
|
||||
<div class="field-pair <!--#if int($have_ssl_context) == 0 then "disabled" else ""#--> advanced-settings">
|
||||
<label class="config" for="ssl_verify">$T('opt-ssl_verify')</label>
|
||||
<select name="ssl_verify" id="ssl_verify" <!--#if int($have_ssl_context) == 0 then "disabled=\"disabled\"" else ""#-->>
|
||||
<option value="2" selected>$T('ssl_verify-strict')</option>
|
||||
<option value="1">$T('ssl_verify-normal')</option>
|
||||
<option value="0">$T('ssl_verify-disabled')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-ssl_verify').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="send_group">$T('srv-send_group')</label>
|
||||
<input type="checkbox" name="send_group" id="send_group" value="1" />
|
||||
<span class="desc">$T('srv-explain-send_group')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="optional">$T('srv-optional')</label>
|
||||
<input type="checkbox" name="optional" id="optional" value="1" />
|
||||
<span class="desc">$T('explain-optional')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="displayname">$T('srv-displayname')</label>
|
||||
<input type="text" name="displayname" id="displayname" />
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="notes">$T('srv-notes')</label>
|
||||
<textarea name="notes" id="notes" rows="3" cols="50"></textarea>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> $T('button-addServer')</button>
|
||||
<button class="btn btn-default advancedButton"><span class="glyphicon glyphicon-cog"></span> $T('button-advanced')</button>
|
||||
<button class="btn btn-default testServer" type="button"><span class="glyphicon glyphicon-sort"></span> $T('button-testServer')</button>
|
||||
</div>
|
||||
<div class="field-pair result-box">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
</form>
|
||||
</div>
|
||||
</form>
|
||||
<!--#end for#-->
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="${root}staticcfg/js/chartist.min.js"></script>
|
||||
<script type="text/javascript" src="${root}staticcfg/js/filesize.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
// Define variables needed for the server-plots
|
||||
var serverData = {}
|
||||
// Standardize chart options
|
||||
var chartOptions = {
|
||||
fullWidth: true,
|
||||
showArea: true,
|
||||
@@ -125,246 +316,76 @@
|
||||
right: 20
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<!--
|
||||
We need to find how many months we have recorded so far, so we
|
||||
loop over all the dates to find the lowest value and then use
|
||||
this to calculate the date-selector
|
||||
-->
|
||||
|
||||
<!--#import json#-->
|
||||
<!--#import datetime#-->
|
||||
<!--#import sabnzbd.misc#-->
|
||||
|
||||
<!--#def show_date_selector($server, $id)#-->
|
||||
<!--#set month_names = [$T('January'), $T('February'), $T('March'), $T('April'), $T('May'), $T('June'), $T('July'), $T('August'), $T('September'), $T('October'), $T('November'), $T('December')] #-->
|
||||
<!--#set min_date = datetime.date.today()#-->
|
||||
<!--#for date in $server['amounts'][4]#-->
|
||||
<!--#set split_date = $date.split('-')#-->
|
||||
<!--#set min_date = min(min_date, datetime.date(int(split_date[0]), int(split_date[1]), 1))#-->
|
||||
<!--#end for#-->
|
||||
<!--#set months_recorded = list(sabnzbd.misc.monthrange(min_date, datetime.date.today()))#-->
|
||||
<!--#$months_recorded.reverse()#-->
|
||||
<select class="chart-selector" name="chart-selector-${id}" id="chart-selector-${id}" data-id="${id}">
|
||||
<!--#for $cur_date in months_recorded#-->
|
||||
<option value="<!--#echo '%d-%02d' % ($cur_date.year, $cur_date.month)#-->">$month_names[$cur_date.month-1] $cur_date.year</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<!--#end def#-->
|
||||
|
||||
<!--#set $prio_colors = ["#59cc33", "#3366cc","#7f33cc", "#cc33a6", "#cc3333"] #-->
|
||||
<!--#set $cur_prio_color = -1 #-->
|
||||
<!--#set $last_prio = -1 #-->
|
||||
<!--#for $cur, $server in enumerate($servers) #-->
|
||||
<form action="saveServer" method="post" class="fullform" autocomplete="off">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="server" value="$server['name']" />
|
||||
|
||||
<div class="section <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
<div class="col2 <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
<h3>$server['displayname'] <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
|
||||
<!--#if int($server['enable']) != 0 #-->
|
||||
<!--#if $last_prio != $server['priority'] and $cur_prio_color+1 < len($prio_colors) #-->
|
||||
<!--#set $cur_prio_color = $cur_prio_color+1 #-->
|
||||
<!--#set $last_prio = $server['priority'] #-->
|
||||
<!--#end if#-->
|
||||
<span class="label label-primary" style="background-color: $prio_colors[$cur_prio_color]">$server['priority']</span>
|
||||
<span class="label label-primary" style="background-color: $prio_colors[$cur_prio_color]">$T('srv-priority'):</span>
|
||||
<!--#end if#-->
|
||||
<table><tr>
|
||||
<td><input type="checkbox" class="toggleServerCheckbox" id="enable_$cur" name="$server['name']" value="1" <!--#if int($server['enable']) != 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="enable_$cur">$T('enabled')</label></td>
|
||||
</tr></table>
|
||||
|
||||
<button type="button" class="btn btn-default showserver"><span class="glyphicon glyphicon-pencil"></span> $T('showDetails')</button>
|
||||
<button type="button" class="btn btn-default clrServer"><span class="glyphicon glyphicon-remove"></span> $T('button-clrServer')</button>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1" style="display:none;">
|
||||
<input type="hidden" name="enable" id="enable$cur" value="$int($server['enable'])" />
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="host$cur">$T('srv-host')</label>
|
||||
<input type="text" name="host" id="host$cur" value="$server['host']" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="port$cur">$T('srv-port')</label>
|
||||
<input type="number" name="port" id="port$cur" value="$server['port']" size="8" min="0" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ssl$cur">$T('srv-ssl')</label>
|
||||
<input type="checkbox" name="ssl" id="ssl$cur" value="1" <!--#if int($server['ssl']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-ssl')</span>
|
||||
</div>
|
||||
<!-- Tricks to avoid browser auto-fill, fixed on-submit with javascript -->
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_${cur}0">$T('srv-username')</label>
|
||||
<input type="text" name="${pid}_${cur}0" id="${pid}_${cur}0" value="$server['username']" data-hide="username" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="${pid}_${cur}1">$T('srv-password')</label>
|
||||
<input type="text" name="${pid}_${cur}1" id="${pid}_${cur}1" value="$server['password']" data-hide="password" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="connections$cur">$T('srv-connections')</label>
|
||||
<input type="number" name="connections" id="connections$cur" value="$server['connections']" min="1" max="100" required />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="priority$cur">$T('srv-priority')</label>
|
||||
<input type="number" name="priority" id="priority$cur" value="$server['priority']" min="0" max="99" required /> <i>$T('explain-svrprio')</i>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="retention$cur">$T('srv-retention')</label>
|
||||
<input type="number" name="retention" id="retention$cur" value="$server['retention']" min="0" required /> <i>$T('days')</i>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="timeout$cur">$T('srv-timeout')</label>
|
||||
<input type="number" name="timeout" id="timeout$cur" value="$server['timeout']" min="20" max="240" required /> <i>$T('seconds')</i>
|
||||
</div>
|
||||
|
||||
<div class="field-pair <!--#if int($have_ssl_context) == 0 then "disabled" else ""#--> advanced-settings">
|
||||
<label class="config" for="ssl_verify$cur">$T('opt-ssl_verify')</label>
|
||||
<select name="ssl_verify" id="ssl_verify$cur" <!--#if int($have_ssl_context) == 0 then "disabled=\"disabled\"" else ""#-->>
|
||||
<option value="2" <!--#if $server['ssl_verify'] == 2 then 'selected="selected"' else ""#--> >$T('ssl_verify-strict')</option>
|
||||
<option value="1" <!--#if $server['ssl_verify'] == 1 then 'selected="selected"' else ""#--> >$T('ssl_verify-normal')</option>
|
||||
<option value="0" <!--#if $server['ssl_verify'] == 0 then 'selected="selected"' else ""#--> >$T('ssl_verify-disabled')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-ssl_verify').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="optional$cur">$T('srv-optional')</label>
|
||||
<input type="checkbox" name="optional" id="optional$cur" value="1" <!--#if int($server['optional']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-optional')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="send_group$cur">$T('srv-send_group')</label>
|
||||
<input type="checkbox" name="send_group" id="send_group$cur" value="1" <!--#if int($server['send_group']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('srv-explain-send_group')</span>
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="displayname$cur">$T('srv-displayname')</label>
|
||||
<input type="text" name="displayname" id="displayname$cur" value="$server['displayname']" />
|
||||
</div>
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="notes$cur">$T('srv-notes')</label>
|
||||
<textarea name="notes" id="notes$cur" rows="3" cols="50">$server['notes']</textarea>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default advancedButton"><span class="glyphicon glyphicon-cog"></span> $T('button-advanced')</button>
|
||||
<button class="btn btn-default testServer" type="button"><span class="glyphicon glyphicon-sort"></span> $T('button-testServer')</button>
|
||||
<button class="btn btn-default delServer"><span class="glyphicon glyphicon-trash"></span> $T('button-delServer')</button>
|
||||
</div>
|
||||
<div class="field-pair result-box">
|
||||
<div class="alert"></div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="col1" style="display:block;">
|
||||
<!--#if 'amounts' in $server#-->
|
||||
<div class="server-amounts-text">
|
||||
<b>$T('srv-bandwidth'):</b><br/>
|
||||
$T('total'): $(server['amounts'][0])B<br/>
|
||||
$T('today'): $(server['amounts'][3])B<br/>
|
||||
$T('thisWeek'): $(server['amounts'][2])B<br/>
|
||||
$T('thisMonth'): $(server['amounts'][1])B
|
||||
</div>
|
||||
<div class="server-chart">
|
||||
$show_date_selector($server, $cur)
|
||||
<div id="server-chart-${cur}" class="ct-chart"></div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
// Server data
|
||||
serverData[${cur}] = <!--#echo json.dumps($server['amounts'][4])#-->
|
||||
\$(document).ready(function() {
|
||||
showChart(${cur}, \$('#chart-selector-${cur}').val())
|
||||
})
|
||||
</script>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!--#end for#-->
|
||||
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script type="text/javascript">
|
||||
function showChart(server_id, month) {
|
||||
function showCharts() {
|
||||
// This month
|
||||
var theMonth = \$('#chart-selector').val()
|
||||
var thisDay = new Date()
|
||||
|
||||
// What month are we doing?
|
||||
var inputDate = new Date(month+'-01')
|
||||
var inputDate = new Date(theMonth+'-01')
|
||||
var baseDate = new Date(inputDate.getUTCFullYear(), inputDate.getUTCMonth(), 1)
|
||||
var maxDaysInMonth = new Date(baseDate.getFullYear(), baseDate.getMonth()+1, 0).getDate()
|
||||
|
||||
// Fill the data array
|
||||
var data = {
|
||||
labels: [],
|
||||
series: [[]]
|
||||
};
|
||||
var largestVal = 0
|
||||
for(var i = 1; i < maxDaysInMonth+1; i++) {
|
||||
// Add X-label
|
||||
if(i % 3 == 1) {
|
||||
data['labels'].push(i)
|
||||
} else {
|
||||
data['labels'].push(NaN)
|
||||
// Set the new maximum
|
||||
chartOptions.axisY.high = \$('#chart-selector :selected').data('max');
|
||||
chartOptions.axisY.low = 0
|
||||
|
||||
// For each chart
|
||||
\$('.server-chart').each(function(i, elemn) {
|
||||
var server_id = \$(elemn).data('serverid')
|
||||
|
||||
// Fill the data array
|
||||
var data = {
|
||||
labels: [],
|
||||
series: [[]]
|
||||
};
|
||||
var totalThisMonth = 0
|
||||
for(var i = 1; i < maxDaysInMonth+1; i++) {
|
||||
// Add X-label
|
||||
if(i % 3 == 1) {
|
||||
data['labels'].push(i)
|
||||
} else {
|
||||
data['labels'].push(NaN)
|
||||
}
|
||||
|
||||
// Get formatted date
|
||||
baseDate.setDate(i)
|
||||
var dateCheck = toFormattedDate(baseDate)
|
||||
|
||||
// Add data if we have it
|
||||
if(dateCheck in serverData[server_id]) {
|
||||
data['series'][0].push(serverData[server_id][dateCheck])
|
||||
totalThisMonth += serverData[server_id][dateCheck]
|
||||
} else if(thisDay.getYear() == baseDate.getYear() && thisDay.getMonth() == baseDate.getMonth() && thisDay.getDate() < i) {
|
||||
data['series'][0].push(NaN)
|
||||
} else {
|
||||
data['series'][0].push(0)
|
||||
}
|
||||
}
|
||||
|
||||
// Get formatted date
|
||||
baseDate.setDate(i)
|
||||
var dateCheck = toFormattedDate(baseDate)
|
||||
// Update the text value
|
||||
\$('#server-data-label-' + server_id).text(\$('#chart-selector :selected').text())
|
||||
\$('#server-data-value-' + server_id).text(filesize(totalThisMonth, {round: 1}))
|
||||
|
||||
// Add data if we have it
|
||||
if(dateCheck in serverData[server_id]) {
|
||||
data['series'][0].push(serverData[server_id][dateCheck])
|
||||
largestVal = Math.max(largestVal, serverData[server_id][dateCheck])
|
||||
} else if(thisDay.getYear() == baseDate.getYear() && thisDay.getMonth() == baseDate.getMonth() && thisDay.getDate() < i) {
|
||||
data['series'][0].push(NaN)
|
||||
} else {
|
||||
data['series'][0].push(0)
|
||||
}
|
||||
}
|
||||
|
||||
// Check if we should shrink the Y-axis values
|
||||
var devideBy = 1024
|
||||
var axisLabel = 'KB'
|
||||
if(largestVal > 1024*1024) {
|
||||
devideBy = 1024*1024
|
||||
axisLabel = 'MB'
|
||||
}
|
||||
if(largestVal > 1024*1024*1024) {
|
||||
devideBy = 1024*1024*1024
|
||||
axisLabel = 'GB'
|
||||
}
|
||||
if(largestVal > 1024*1024*1024*1024) {
|
||||
devideBy = 1024*1024*1024*1024
|
||||
axisLabel = 'TB'
|
||||
}
|
||||
|
||||
// Shrink the value
|
||||
data['series'][0] = data['series'][0].map(function(num) {
|
||||
return num / devideBy;
|
||||
// Show the chart
|
||||
chart = new Chartist.Line('#server-chart-'+server_id, data, chartOptions);
|
||||
chart.on('created', function(context) {
|
||||
// Make sure to add this as the first child so it's at the bottom
|
||||
context.svg.elem('rect', {
|
||||
x: context.chartRect.x1,
|
||||
y: context.chartRect.y2-1,
|
||||
width: context.chartRect.width(),
|
||||
height: context.chartRect.height()+2,
|
||||
fill: 'none',
|
||||
stroke: '#B9B9B9',
|
||||
'stroke-width': '1px'
|
||||
}, '', context.svg, true)
|
||||
\$('#server-chart-'+server_id+' .ct-label.ct-vertical').each(function(index, elmn) {
|
||||
elmn.innerHTML = filesize(elmn.innerHTML, {round: 1}).replace(' ','')
|
||||
})
|
||||
});
|
||||
})
|
||||
|
||||
// Show the chart
|
||||
chart = new Chartist.Line('#server-chart-'+server_id, data, chartOptions);
|
||||
chart.on('created', function(context) {
|
||||
// Make sure to add this as the first child so it's at the bottom
|
||||
context.svg.elem('rect', {
|
||||
x: context.chartRect.x1,
|
||||
y: context.chartRect.y2-1,
|
||||
width: context.chartRect.width(),
|
||||
height: context.chartRect.height()+2,
|
||||
fill: 'none',
|
||||
stroke: '#B9B9B9',
|
||||
'stroke-width': '1px'
|
||||
}, '', context.svg, true)
|
||||
\$('#server-chart-'+server_id+' .ct-label.ct-vertical').each(function(index, elmn) {
|
||||
elmn.innerHTML += axisLabel
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// Need to mitigate timezone effects!
|
||||
@@ -389,14 +410,17 @@
|
||||
/**
|
||||
Update charts when changed
|
||||
**/
|
||||
\$('.chart-selector').on('change', function(elemn) {
|
||||
showChart(\$(elemn.target).data('id'), \$(elemn.target).val())
|
||||
\$('#chart-selector').on('change', function(elemn) {
|
||||
showCharts()
|
||||
|
||||
// Lets us leave (needs to be called after the change event)
|
||||
setTimeout(function() {
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
}, 100)
|
||||
})
|
||||
// And on page-load
|
||||
showCharts()
|
||||
|
||||
/**
|
||||
Click events
|
||||
@@ -412,11 +436,14 @@
|
||||
} else {
|
||||
\$(this).html(\$(this).html().replace("$T('hideDetails')", "$T('showDetails')"));
|
||||
}
|
||||
// Add coloring
|
||||
addRowColor()
|
||||
});
|
||||
|
||||
\$('#addServerButton').click(function(){
|
||||
\$('#addServer').hide();
|
||||
\$('#addServerContent').show();
|
||||
// Add coloring
|
||||
addRowColor()
|
||||
});
|
||||
|
||||
\$('[name="ssl"]').click(function() {
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
<br/>
|
||||
<input type="button" class="btn btn-default" onclick="tvSet('%sn/%sx%0e - %en/%sn - %sx%0e - %en.%ext')" value="$T('button-Ep1x05')" />
|
||||
<input type="button" class="btn btn-default" onclick="tvSet('%sn/S%0sE%0e - %en/%sn - S%0sE%0e - %en.%ext')" value="$T('button-EpS01E05')" />
|
||||
<br>
|
||||
<input type="button" class="btn btn-default" onclick="tvSet('%dn.%ext')" value="$T('button-FileLikeFolder')" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="previewtv" class="example">
|
||||
@@ -51,7 +53,7 @@
|
||||
<label class="config">$T('sortResult')</label> <span class="desc path" id="previewtv-result"> </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<button type="button" class="btn btn-default patternKey" onclick="jQuery(this).hide(); jQuery('#Key1').show();"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> $T('sort-legenda')</button>
|
||||
<table id="Key1" class="Key">
|
||||
@@ -139,9 +141,9 @@
|
||||
<td>$T("sort-File")</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgDirname'):</b></td>
|
||||
<td class="align-right"><b>$T('orgJobname'):</b></td>
|
||||
<td>%dn</td>
|
||||
<td>$T("sort-Folder")</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
@@ -199,6 +201,7 @@
|
||||
<input type="button" class="btn btn-default" onclick="movieSet('%title (%y)/%title (%y).%ext',' CD%1');movieExtraFolder(false)" value="$T('button-inFolders')" />
|
||||
<input type="button" class="btn btn-default" onclick="movieSet('%title (%y).%ext',' CD%1');movieExtraFolder(true)" value="$T('button-noFolders')" />
|
||||
<input type="button" class="btn btn-default" onclick="movieSet('%0decade/%title (%y).%ext',' CD%1');movieExtraFolder(true)" value="$T('decade')" />
|
||||
<input type="button" class="btn btn-default" onclick="movieSet('%dn.%ext')" value="$T('button-FileLikeFolder')" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="previewmovie" class="example">
|
||||
@@ -210,7 +213,7 @@
|
||||
<label class="config">$T('sortResult')</label> <span class="desc path" id="previewmovie-result"> </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<button type="button" class="btn btn-default patternKey" onclick="jQuery(this).hide(); jQuery('#Key2').show();"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> $T('sort-legenda')</button>
|
||||
<table id="Key2" class="Key">
|
||||
@@ -263,9 +266,9 @@
|
||||
<td>$T('sort-File')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgDirname'):</b></td>
|
||||
<td class="align-right"><b>$T('orgJobname'):</b></td>
|
||||
<td>%dn</td>
|
||||
<td>$T("sort-Folder")</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
@@ -328,7 +331,9 @@
|
||||
<div class="presets float-left">
|
||||
<input type="button" class="btn btn-default" onclick="dateSet('%t/%t - %y-%0m-%0d - %desc.%ext')" value="$T('button-ShowNameF')" />
|
||||
<input type="button" class="btn btn-default" onclick="dateSet('%y-%0m/%t - %y-%0m-%0d - %desc.%ext')" value="$T('button-YMF')" />
|
||||
<br>
|
||||
<input type="button" class="btn btn-default" onclick="dateSet('%y-%0m-%0d/%t - %y-%0m-%0d - %desc.%ext')" value="$T('button-DailyF')" />
|
||||
<input type="button" class="btn btn-default" onclick="dateSet('%dn.%ext')" value="$T('button-FileLikeFolder')" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="previewdate" class="example">
|
||||
@@ -340,7 +345,7 @@
|
||||
<label class="config">$T('sortResult')</label> <span class="desc path" id="previewdate-result"> </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair no-field-pair-bg">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<button type="button" class="btn btn-default patternKey" onclick="jQuery(this).hide(); jQuery('#Key3').show();"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> $T('sort-legenda')</button>
|
||||
<table id="Key3" class="Key">
|
||||
@@ -407,6 +412,11 @@
|
||||
<td>%fn</td>
|
||||
<td>$T('sort-File')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgJobname'):</b></td>
|
||||
<td>%dn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
<td>{$T('TEXT')}</td>
|
||||
@@ -487,7 +497,7 @@
|
||||
\$.ajax({
|
||||
type: "GET",
|
||||
url: "../../tapi",
|
||||
data: {mode:'eval_sort', value: 'generic', name: \$('#moviesamplename').val(), title: \$moviesortstring, movieextra: \$('#movieextra').val(), apikey: '$session', output: 'json' },
|
||||
data: {mode:'eval_sort', value: 'movie', name: \$('#moviesamplename').val(), title: \$moviesortstring, movieextra: \$('#movieextra').val(), apikey: '$session', output: 'json' },
|
||||
success: function(data){
|
||||
\$('#previewmovie-result').removeClass("loading failure").html(data.result);
|
||||
},
|
||||
|
||||
@@ -3,9 +3,14 @@
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding alt section">
|
||||
<label for="advanced-settings-button" class="form-control advanced-button ">
|
||||
<input type="checkbox" id="advanced-settings-button" name="advanced-settings-button"> $T('button-advanced')
|
||||
</label>
|
||||
</div>
|
||||
<form action="saveSwitches" method="post" name="fullform" class="fullform" autocomplete="off">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<div class="section">
|
||||
<div class="section advanced-settings">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-server') <a href="$helpuri$help_uri#toc1" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
@@ -67,12 +72,12 @@
|
||||
<input type="number" name="propagation_delay" id="propagation_delay" value="$propagation_delay" /> <i>$T('minutes')</i>
|
||||
<span class="desc">$T('explain-propagation_delay')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="top_only">$T('opt-top_only')</label>
|
||||
<input type="checkbox" name="top_only" id="top_only" value="1" <!--#if int($top_only) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-top_only')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="pre_check">$T('opt-pre_check')</label>
|
||||
<input type="checkbox" name="pre_check" id="pre_check" value="1" <!--#if int($pre_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-pre_check')</span>
|
||||
@@ -104,7 +109,7 @@
|
||||
</select>
|
||||
<span class="desc">$T('explain-no_series_dupes')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="series_propercheck">$T('opt-series_propercheck')</label>
|
||||
<input type="checkbox" name="series_propercheck" id="series_propercheck" value="1" <!--#if int($series_propercheck) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-series_propercheck')</span>
|
||||
@@ -118,6 +123,11 @@
|
||||
</select>
|
||||
<span class="desc">$T('explain-pause_on_pwrar')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="unwanted_extensions">$T('opt-unwanted_extensions')</label>
|
||||
<input type="text" name="unwanted_extensions" id="unwanted_extensions" value="$unwanted_extensions"/>
|
||||
<span class="desc">$T('explain-unwanted_extensions')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="action_on_unwanted_extensions">$T('opt-action_on_unwanted_extensions')</label>
|
||||
<select name="action_on_unwanted_extensions" id="action_on_unwanted_extensions">
|
||||
@@ -127,12 +137,7 @@
|
||||
</select>
|
||||
<span class="desc">$T('explain-action_on_unwanted_extensions')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="unwanted_extensions">$T('opt-unwanted_extensions')</label>
|
||||
<input type="text" name="unwanted_extensions" id="unwanted_extensions" value="$unwanted_extensions"/>
|
||||
<span class="desc">$T('explain-unwanted_extensions')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="auto_sort">$T('opt-auto_sort')</label>
|
||||
<input type="checkbox" name="auto_sort" id="auto_sort" value="1" <!--#if int($auto_sort) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-auto_sort')</span>
|
||||
@@ -160,53 +165,53 @@
|
||||
<input type="checkbox" name="pause_on_post_processing" id="pause_on_post_processing" value="1" <!--#if int($pause_on_post_processing) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-pause_on_post_processing')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="enable_all_par">$T('opt-enable_all_par')</label>
|
||||
<input type="checkbox" name="enable_all_par" id="enable_all_par" value="1" <!--#if int($enable_all_par) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_all_par').replace('. ', '.<br/>')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="par_option">$T('opt-par_option')</label>
|
||||
<input type="text" name="par_option" id="par_option" value="$par_option" />
|
||||
<span class="desc">$T('explain-par_option')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="sfv_check">$T('opt-sfv_check')</label>
|
||||
<input type="checkbox" name="sfv_check" id="sfv_check" value="1" <!--#if int($sfv_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-sfv_check')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="safe_postproc">$T('opt-safe_postproc')</label>
|
||||
<input type="checkbox" name="safe_postproc" id="safe_postproc" value="1" <!--#if int($safe_postproc) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-safe_postproc')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="enable_recursive">$T('opt-enable_recursive')</label>
|
||||
<input type="checkbox" name="enable_recursive" id="enable_recursive" value="1" <!--#if int($enable_recursive) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_recursive')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="flat_unpack">$T('opt-flat_unpack')</label>
|
||||
<input type="checkbox" name="flat_unpack" id="flat_unpack" value="1" <!--#if int($flat_unpack) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-flat_unpack')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="script_can_fail">$T('opt-script_can_fail')</label>
|
||||
<input type="checkbox" name="script_can_fail" id="script_can_fail" value="1" <!--#if int($script_can_fail) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-script_can_fail')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="new_nzb_on_failure">$T('opt-new_nzb_on_failure')</label>
|
||||
<input type="checkbox" name="new_nzb_on_failure" id="new_nzb_on_failure" value="1" <!--#if int($new_nzb_on_failure) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-new_nzb_on_failure')</span>
|
||||
</div>
|
||||
<!--#if not $nt#-->
|
||||
<div class="field-pair <!--#if not $have_nice then "disabled" else "" #-->">
|
||||
<div class="field-pair advanced-settings <!--#if not $have_nice then "disabled" else "" #-->">
|
||||
<label class="config" for="nice">$T('opt-nice')</label>
|
||||
<input type="text" name="nice" id="nice" value="$nice" <!--#if not $have_nice then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-nice')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if not $have_ionice then "disabled" else "" #-->">
|
||||
<div class="field-pair advanced-settings <!--#if not $have_ionice then "disabled" else "" #-->">
|
||||
<label class="config" for="ionice">$T('opt-ionice')</label>
|
||||
<input type="text" name="ionice" id="ionice" value="$ionice" <!--#if not $have_ionice then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-ionice')</span>
|
||||
@@ -217,7 +222,7 @@
|
||||
<input type="checkbox" name="ignore_samples" id="ignore_samples" value="1" <!--#if int($ignore_samples) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-ignore_samples') $T('igsam-del').</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair advanced-settings">
|
||||
<label class="config" for="enable_meta">$T('opt-enable_meta')</label>
|
||||
<input type="checkbox" name="enable_meta" id="enable_meta" value="1" <!--#if int($enable_meta) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_meta').replace('. ', '.<br/>')</span>
|
||||
@@ -246,7 +251,7 @@
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="section advanced-settings">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-naming') <a href="$helpuri$help_uri#toc4" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
|
||||
@@ -23,16 +23,32 @@ body {
|
||||
overflow: visible;
|
||||
border: 1px solid #dfdede;
|
||||
background-color: #FFF;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
width: 100%
|
||||
}
|
||||
.section, .Servers form, #addFeed, #addFeedContent {
|
||||
.advanced-button {
|
||||
float: right;
|
||||
width: auto;
|
||||
margin: 0 4px 0px 0px;
|
||||
font-size: 13px;
|
||||
color: inherit;
|
||||
height: auto;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
#advanced-settings-button {
|
||||
float: left;
|
||||
margin: 2px 7px 0px 0px;
|
||||
}
|
||||
.advanced-buttonSeperator {
|
||||
width: 1px;
|
||||
height: 34px;
|
||||
background-color: #dfdede;
|
||||
float: right;
|
||||
margin: 0px 10px;
|
||||
}
|
||||
.section, #addFeed, #addFeedContent {
|
||||
border-bottom: 1px solid #dfdede;
|
||||
overflow: auto;
|
||||
}
|
||||
.section:last-child, .Servers form:last-child {
|
||||
border: 0;
|
||||
}
|
||||
.col2 {
|
||||
z-index: 10;
|
||||
float: left;
|
||||
@@ -150,13 +166,13 @@ input[type="checkbox"]+.desc {
|
||||
overflow: hidden;
|
||||
min-width: 555px;
|
||||
}
|
||||
.field-pair:nth-child(odd),
|
||||
.Key tr:nth-child(odd),
|
||||
.tab-pane tr:nth-child(odd),
|
||||
.even {
|
||||
background-color: #F8F8F8;
|
||||
}
|
||||
.field-pair:last-child {
|
||||
.field-pair:last-child,
|
||||
.no-field-pair-bg {
|
||||
background-color: transparent;
|
||||
}
|
||||
.alt,
|
||||
@@ -298,7 +314,7 @@ tr.separator {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.Categories form.sorting-row:nth-child(even) tr {
|
||||
.Categories form.sorting-row:nth-child(2n-1) tr {
|
||||
background-color: #F8F8F8;
|
||||
}
|
||||
|
||||
@@ -1023,19 +1039,14 @@ input[type="checkbox"] {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.Servers .chart-selector {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: -7px;
|
||||
left: 50%;
|
||||
width: 150px;
|
||||
margin-left: -50px;
|
||||
min-width: initial;
|
||||
opacity: 0.8;
|
||||
.Servers .chart-selector-container {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.Servers .chart-selector:hover {
|
||||
opacity: 1;
|
||||
.Servers .chart-selector-container .glyphicon {
|
||||
font-size: 1.3em;
|
||||
padding-right: 4px;
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.Servers .ct-grid.ct-vertical:first-of-type {
|
||||
@@ -1083,9 +1094,10 @@ input[type="checkbox"] {
|
||||
}
|
||||
|
||||
.host-warning {
|
||||
color: #404040;
|
||||
margin-left: 7px;
|
||||
top: 3px;
|
||||
color: #F0AD4E;
|
||||
margin-left: 13px;
|
||||
top: 5px;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.fileBrowser .glyphicon {
|
||||
@@ -1225,7 +1237,9 @@ input[type="checkbox"] {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.Servers .server-chart {
|
||||
.Servers .server-chart,
|
||||
.Servers .chart-selector-container,
|
||||
.Servers .advanced-buttonSeperator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
6
interfaces/Config/templates/staticcfg/js/filesize.min.js
vendored
Normal file
6
interfaces/Config/templates/staticcfg/js/filesize.min.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/*
|
||||
2017 Jason Mulligan <jason.mulligan@avoidwork.com>
|
||||
@version 3.5.11
|
||||
*/
|
||||
"use strict";!function(i){function e(i){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],d=0,r=void 0,a=void 0,s=void 0,f=void 0,u=void 0,l=void 0,v=void 0,B=void 0,c=void 0,p=void 0,y=void 0,m=void 0,x=void 0,g=void 0;if(isNaN(i))throw new Error("Invalid arguments");return s=!0===e.bits,y=!0===e.unix,a=e.base||2,p=void 0!==e.round?e.round:y?1:2,m=void 0!==e.spacer?e.spacer:y?"":" ",g=e.symbols||e.suffixes||{},x=2===a?e.standard||"jedec":"jedec",c=e.output||"string",u=!0===e.fullform,l=e.fullforms instanceof Array?e.fullforms:[],r=void 0!==e.exponent?e.exponent:-1,B=Number(i),v=B<0,f=a>2?1e3:1024,v&&(B=-B),(-1===r||isNaN(r))&&(r=Math.floor(Math.log(B)/Math.log(f)))<0&&(r=0),r>8&&(r=8),0===B?(n[0]=0,n[1]=y?"":t[x][s?"bits":"bytes"][r]):(d=B/(2===a?Math.pow(2,10*r):Math.pow(1e3,r)),s&&(d*=8)>=f&&r<8&&(d/=f,r++),n[0]=Number(d.toFixed(r>0?p:0)),n[1]=10===a&&1===r?s?"kb":"kB":t[x][s?"bits":"bytes"][r],y&&(n[1]="jedec"===x?n[1].charAt(0):r>0?n[1].replace(/B$/,""):n[1],o.test(n[1])&&(n[0]=Math.floor(n[0]),n[1]=""))),v&&(n[0]=-n[0]),n[1]=g[n[1]]||n[1],"array"===c?n:"exponent"===c?r:"object"===c?{value:n[0],suffix:n[1],symbol:n[1]}:(u&&(n[1]=l[r]?l[r]:b[x][r]+(s?"bit":"byte")+(1===n[0]?"":"s")),n.join(m))}var o=/^(b|B)$/,t={iec:{bits:["b","Kib","Mib","Gib","Tib","Pib","Eib","Zib","Yib"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["b","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},b={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]};e.partial=function(i){return function(o){return e(o,i)}},"undefined"!=typeof exports?module.exports=e:"function"==typeof define&&define.amd?define(function(){return e}):i.filesize=e}("undefined"!=typeof window?window:global);
|
||||
//# sourceMappingURL=filesize.min.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -170,6 +170,10 @@
|
||||
<div class="col-sm-2">$T('category')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.category() == '*' ? glitterTranslate.defaultText : historyStatus.category"></div>
|
||||
</div>
|
||||
<div class="row" data-bind="visible: historyStatus.password">
|
||||
<div class="col-sm-2">$T('srv-password')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.password"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('msg-path')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.storage() == '' ? historyStatus.path : historyStatus.storage"></div>
|
||||
|
||||
@@ -150,7 +150,9 @@
|
||||
</div>
|
||||
<div class="row options-function-box">
|
||||
<div class="col-sm-6">
|
||||
<a href="./status/showlog?session=$session" target="_blank" class="btn btn-default"><span class="glyphicon glyphicon-file"></span> $T('link-showLog')</a>
|
||||
<a href="./status/showlog?session=$session" target="_blank" class="btn btn-default" data-tooltip="true" data-placement="top" title="$T('Glitter-logText')">
|
||||
<span class="glyphicon glyphicon-file"></span> $T('link-showLog')
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="input-group" data-tooltip="true" data-placement="top" title="$T('logging')">
|
||||
|
||||
8
interfaces/Glitter/templates/static/javascripts/moment.min.js
vendored
Normal file → Executable file
8
interfaces/Glitter/templates/static/javascripts/moment.min.js
vendored
Normal file → Executable file
File diff suppressed because one or more lines are too long
2
interfaces/Glitter/templates/static/javascripts/momentjs_locale/da.js
Normal file → Executable file
2
interfaces/Glitter/templates/static/javascripts/momentjs_locale/da.js
Normal file → Executable file
@@ -19,7 +19,7 @@ var da = moment.defineLocale('da', {
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
LTS : 'HH:mm:ss',
|
||||
L : 'DD/MM/YYYY',
|
||||
L : 'DD.MM.YYYY',
|
||||
LL : 'D. MMMM YYYY',
|
||||
LLL : 'D. MMMM YYYY HH:mm',
|
||||
LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'
|
||||
|
||||
2
interfaces/Glitter/templates/static/javascripts/momentjs_locale/de.js
Normal file → Executable file
2
interfaces/Glitter/templates/static/javascripts/momentjs_locale/de.js
Normal file → Executable file
@@ -28,7 +28,7 @@ function processRelativeTime(number, withoutSuffix, key, isFuture) {
|
||||
|
||||
var de = moment.defineLocale('de', {
|
||||
months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
||||
monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
|
||||
monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
|
||||
monthsParseExact : true,
|
||||
weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
|
||||
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
|
||||
|
||||
11
interfaces/Glitter/templates/static/javascripts/momentjs_locale/es.js
Normal file → Executable file
11
interfaces/Glitter/templates/static/javascripts/momentjs_locale/es.js
Normal file → Executable file
@@ -13,6 +13,9 @@
|
||||
var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
|
||||
var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
|
||||
|
||||
var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];
|
||||
var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
|
||||
|
||||
var es = moment.defineLocale('es', {
|
||||
months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
|
||||
monthsShort : function (m, format) {
|
||||
@@ -24,7 +27,13 @@ var es = moment.defineLocale('es', {
|
||||
return monthsShortDot[m.month()];
|
||||
}
|
||||
},
|
||||
monthsParseExact : true,
|
||||
monthsRegex : monthsRegex,
|
||||
monthsShortRegex : monthsRegex,
|
||||
monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
|
||||
monthsShortStrictRegex : /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
|
||||
monthsParse : monthsParse,
|
||||
longMonthsParse : monthsParse,
|
||||
shortMonthsParse : monthsParse,
|
||||
weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
|
||||
weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
|
||||
weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
|
||||
|
||||
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/fi.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/fi.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/fr.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/fr.js
Normal file → Executable file
99
interfaces/Glitter/templates/static/javascripts/momentjs_locale/he.js
Executable file
99
interfaces/Glitter/templates/static/javascripts/momentjs_locale/he.js
Executable file
@@ -0,0 +1,99 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : Hebrew [he]
|
||||
//! author : Tomer Cohen : https://github.com/tomer
|
||||
//! author : Moshe Simantov : https://github.com/DevelopmentIL
|
||||
//! author : Tal Ater : https://github.com/TalAter
|
||||
|
||||
;(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined'
|
||||
&& typeof require === 'function' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, (function (moment) { 'use strict';
|
||||
|
||||
|
||||
var he = moment.defineLocale('he', {
|
||||
months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
|
||||
monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
|
||||
weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
|
||||
weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
|
||||
weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
LTS : 'HH:mm:ss',
|
||||
L : 'DD/MM/YYYY',
|
||||
LL : 'D [ב]MMMM YYYY',
|
||||
LLL : 'D [ב]MMMM YYYY HH:mm',
|
||||
LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
|
||||
l : 'D/M/YYYY',
|
||||
ll : 'D MMM YYYY',
|
||||
lll : 'D MMM YYYY HH:mm',
|
||||
llll : 'ddd, D MMM YYYY HH:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay : '[היום ב־]LT',
|
||||
nextDay : '[מחר ב־]LT',
|
||||
nextWeek : 'dddd [בשעה] LT',
|
||||
lastDay : '[אתמול ב־]LT',
|
||||
lastWeek : '[ביום] dddd [האחרון בשעה] LT',
|
||||
sameElse : 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'בעוד %s',
|
||||
past : 'לפני %s',
|
||||
s : 'מספר שניות',
|
||||
m : 'דקה',
|
||||
mm : '%d דקות',
|
||||
h : 'שעה',
|
||||
hh : function (number) {
|
||||
if (number === 2) {
|
||||
return 'שעתיים';
|
||||
}
|
||||
return number + ' שעות';
|
||||
},
|
||||
d : 'יום',
|
||||
dd : function (number) {
|
||||
if (number === 2) {
|
||||
return 'יומיים';
|
||||
}
|
||||
return number + ' ימים';
|
||||
},
|
||||
M : 'חודש',
|
||||
MM : function (number) {
|
||||
if (number === 2) {
|
||||
return 'חודשיים';
|
||||
}
|
||||
return number + ' חודשים';
|
||||
},
|
||||
y : 'שנה',
|
||||
yy : function (number) {
|
||||
if (number === 2) {
|
||||
return 'שנתיים';
|
||||
} else if (number % 10 === 0 && number !== 10) {
|
||||
return number + ' שנה';
|
||||
}
|
||||
return number + ' שנים';
|
||||
}
|
||||
},
|
||||
meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
|
||||
isPM : function (input) {
|
||||
return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
|
||||
},
|
||||
meridiem : function (hour, minute, isLower) {
|
||||
if (hour < 5) {
|
||||
return 'לפנות בוקר';
|
||||
} else if (hour < 10) {
|
||||
return 'בבוקר';
|
||||
} else if (hour < 12) {
|
||||
return isLower ? 'לפנה"צ' : 'לפני הצהריים';
|
||||
} else if (hour < 18) {
|
||||
return isLower ? 'אחה"צ' : 'אחרי הצהריים';
|
||||
} else {
|
||||
return 'בערב';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return he;
|
||||
|
||||
})));
|
||||
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/nb.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/nb.js
Normal file → Executable file
2
interfaces/Glitter/templates/static/javascripts/momentjs_locale/nl.js
Normal file → Executable file
2
interfaces/Glitter/templates/static/javascripts/momentjs_locale/nl.js
Normal file → Executable file
@@ -40,7 +40,7 @@ var nl = moment.defineLocale('nl', {
|
||||
|
||||
weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
|
||||
weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
|
||||
weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
|
||||
weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),
|
||||
weekdaysParseExact : true,
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
|
||||
19
interfaces/Glitter/templates/static/javascripts/momentjs_locale/pl.js
Normal file → Executable file
19
interfaces/Glitter/templates/static/javascripts/momentjs_locale/pl.js
Normal file → Executable file
@@ -63,7 +63,24 @@ var pl = moment.defineLocale('pl', {
|
||||
calendar : {
|
||||
sameDay: '[Dziś o] LT',
|
||||
nextDay: '[Jutro o] LT',
|
||||
nextWeek: '[W] dddd [o] LT',
|
||||
nextWeek: function () {
|
||||
switch (this.day()) {
|
||||
case 0:
|
||||
return '[W niedzielę o] LT';
|
||||
|
||||
case 2:
|
||||
return '[We wtorek o] LT';
|
||||
|
||||
case 3:
|
||||
return '[W środę o] LT';
|
||||
|
||||
case 6:
|
||||
return '[W sobotę o] LT';
|
||||
|
||||
default:
|
||||
return '[W] dddd [o] LT';
|
||||
}
|
||||
},
|
||||
lastDay: '[Wczoraj o] LT',
|
||||
lastWeek: function () {
|
||||
switch (this.day()) {
|
||||
|
||||
5
interfaces/Glitter/templates/static/javascripts/momentjs_locale/pt-br.js
Normal file → Executable file
5
interfaces/Glitter/templates/static/javascripts/momentjs_locale/pt-br.js
Normal file → Executable file
@@ -11,8 +11,8 @@
|
||||
|
||||
|
||||
var ptBr = moment.defineLocale('pt-br', {
|
||||
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
|
||||
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
|
||||
months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),
|
||||
monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
|
||||
weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
|
||||
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
|
||||
weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
|
||||
@@ -41,6 +41,7 @@ var ptBr = moment.defineLocale('pt-br', {
|
||||
future : 'em %s',
|
||||
past : '%s atrás',
|
||||
s : 'poucos segundos',
|
||||
ss : '%d segundos',
|
||||
m : 'um minuto',
|
||||
mm : '%d minutos',
|
||||
h : 'uma hora',
|
||||
|
||||
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/ro.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/ro.js
Normal file → Executable file
2
interfaces/Glitter/templates/static/javascripts/momentjs_locale/ru.js
Normal file → Executable file
2
interfaces/Glitter/templates/static/javascripts/momentjs_locale/ru.js
Normal file → Executable file
@@ -174,7 +174,7 @@ var ru = moment.defineLocale('ru', {
|
||||
},
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/sr.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/sr.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/sv.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/sv.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/zh-cn.js
Normal file → Executable file
0
interfaces/Glitter/templates/static/javascripts/momentjs_locale/zh-cn.js
Normal file → Executable file
@@ -772,8 +772,8 @@ tr.queue-item>td:first-child>a {
|
||||
line-height: 24px;
|
||||
overflow: visible;
|
||||
margin-bottom: 0;
|
||||
box-shadow: inset 0 0px 1px rgba(0, 0, 0, 0.3);
|
||||
-webkit-box-shadow: inset 0 0px 1px rgba(0, 0, 0, 0.3);
|
||||
box-shadow: inset 0 0px 2px rgba(0, 0, 0, 0.2);
|
||||
-webkit-box-shadow: inset 0 0px 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.progress>span,
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 729 B After Width: | Height: | Size: 726 B |
@@ -79,7 +79,6 @@
|
||||
input = input.replace(/%0e/g,'05');
|
||||
input = input.replace(/%e/g,'5');
|
||||
input = input.replace(/%fn/g,'$T("sort-File")');
|
||||
input = input.replace(/%dn/g,'$T("sort-Folder")');
|
||||
|
||||
document.getElementById('previewtv').innerHTML = getOutput(input);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
<input type="radio" name="lang" id="$l" value="$l" <!--#if $lang == $l then 'checked="checked"' else ''#--> />
|
||||
</label>
|
||||
<!--#end for#-->
|
||||
<!--#if not $languages#-->
|
||||
<hr>
|
||||
No language files detected. Please run <code>python tools/make_mo.py</code> once and restart SABnzbd, or contact your package provider.
|
||||
<!--#end if#-->
|
||||
<div class="spacer"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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-10-21 16:01+W. Europe Daylight Time\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:56+W. Europe Standard Time\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
|
||||
@@ -534,6 +534,12 @@ msgstr ""
|
||||
msgid "Email succeeded"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/emailer.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 ""
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr ""
|
||||
@@ -700,7 +706,7 @@ msgstr ""
|
||||
msgid "m"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -728,6 +734,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -903,6 +913,7 @@ msgstr ""
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -928,10 +939,6 @@ msgstr ""
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
msgstr ""
|
||||
@@ -1038,11 +1045,6 @@ msgstr ""
|
||||
msgid "Not available"
|
||||
msgstr ""
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr ""
|
||||
@@ -1440,10 +1442,6 @@ msgstr ""
|
||||
msgid "Failed to move files"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr ""
|
||||
@@ -1464,7 +1462,7 @@ msgstr ""
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr ""
|
||||
|
||||
@@ -3248,7 +3246,7 @@ msgstr ""
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr ""
|
||||
|
||||
@@ -3860,6 +3858,10 @@ msgstr ""
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
@@ -3929,7 +3931,7 @@ msgid "Original Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
@@ -3948,10 +3950,6 @@ msgstr ""
|
||||
msgid "file"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr ""
|
||||
@@ -4288,6 +4286,10 @@ msgstr ""
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "All usernames, passwords and API-keys are automatically removed from the log and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr ""
|
||||
@@ -4636,16 +4638,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"PO-Revision-Date: 2017-06-22 07:07+0000\n"
|
||||
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+0000\n"
|
||||
"PO-Revision-Date: 2017-10-27 21:53+0000\n"
|
||||
"Last-Translator: Søren <Unknown>\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-10-26 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -29,11 +29,14 @@ msgstr "Kan ikke finde webskabeloner: %s, forsøger med standardskabelon"
|
||||
msgid ""
|
||||
"SABYenc disabled: no correct version found! (Found v%s, expecting v%s)"
|
||||
msgstr ""
|
||||
"SABYenc deaktiveret: Der blev ikke fundet nogen korrekt version (Fandt v%s, "
|
||||
"forventede v%s)"
|
||||
|
||||
#: SABnzbd.py [Warning message]
|
||||
msgid ""
|
||||
"SABYenc module... NOT found! Expecting v%s - https://sabnzbd.org/sabyenc"
|
||||
msgstr ""
|
||||
"SABYenc modul... IKKE fundet! Forventede v%s - https://sabnzbd.org/sabyenc"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "_yenc module... NOT found!"
|
||||
@@ -45,11 +48,11 @@ msgstr "par2 binær... IKKE fundet!"
|
||||
|
||||
#: SABnzbd.py [Error message] # SABnzbd.py [Error message]
|
||||
msgid "Verification and repair will not be possible."
|
||||
msgstr ""
|
||||
msgstr "Verificering og reperation er ikke muligt."
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "MultiPar binary... NOT found!"
|
||||
msgstr ""
|
||||
msgstr "MultiPar binær... IKKE fundet!"
|
||||
|
||||
#: SABnzbd.py [Warning message]
|
||||
msgid "Your UNRAR version is %s, we recommend version %s or higher.<br />"
|
||||
@@ -57,7 +60,7 @@ msgstr "Din Unrar version er %s, vi anbefaler version %s eller højere.<br />"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Downloads will not unpacked."
|
||||
msgstr ""
|
||||
msgstr "Downloads vil ikke blive udpakket."
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "unrar binary... NOT found"
|
||||
@@ -564,6 +567,12 @@ msgstr "Det lykkedes ikke at lukke e-mail tilslutning"
|
||||
msgid "Email succeeded"
|
||||
msgstr "E-mail afsendelse mislykkedes"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Kan ikke finde e-mail skabeloner i %s"
|
||||
@@ -764,7 +773,7 @@ msgstr "h"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Kan ikke oprette mappe %s"
|
||||
|
||||
@@ -794,6 +803,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Det lykkedes ikke at ændre rettigheder på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Køre script"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -969,6 +982,7 @@ msgstr "Starter reparation"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "Par verificering mislykkedes på %s, mens QuickCheck lykkedes"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -997,10 +1011,6 @@ msgstr "[%s] Bekræftelse i %s, alle filer er ok"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Bekræftelse i %s, kræver reparation"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Hovedarkiv mangler..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1110,11 +1120,6 @@ msgstr "Andre beskeder"
|
||||
msgid "Not available"
|
||||
msgstr "Ikke tilgængelig"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Kunne ikke sende Prowl besked"
|
||||
@@ -1550,10 +1555,6 @@ msgstr "Det lykkedes ikke at omdøbe \"%s\" til \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Kunne ikke flytte filer"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Køre script"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Kør bruger script %s"
|
||||
@@ -1574,7 +1575,7 @@ msgstr "Mere"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Efterbehandling mislykkedes for %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "se logfil"
|
||||
|
||||
@@ -3501,7 +3502,7 @@ msgstr "SSL-chifre"
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr "Øge ydeevnen ved at tvinge en lavere SSL-kryptering styrke."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Maksimalt antal forsøg"
|
||||
|
||||
@@ -4145,6 +4146,10 @@ msgstr "1x05 Episodemappe"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episodemappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
@@ -4214,8 +4219,8 @@ msgid "Original Filename"
|
||||
msgstr "Originalfilnavn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Orginal Mappenavn"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4233,10 +4238,6 @@ msgstr "tekst"
|
||||
msgid "file"
|
||||
msgstr "fil"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Sorteringsstreng"
|
||||
@@ -4585,6 +4586,12 @@ msgstr "Pause i..."
|
||||
msgid "Refresh"
|
||||
msgstr "Opdatere"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sortere efter alder <small>Ældst→Nyeste</small>"
|
||||
@@ -4953,16 +4960,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Har du ingen usenet leverandør? Vi anbefaler at prøve %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Det lykkedes ikke at hente TV info (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Det lykkedes ikke at omdøbe: %s til %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Kunne ikke omdøbe lignende fil: %s til %s"
|
||||
|
||||
@@ -5058,6 +5065,9 @@ msgstr "URL hentning mislykkedes; %s"
|
||||
#~ msgid "Unpacking failed, an expected file was not unpacked"
|
||||
#~ msgstr "Udpakning mislykkedes, en ventet fil er ikke udpakket"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Hovedarkiv mangler..."
|
||||
|
||||
#~ msgid "Error importing OpenSSL module. Connecting with NON-SSL"
|
||||
#~ msgstr "Mislykkedes med importering af OpenSSL modul. Tilslutter uden SSL"
|
||||
|
||||
@@ -5404,6 +5414,12 @@ msgstr "URL hentning mislykkedes; %s"
|
||||
#~ msgid "Show times in AM/PM notation (does not affect scheduler)."
|
||||
#~ msgstr "Vis tider i AM / PM notation (påvirker ikke skemalægger)."
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "mappe"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Orginal Mappenavn"
|
||||
|
||||
#~ msgid "Groups / Indexer tags"
|
||||
#~ msgstr "Gruppe / Index tags"
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+0000\n"
|
||||
"PO-Revision-Date: 2017-10-10 19:03+0000\n"
|
||||
"Last-Translator: Robin Munkittrick <Unknown>\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-10-26 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "MultiPar binary... NOT found!"
|
||||
@@ -586,6 +586,12 @@ msgstr "Schliessen der Mail-Verbindung fehlgeschlagen"
|
||||
msgid "Email succeeded"
|
||||
msgstr "E-Mail erfolgreich versendet"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "In %s konnten keine E-Mail-Vorlagen gefunden werden"
|
||||
@@ -788,7 +794,7 @@ msgstr "h"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Verzeichnis %s konnte nicht angelegt werden"
|
||||
|
||||
@@ -821,6 +827,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Rechte von %s konnten nicht geändert werden"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Ausführen des Skripts"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -1000,6 +1010,7 @@ msgstr ""
|
||||
"Par-Verifikation für \"%s\" fehlgeschlagen, obwohl der QuickCheck "
|
||||
"erfolgreich war"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -1028,10 +1039,6 @@ msgstr "[%s] Überprüft in %s. Alle Dateien fehlerfrei."
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Überprüft in %s. Reparatur wird benötigt."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Hauptpaket nicht gefunden …"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1148,11 +1155,6 @@ msgstr "Andere Nachrichten"
|
||||
msgid "Not available"
|
||||
msgstr "Nicht verfügbar"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Konnte Prowl-Nachricht nicht versenden"
|
||||
@@ -1610,10 +1612,6 @@ msgstr "Fehler beim Umbenennen von \"%s\" nach \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Dateien verschieben fehlgeschlagen"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Ausführen des Skripts"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Ausführen des Benutzer-Skripts %s"
|
||||
@@ -1634,7 +1632,7 @@ msgstr "Mehr"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Nachbearbeitung von %s fehlgeschlagen (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "Beachten Sie die Protokolldatei"
|
||||
|
||||
@@ -3602,7 +3600,7 @@ msgstr ""
|
||||
"Die Performanz verbessern, indem eine schwächere SSL-Verschlüsselung "
|
||||
"erzwungen wird."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Maximale Wiederholungen"
|
||||
|
||||
@@ -4256,6 +4254,10 @@ msgstr "1x05 Episoden-Ordner"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episoden-Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
@@ -4325,8 +4327,8 @@ msgid "Original Filename"
|
||||
msgstr "Ursprünglicher Dateiname"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Ursprünglicher Ordnername"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4344,10 +4346,6 @@ msgstr "text"
|
||||
msgid "file"
|
||||
msgstr "Datei"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "Ordner"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Sortieranweisung"
|
||||
@@ -4697,6 +4695,12 @@ msgstr "Anhalten für …"
|
||||
msgid "Refresh"
|
||||
msgstr "Neu laden"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sortieren nach Alter <small>Älteste→Neuste</small>"
|
||||
@@ -5068,16 +5072,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Wenn Sie noch keinen Usenet-Provider haben, empfehlen wir Ihnen %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Fehler beim Abrufen der TV-Informationen: %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Umbenennen von %s nach %s fehlgeschlagen."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Umbenennen der gleichen Datei von %s nach %s fehlgeschlagen."
|
||||
|
||||
@@ -5561,6 +5565,12 @@ msgstr "Abrufen der URL fehlgeschlagen; %s"
|
||||
#~ msgid "Show times in AM/PM notation (does not affect scheduler)."
|
||||
#~ msgstr "Zeiten in der AM/PM-Notation anzeigen (betrifft die Regeln nicht)."
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "Ordner"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Ursprünglicher Ordnername"
|
||||
|
||||
#~ msgid "Groups / Indexer tags"
|
||||
#~ msgstr "Gruppen/Indexer-Tags"
|
||||
|
||||
@@ -5646,6 +5656,9 @@ msgstr "Abrufen der URL fehlgeschlagen; %s"
|
||||
#~ "Benachrichtigung für Nachrichtengruppen aktivieren (keine, eine oder "
|
||||
#~ "mehrere)"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Hauptpaket nicht gefunden …"
|
||||
|
||||
#~ msgid "Initiating restart...<br />"
|
||||
#~ msgstr "Neustart wird durchgeführt …<br />"
|
||||
|
||||
|
||||
@@ -69,9 +69,6 @@ msgstr "Replace spaces in folder name"
|
||||
msgid "Replace dots in Foldername"
|
||||
msgstr "Replace dots in folder name"
|
||||
|
||||
msgid "Original Foldername"
|
||||
msgstr "Original folder name"
|
||||
|
||||
msgid "How long or untill when do you want to pause? (in English!)"
|
||||
msgstr "How long or until when do you want to pause? (in English!)"
|
||||
|
||||
@@ -119,3 +116,7 @@ msgstr "Downloads will not be unpacked."
|
||||
|
||||
msgid "Seperate multiple URLs by a comma"
|
||||
msgstr "Separate multiple URLs with a comma"
|
||||
|
||||
msgid "Advanced"
|
||||
msgstr "Advanced Settings"
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+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-10-26 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -566,6 +566,12 @@ msgstr "No se pudo cerrar la conexión de correo"
|
||||
msgid "Email succeeded"
|
||||
msgstr "Email exitoso"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "No se pudo encontrar plantillas de email en %s"
|
||||
@@ -766,7 +772,7 @@ msgstr "h"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "No se pudo crear el directorio %s"
|
||||
|
||||
@@ -796,6 +802,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "No se puede cambiar los permisos de %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Ejecutando script"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -975,6 +985,7 @@ msgstr ""
|
||||
"La verificación PAR ha fallado en %s, ¡aunque el QuickCheck ha sido "
|
||||
"satisfactorio!"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -1003,10 +1014,6 @@ msgstr "[%s] Verificado en %s, todos los archivos correctos"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Verificado en %s, se necesita reparar"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Paquete principal no encontrado..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1118,11 +1125,6 @@ msgstr "Otros mensajes"
|
||||
msgid "Not available"
|
||||
msgstr "No disponible"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "No se pudo enviar el mensaje de Prowl"
|
||||
@@ -1567,10 +1569,6 @@ msgstr "Error al renombrar \"%s\" a \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Error al mover ficheros"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Ejecutando script"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Ejecutando script de usuario %s"
|
||||
@@ -1591,7 +1589,7 @@ msgstr "Más"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Error al post-procesar %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "ver fichero de log"
|
||||
|
||||
@@ -3523,7 +3521,7 @@ msgstr ""
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Reintentos máximos"
|
||||
|
||||
@@ -4168,6 +4166,10 @@ msgstr "1x05 Episodio Directorio"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episodio Directorio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
@@ -4237,8 +4239,8 @@ msgid "Original Filename"
|
||||
msgstr "Nombre fichero original"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Nombre directorio original"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4256,10 +4258,6 @@ msgstr "texto"
|
||||
msgid "file"
|
||||
msgstr "archivo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "carpeta"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Ordenar cadena"
|
||||
@@ -4610,6 +4608,12 @@ msgstr "Pausar durante..."
|
||||
msgid "Refresh"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Ordenar por Fecha <small>Más viejo→Más nuevo</small>"
|
||||
@@ -4979,16 +4983,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "¿No tienes proveedor de Usenet? Nosotros recomendamos probar %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Error al recuperar info de la serie (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Error al renombrar: %s a %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Error al renombrar ficheros similares: %s a %s"
|
||||
|
||||
@@ -5091,6 +5095,9 @@ msgstr "Error al recuperar la URL; %s"
|
||||
#~ msgid "Missing expected file: %s => unrar error?"
|
||||
#~ msgstr "Falta el siguiente archivo: %s => ¿Error al descomprimir?"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Paquete principal no encontrado..."
|
||||
|
||||
#~ msgid "Invalid par2 files, cannot verify or repair"
|
||||
#~ msgstr "Ficheros par2 inválidos, no se puede verificar o reparar"
|
||||
|
||||
@@ -5284,6 +5291,9 @@ msgstr "Error al recuperar la URL; %s"
|
||||
#~ msgid "Email Options"
|
||||
#~ msgstr "Opciones de e-mail"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "carpeta"
|
||||
|
||||
#~ msgid "Are you sure you want to delete"
|
||||
#~ msgstr "¿Está seguro de querer borrar?"
|
||||
|
||||
@@ -5459,6 +5469,9 @@ msgstr "Error al recuperar la URL; %s"
|
||||
#~ msgid "Enable if downloads are not put in their own folders."
|
||||
#~ msgstr "Habilitar si las descargas no quedan en sus propios directorios."
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Nombre directorio original"
|
||||
|
||||
#~ msgid "Enable sorting and renaming of date named files."
|
||||
#~ msgstr "Habilitar ordenación y renombrado de nombres de ficheros con fechas."
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+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-10-26 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -563,6 +563,12 @@ msgstr "Sähköpostiyhteyden sulkeminen epäonnistui"
|
||||
msgid "Email succeeded"
|
||||
msgstr "Sähköpostitus onnistui"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Sähköpostipohjia ei löydy hakemistosta %s"
|
||||
@@ -762,7 +768,7 @@ msgstr "t"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Ei voi luoda kansiota %s"
|
||||
|
||||
@@ -792,6 +798,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Käyttöoikeuksien muuttaminen epäonnistui kohteelle %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Ajetaan skripti"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -968,6 +978,7 @@ msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr ""
|
||||
"Par varmennus epäonnistui kohteessa %s, mutta Pikatarkistus onnistui!"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -995,10 +1006,6 @@ msgstr "[%s] Varmennettiin ajassa %s, kaikki tiedostot kelvollisia"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Varmennetiin ajassa %s, vaatii korjauksen"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Pääpakettia ei löydy..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1108,11 +1115,6 @@ msgstr "Muut viestit"
|
||||
msgid "Not available"
|
||||
msgstr "Ei saatavilla"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Prowl viestin lähetys epäonnistui"
|
||||
@@ -1554,10 +1556,6 @@ msgstr "Virhe uudelleennimettäessä \"%s\" nimelle \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Tiedostojen siirto epäonnistui"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Ajetaan skripti"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Ajetaan käyttäjän skripti %s"
|
||||
@@ -1578,7 +1576,7 @@ msgstr "Lisää"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Jälkikäsittely epäonnistui kohteelle %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "katso lokitiedosto"
|
||||
|
||||
@@ -3512,7 +3510,7 @@ msgstr "SSL-salaus"
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr "Lisää suorituskykyä pakottamalla alhaisempi SSL-suojaustaso."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Enimmäismäärä uudelleenyrityksille"
|
||||
|
||||
@@ -4158,6 +4156,10 @@ msgstr "1x05 Jakso kansio"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Jakso kansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Nimi"
|
||||
@@ -4227,8 +4229,8 @@ msgid "Original Filename"
|
||||
msgstr "Alkuperäinen tiedostonimi"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Alkuperäinen kansionimi"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4246,10 +4248,6 @@ msgstr "teksti"
|
||||
msgid "file"
|
||||
msgstr "tiedosto"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "kansio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Lajittelumerkkijono"
|
||||
@@ -4601,6 +4599,12 @@ msgstr "Keskeytä ajaksi..."
|
||||
msgid "Refresh"
|
||||
msgstr "Päivitä"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Järjestä iän mukaan <small>Vanhin→Uusin</small>"
|
||||
@@ -4969,16 +4973,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Eikö sinulla ole usenet tarjoajaa? Suosittelemme kokeilemaan %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Virhe noudettaessa TV tietoja (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Virhe uudelleennimettäessä: %s %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Samankaltaisen tiedoston uudelleennimeäminen epäonnistui: %s %s"
|
||||
|
||||
@@ -5129,6 +5133,9 @@ msgstr "Osoitteen nouto epäonnistui; %s"
|
||||
#~ msgid "SQL Commit Failed, see log"
|
||||
#~ msgstr "SQL muutos epäonnistui, katso loki"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Pääpakettia ei löydy..."
|
||||
|
||||
#~ msgid "No UNRAR program found, unpacking RAR files is not possible<br />"
|
||||
#~ msgstr ""
|
||||
#~ "UNRAR ohjelmaa ei löydy, RAR-tiedostojen purkaminen ei ole mahdollista<br />"
|
||||
@@ -5394,6 +5401,12 @@ msgstr "Osoitteen nouto epäonnistui; %s"
|
||||
#~ msgstr ""
|
||||
#~ "Kansio jossa ovat käyttäjän skriptit joita käytetään jälkikäsittelyssä."
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Alkuperäinen kansionimi"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "kansio"
|
||||
|
||||
#~ msgid "Hour:Min"
|
||||
#~ msgstr "Tunti:Min"
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"PO-Revision-Date: 2017-10-05 18:52+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+0000\n"
|
||||
"PO-Revision-Date: 2017-12-06 19:46+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-10-26 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -590,6 +590,12 @@ msgstr "Échec de la fermeture de la connexion à la messagerie"
|
||||
msgid "Email succeeded"
|
||||
msgstr "L'envoi de l'e-mail a réussi"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Impossible de trouver les modèles d'email dans %s"
|
||||
@@ -763,6 +769,8 @@ msgstr "Paramètre incorrect"
|
||||
msgid ""
|
||||
"Category folder cannot be a subfolder of the Temporary Download Folder."
|
||||
msgstr ""
|
||||
"Le dossier de catégorie ne peut pas être un sous-dossier du dossier de "
|
||||
"téléchargement temporaire."
|
||||
|
||||
#: sabnzbd/interface.py # sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
@@ -792,7 +800,7 @@ msgstr "h"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Impossible de créer le dossier %s"
|
||||
|
||||
@@ -825,6 +833,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Impossible de changer les permissions pour %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Exécution du script"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -1007,6 +1019,7 @@ msgstr ""
|
||||
"Echec de la vérification Par sur %s, mais QuickCheck (vérification rapide) "
|
||||
"réussi !"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -1036,10 +1049,6 @@ msgstr "[%s] Vérifié dans %s, tous les fichiers sont corrects"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Vérifié dans %s, réparation nécessaire"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Paquet principal introuvable..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1155,11 +1164,6 @@ msgstr "Autres messages"
|
||||
msgid "Not available"
|
||||
msgstr "Non disponible"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Echec d'envoi du message Prowl"
|
||||
@@ -1614,10 +1618,6 @@ msgstr "Erreur lors du renommage de \"%s\" en \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Impossible de déplacer les fichiers"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Exécution du script"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Exécution du script utilisateur %s"
|
||||
@@ -1638,7 +1638,7 @@ msgstr "Plus"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Échec du post-traitement pour %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "voir le journal"
|
||||
|
||||
@@ -3609,7 +3609,7 @@ msgstr "Chiffrements SSL"
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr "Augmenter les performances en forçant un cryptage SSL plus faible."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Nombre de tentatives maximum"
|
||||
|
||||
@@ -4270,6 +4270,10 @@ msgstr "1x05 Dossier Épisode"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Dossier Épisode"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Nom de la tâche en tant que nom de fichier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titre"
|
||||
@@ -4339,8 +4343,8 @@ msgid "Original Filename"
|
||||
msgstr "Nom de fichier originel"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Nom du dossier originel"
|
||||
msgid "Original Job Name"
|
||||
msgstr "Nom d'origine de la tâche"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4358,10 +4362,6 @@ msgstr "texte"
|
||||
msgid "file"
|
||||
msgstr "fichier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "dossier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Chaîne de caractères de tri"
|
||||
@@ -4713,6 +4713,14 @@ msgstr "Mettre en pause pour…"
|
||||
msgid "Refresh"
|
||||
msgstr "Rafraîchir"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
"Tous les noms d'utilisateur, mots de passe et clés API sont automatiquement "
|
||||
"supprimés du journal et de la copie de vos réglages."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Trier par Age <small>Moins récent→Plus récent</small>"
|
||||
@@ -5085,16 +5093,16 @@ msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr ""
|
||||
"Vous n'avez pas de fournisseur usenet? Nous vous recommendons d'essayer %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Erreur lors de l'obtention des information TV (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Échec du renommage : %s en %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Impossible de renommer le fichier similaire : %s en %s"
|
||||
|
||||
@@ -5429,6 +5437,9 @@ msgstr "Échec de récupération de l'URL ; %s"
|
||||
#~ msgid "Enable sorting and renaming of date named files."
|
||||
#~ msgstr "Active le tri et le renommage des fichiers par date."
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "dossier"
|
||||
|
||||
#~ msgid "Set Pause Interval"
|
||||
#~ msgstr "Intervalle de pause"
|
||||
|
||||
@@ -5605,6 +5616,9 @@ msgstr "Échec de récupération de l'URL ; %s"
|
||||
#~ msgid "pyopenssl module missing, please install for https access"
|
||||
#~ msgstr "module pyopenssl manquant, veuillez l'installer pour l'accès HTTPS"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Paquet principal introuvable..."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " SABnzbd needs a free tcp/ip port for its internal web server.<br>\n"
|
||||
@@ -5691,6 +5705,9 @@ msgstr "Échec de récupération de l'URL ; %s"
|
||||
#~ msgid "Groups / Indexer tags"
|
||||
#~ msgstr "balises Groupes / Indexeur"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Nom du dossier originel"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "After SABnzbd has finished restarting you will be able to access it at the "
|
||||
#~ "following location: %s"
|
||||
|
||||
107
po/main/he.po
107
po/main/he.po
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"PO-Revision-Date: 2017-10-07 08:28+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+0000\n"
|
||||
"PO-Revision-Date: 2017-12-06 19:50+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-10-26 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:30+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -447,7 +447,7 @@ msgid ""
|
||||
"Jobs will start unpacking during the downloading to reduce post-processing "
|
||||
"time. Only works for jobs that do not need repair."
|
||||
msgstr ""
|
||||
".עבודות יתחילו להיפרק במהלך ההורדה כדי להפחית זמן לאחר-עיבוד. עובד רק עבור "
|
||||
".עבודות יתחילו להיפרק במהלך ההורדה כדי להפחית זמן בתר-עיבוד. עובד רק עבור "
|
||||
"עבודות שאינן צריכות תיקון"
|
||||
|
||||
#: sabnzbd/dirscanner.py # sabnzbd/dirscanner.py # sabnzbd/dirscanner.py
|
||||
@@ -558,6 +558,12 @@ msgstr "נכשל בסגירת חיבור דוא\"ל"
|
||||
msgid "Email succeeded"
|
||||
msgstr "דוא\"ל הצליח"
|
||||
|
||||
#: sabnzbd/emailer.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 "לא ניתן לשלוח, נתונים דרושים חסרים"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "%s-לא ניתן למצוא תבניות דוא\"ל"
|
||||
@@ -724,7 +730,7 @@ msgstr "משתנה לא נכון"
|
||||
#: sabnzbd/interface.py
|
||||
msgid ""
|
||||
"Category folder cannot be a subfolder of the Temporary Download Folder."
|
||||
msgstr ""
|
||||
msgstr ".תיקיית מדור אינה יכולה להיות תת-תיקייה של תיקיית ההורדות הזמניות"
|
||||
|
||||
#: sabnzbd/interface.py # sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
@@ -754,7 +760,7 @@ msgstr "ש"
|
||||
msgid "m"
|
||||
msgstr "ד"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "%s לא יכול ליצור את הספרייה"
|
||||
|
||||
@@ -786,11 +792,15 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "%s לא יכול לשנות הרשאות של"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "מריץ תסריט"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "PostProcessing was aborted (%s)"
|
||||
msgstr "(%s) לאחר-עיבוד בוטל"
|
||||
msgstr "(%s) בתר-עיבוד בוטל"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP phase "script"] # sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py [Notification Script settings]
|
||||
@@ -961,6 +971,7 @@ msgstr "מתחיל תיקון"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "!בעוד שבדיקה זריזה הצליחה ,%s-נכשל ב Par וידוא"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -987,10 +998,6 @@ msgstr "כל הקבצים נכונים ,%s-[%s] וודאו ב"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "תיקון דרוש ,%s-[%s] וודאו ב"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "...חפיסה ראשית לא נמצאה"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1081,7 +1088,7 @@ msgstr "התווסף NZB"
|
||||
|
||||
#: sabnzbd/notifier.py
|
||||
msgid "Post-processing started"
|
||||
msgstr "לאחר-עיבוד התחיל"
|
||||
msgstr "בתר-עיבוד התחיל"
|
||||
|
||||
#: sabnzbd/notifier.py [Notification]
|
||||
msgid "Job finished"
|
||||
@@ -1103,11 +1110,6 @@ msgstr "הודעות אחרות"
|
||||
msgid "Not available"
|
||||
msgstr "לא זמין"
|
||||
|
||||
#: 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 "לא ניתן לשלוח, נתונים דרושים חסרים"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Prowl נכשל בשליחת הודעת"
|
||||
@@ -1529,7 +1531,7 @@ msgstr "הורדה נכשלה - לא בשרת(ים) שלך"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "No post-processing because of failed verification"
|
||||
msgstr "אין לאחר-עיבוד בגלל וידוא כושל"
|
||||
msgstr "אין בתר-עיבוד בגלל וידוא כושל"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Moving"
|
||||
@@ -1547,10 +1549,6 @@ msgstr "\"%s\" אל \"%s\" שגיאה בשינוי שם"
|
||||
msgid "Failed to move files"
|
||||
msgstr "נכשל בהעברת קבצים"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "מריץ תסריט"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "%s מריץ תסריט משתמש"
|
||||
@@ -1569,9 +1567,9 @@ msgstr "עוד"
|
||||
|
||||
#: sabnzbd/postproc.py [Error message]
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "%s (%s) לאחר-עיבוד נכשל עבור"
|
||||
msgstr "%s (%s) בתר-עיבוד נכשל עבור"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "ראה קובץ יומן"
|
||||
|
||||
@@ -1597,7 +1595,7 @@ msgstr "%s לא יכול ליצור תיקייה סופית"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Post-processing"
|
||||
msgstr "לאחר-עיבוד"
|
||||
msgstr "בתר-עיבוד"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "[%s] No par2 sets"
|
||||
@@ -1833,11 +1831,11 @@ msgstr "השהה הכל"
|
||||
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler]
|
||||
msgid "Pause post-processing"
|
||||
msgstr "השהה לאחר-עיבוד"
|
||||
msgstr "השהה בתר-עיבוד"
|
||||
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler]
|
||||
msgid "Resume post-processing"
|
||||
msgstr "המשך לאחר-עיבוד"
|
||||
msgstr "המשך בתר-עיבוד"
|
||||
|
||||
#: sabnzbd/skintext.py [#: Config->Scheduler]
|
||||
msgid "Read RSS feeds"
|
||||
@@ -3157,11 +3155,11 @@ msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Post-Process Only Verified Jobs"
|
||||
msgstr "בצע לאחר-עיבוד רק על עבודות שוודאו"
|
||||
msgstr "בצע בתר-עיבוד רק על עבודות שוודאו"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Only perform post-processing on jobs that passed all PAR2 checks."
|
||||
msgstr ".PAR2-בצע לאחר-עיבוד רק בעבודות שעברו את כל בדיקות ה"
|
||||
msgstr ".PAR2-בצע בתר-עיבוד רק בעבודות שעברו את כל בדיקות ה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Action when encrypted RAR is downloaded"
|
||||
@@ -3288,8 +3286,8 @@ msgid ""
|
||||
"Use temporary names during post processing. Disable when your system doesn't "
|
||||
"handle that properly."
|
||||
msgstr ""
|
||||
".השתמש בשמות זמניים במהלך לאחר-עיבוד. השבת כאשר המערכת שלך אינה מתמודדת עם "
|
||||
"זה כראוי"
|
||||
".השתמש בשמות זמניים במהלך בתר-עיבוד. השבת כאשר המערכת שלך אינה מתמודדת עם זה "
|
||||
"כראוי"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pre-queue user script"
|
||||
@@ -3381,12 +3379,12 @@ msgstr ".SABnzbd הפעל את דפדפן ברירת המחדל בעת התחל
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Pause Downloading During Post-Processing"
|
||||
msgstr "השהה הורדה במהלך לאחר-עיבוד"
|
||||
msgstr "השהה הורדה במהלך בתר-עיבוד"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"Pauses downloading at the start of post processing and resumes when finished."
|
||||
msgstr ".משהה הורדה בתחילת לאחר-עיבוד וממשיך בסיום"
|
||||
msgstr ".משהה הורדה בתחילת בתר-עיבוד וממשיך בסיום"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Ignore Samples"
|
||||
@@ -3415,7 +3413,7 @@ msgstr "שרת"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Post processing"
|
||||
msgstr "לאחר-עיבוד"
|
||||
msgstr "בתר-עיבוד"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Naming"
|
||||
@@ -3477,7 +3475,7 @@ msgstr "SSL צפני"
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ".חלש יותר SSL הגבר ביצועים ע\"י אילוץ חוזק הצפנת"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "ניסיונות חוזרים מרביים"
|
||||
|
||||
@@ -4121,6 +4119,10 @@ msgstr "1x05 תיקיית פרק"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 תיקיית פרק"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "שם עבודה בתור שם קובץ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "כותר"
|
||||
@@ -4190,8 +4192,8 @@ msgid "Original Filename"
|
||||
msgstr "שם מקורי של קובץ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "שם קובץ מקורי"
|
||||
msgid "Original Job Name"
|
||||
msgstr "שם עבודה מקורי"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4209,10 +4211,6 @@ msgstr "text"
|
||||
msgid "file"
|
||||
msgstr "קובץ"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "תיקייה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "מיין מחרוזת"
|
||||
@@ -4560,6 +4558,14 @@ msgstr "...השהה למשך"
|
||||
msgid "Refresh"
|
||||
msgstr "רענן"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
".מוסרים באופן אוטומטי מהיומן ומהעותק הכלול של ההגדרות שלך API-כל שמות "
|
||||
"המשתמש, הסיסמאות ומפתחות ה"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "מיין לפי גיל <small>החדש ביותר→הישן ביותר</small>"
|
||||
@@ -4924,16 +4930,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr ".%s אנו ממליצים לנסות את ?usenet אין לך ספק"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "(%s) שגיאה בהשגת מידע טלוויזיה"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "%s אל %s:נכשל בשינוי שם"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "%s אל %s :נכשל בשינוי שם של קובץ דומה"
|
||||
|
||||
@@ -4977,6 +4983,9 @@ msgstr "%s ;משיכת כתובת נכשלה"
|
||||
#~ msgid "Skip"
|
||||
#~ msgstr "דלג"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "תיקייה"
|
||||
|
||||
#~ msgid "OK"
|
||||
#~ msgstr "אישור"
|
||||
|
||||
@@ -5005,6 +5014,9 @@ msgstr "%s ;משיכת כתובת נכשלה"
|
||||
#~ "Replace illegal characters in folder names by equivalents (otherwise remove)."
|
||||
#~ msgstr ".(החלף תווים בלתי חוקיים בשמות תיקיות בשווי ערך (אחרת יימחקו"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "שם קובץ מקורי"
|
||||
|
||||
#~ msgid "Folder \"%s\" does not exist"
|
||||
#~ msgstr "אינה קיימת \"%s\" התיקייה"
|
||||
|
||||
@@ -5014,6 +5026,9 @@ msgstr "%s ;משיכת כתובת נכשלה"
|
||||
#~ msgid "CRC Error in %s (%s -> %s)"
|
||||
#~ msgstr "%s (%s -> %s)-ב CRC שגיאת"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "...חפיסה ראשית לא נמצאה"
|
||||
|
||||
#~ msgid "It is likely that you are using ZoneAlarm on Vista.<br>"
|
||||
#~ msgstr ".Vista על ZoneAlarm-סביר להניח שאתה משתמש ב<br>"
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+0000\n"
|
||||
"PO-Revision-Date: 2017-09-03 14:07+0000\n"
|
||||
"Last-Translator: Steffen Bærø <steffen.baro@gmail.com>\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-10-26 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -559,6 +559,12 @@ msgstr "Kunne ikke stenge e-post-tilkobling"
|
||||
msgid "Email succeeded"
|
||||
msgstr "E-post sendning lykkes"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Kan ikke finne e-post-maler i %s"
|
||||
@@ -758,7 +764,7 @@ msgstr "h"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Kan ikke opprette mappe %s"
|
||||
|
||||
@@ -788,6 +794,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Kunne ikke endre rettigheter på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Kjører skript"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -963,6 +973,7 @@ msgstr "Starter reparasjon"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "Par verifisering feilet på %s, mens hurtigsjekk var vellykket!"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -990,10 +1001,6 @@ msgstr "[%s] Verifiseing tok %s, alle filer er ok"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Verifisering tok %s, krever reparasjon"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Hovedarkiv mangler..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1104,11 +1111,6 @@ msgstr "Andre meldinger"
|
||||
msgid "Not available"
|
||||
msgstr "Ikke tilgjengelig"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Klarte ikke å sende Prowl melding"
|
||||
@@ -1546,10 +1548,6 @@ msgstr "Kunne ikke endre navn fra \"%s\" til \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Klarte ikke å flytte filer"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Kjører skript"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Kjør brukerskript %s"
|
||||
@@ -1570,7 +1568,7 @@ msgstr "Mer"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Etterbehandling mislyktes for %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "se loggfil"
|
||||
|
||||
@@ -3476,7 +3474,7 @@ msgstr ""
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Maksimum antall forsøk"
|
||||
|
||||
@@ -4114,6 +4112,10 @@ msgstr "1x05 Episodemappe"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episodemappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Tittel"
|
||||
@@ -4183,8 +4185,8 @@ msgid "Original Filename"
|
||||
msgstr "Originalfilnavn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Originalt mappenavn"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4202,10 +4204,6 @@ msgstr "tekst"
|
||||
msgid "file"
|
||||
msgstr "fil"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "mappe"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Sorteringsstreng"
|
||||
@@ -4553,6 +4551,12 @@ msgstr "Pause i..."
|
||||
msgid "Refresh"
|
||||
msgstr "Oppdatere"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sorter etter alder <small>Eldst→Ny</small>"
|
||||
@@ -4921,16 +4925,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Har du ikke noen usenet leverandør? Vi anbefaler å prøve %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Kunne ikke hente TV info (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Kunne ikke endre navn fra: %s til %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Kunne ikke endre navn på lik fil: %s til %s"
|
||||
|
||||
@@ -5013,6 +5017,9 @@ msgstr "URL henting mislyktes; %s"
|
||||
#~ msgid "Unpacking failed, an expected file was not unpacked"
|
||||
#~ msgstr "Utpakking mislyktes, en forventet fil er ikke utpakket"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Hovedarkiv mangler..."
|
||||
|
||||
#~ msgid "Error importing OpenSSL module. Connecting with NON-SSL"
|
||||
#~ msgstr "Mislyktes med importering av OpenSSL modul. Kobler til uten SSL"
|
||||
|
||||
@@ -5442,6 +5449,9 @@ msgstr "URL henting mislyktes; %s"
|
||||
#~ msgid "Open Source URL"
|
||||
#~ msgstr "Åpen kildekode URL"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Originalt mappenavn"
|
||||
|
||||
#~ msgid "Groups / Indexer tags"
|
||||
#~ msgstr "Grupper / Indeks etiketter"
|
||||
|
||||
@@ -5507,3 +5517,6 @@ msgstr "URL henting mislyktes; %s"
|
||||
#~ msgstr ""
|
||||
#~ "Send automatisk beregnet valideringsresultater for nedlastinger til "
|
||||
#~ "indekserer."
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "mappe"
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"PO-Revision-Date: 2017-10-20 09:43+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+0000\n"
|
||||
"PO-Revision-Date: 2017-12-08 10:47+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-10-26 05:45+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-09 05:32+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -581,6 +581,12 @@ msgstr "Beëindigen e-mailverbinding mislukt"
|
||||
msgid "Email succeeded"
|
||||
msgstr "E-mail verzonden"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Geen e-mailsjablonen te vinden in %s"
|
||||
@@ -752,6 +758,8 @@ msgstr "Incorrecte parameter"
|
||||
msgid ""
|
||||
"Category folder cannot be a subfolder of the Temporary Download Folder."
|
||||
msgstr ""
|
||||
"Een Categorie specifieke map mag niet een map in de Tijdelijke download map "
|
||||
"zijn."
|
||||
|
||||
#: sabnzbd/interface.py # sabnzbd/interface.py
|
||||
msgid "Back"
|
||||
@@ -781,7 +789,7 @@ msgstr "h"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Niet mogelijk directory %s aan te maken"
|
||||
|
||||
@@ -814,6 +822,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Toegangsrechten van %s niet aan te passen"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Script uitvoeren"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -989,6 +1001,7 @@ msgstr "Reparatie starten"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "Par-verificatie van %s misgelukt, maar QuickCheck wel gelukt."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -1016,10 +1029,6 @@ msgstr "[%s] %s geverifieerd, alle bestanden zijn goed"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Geverifieerd in %s, reparatie is nodig"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Hoofdpakket niet gevonden..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1134,11 +1143,6 @@ msgstr "Andere berichten"
|
||||
msgid "Not available"
|
||||
msgstr "Niet beschikbaar"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Verzenden van Prowl-bericht mislukt"
|
||||
@@ -1583,10 +1587,6 @@ msgstr "Fout bij hernoemen van \"%s\" tot \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Verplaatsen van bestanden mislukt"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Script uitvoeren"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Gebruiker script %s loopt"
|
||||
@@ -1607,7 +1607,7 @@ msgstr "Meer"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Nabewerking van %s mislukt (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "zie logbestand"
|
||||
|
||||
@@ -3555,7 +3555,7 @@ msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
"Verhoog de prestaties door een eenvoudigere SSL versleuteling toe te passen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Maximum aantal pogingen"
|
||||
|
||||
@@ -4214,6 +4214,10 @@ msgstr "1x05 Aflevering-map"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Aflevering-map"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr "Downloadnaam als Bestandsnaam"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
@@ -4283,8 +4287,8 @@ msgid "Original Filename"
|
||||
msgstr "Originele bestandsnaam"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Oorspronkelijke mapnaam"
|
||||
msgid "Original Job Name"
|
||||
msgstr "Originele Downloadnaam"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4302,10 +4306,6 @@ msgstr "tekst"
|
||||
msgid "file"
|
||||
msgstr "bestand"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "map"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Sorteertekst"
|
||||
@@ -4654,6 +4654,14 @@ msgstr "Pauzeer..."
|
||||
msgid "Refresh"
|
||||
msgstr "Ververs"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
"Alle gebruikersnamen, wachtwoorden en API-sleutels worden automatisch "
|
||||
"verwijderd uit het logbestand en de bijgevoegde kopie van je instellingen."
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sorteer op Leeftijd <small>Oud→Nieuw</small>"
|
||||
@@ -5021,16 +5029,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Heb je nog geen Usenet provider? Wij bevelen %s aan."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Fout bij ophalen TV info (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Hernoemen van %s tot %s mislukt"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Hernoemen van gelijkaardig bestand %s naar %s mislukt"
|
||||
|
||||
@@ -5108,6 +5116,9 @@ msgstr "URL ophalen mislukt; %s"
|
||||
#~ msgid "pyopenssl module missing, please install for https access"
|
||||
#~ msgstr "Module \"pyopenssl\" ontbreekt, geen HTTPS mogelijk"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Hoofdpakket niet gevonden..."
|
||||
|
||||
#~ msgid "Failed to remove nzo from postproc queue (id)"
|
||||
#~ msgstr "Verwijderen van nzo van nabewerkingswachtrij mislukt"
|
||||
|
||||
@@ -5430,6 +5441,12 @@ msgstr "URL ophalen mislukt; %s"
|
||||
#~ msgid "OK"
|
||||
#~ msgstr "OK"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "map"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Oorspronkelijke mapnaam"
|
||||
|
||||
#~ msgid "Groups / Indexer tags"
|
||||
#~ msgstr "Groepen / Indexer markeringen"
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+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-10-26 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -561,6 +561,12 @@ msgstr "Nie udało się zamknąć połączenia z serwerem pocztowym"
|
||||
msgid "Email succeeded"
|
||||
msgstr "Wiadomość wysłana"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Brak szablonów wiadomości email w %s"
|
||||
@@ -761,7 +767,7 @@ msgstr "g"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Nie można utworzyć katalogu %s"
|
||||
|
||||
@@ -791,6 +797,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Nie można zmienić uprawnień %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Uruchamianie skryptu"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -966,6 +976,7 @@ msgstr "Rozpoczynanie naprawy"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "Weryfikacja %s nieudana, choć szybkie sprawdzenie powiodło się!"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -994,10 +1005,6 @@ msgstr "[%s] Zweryfikowano w %s, wszystkie pliki prawidłowe"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Zweryfikowano w %s, wymagana naprawa"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Główny pakiet nieznaleziony..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1109,11 +1116,6 @@ msgstr "Inne komunikaty"
|
||||
msgid "Not available"
|
||||
msgstr "Niedostępne"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Błąd wysyłania wiadomości Prowl"
|
||||
@@ -1554,10 +1556,6 @@ msgstr "Błąd zmiany nazwy \"%s\" na \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Nie udało się przenieść plików"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Uruchamianie skryptu"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Uruchamianie skryptu użytkownika %s"
|
||||
@@ -1578,7 +1576,7 @@ msgstr "Więcej"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Przetwarzanie końcowe nie powiodło się dla %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "sprawdź logi"
|
||||
|
||||
@@ -3493,7 +3491,7 @@ msgstr ""
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Maksymalna ilość prób"
|
||||
|
||||
@@ -4132,6 +4130,10 @@ msgstr "Katalog odcinka 1x05"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "Katalog odcinka S01E05"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Tytuł"
|
||||
@@ -4201,8 +4203,8 @@ msgid "Original Filename"
|
||||
msgstr "Oryginalna nazwa pliku"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Oryginalna nazwa katalogu"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4220,10 +4222,6 @@ msgstr "tekst"
|
||||
msgid "file"
|
||||
msgstr "plik"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "katalog"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Wzorzec sortowania"
|
||||
@@ -4571,6 +4569,12 @@ msgstr "Wstrzymaj na..."
|
||||
msgid "Refresh"
|
||||
msgstr "Odśwież"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sortuj według wieku <small>Najstarsze→Najnowsze</small>"
|
||||
@@ -4937,16 +4941,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Nie masz dostawcy Usenet? Polecamy spróbować %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Błąd pobierania informacji TV (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Nie udało się zmienić nazwy %s na %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Nie udało się zmienić nazwy podobnego pliku %s na %s"
|
||||
|
||||
@@ -5199,6 +5203,12 @@ msgstr "Pobieranie URL nie powiodło się; %s"
|
||||
#~ msgid "Generic Sorting"
|
||||
#~ msgstr "Sortowanie standardowe"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "katalog"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Oryginalna nazwa katalogu"
|
||||
|
||||
#~ msgid "Are you sure you want to delete"
|
||||
#~ msgstr "Czy na pewno usunąć?"
|
||||
|
||||
@@ -5279,6 +5289,9 @@ msgstr "Pobieranie URL nie powiodło się; %s"
|
||||
#~ msgid "Missing expected file: %s => unrar error?"
|
||||
#~ msgstr "Brak oczekiwanego pliku: %s => błąd rozpakowywania archiwum RAR?"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Główny pakiet nieznaleziony..."
|
||||
|
||||
#~ msgid "Error importing OpenSSL module. Connecting with NON-SSL"
|
||||
#~ msgstr "Błąd importu modułu OpenSSL. Łączenie bez SSL"
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+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-10-26 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -562,6 +562,12 @@ msgstr "Falha ao fechar a conexão de e-mail"
|
||||
msgid "Email succeeded"
|
||||
msgstr "E-mail enviado com sucesso"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Não é possível encontrar modelos de e-mail em %s"
|
||||
@@ -761,7 +767,7 @@ msgstr "h"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Não é possível criar a pasta %s"
|
||||
|
||||
@@ -791,6 +797,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Não é possível alterar permissões de %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Executando script"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -966,6 +976,7 @@ msgstr "Iniciando reparação"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "Validação de par falhou em %s, enquanto QuickCheck foi completo!"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -993,10 +1004,6 @@ msgstr "[%s] Verificado em %s. Todos os arquivos corretos"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Verificado em %s. É necessário reparar"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Pacote principal não encontrado..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1106,11 +1113,6 @@ msgstr "Outras Mensagens"
|
||||
msgid "Not available"
|
||||
msgstr "Não disponível"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Falha ao enviar mensagem Prowl"
|
||||
@@ -1552,10 +1554,6 @@ msgstr "Erro ao renomear \"%s\" para \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Falha ao mover arquivos"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Executando script"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Executando script de usuário %s"
|
||||
@@ -1576,7 +1574,7 @@ msgstr "Mais"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "O pós-processamento falhou para %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "veja o arquivo de log"
|
||||
|
||||
@@ -3490,7 +3488,7 @@ msgstr ""
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Máximo de tentativas"
|
||||
|
||||
@@ -4130,6 +4128,10 @@ msgstr "1x05 Pasta Do Episódio"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Pasta Do Episódio"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
@@ -4199,8 +4201,8 @@ msgid "Original Filename"
|
||||
msgstr "Nome do arquivo original"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Nome da pasta original"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4218,10 +4220,6 @@ msgstr "texto"
|
||||
msgid "file"
|
||||
msgstr "arquivo"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "pasta"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "String de ordenação"
|
||||
@@ -4569,6 +4567,12 @@ msgstr "Pausar por..."
|
||||
msgid "Refresh"
|
||||
msgstr "Atualizar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Ordenar por Idade <small>Mais antigo→Mais novo</small>"
|
||||
@@ -4938,16 +4942,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Não tem um provedor usenet? Recomendamos testar %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Erro ao obter informações de TV (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Falha ao renomear: %s para %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Falha ao renomear arquivo similar: %s para %s"
|
||||
|
||||
@@ -5044,6 +5048,9 @@ msgstr "A busca da URL falhou; %s"
|
||||
#~ msgid "Missing expected file: %s => unrar error?"
|
||||
#~ msgstr "Faltando arquivo esperado: %s => erro no unrar?"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Pacote principal não encontrado..."
|
||||
|
||||
#~ msgid "Invalid par2 files, cannot verify or repair"
|
||||
#~ msgstr "Arquivos PAR2 inválidos. Não é possível verificar ou reparar"
|
||||
|
||||
@@ -5367,6 +5374,12 @@ msgstr "A busca da URL falhou; %s"
|
||||
#~ msgid "Generic Sorting"
|
||||
#~ msgstr "Ordenação genérica"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Nome da pasta original"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "pasta"
|
||||
|
||||
#~ msgid "Enable sorting and renaming of episodes."
|
||||
#~ msgstr "Ativa a ordenação e renomeação de episódios."
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+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-10-26 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -564,6 +564,12 @@ msgstr "Închidere conexiune mail nereuşită"
|
||||
msgid "Email succeeded"
|
||||
msgstr "Email reuşit"
|
||||
|
||||
#: sabnzbd/emailer.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ă"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Nu pot gasi şabloane email în %s"
|
||||
@@ -764,7 +770,7 @@ msgstr "h"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Nu pot crea dosarul %s"
|
||||
|
||||
@@ -794,6 +800,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Nu pot schimba permisiunile lui %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Rulare script"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -969,6 +979,7 @@ msgstr "Pornire Reparare"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "Verificarea Par eșuată pentru %s, dar VerificareaRapidă reușită!"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -997,10 +1008,6 @@ msgstr "[%s] Verificat în %s, toate fişierele sunt corecte"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Verificat în %s, reparare necesară"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Pachet principal negăsit..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1110,11 +1117,6 @@ msgstr "Alte Mesaje"
|
||||
msgid "Not available"
|
||||
msgstr "Indisponibil"
|
||||
|
||||
#: 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ă"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Nu am putu trimite mesajul Prowl"
|
||||
@@ -1558,10 +1560,6 @@ msgstr "Eroare redenumire \"%s\" în \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Nu am putu muta fişier"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Rulare script"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Rulare script utilizator %s"
|
||||
@@ -1582,7 +1580,7 @@ msgstr "Mai mult"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Post Procesare Nereuşită pentru %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "vezi fişier jurnal"
|
||||
|
||||
@@ -3492,7 +3490,7 @@ msgstr ""
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Număr Maxim reîncercări"
|
||||
|
||||
@@ -4134,6 +4132,10 @@ msgstr "1x05 Dosar Episod"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Dosar Episod"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titlu"
|
||||
@@ -4203,8 +4205,8 @@ msgid "Original Filename"
|
||||
msgstr "Nume de Fişier Original"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Nume de Dosar Original"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4222,10 +4224,6 @@ msgstr "text"
|
||||
msgid "file"
|
||||
msgstr "fișier"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "dosar"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Şir Caractere Sortare"
|
||||
@@ -4574,6 +4572,12 @@ msgstr "Pauză timp de..."
|
||||
msgid "Refresh"
|
||||
msgstr "Reîmprospătează"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sortează după Vârstă <small>Cel mai Vechi→Cel mai Nou</small>"
|
||||
@@ -4943,16 +4947,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Nu aveţi un furnizor usenet? Vă recomandăm să încercaţi %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Eroare obţinere info TV (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Redenumire:%s în %s nereuşită"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Redenumire fişiere similare : %s în %s nereuşită"
|
||||
|
||||
@@ -5078,6 +5082,9 @@ msgstr "Descărcare URL nereuşită; %s"
|
||||
#~ msgid "Missing expected file: %s => unrar error?"
|
||||
#~ msgstr "Fişiere aşteptate lipsă: %s => eroare unrar?"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Pachet principal negăsit..."
|
||||
|
||||
#~ msgid "Error importing OpenSSL module. Connecting with NON-SSL"
|
||||
#~ msgstr "Eroare importare modul OpenSSL . Se conectează folosind NON-SSL"
|
||||
|
||||
@@ -5344,6 +5351,12 @@ msgstr "Descărcare URL nereuşită; %s"
|
||||
#~ msgid "Enable if downloads are not put in their own folders."
|
||||
#~ msgstr "Activează dacă descărcările nu sunt puse în dosarele lor."
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Nume de Dosar Original"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "dosar"
|
||||
|
||||
#~ msgid "Enable sorting and renaming of date named files."
|
||||
#~ msgstr "Activează sortarea şi redenumirea fişierelor denumite după dată."
|
||||
|
||||
|
||||
@@ -2,15 +2,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-0.7.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+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-10-26 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
@@ -551,6 +551,12 @@ msgstr "Не удалось разорвать соединение с почт
|
||||
msgid "Email succeeded"
|
||||
msgstr "Электронное письмо успешно отправлено"
|
||||
|
||||
#: sabnzbd/emailer.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 ""
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Не удаётся найти шаблонны электронных писем в %s"
|
||||
@@ -751,7 +757,7 @@ msgstr "ч"
|
||||
msgid "m"
|
||||
msgstr "м"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Не удаётся создать каталог %s"
|
||||
|
||||
@@ -781,6 +787,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Не удаётся изменить права доступа %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Запуск сценария"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -956,6 +966,7 @@ msgstr "запуск исправления"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -984,10 +995,6 @@ msgstr "[%s] Проверено за %s. Ошибок нет"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Проверено за %s. Требуется исправление"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Главный пакет не найден..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1098,11 +1105,6 @@ msgstr "Другие сообщения"
|
||||
msgid "Not available"
|
||||
msgstr ""
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr ""
|
||||
@@ -1544,10 +1546,6 @@ msgstr "Ошибка переименования «%s» и «%s»"
|
||||
msgid "Failed to move files"
|
||||
msgstr "Не удалось переместить файлы"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Запуск сценария"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Запуск пользовательского сценария %s"
|
||||
@@ -1568,7 +1566,7 @@ msgstr "Подробнее"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Ошибка пост-обработки для %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "см. журнал"
|
||||
|
||||
@@ -3469,7 +3467,7 @@ msgstr ""
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Число попыток"
|
||||
|
||||
@@ -4112,6 +4110,10 @@ msgstr "1x05 Эпизод Папка"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Эпизод Папка"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Название"
|
||||
@@ -4181,8 +4183,8 @@ msgid "Original Filename"
|
||||
msgstr "Исходное название файла"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Исходное название папки"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4200,10 +4202,6 @@ msgstr "текст"
|
||||
msgid "file"
|
||||
msgstr "файл"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "папка"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Строка сортировки"
|
||||
@@ -4550,6 +4548,12 @@ msgstr "Приостановить на..."
|
||||
msgid "Refresh"
|
||||
msgstr "Обновить"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Сортировать по возрасту <small>от старых к новым</small>"
|
||||
@@ -4922,16 +4926,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "У вас ещё нет поставщика услуг Usenet? Рекомендуем попробовать %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Не удалось получить сведения о ТВ (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Не удалось переименовать: %s в %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Не удалось переименовать похожий файл: %s в %s"
|
||||
|
||||
@@ -5032,6 +5036,9 @@ msgstr "Не удалось загрузить URL: %s"
|
||||
#~ msgid "Unpacking failed, these file(s) are missing:"
|
||||
#~ msgstr "Ошибка распаковки: отсутствуют следующие файлы:"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Главный пакет не найден..."
|
||||
|
||||
#~ msgid "Invalid par2 files, cannot verify or repair"
|
||||
#~ msgstr "Недопустимые PAR2-файлы. Нельзя выполнить проверку или исправление"
|
||||
|
||||
@@ -5377,6 +5384,12 @@ msgstr "Не удалось загрузить URL: %s"
|
||||
#~ msgid "Enable if downloads are not put in their own folders."
|
||||
#~ msgstr "Включите, если загрузки не размещаются в собственных папках."
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Исходное название папки"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "папка"
|
||||
|
||||
#~ msgid "Enable sorting and renaming of date named files."
|
||||
#~ msgstr "Позволяет сортировать и переименовывать файлы с датой в названии."
|
||||
|
||||
|
||||
@@ -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-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+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-10-26 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -556,6 +556,12 @@ msgstr "Неуспешно затварање везе е-поште"
|
||||
msgid "Email succeeded"
|
||||
msgstr "Упешно слање е-поште"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Немогуће наћи модел е-поруке у %s"
|
||||
@@ -753,7 +759,7 @@ msgstr "с"
|
||||
msgid "m"
|
||||
msgstr "м"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Немогуће креирати фасциклу %s"
|
||||
|
||||
@@ -783,6 +789,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Не може да се промене дозволе од %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Покретање скрипта"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -958,6 +968,7 @@ msgstr "Покретање пооправљања"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "Par provera neuspešna na %s, dok je QuickCheck uspešan!"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -986,10 +997,6 @@ msgstr "[%s] Проверено за %s, све датотеке су добре
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Проверено за %s, потребна је поправка"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Главни пакет није нађен..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1099,11 +1106,6 @@ msgstr "Остале поруке"
|
||||
msgid "Not available"
|
||||
msgstr "Недоступно"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Неуспешно слање Prowl поруке"
|
||||
@@ -1538,10 +1540,6 @@ msgstr "Грешка преименовања \"%s\" у \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Неуспешно премештање датотека"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Покретање скрипта"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Покретање скрипта %s"
|
||||
@@ -1562,7 +1560,7 @@ msgstr "Више"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Грешка пост-процесирања за %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "видети извештај"
|
||||
|
||||
@@ -3461,7 +3459,7 @@ msgstr ""
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Макс покушаја"
|
||||
|
||||
@@ -4098,6 +4096,10 @@ msgstr "1x05 Фасцикла епизоде"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Фасцикла епизоде"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Наслов"
|
||||
@@ -4167,8 +4169,8 @@ msgid "Original Filename"
|
||||
msgstr "Оригинално име датотеке"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Оригинално име фасцикле"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4186,10 +4188,6 @@ msgstr "текст"
|
||||
msgid "file"
|
||||
msgstr "датотека"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "фасцикла"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Уреди низ"
|
||||
@@ -4537,6 +4535,12 @@ msgstr "Паузирај за..."
|
||||
msgid "Refresh"
|
||||
msgstr "Освежи"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Среди по старост <small>Старије→Новије</small>"
|
||||
@@ -4903,16 +4907,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Немате 'usenet' провајдер? Препоручујемо Вам %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Грешка преузимању ТВ инфо (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Неуспешно преименовање : %s у %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Неуспешно преименовање сличне датотеке: %s у %s"
|
||||
|
||||
@@ -5016,6 +5020,12 @@ msgstr "Погрешно учитавање УРЛ-а; %s"
|
||||
#~ msgid "Enable sorting and renaming of date named files."
|
||||
#~ msgstr "Упали сређивање и преименовање датотеке са датумом"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "фасцикла"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Оригинално име фасцикле"
|
||||
|
||||
#~ msgid "Enable generic sorting and renaming of files."
|
||||
#~ msgstr "Упали генерално сортирање/преименовање датотеке."
|
||||
|
||||
@@ -5272,6 +5282,9 @@ msgstr "Погрешно учитавање УРЛ-а; %s"
|
||||
#~ msgid "Unpacking failed, these file(s) are missing:"
|
||||
#~ msgstr "Неуспешан издвој, ове датотеке недостају:"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Главни пакет није нађен..."
|
||||
|
||||
#~ msgid "KB/s"
|
||||
#~ msgstr "КБ/с"
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+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-10-26 05:46+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -556,6 +556,12 @@ msgstr "Det gick inte att stänga e-mail anslutning"
|
||||
msgid "Email succeeded"
|
||||
msgstr "E-mail sändning lyckades"
|
||||
|
||||
#: sabnzbd/emailer.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"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "Kan ej finna e-mail mallar i %s"
|
||||
@@ -757,7 +763,7 @@ msgstr "h"
|
||||
msgid "m"
|
||||
msgstr "m"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "Kan ej skapa mapp %s"
|
||||
|
||||
@@ -787,6 +793,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "Det gick inte att ändra rättigheter på %s"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Kör skript"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -962,6 +972,7 @@ msgstr "Startar reparation"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "Par verifiering misslyckades på %s, medans QuickCheck lyckades!"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -990,10 +1001,6 @@ msgstr "[%s] Verifierad i %s, alla filer är ok"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] Verifiering i %s, kräver reparation"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "Huvudarkiv saknas..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1104,11 +1111,6 @@ msgstr "Andra meddelanden"
|
||||
msgid "Not available"
|
||||
msgstr "Ej tillgänglig"
|
||||
|
||||
#: 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"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "Misslyckades att skicka Prowlmeddelande"
|
||||
@@ -1549,10 +1551,6 @@ msgstr "Det gick inte att döpa om \"%s\" till \"%s\""
|
||||
msgid "Failed to move files"
|
||||
msgstr "Misslyckades med att flytta filer"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "Kör skript"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "Kör användarskript %s"
|
||||
@@ -1573,7 +1571,7 @@ msgstr "Mer"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "Efterbehandling misslyckades för %s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "se loggfil"
|
||||
|
||||
@@ -3476,7 +3474,7 @@ msgstr ""
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "Max antal omförsök"
|
||||
|
||||
@@ -4113,6 +4111,10 @@ msgstr "1x05 Episodmapp"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 Episodmapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
@@ -4182,8 +4184,8 @@ msgid "Original Filename"
|
||||
msgstr "Originalfilnamn"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "Ursprungliga mappnamnet"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4201,10 +4203,6 @@ msgstr "text"
|
||||
msgid "file"
|
||||
msgstr "fil"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "mapp"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "Sorteringssträng"
|
||||
@@ -4551,6 +4549,12 @@ msgstr "Pausa i..."
|
||||
msgid "Refresh"
|
||||
msgstr "Uppdatera"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "Sortera efter ålder <small>Äldst→Nyast</small>"
|
||||
@@ -4922,16 +4926,16 @@ msgstr ""
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "Har du inte någon usenet leverantör? Vi rekommenderar att prova %s."
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "Det gick inte att hämta TV info (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "Det gick inte att döpa om: %s till %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "Det gick inte att döpa om liknande fil: %s till %s"
|
||||
|
||||
@@ -5027,6 +5031,9 @@ msgstr "URL hämtning misslyckades; %s"
|
||||
#~ msgid "Unpacking failed, an expected file was not unpacked"
|
||||
#~ msgstr "Uppackning misslyckades, en väntad fil är inte uppackad"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "Huvudarkiv saknas..."
|
||||
|
||||
#~ msgid "Error importing OpenSSL module. Connecting with NON-SSL"
|
||||
#~ msgstr "Misslyckades med importering av OpenSSL modul. Ansluter utan SSL"
|
||||
|
||||
@@ -5461,6 +5468,12 @@ msgstr "URL hämtning misslyckades; %s"
|
||||
#~ msgid "Groups / Indexer tags"
|
||||
#~ msgstr "Grupper/Indexering-tagg"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "mapp"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "Ursprungliga mappnamnet"
|
||||
|
||||
#~ msgid "E.g. 119 or 563 for SSL"
|
||||
#~ msgstr "T.ex. 119 eller 563 för SSL"
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2017-10-25 23:30+0000\n"
|
||||
"POT-Creation-Date: 2017-12-06 10:30+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-10-26 05:47+0000\n"
|
||||
"X-Generator: Launchpad (build 18484)\n"
|
||||
"X-Launchpad-Export-Date: 2017-12-07 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 18511)\n"
|
||||
|
||||
#: SABnzbd.py [Error message]
|
||||
msgid "Failed to start web-interface"
|
||||
@@ -550,6 +550,12 @@ msgstr "无法关闭邮件连接"
|
||||
msgid "Email succeeded"
|
||||
msgstr "成功发送电子邮件"
|
||||
|
||||
#: sabnzbd/emailer.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 "无法发送,缺少必要的数据"
|
||||
|
||||
#: sabnzbd/emailer.py [Error message]
|
||||
msgid "Cannot find email templates in %s"
|
||||
msgstr "无法找到 email 模板:%s"
|
||||
@@ -740,7 +746,7 @@ msgstr "小时"
|
||||
msgid "m"
|
||||
msgstr "分钟"
|
||||
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/misc.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
msgid "Cannot create directory %s"
|
||||
msgstr "无法创建目录 %s"
|
||||
|
||||
@@ -770,6 +776,10 @@ msgstr ""
|
||||
msgid "Cannot change permissions of %s"
|
||||
msgstr "无法更改 %s 的权限"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "正在执行脚本"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/postproc.py
|
||||
@@ -945,6 +955,7 @@ msgstr "正在开始修复"
|
||||
msgid "Par verify failed on %s, while QuickCheck succeeded!"
|
||||
msgstr "Par 验证失败:%s,但快速检查成功!"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Repairing failed, %s"
|
||||
@@ -971,10 +982,6 @@ msgstr "[%s] 验证耗时 %s,所有文件均完好无损"
|
||||
msgid "[%s] Verified in %s, repair is required"
|
||||
msgstr "[%s] 验证耗时 %s,需要修复"
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid "Main packet not found..."
|
||||
msgstr "主数据包未找到..."
|
||||
|
||||
#: sabnzbd/newsunpack.py # sabnzbd/newsunpack.py
|
||||
msgid ""
|
||||
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
|
||||
@@ -1084,11 +1091,6 @@ msgstr "其他信息"
|
||||
msgid "Not available"
|
||||
msgstr "不可用"
|
||||
|
||||
#: 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 "无法发送,缺少必要的数据"
|
||||
|
||||
#: sabnzbd/notifier.py [Warning message] # sabnzbd/notifier.py
|
||||
msgid "Failed to send Prowl message"
|
||||
msgstr "无法发送 Prowl 消息"
|
||||
@@ -1522,10 +1524,6 @@ msgstr "将 \"%s\" 重命名为 \"%s\" 出错"
|
||||
msgid "Failed to move files"
|
||||
msgstr "移动文件失败"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running script"
|
||||
msgstr "正在执行脚本"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
msgid "Running user script %s"
|
||||
msgstr "正在执行用户脚本 %s"
|
||||
@@ -1546,7 +1544,7 @@ msgstr "更多"
|
||||
msgid "Post Processing Failed for %s (%s)"
|
||||
msgstr "后期处理失败:%s (%s)"
|
||||
|
||||
#: sabnzbd/postproc.py
|
||||
#: sabnzbd/postproc.py [Error message] # sabnzbd/postproc.py
|
||||
msgid "see logfile"
|
||||
msgstr "查看日志文件"
|
||||
|
||||
@@ -3406,7 +3404,7 @@ msgstr "SSL 加密算法"
|
||||
msgid "Increase performance by forcing a lower SSL encryption strength."
|
||||
msgstr "降低 SSL 的加密难度以便获得更高的性能。"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
#: sabnzbd/skintext.py # sabnzbd/urlgrabber.py
|
||||
msgid "Maximum retries"
|
||||
msgstr "最多重试次数"
|
||||
|
||||
@@ -4041,6 +4039,10 @@ msgstr "1x05 剧集文件夹"
|
||||
msgid "S01E05 Episode Folder"
|
||||
msgstr "S01E05 剧集文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Job Name as Filename"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Title"
|
||||
msgstr "标题"
|
||||
@@ -4110,8 +4112,8 @@ msgid "Original Filename"
|
||||
msgstr "原始文件名"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Original Foldername"
|
||||
msgstr "原始文件夹名"
|
||||
msgid "Original Job Name"
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Lower Case"
|
||||
@@ -4129,10 +4131,6 @@ msgstr "text"
|
||||
msgid "file"
|
||||
msgstr "文件"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "folder"
|
||||
msgstr "文件夹"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort String"
|
||||
msgstr "排序字串"
|
||||
@@ -4477,6 +4475,12 @@ msgstr "暂停..."
|
||||
msgid "Refresh"
|
||||
msgstr "刷新"
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid ""
|
||||
"All usernames, passwords and API-keys are automatically removed from the log "
|
||||
"and the included copy of your settings."
|
||||
msgstr ""
|
||||
|
||||
#: sabnzbd/skintext.py
|
||||
msgid "Sort by Age <small>Oldest→Newest</small>"
|
||||
msgstr "按发布时间排序 <small>最早→最新</small>"
|
||||
@@ -4837,16 +4841,16 @@ msgstr "要从 usenet 下载您需要有一家提供商的访问权限。您的
|
||||
msgid "Don't have a usenet provider? We recommend trying %s."
|
||||
msgstr "还没有 usenet 提供商r? 我们推荐试试 %s。"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Error getting TV info (%s)"
|
||||
msgstr "获取 TV 信息出错 (%s)"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message] # sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message] # sabnzbd/sorting.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename: %s to %s"
|
||||
msgstr "重命名失败: %s 为 %s"
|
||||
|
||||
#: sabnzbd/tvsort.py [Error message]
|
||||
#: sabnzbd/sorting.py [Error message]
|
||||
msgid "Failed to rename similar file: %s to %s"
|
||||
msgstr "重命名相似文件失败: %s 为 %s"
|
||||
|
||||
@@ -4943,6 +4947,9 @@ msgstr "URL 装取失败; %s"
|
||||
#~ msgid "Unpacking failed, these file(s) are missing:"
|
||||
#~ msgstr "解压失败,缺这些文件:"
|
||||
|
||||
#~ msgid "Main packet not found..."
|
||||
#~ msgstr "主数据包未找到..."
|
||||
|
||||
#~ msgid "Invalid par2 files, cannot verify or repair"
|
||||
#~ msgstr "par2 文件无效,无法验证或修复"
|
||||
|
||||
@@ -5272,6 +5279,12 @@ msgstr "URL 装取失败; %s"
|
||||
#~ msgid "Enable if downloads are not put in their own folders."
|
||||
#~ msgstr "启用可将下载内容存放在各自的文件夹。"
|
||||
|
||||
#~ msgid "Original Foldername"
|
||||
#~ msgstr "原始文件夹名"
|
||||
|
||||
#~ msgid "folder"
|
||||
#~ msgstr "文件夹"
|
||||
|
||||
#~ msgid "Enable sorting and renaming of date named files."
|
||||
#~ msgstr "启用按日期命名的文件的排序与重命名。"
|
||||
|
||||
|
||||
@@ -278,7 +278,7 @@ def initialize(pause_downloader=False, clean_up=False, evalSched=False, repair=0
|
||||
sabnzbd.encoding.change_fsys(cfg.fsys_type())
|
||||
|
||||
# Set cache limit
|
||||
if not cfg.cache_limit() or (cfg.cache_limit() == '200M' and (sabnzbd.WIN32 or sabnzbd.DARWIN)):
|
||||
if not cfg.cache_limit() or (cfg.cache_limit() in ('200M', '450M') and (sabnzbd.WIN32 or sabnzbd.DARWIN)):
|
||||
cfg.cache_limit.set(misc.get_cache_limit())
|
||||
ArticleCache.do.new_limit(cfg.cache_limit.get_int())
|
||||
|
||||
|
||||
@@ -681,12 +681,11 @@ def _api_rescan(name, output, kwargs):
|
||||
|
||||
def _api_eval_sort(name, output, kwargs):
|
||||
""" API: evaluate sorting expression """
|
||||
import sabnzbd.tvsort
|
||||
name = kwargs.get('name', '')
|
||||
value = kwargs.get('value', '')
|
||||
title = kwargs.get('title')
|
||||
multipart = kwargs.get('movieextra', '')
|
||||
path = sabnzbd.tvsort.eval_sort(value, title, name, multipart)
|
||||
path = sabnzbd.sorting.eval_sort(value, title, name, multipart)
|
||||
if path is None:
|
||||
return report(output, _MSG_NOT_IMPLEMENTED)
|
||||
else:
|
||||
@@ -903,8 +902,8 @@ def _api_server_stats(name, output, kwargs):
|
||||
|
||||
stats['servers'] = {}
|
||||
for svr in config.get_servers():
|
||||
t, m, w, d, _ = BPSMeter.do.amounts(svr)
|
||||
stats['servers'][svr] = {'total': t or 0, 'month': m or 0, 'week': w or 0, 'day': d or 0}
|
||||
t, m, w, d, daily = BPSMeter.do.amounts(svr)
|
||||
stats['servers'][svr] = {'total': t or 0, 'month': m or 0, 'week': w or 0, 'day': d or 0, 'daily': daily or {} }
|
||||
|
||||
return report(output, keyword='', data=stats)
|
||||
|
||||
@@ -1687,7 +1686,7 @@ def build_queue_header(search=None, start=0, limit=0, output=None):
|
||||
bytes = qnfo.bytes
|
||||
|
||||
header['kbpersec'] = "%.2f" % (bytespersec / KIBI)
|
||||
header['speed'] = to_units(bytespersec, spaces=1, dec_limit=1)
|
||||
header['speed'] = to_units(bytespersec, spaces=1)
|
||||
header['mbleft'] = "%.2f" % (bytesleft / MEBI)
|
||||
header['mb'] = "%.2f" % (bytes / MEBI)
|
||||
header['sizeleft'] = format_bytes(bytesleft)
|
||||
|
||||
@@ -82,23 +82,24 @@ class ArticleCache(object):
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def save_article(self, article, data):
|
||||
nzf = article.nzf
|
||||
nzo = nzf.nzo
|
||||
|
||||
if nzo.is_gone():
|
||||
if article.nzf.nzo.is_gone():
|
||||
# Do not discard this article because the
|
||||
# file might still be processed at this moment!!
|
||||
return
|
||||
|
||||
saved_articles = article.nzf.nzo.saved_articles
|
||||
# Register article
|
||||
if article not in article.nzf.nzo.saved_articles:
|
||||
article.nzf.nzo.saved_articles.append(article)
|
||||
|
||||
if article not in saved_articles:
|
||||
saved_articles.append(article)
|
||||
if article.lowest_partnum and not article.nzf.import_finished:
|
||||
# Write the first-fetched articles to disk
|
||||
# Otherwise the cache could overflow
|
||||
self.__flush_article(article, data)
|
||||
return
|
||||
|
||||
if self.__cache_limit:
|
||||
if self.__cache_limit < 0:
|
||||
self.__add_to_cache(article, data)
|
||||
|
||||
else:
|
||||
data_size = len(data)
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ class Assembler(Thread):
|
||||
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.downloader.Downloader.do.pause()
|
||||
sabnzbd.emailer.diskfull()
|
||||
# Abort all direct unpackers, just to be sure
|
||||
sabnzbd.directunpacker.abort_all()
|
||||
@@ -98,7 +98,7 @@ class Assembler(Thread):
|
||||
filepath = self.assemble(nzf, filepath)
|
||||
except IOError, (errno, strerror):
|
||||
# If job was deleted or in active post-processing, ignore error
|
||||
if not nzo.is_gone() and not nzo.pp_active:
|
||||
if not nzo.deleted and not nzo.is_gone() and not nzo.pp_active:
|
||||
# 28 == disk full => pause downloader
|
||||
if errno == 28:
|
||||
logging.error(T('Disk full! Forcing Pause'))
|
||||
@@ -107,7 +107,7 @@ class Assembler(Thread):
|
||||
# Log traceback
|
||||
logging.info('Traceback: ', exc_info=True)
|
||||
# Pause without saving
|
||||
sabnzbd.downloader.Downloader.do.pause(save=False)
|
||||
sabnzbd.downloader.Downloader.do.pause()
|
||||
continue
|
||||
except:
|
||||
logging.error(T('Fatal error in Assembler'), exc_info=True)
|
||||
@@ -371,5 +371,5 @@ def remove_warning_label(msg):
|
||||
""" Standardize errors by removing obsolete
|
||||
"WARNING:" part in all languages """
|
||||
if ':' in msg:
|
||||
return msg.split(':')[1]
|
||||
return msg.split(':')[1].strip()
|
||||
return msg
|
||||
|
||||
@@ -51,7 +51,7 @@ RENAMES_FILE = '__renames__'
|
||||
ATTRIB_FILE = 'SABnzbd_attrib'
|
||||
REPAIR_REQUEST = 'repair-all.sab'
|
||||
|
||||
SABYENC_VERSION_REQUIRED = '3.3.1'
|
||||
SABYENC_VERSION_REQUIRED = '3.3.2'
|
||||
|
||||
DB_HISTORY_VERSION = 1
|
||||
DB_HISTORY_NAME = 'history%s.db' % DB_HISTORY_VERSION
|
||||
@@ -74,9 +74,11 @@ DEF_WORKDIR = 'sabnzbd'
|
||||
DEF_LOG_FILE = 'sabnzbd.log'
|
||||
DEF_LOG_ERRFILE = 'sabnzbd.error.log'
|
||||
DEF_LOG_CHERRY = 'cherrypy.log'
|
||||
DEF_CACHE_LIMIT = '450M'
|
||||
DEF_ARTICLE_CACHE_DEFAULT = '500M'
|
||||
DEF_ARTICLE_CACHE_MAX = '1G'
|
||||
DEF_TIMEOUT = 60
|
||||
DEF_SCANRATE = 5
|
||||
MAX_URL_RETRIES = 10
|
||||
MAX_DECODE_QUEUE = 10
|
||||
LIMIT_DECODE_QUEUE = 100
|
||||
MAX_WARNINGS = 20
|
||||
|
||||
@@ -48,8 +48,8 @@ try:
|
||||
import sabyenc
|
||||
SABYENC_ENABLED = True
|
||||
SABYENC_VERSION = sabyenc.__version__
|
||||
# Verify version
|
||||
if SABYENC_VERSION != SABYENC_VERSION_REQUIRED:
|
||||
# Verify version to at least match minor version
|
||||
if SABYENC_VERSION[:3] != SABYENC_VERSION_REQUIRED[:3]:
|
||||
raise ImportError
|
||||
except ImportError:
|
||||
SABYENC_ENABLED = False
|
||||
@@ -131,8 +131,7 @@ class Decoder(Thread):
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
|
||||
sabnzbd.downloader.Downloader.do.pause()
|
||||
article.fetcher = None
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(nzf, nzo)
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(article)
|
||||
register = False
|
||||
|
||||
except MemoryError, e:
|
||||
@@ -143,8 +142,7 @@ class Decoder(Thread):
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
|
||||
sabnzbd.downloader.Downloader.do.pause()
|
||||
article.fetcher = None
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(nzf, nzo)
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(article)
|
||||
register = False
|
||||
|
||||
except CrcError, e:
|
||||
@@ -316,10 +314,10 @@ class Decoder(Thread):
|
||||
for server in self.servers:
|
||||
if server.active and not article.server_in_try_list(server):
|
||||
if server.priority >= article.fetcher.priority:
|
||||
article.fetcher = None
|
||||
|
||||
article.tries = 0
|
||||
# Allow all servers for this nzo and nzf again (but not for this article)
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(article.nzf, article.nzf.nzo)
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(article, article_reset=False)
|
||||
return True
|
||||
|
||||
msg = T('%s => missing from all servers, discarding') % article
|
||||
@@ -337,7 +335,7 @@ class Decoder(Thread):
|
||||
return
|
||||
|
||||
# Set the md5-of-16k if this is the first article
|
||||
if article.partnum == nzf.lowest_partnum:
|
||||
if article.lowest_partnum:
|
||||
nzf.md5of16k = hashlib.md5(decoded_data[:16384]).digest()
|
||||
|
||||
# Try the rename
|
||||
|
||||
@@ -270,7 +270,7 @@ class Downloader(Thread):
|
||||
self.paused = False
|
||||
|
||||
@NzbQueueLocker
|
||||
def pause(self, save=True):
|
||||
def pause(self):
|
||||
""" Pause the downloader, optionally saving admin """
|
||||
if not self.paused:
|
||||
self.paused = True
|
||||
@@ -280,8 +280,6 @@ class Downloader(Thread):
|
||||
BPSMeter.do.reset()
|
||||
if cfg.autodisconnect():
|
||||
self.disconnect()
|
||||
if save:
|
||||
ArticleCache.do.flush_articles()
|
||||
|
||||
def delay(self):
|
||||
logging.debug("Delaying")
|
||||
@@ -794,11 +792,8 @@ class Downloader(Thread):
|
||||
# Too many tries on this server, consider article missing
|
||||
self.decode(article, None, None)
|
||||
else:
|
||||
# Remove this server from try_list
|
||||
article.fetcher = None
|
||||
|
||||
# Allow all servers to iterate over each nzo/nzf again
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(article.nzf, article.nzf.nzo)
|
||||
sabnzbd.nzbqueue.NzbQueue.do.reset_try_lists(article)
|
||||
|
||||
if destroy:
|
||||
nw.terminate(quit=quit)
|
||||
|
||||
@@ -20,6 +20,7 @@ sabnzbd.encoding - Unicoded filename support
|
||||
"""
|
||||
|
||||
import locale
|
||||
import string
|
||||
from xml.sax.saxutils import escape
|
||||
from Cheetah.Filters import Filter
|
||||
|
||||
@@ -110,7 +111,6 @@ def unicoder(p, force=False):
|
||||
|
||||
def xml_name(p, keep_escape=False, encoding=None):
|
||||
""" Prepare name for use in HTML/XML contect """
|
||||
|
||||
if isinstance(p, unicode):
|
||||
pass
|
||||
elif isinstance(p, str):
|
||||
@@ -171,10 +171,10 @@ class EmailFilter(Filter):
|
||||
################################################################################
|
||||
#
|
||||
# Map CodePage-850 characters to Python's pseudo-Unicode 8bit ASCII
|
||||
#
|
||||
# Use to transform 8-bit console output to plain Python strings
|
||||
# For example for unrar and par2 output
|
||||
#
|
||||
import string
|
||||
|
||||
TAB_850 = \
|
||||
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F" \
|
||||
"\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F" \
|
||||
@@ -187,7 +187,7 @@ TAB_850 = \
|
||||
|
||||
TAB_LATIN = \
|
||||
"\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5" \
|
||||
"\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\x66" \
|
||||
"\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\x83" \
|
||||
"\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xDB\xBC\xA1\xAB\xBB" \
|
||||
"\x7E\x7E\x7E\x7E\x7E\xC1\xC2\xC0\xA9\x7E\x7E\x7E\x7E\xA2\xA5\x7E" \
|
||||
"\x7E\x7E\x7E\x7E\x7E\x7E\xE3\xc3\x7E\x7E\x7E\x7E\x7E\x7E\x7E\xA4" \
|
||||
@@ -195,18 +195,14 @@ TAB_LATIN = \
|
||||
"\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4" \
|
||||
"\xAD\xB1\x5F\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\x7E\xA0"
|
||||
|
||||
gTABLE_850_LATIN = string.maketrans(TAB_850, TAB_LATIN)
|
||||
gTABLE_LATIN_850 = string.maketrans(TAB_LATIN, TAB_850)
|
||||
|
||||
|
||||
def TRANS(p):
|
||||
""" For Windows: Translate CP850 to Python's Latin-1 and return in Unicode
|
||||
Others: return original string
|
||||
"""
|
||||
global gTABLE_850_LATIN
|
||||
if sabnzbd.WIN32:
|
||||
if p:
|
||||
return p.translate(gTABLE_850_LATIN).decode('cp1252', 'replace')
|
||||
return p.translate(string.maketrans(TAB_850, TAB_LATIN)).decode('cp1252', 'replace')
|
||||
else:
|
||||
# translate() fails on empty or None strings
|
||||
return ''
|
||||
@@ -214,21 +210,6 @@ def TRANS(p):
|
||||
return unicoder(p)
|
||||
|
||||
|
||||
def UNTRANS(p):
|
||||
""" For Windows: Translate Python's Latin-1 to CP850
|
||||
Others: return original string
|
||||
"""
|
||||
global gTABLE_LATIN_850
|
||||
if sabnzbd.WIN32:
|
||||
if p:
|
||||
return p.encode('cp1252', 'replace').translate(gTABLE_LATIN_850)
|
||||
else:
|
||||
# translate() fails on empty or None strings
|
||||
return ''
|
||||
else:
|
||||
return p
|
||||
|
||||
|
||||
def fixup_ff4(p):
|
||||
""" Fix incompatibility between CherryPy and Firefox-4 on OSX,
|
||||
where a filename contains &#xx; encodings
|
||||
@@ -300,7 +281,7 @@ def deunicode(p):
|
||||
except:
|
||||
return p
|
||||
else:
|
||||
return p
|
||||
return str(p)
|
||||
|
||||
|
||||
auto_fsys()
|
||||
|
||||
@@ -24,6 +24,7 @@ import sys
|
||||
import logging
|
||||
import urllib
|
||||
import re
|
||||
import ctypes
|
||||
import shutil
|
||||
import threading
|
||||
import subprocess
|
||||
@@ -39,7 +40,7 @@ from urlparse import urlparse
|
||||
import sabnzbd
|
||||
from sabnzbd.decorators import synchronized
|
||||
from sabnzbd.constants import DEFAULT_PRIORITY, FUTURE_Q_FOLDER, JOB_ADMIN, \
|
||||
GIGI, MEBI, DEF_CACHE_LIMIT
|
||||
GIGI, MEBI, DEF_ARTICLE_CACHE_DEFAULT, DEF_ARTICLE_CACHE_MAX
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.encoding import unicoder, special_fixer, gUTF
|
||||
@@ -738,12 +739,12 @@ def from_units(val):
|
||||
return 0.0
|
||||
|
||||
|
||||
def to_units(val, spaces=0, dec_limit=2, postfix=''):
|
||||
def to_units(val, spaces=0, postfix=''):
|
||||
""" Convert number to K/M/G/T/P notation
|
||||
Add "spaces" if not ending in letter
|
||||
dig_limit==1 show single decimal for M and higher
|
||||
dig_limit==2 show single decimal for G and higher
|
||||
Show single decimal for M and higher
|
||||
"""
|
||||
dec_limit = 1
|
||||
decimals = 0
|
||||
if val < 0:
|
||||
sign = '-'
|
||||
@@ -875,27 +876,74 @@ def check_mount(path):
|
||||
|
||||
|
||||
def get_cache_limit():
|
||||
""" Depending on OS, calculate cache limit """
|
||||
# OSX/Windows use Default value
|
||||
if sabnzbd.WIN32 or sabnzbd.DARWIN:
|
||||
return DEF_CACHE_LIMIT
|
||||
|
||||
""" Depending on OS, calculate cache limits.
|
||||
In ArticleCache it will make sure we stay
|
||||
within system limits for 32/64 bit
|
||||
"""
|
||||
# Calculate, if possible
|
||||
try:
|
||||
if sabnzbd.WIN32:
|
||||
# Windows
|
||||
mem_bytes = get_windows_memory()
|
||||
elif sabnzbd.DARWIN:
|
||||
# macOS
|
||||
mem_bytes = get_darwin_memory()
|
||||
else:
|
||||
# Linux
|
||||
mem_bytes = (os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES'))
|
||||
|
||||
# Use 1/4th of available memory
|
||||
mem_bytes = (os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES'))/4
|
||||
# Not more than the maximum we think is reasonable
|
||||
if mem_bytes > from_units(DEF_CACHE_LIMIT):
|
||||
return DEF_CACHE_LIMIT
|
||||
elif mem_bytes > from_units('32M'):
|
||||
# We make sure it's at least a valid value
|
||||
mem_bytes = mem_bytes/4
|
||||
|
||||
# We don't want to set a value that's too high
|
||||
if mem_bytes > from_units(DEF_ARTICLE_CACHE_MAX):
|
||||
return DEF_ARTICLE_CACHE_MAX
|
||||
|
||||
# We make sure it's at least a valid value
|
||||
if mem_bytes > from_units('32M'):
|
||||
return to_units(mem_bytes)
|
||||
except:
|
||||
pass
|
||||
# If failed, leave empty so user needs to decide
|
||||
|
||||
# Always at least minimum on Windows/macOS
|
||||
if sabnzbd.WIN32 and sabnzbd.DARWIN:
|
||||
return DEF_ARTICLE_CACHE_DEFAULT
|
||||
|
||||
# If failed, leave empty for Linux so user needs to decide
|
||||
return ''
|
||||
|
||||
|
||||
def get_windows_memory():
|
||||
""" Use ctypes to extract available memory """
|
||||
class MEMORYSTATUSEX(ctypes.Structure):
|
||||
_fields_ = [
|
||||
("dwLength", ctypes.c_ulong),
|
||||
("dwMemoryLoad", ctypes.c_ulong),
|
||||
("ullTotalPhys", ctypes.c_ulonglong),
|
||||
("ullAvailPhys", ctypes.c_ulonglong),
|
||||
("ullTotalPageFile", ctypes.c_ulonglong),
|
||||
("ullAvailPageFile", ctypes.c_ulonglong),
|
||||
("ullTotalVirtual", ctypes.c_ulonglong),
|
||||
("ullAvailVirtual", ctypes.c_ulonglong),
|
||||
("sullAvailExtendedVirtual", ctypes.c_ulonglong),
|
||||
]
|
||||
|
||||
def __init__(self):
|
||||
# have to initialize this to the size of MEMORYSTATUSEX
|
||||
self.dwLength = ctypes.sizeof(self)
|
||||
super(MEMORYSTATUSEX, self).__init__()
|
||||
|
||||
stat = MEMORYSTATUSEX()
|
||||
ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(stat))
|
||||
return stat.ullTotalPhys
|
||||
|
||||
|
||||
def get_darwin_memory():
|
||||
""" Use system-call to extract total memory on macOS """
|
||||
system_output = sabnzbd.newsunpack.run_simple(['sysctl', 'hw.memsize'])
|
||||
return float(system_output.split()[1])
|
||||
|
||||
|
||||
##############################################################################
|
||||
# Locked directory operations to avoid problems with simultaneous add/remove
|
||||
##############################################################################
|
||||
|
||||
@@ -29,12 +29,12 @@ import binascii
|
||||
import shutil
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.encoding import TRANS, UNTRANS, unicoder, platform_encode, deunicode
|
||||
from sabnzbd.encoding import TRANS, unicoder, platform_encode, deunicode
|
||||
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, long_path, remove_file
|
||||
from sabnzbd.tvsort import SeriesSorter
|
||||
from sabnzbd.sorting import SeriesSorter
|
||||
import sabnzbd.cfg as cfg
|
||||
from sabnzbd.constants import Status
|
||||
|
||||
@@ -110,7 +110,6 @@ def find_programs(curdir):
|
||||
sabnzbd.newsunpack.MULTIPAR_COMMAND = check(curdir, 'win/par2/multipar/par2j.exe')
|
||||
sabnzbd.newsunpack.RAR_COMMAND = check(curdir, 'win/unrar/UnRAR.exe')
|
||||
sabnzbd.newsunpack.PAR2_COMMAND = check(curdir, 'win/par2/par2.exe')
|
||||
sabnzbd.newsunpack.ZIP_COMMAND = check(curdir, 'win/unzip/unzip.exe')
|
||||
sabnzbd.newsunpack.SEVEN_COMMAND = check(curdir, 'win/7zip/7za.exe')
|
||||
else:
|
||||
if not sabnzbd.newsunpack.PAR2_COMMAND:
|
||||
@@ -268,16 +267,6 @@ def unpack_magic(nzo, workdir, workdir_complete, dele, one_folder, joinables, zi
|
||||
nzo.set_action_line()
|
||||
rerun = not error
|
||||
|
||||
if cfg.enable_unzip():
|
||||
new_zips = [zip for zip in xzips if zip not in zips]
|
||||
if new_zips:
|
||||
logging.info('Unzip starting on %s', workdir)
|
||||
if unzip(nzo, workdir, workdir_complete, dele, one_folder, new_zips):
|
||||
error = 1
|
||||
logging.info('Unzip finished on %s', workdir)
|
||||
nzo.set_action_line()
|
||||
rerun = not error
|
||||
|
||||
if cfg.enable_7zip():
|
||||
new_sevens = [seven for seven in xsevens if seven not in sevens]
|
||||
if new_sevens:
|
||||
@@ -288,6 +277,20 @@ def unpack_magic(nzo, workdir, workdir_complete, dele, one_folder, joinables, zi
|
||||
nzo.set_action_line()
|
||||
rerun = not error
|
||||
|
||||
if cfg.enable_unzip():
|
||||
new_zips = [zip for zip in xzips if zip not in zips]
|
||||
if new_zips:
|
||||
logging.info('Unzip starting on %s', workdir)
|
||||
if SEVEN_COMMAND:
|
||||
if unseven(nzo, workdir, workdir_complete, dele, one_folder, new_zips):
|
||||
error = True
|
||||
else:
|
||||
if unzip(nzo, workdir, workdir_complete, dele, one_folder, new_zips):
|
||||
error = True
|
||||
logging.info('Unzip finished on %s', workdir)
|
||||
nzo.set_action_line()
|
||||
rerun = not error
|
||||
|
||||
if cfg.enable_tsjoin():
|
||||
new_ts = [_ts for _ts in xts if _ts not in ts]
|
||||
if new_ts:
|
||||
@@ -1013,7 +1016,7 @@ def seven_extract_core(sevenset, extensions, extraction_path, one_folder, delete
|
||||
parm = '-tsplit'
|
||||
else:
|
||||
name = sevenset
|
||||
parm = '-t7z'
|
||||
parm = '-tzip' if sevenset.lower().endswith('.zip') else '-t7z'
|
||||
|
||||
if not os.path.exists(name):
|
||||
return 1, T('7ZIP set "%s" is incomplete, cannot unpack') % unicoder(sevenset)
|
||||
@@ -1090,6 +1093,7 @@ def par2_repair(parfile_nzf, nzo, workdir, setname, single):
|
||||
# Download all par2 files that haven't been downloaded yet
|
||||
readd = False
|
||||
for extrapar in nzo.extrapars[setname][:]:
|
||||
# Make sure we only get new par2 files
|
||||
if extrapar not in nzo.finished_files and extrapar not in nzo.files:
|
||||
nzo.add_parfile(extrapar)
|
||||
readd = True
|
||||
@@ -1308,8 +1312,10 @@ def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False):
|
||||
verifynum = 0
|
||||
|
||||
elif line.startswith('Main packet not found') or 'The recovery file does not exist' in line:
|
||||
# Initialparfile probably didn't decode properly,
|
||||
logging.info(T('Main packet not found...'))
|
||||
# Initialparfile probably didn't decode properly or bad user parameters
|
||||
# We will try to get another par2 file, but 99% of time it's user parameters
|
||||
msg = T('Invalid par2 files or invalid PAR2 parameters, cannot verify or repair')
|
||||
logging.info(msg)
|
||||
logging.info("Extra pars = %s", nzo.extrapars[setname])
|
||||
|
||||
# Look for the smallest par2file
|
||||
@@ -1327,7 +1333,6 @@ def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False):
|
||||
nzo.add_parfile(nzf)
|
||||
readd = True
|
||||
else:
|
||||
msg = T('Invalid par2 files or invalid PAR2 parameters, cannot verify or repair')
|
||||
nzo.fail_msg = msg
|
||||
msg = u'[%s] %s' % (unicoder(setname), msg)
|
||||
nzo.set_unpack_info('Repair', msg)
|
||||
@@ -1451,6 +1456,15 @@ def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False):
|
||||
nzo.set_unpack_info('Repair', msg)
|
||||
nzo.status = Status.FAILED
|
||||
|
||||
elif line.startswith('Repair Failed.'):
|
||||
# Unknown repair problem
|
||||
msg = T('Repairing failed, %s') % line
|
||||
nzo.fail_msg = msg
|
||||
msg = u'[%s] %s' % (unicoder(setname), msg)
|
||||
nzo.set_unpack_info('Repair', msg)
|
||||
nzo.status = Status.FAILED
|
||||
finished = 0
|
||||
|
||||
elif not verified:
|
||||
if line.startswith('Verifying source files'):
|
||||
nzo.set_action_line(T('Verifying'), '01/%02d' % verifytotal)
|
||||
@@ -1485,6 +1499,10 @@ def PAR_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False):
|
||||
except WindowsError, err:
|
||||
raise WindowsError(err)
|
||||
|
||||
# Also log what is shown to user in history
|
||||
if nzo.fail_msg:
|
||||
logging.info(nzo.fail_msg)
|
||||
|
||||
logging.debug('PAR2 output was\n%s', '\n'.join(lines))
|
||||
|
||||
# If successful, add renamed files to the collection
|
||||
@@ -1522,6 +1540,8 @@ def MultiPar_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False)
|
||||
# Only add user-options if supplied
|
||||
options = cfg.par_option().strip()
|
||||
if options:
|
||||
# We wrongly instructed users to use /x parameter style instead of -x
|
||||
options = options.replace('/', '-', 1)
|
||||
command.insert(2, options)
|
||||
|
||||
# Append the wildcard for this set
|
||||
@@ -1605,8 +1625,10 @@ def MultiPar_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False)
|
||||
logging.error(msg)
|
||||
|
||||
elif line.startswith('valid file is not found'):
|
||||
# Initialparfile probably didn't decode properly,
|
||||
logging.info(T('Main packet not found...'))
|
||||
# Initialparfile probably didn't decode properly, or bad user parameters
|
||||
# We will try to get another par2 file, but 99% of time it's user parameters
|
||||
msg = T('Invalid par2 files or invalid PAR2 parameters, cannot verify or repair')
|
||||
logging.info(msg)
|
||||
logging.info("Extra pars = %s", nzo.extrapars[setname])
|
||||
|
||||
# Look for the smallest par2file
|
||||
@@ -1624,7 +1646,6 @@ def MultiPar_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False)
|
||||
nzo.add_parfile(nzf)
|
||||
readd = True
|
||||
else:
|
||||
msg = T('Invalid par2 files or invalid PAR2 parameters, cannot verify or repair')
|
||||
nzo.fail_msg = msg
|
||||
msg = u'[%s] %s' % (unicoder(setname), msg)
|
||||
nzo.set_unpack_info('Repair', msg)
|
||||
@@ -1837,9 +1858,21 @@ def MultiPar_Verify(parfile, parfile_nzf, nzo, setname, joinables, single=False)
|
||||
verifynum += 1
|
||||
nzo.set_action_line(T('Verifying repair'), '%02d/%02d' % (verifynum, verifytotal))
|
||||
|
||||
elif line.startswith('Failed to repair'):
|
||||
# Unknown repair problem
|
||||
msg = T('Repairing failed, %s') % line
|
||||
nzo.fail_msg = msg
|
||||
msg = u'[%s] %s' % (unicoder(setname), msg)
|
||||
nzo.set_unpack_info('Repair', msg)
|
||||
nzo.status = Status.FAILED
|
||||
finished = 0
|
||||
|
||||
p.wait()
|
||||
|
||||
# Also log what is shown to user in history
|
||||
if nzo.fail_msg:
|
||||
logging.info(nzo.fail_msg)
|
||||
|
||||
logging.debug('MultiPar output was\n%s', '\n'.join(lines))
|
||||
|
||||
# Add renamed files to the collection
|
||||
@@ -1879,7 +1912,7 @@ def create_env(nzo=None, extra_env_fields=None):
|
||||
elif isinstance(field_value, bool):
|
||||
env['SAB_' + field.upper()] = str(field_value*1)
|
||||
else:
|
||||
env['SAB_' + field.upper()] = str(field_value)
|
||||
env['SAB_' + field.upper()] = field_value
|
||||
except:
|
||||
# Catch key/unicode errors
|
||||
pass
|
||||
@@ -1888,7 +1921,7 @@ def create_env(nzo=None, extra_env_fields=None):
|
||||
for field in extra_env_fields:
|
||||
try:
|
||||
if extra_env_fields[field] is not None:
|
||||
env['SAB_' + field.upper()] = str(extra_env_fields[field])
|
||||
env['SAB_' + field.upper()] = extra_env_fields[field]
|
||||
else:
|
||||
env['SAB_' + field.upper()] = ''
|
||||
except:
|
||||
@@ -2255,14 +2288,14 @@ def pre_queue(name, pp, cat, script, priority, size, groups):
|
||||
def fix(p):
|
||||
if not p or str(p).lower() == 'none':
|
||||
return ''
|
||||
else:
|
||||
return UNTRANS(str(p))
|
||||
return unicoder(p)
|
||||
|
||||
values = [1, name, pp, cat, script, priority, None]
|
||||
script_path = make_script_path(cfg.pre_script())
|
||||
if script_path:
|
||||
command = [script_path, name, fix(pp), fix(cat), fix(script), fix(priority), str(size), ' '.join(groups)]
|
||||
command = [script_path, name, pp, cat, script, priority, str(size), ' '.join(groups)]
|
||||
command.extend(analyse_show(name))
|
||||
command = [fix(arg) for arg in command]
|
||||
|
||||
try:
|
||||
stup, need_shell, command, creationflags = build_command(command)
|
||||
@@ -2283,7 +2316,7 @@ def pre_queue(name, pp, cat, script, priority, size, groups):
|
||||
for line in output.split('\n'):
|
||||
line = line.strip('\r\n \'"')
|
||||
if n < len(values) and line:
|
||||
values[n] = TRANS(line)
|
||||
values[n] = deunicode(line)
|
||||
n += 1
|
||||
accept = int_conv(values[0])
|
||||
if accept < 1:
|
||||
@@ -2302,10 +2335,8 @@ def list2cmdline(lst):
|
||||
for arg in lst:
|
||||
if not arg:
|
||||
nlst.append('""')
|
||||
elif (' ' in arg) or ('\t' in arg) or ('&' in arg) or ('|' in arg) or (';' in arg) or (',' in arg):
|
||||
nlst.append('"%s"' % arg)
|
||||
else:
|
||||
nlst.append(arg)
|
||||
nlst.append('"%s"' % arg)
|
||||
return ' '.join(nlst)
|
||||
|
||||
|
||||
|
||||
@@ -134,14 +134,16 @@ def get_prio(gtype, section):
|
||||
|
||||
|
||||
def check_cat(section, job_cat, keyword=None):
|
||||
""" Check if `job_cat` is enabled in `section`. * = All """
|
||||
""" Check if `job_cat` is enabled in `section`.
|
||||
* = All, if no other categories selected.
|
||||
"""
|
||||
if not job_cat:
|
||||
return True
|
||||
try:
|
||||
if not keyword:
|
||||
keyword = section
|
||||
section_cats = sabnzbd.config.get_config(section, '%s_cats' % keyword)()
|
||||
return ('*' in section_cats or job_cat in section_cats)
|
||||
return (['*'] == section_cats or job_cat in section_cats)
|
||||
except TypeError:
|
||||
logging.debug('Incorrect Notify option %s:%s_cats', section, section)
|
||||
return True
|
||||
|
||||
@@ -342,7 +342,8 @@ class NzbQueue(object):
|
||||
nzo.set_final_name_pw(name, password)
|
||||
else:
|
||||
# Reset url fetch wait time
|
||||
nzo.wait = None
|
||||
nzo.url_wait = None
|
||||
nzo.url_tries = 0
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
@@ -713,11 +714,13 @@ class NzbQueue(object):
|
||||
except:
|
||||
return -1
|
||||
|
||||
def reset_try_lists(self, nzf=None, nzo=None):
|
||||
if nzf:
|
||||
nzf.reset_try_list()
|
||||
if nzo:
|
||||
nzo.reset_try_list()
|
||||
def reset_try_lists(self, article, article_reset=True):
|
||||
""" Let article get new fetcher and reset trylists """
|
||||
article.fetcher = None
|
||||
if article_reset:
|
||||
article.reset_try_list()
|
||||
article.nzf.reset_try_list()
|
||||
article.nzf.nzo.reset_try_list()
|
||||
|
||||
def reset_all_try_lists(self):
|
||||
for nzo in self.__nzo_list:
|
||||
|
||||
@@ -47,7 +47,7 @@ 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, is_obfuscated_filename, get_ext, get_filename, \
|
||||
get_unique_filename, renamer, remove_file, remove_dir
|
||||
get_unique_filename, renamer, remove_file, remove_dir, caller_name
|
||||
from sabnzbd.decorators import synchronized
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg as cfg
|
||||
@@ -112,7 +112,7 @@ class TryList(object):
|
||||
# Article
|
||||
##############################################################################
|
||||
ArticleSaver = (
|
||||
'article', 'art_id', 'bytes', 'partnum', 'nzf'
|
||||
'article', 'art_id', 'bytes', 'partnum', 'lowest_partnum', 'nzf'
|
||||
)
|
||||
|
||||
|
||||
@@ -128,6 +128,7 @@ class Article(TryList):
|
||||
self.art_id = None
|
||||
self.bytes = bytes
|
||||
self.partnum = partnum
|
||||
self.lowest_partnum = False
|
||||
self.tries = 0 # Try count
|
||||
self.nzf = nzf
|
||||
|
||||
@@ -269,7 +270,23 @@ class NzbFile(TryList):
|
||||
self.valid = bool(article_db)
|
||||
|
||||
if self.valid and self.nzf_id:
|
||||
sabnzbd.save_data(article_db, self.nzf_id, nzo.workpath)
|
||||
# Save first article seperate, but not for all but first par2 file
|
||||
# Non-par2 files and the first par2 will have no volume and block number
|
||||
# When DirectUnpack is disabled, do not do any of this to also preserve disk IO
|
||||
setname, vol, block = sabnzbd.par2file.analyse_par2(self.filename)
|
||||
if cfg.direct_unpack() and not vol and not block:
|
||||
first_num = min(article_db.keys())
|
||||
first_article = self.add_article(article_db.pop(first_num), first_num)
|
||||
first_article.lowest_partnum = True
|
||||
self.nzo.first_articles.append(first_article)
|
||||
|
||||
# Any articles left?
|
||||
if article_db:
|
||||
# Save the rest
|
||||
sabnzbd.save_data(article_db, self.nzf_id, nzo.workpath)
|
||||
else:
|
||||
# All imported
|
||||
self.import_finished = True
|
||||
|
||||
def finish_import(self):
|
||||
""" Load the article objects from disk """
|
||||
@@ -277,22 +294,21 @@ class NzbFile(TryList):
|
||||
article_db = sabnzbd.load_data(self.nzf_id, self.nzo.workpath, remove=False)
|
||||
if article_db:
|
||||
for partnum in article_db:
|
||||
art_id = article_db[partnum][0]
|
||||
bytes = article_db[partnum][1]
|
||||
self.add_article(article_db[partnum], partnum)
|
||||
|
||||
article = Article(art_id, bytes, partnum, self)
|
||||
|
||||
self.articles.append(article)
|
||||
self.decodetable[partnum] = article
|
||||
# Make sure we have labeled the lowest part number
|
||||
# Also when DirectUnpack is disabled we need to know
|
||||
self.decodetable[min(self.decodetable)].lowest_partnum = True
|
||||
|
||||
# Mark safe to continue
|
||||
self.import_finished = True
|
||||
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: %s', self.nzf_id, self)
|
||||
else:
|
||||
# It was there, but empty
|
||||
logging.warning('Article DB empty %s: %s', self.nzf_id, self)
|
||||
|
||||
def add_article(self, article_info, partnum):
|
||||
""" Add article to object database and return article object """
|
||||
article = Article(article_info[0], article_info[1], partnum, self)
|
||||
self.articles.append(article)
|
||||
self.decodetable[partnum] = article
|
||||
return article
|
||||
|
||||
def remove_article(self, article, found):
|
||||
""" Handle completed article, possibly end of file """
|
||||
@@ -329,11 +345,6 @@ class NzbFile(TryList):
|
||||
""" Is this file completed? """
|
||||
return self.import_finished and not bool(self.articles)
|
||||
|
||||
@property
|
||||
def lowest_partnum(self):
|
||||
""" Get lowest article number of this file """
|
||||
return min(self.decodetable)
|
||||
|
||||
def remove_admin(self):
|
||||
""" Remove article database from disk (sabnzbd_nzf_<id>)"""
|
||||
try:
|
||||
@@ -562,7 +573,7 @@ NzbObjectSaver = (
|
||||
'status', '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',
|
||||
'duplicate', 'oversized', 'precheck', 'incomplete', 'reuse', 'meta', 'first_articles',
|
||||
'md5sum', 'servercount', 'unwanted_ext', 'renames', 'rating_filtered'
|
||||
)
|
||||
|
||||
@@ -606,6 +617,10 @@ class NzbObject(TryList):
|
||||
# In case only /password was entered for nzbname
|
||||
work_name = filename
|
||||
|
||||
# Check for password also in filename
|
||||
if not password:
|
||||
dummy, password = scan_password(os.path.splitext(filename)[0])
|
||||
|
||||
# Remove trailing .nzb and .par(2)
|
||||
self.work_name = create_work_name(work_name)
|
||||
self.final_name = create_work_name(work_name)
|
||||
@@ -650,6 +665,7 @@ class NzbObject(TryList):
|
||||
self.avg_bps_freq = 0
|
||||
self.avg_bps_total = 0
|
||||
|
||||
self.first_articles = []
|
||||
self.saved_articles = []
|
||||
|
||||
self.nzo_id = None
|
||||
@@ -689,7 +705,8 @@ class NzbObject(TryList):
|
||||
self.next_save = None
|
||||
self.save_timeout = None
|
||||
self.encrypted = 0
|
||||
self.wait = None
|
||||
self.url_wait = None
|
||||
self.url_tries = 0
|
||||
self.pp_active = False # Signals active post-processing (not saved)
|
||||
self.md5sum = None
|
||||
|
||||
@@ -806,27 +823,36 @@ class NzbObject(TryList):
|
||||
|
||||
# Run user pre-queue script if needed
|
||||
if not reuse and cfg.pre_script():
|
||||
accept, name, pp, cat, script, priority, group = \
|
||||
accept, name, pp, cat_pp, script_pp, priority, group = \
|
||||
sabnzbd.newsunpack.pre_queue(self.final_name_pw_clean, pp, cat, script,
|
||||
priority, self.bytes, self.groups)
|
||||
# Accept or reject
|
||||
accept = int_conv(accept)
|
||||
if accept < 1:
|
||||
self.purge_data()
|
||||
raise TypeError
|
||||
if accept == 2:
|
||||
self.fail_msg = T('Pre-queue script marked job as failed')
|
||||
|
||||
# Process all options, only over-write if set by script
|
||||
# Beware that cannot do "if priority/pp", because those can
|
||||
# also have a valid value of 0, which shouldn't be ignored
|
||||
if name:
|
||||
self.set_final_name_pw(name)
|
||||
try:
|
||||
pp = int(pp)
|
||||
except:
|
||||
pp = None
|
||||
if cat_pp:
|
||||
cat = cat_pp
|
||||
try:
|
||||
priority = int(priority)
|
||||
except:
|
||||
priority = DEFAULT_PRIORITY
|
||||
if accept < 1:
|
||||
self.purge_data()
|
||||
raise TypeError
|
||||
if name:
|
||||
self.set_final_name_pw(name)
|
||||
if script_pp:
|
||||
script = script_pp
|
||||
if group:
|
||||
self.groups = [str(group)]
|
||||
if accept == 2:
|
||||
self.fail_msg = T('Pre-queue script marked job as failed')
|
||||
|
||||
# Re-evaluate results from pre-queue script
|
||||
self.cat, pp, self.script, priority = cat_to_opts(cat, pp, script, priority)
|
||||
@@ -877,37 +903,8 @@ class NzbObject(TryList):
|
||||
if reuse:
|
||||
self.check_existing_files(wdir)
|
||||
|
||||
if cfg.auto_sort():
|
||||
self.files.sort(cmp=nzf_cmp_date)
|
||||
else:
|
||||
self.files.sort(cmp=nzf_cmp_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
|
||||
if cfg.unwanted_extensions() and not cfg.auto_sort():
|
||||
# ... only useful if there are unwanted extensions defined and there is no sorting on date
|
||||
logging.debug('Unwanted Extension: putting last rar after first rar')
|
||||
nzfposcounter = firstrarpos = lastrarpos = 0
|
||||
for nzf in self.files:
|
||||
nzfposcounter += 1
|
||||
if '.rar' in str(nzf):
|
||||
# a NZF found with '.rar' in the name
|
||||
if firstrarpos == 0:
|
||||
# this is the first .rar found, so remember this position
|
||||
firstrarpos = nzfposcounter
|
||||
lastrarpos = nzfposcounter
|
||||
lastrarnzf = nzf # The NZF itself
|
||||
|
||||
if firstrarpos != lastrarpos:
|
||||
# at least two different .rar's found
|
||||
logging.debug('Unwanted Extension: First rar at %s, Last rar at %s', firstrarpos, lastrarpos)
|
||||
logging.debug('Unwanted Extension: Last rar is %s', str(lastrarnzf))
|
||||
try:
|
||||
self.files.remove(lastrarnzf) # first remove. NB: remove() does searches for lastrarnzf
|
||||
self.files.insert(firstrarpos, lastrarnzf) # ... and only then add after position firstrarpos
|
||||
except:
|
||||
logging.debug('The lastrar swap did not go well')
|
||||
# Perform sorting
|
||||
self.sort_nzfs()
|
||||
|
||||
# Copy meta fields to nzo_info, if not already set
|
||||
for kw in self.meta:
|
||||
@@ -951,6 +948,42 @@ class NzbObject(TryList):
|
||||
nzf.deleted = True
|
||||
return not bool(self.files)
|
||||
|
||||
def sort_nzfs(self):
|
||||
""" Sort the files in the NZO, respecting
|
||||
date sorting and unwanted extensions
|
||||
"""
|
||||
if cfg.auto_sort():
|
||||
self.files.sort(cmp=nzf_cmp_date)
|
||||
else:
|
||||
self.files.sort(cmp=nzf_cmp_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
|
||||
if cfg.unwanted_extensions() and not cfg.auto_sort():
|
||||
# ... only useful if there are unwanted extensions defined and there is no sorting on date
|
||||
logging.debug('Unwanted Extension: putting last rar after first rar')
|
||||
nzfposcounter = firstrarpos = lastrarpos = 0
|
||||
for nzf in self.files:
|
||||
nzfposcounter += 1
|
||||
if '.rar' in str(nzf):
|
||||
# a NZF found with '.rar' in the name
|
||||
if firstrarpos == 0:
|
||||
# this is the first .rar found, so remember this position
|
||||
firstrarpos = nzfposcounter
|
||||
lastrarpos = nzfposcounter
|
||||
lastrarnzf = nzf # The NZF itself
|
||||
|
||||
if firstrarpos != lastrarpos:
|
||||
# at least two different .rar's found
|
||||
logging.debug('Unwanted Extension: First rar at %s, Last rar at %s', firstrarpos, lastrarpos)
|
||||
logging.debug('Unwanted Extension: Last rar is %s', str(lastrarnzf))
|
||||
try:
|
||||
self.files.remove(lastrarnzf) # first remove. NB: remove() does searches for lastrarnzf
|
||||
self.files.insert(firstrarpos, lastrarnzf) # ... and only then add after position firstrarpos
|
||||
except:
|
||||
logging.debug('The lastrar swap did not go well')
|
||||
|
||||
def reset_all_try_lists(self):
|
||||
for nzf in self.files:
|
||||
nzf.reset_all_try_lists()
|
||||
@@ -987,6 +1020,9 @@ class NzbObject(TryList):
|
||||
for setname in self.extrapars:
|
||||
self.extrapars[parset].sort(key=lambda x: x.blocks)
|
||||
|
||||
# Also re-parse all filenames in case par2 came after first articles
|
||||
self.verify_all_filenames_and_resort()
|
||||
|
||||
@synchronized(NZO_LOCK)
|
||||
def handle_par2(self, nzf, filepath):
|
||||
""" Check if file is a par2 and build up par2 collection """
|
||||
@@ -1099,8 +1135,23 @@ class NzbObject(TryList):
|
||||
@synchronized(NZO_LOCK)
|
||||
def remove_article(self, article, found):
|
||||
nzf = article.nzf
|
||||
|
||||
# First or regular article?
|
||||
if article.lowest_partnum and self.first_articles and article in self.first_articles:
|
||||
self.first_articles.remove(article)
|
||||
|
||||
# All first articles done?
|
||||
if not self.first_articles and self.md5of16k:
|
||||
self.verify_all_filenames_and_resort()
|
||||
|
||||
# Remove from file-tracking
|
||||
file_done = nzf.remove_article(article, found)
|
||||
|
||||
# Only on fully loaded files we can say if it's really done
|
||||
if not nzf.import_finished:
|
||||
file_done = False
|
||||
|
||||
# File completed, remove and do checks
|
||||
if file_done:
|
||||
self.remove_nzf(nzf)
|
||||
if not self.reuse and cfg.fail_hopeless_jobs() and not self.check_quality(99)[0]:
|
||||
@@ -1260,8 +1311,8 @@ class NzbObject(TryList):
|
||||
prefix += T('UNWANTED') + ' / ' # : Queue indicator for unwanted extensions
|
||||
if self.rating_filtered and self.status == 'Paused':
|
||||
prefix += T('FILTERED') + ' / ' # : Queue indicator for filtered
|
||||
if isinstance(self.wait, float):
|
||||
dif = int(self.wait - time.time() + 0.5)
|
||||
if isinstance(self.url_wait, float):
|
||||
dif = int(self.url_wait - time.time() + 0.5)
|
||||
if dif > 0:
|
||||
prefix += T('WAIT %s sec') % dif + ' / ' # : Queue indicator for waiting URL fetch
|
||||
if (self.avg_stamp + float(cfg.propagation_delay() * 60)) > time.time() and self.priority != TOP_PRIORITY:
|
||||
@@ -1418,7 +1469,7 @@ class NzbObject(TryList):
|
||||
# format the total time the download took, in days, hours, and minutes, or seconds.
|
||||
complete_time = format_time_string(seconds, timecompleted.days)
|
||||
|
||||
msg1 = T('Downloaded in %s at an average of %sB/s') % (complete_time, to_units(avg_bps * 1024, dec_limit=1))
|
||||
msg1 = T('Downloaded in %s at an average of %sB/s') % (complete_time, to_units(avg_bps * 1024))
|
||||
msg1 += u'<br/>' + T('Age') + ': ' + calc_age(self.avg_date, True)
|
||||
|
||||
bad = self.nzo_info.get('bad_articles', 0)
|
||||
@@ -1458,29 +1509,38 @@ class NzbObject(TryList):
|
||||
article = None
|
||||
nzf_remove_list = []
|
||||
|
||||
for nzf in self.files:
|
||||
if nzf.deleted:
|
||||
logging.debug('Skipping existing file %s', nzf.filename or nzf.subject)
|
||||
else:
|
||||
# Don't try to get an article if server is in try_list of nzf
|
||||
if not nzf.server_in_try_list(server):
|
||||
if not nzf.import_finished:
|
||||
# Only load NZF when it's a primary server
|
||||
# or when it's a backup server without active primaries
|
||||
if sabnzbd.highest_server(server):
|
||||
nzf.finish_import()
|
||||
# Still not finished? Something went wrong...
|
||||
if not nzf.import_finished and not self.is_gone():
|
||||
logging.error(T('Error importing %s'), nzf)
|
||||
nzf_remove_list.append(nzf)
|
||||
nzf.nzo.status = Status.PAUSED
|
||||
continue
|
||||
else:
|
||||
continue
|
||||
# Did we go through all first-articles?
|
||||
if self.first_articles:
|
||||
for article_test in self.first_articles:
|
||||
article = article_test.get_article(server, servers)
|
||||
if article:
|
||||
break
|
||||
|
||||
article = nzf.get_article(server, servers)
|
||||
if article:
|
||||
break
|
||||
# Move on to next ones
|
||||
if not article:
|
||||
for nzf in self.files:
|
||||
if nzf.deleted:
|
||||
logging.debug('Skipping existing file %s', nzf.filename or nzf.subject)
|
||||
else:
|
||||
# Don't try to get an article if server is in try_list of nzf
|
||||
if not nzf.server_in_try_list(server):
|
||||
if not nzf.import_finished:
|
||||
# Only load NZF when it's a primary server
|
||||
# or when it's a backup server without active primaries
|
||||
if sabnzbd.highest_server(server):
|
||||
nzf.finish_import()
|
||||
# Still not finished? Something went wrong...
|
||||
if not nzf.import_finished and not self.is_gone():
|
||||
logging.error(T('Error importing %s'), nzf)
|
||||
nzf_remove_list.append(nzf)
|
||||
nzf.nzo.status = Status.PAUSED
|
||||
continue
|
||||
else:
|
||||
continue
|
||||
|
||||
article = nzf.get_article(server, servers)
|
||||
if article:
|
||||
break
|
||||
|
||||
# Remove all files for which admin could not be read
|
||||
for nzf in nzf_remove_list:
|
||||
@@ -1591,6 +1651,14 @@ class NzbObject(TryList):
|
||||
self.renamed_file(yenc_filename, nzf.filename)
|
||||
nzf.filename = yenc_filename
|
||||
|
||||
def verify_all_filenames_and_resort(self):
|
||||
""" Verify all filenames based on par2 info and then re-sort files """
|
||||
logging.info('Checking all filenames for %s', self.final_name)
|
||||
for nzf_verify in self.files:
|
||||
self.verify_nzf_filename(nzf_verify)
|
||||
logging.info('Re-sorting %s after getting filename information', self.final_name)
|
||||
self.sort_nzfs()
|
||||
|
||||
@synchronized(NZO_LOCK)
|
||||
def renamed_file(self, name_set, old_name=None):
|
||||
""" Save renames at various stages (Download/PP)
|
||||
@@ -1651,6 +1719,8 @@ class NzbObject(TryList):
|
||||
@synchronized(NZO_LOCK)
|
||||
def purge_data(self, keep_basic=False, del_files=False):
|
||||
""" Remove all admin info, 'keep_basic' preserves attribs and nzb """
|
||||
logging.info('[%s] Purging data for job %s (keep_basic=%s, del_files=%s)', caller_name(), self.final_name, keep_basic, del_files)
|
||||
|
||||
wpath = self.workpath
|
||||
for nzf in self.files:
|
||||
sabnzbd.remove_data(nzf.nzf_id, wpath)
|
||||
@@ -1676,6 +1746,7 @@ class NzbObject(TryList):
|
||||
try:
|
||||
remove_dir(self.downpath)
|
||||
except:
|
||||
logging.debug('Folder not removed: %s', self.downpath)
|
||||
pass
|
||||
|
||||
def gather_info(self, full=False):
|
||||
@@ -1816,7 +1887,8 @@ class NzbObject(TryList):
|
||||
# Set non-transferable values
|
||||
self.pp_active = False
|
||||
self.avg_stamp = time.mktime(self.avg_date.timetuple())
|
||||
self.wait = None
|
||||
self.url_wait = None
|
||||
self.url_tries = 0
|
||||
self.to_be_removed = False
|
||||
self.direct_unpacker = None
|
||||
if self.meta is None:
|
||||
|
||||
@@ -461,7 +461,7 @@ class SABnzbdDelegate(NSObject):
|
||||
self.setMenuTitle_("")
|
||||
elif bytes_left > 0:
|
||||
self.state = ""
|
||||
speed = to_units(bpsnow, dec_limit=1)
|
||||
speed = to_units(bpsnow)
|
||||
# "10.1 MB/s" doesn't fit, remove space char
|
||||
if 'M' in speed and len(speed) > 5:
|
||||
speed = speed.replace(' ', '')
|
||||
|
||||
@@ -35,7 +35,7 @@ from sabnzbd.misc import real_path, get_unique_path, create_dirs, move_to_path,
|
||||
on_cleanup_list, renamer, remove_dir, remove_all, globber, globber_full, \
|
||||
set_permissions, cleanup_empty_directories, fix_unix_encoding, \
|
||||
sanitize_and_trim_path, sanitize_files_in_folder, remove_file
|
||||
from sabnzbd.tvsort import Sorter
|
||||
from sabnzbd.sorting import Sorter
|
||||
from sabnzbd.constants import REPAIR_PRIORITY, TOP_PRIORITY, POSTPROC_QUEUE_FILE_NAME, \
|
||||
POSTPROC_QUEUE_VERSION, sample_match, JOB_ADMIN, Status, VERIFIED_FILE
|
||||
from sabnzbd.encoding import TRANS, unicoder
|
||||
@@ -51,6 +51,8 @@ import sabnzbd.notifier as notifier
|
||||
import sabnzbd.utils.rarfile as rarfile
|
||||
import sabnzbd.utils.checkdir
|
||||
|
||||
MAX_FAST_JOB_COUNT = 3
|
||||
|
||||
# Match samples
|
||||
RE_SAMPLE = re.compile(sample_match, re.I)
|
||||
|
||||
@@ -67,15 +69,26 @@ class PostProcessor(Thread):
|
||||
|
||||
if self.history_queue is None:
|
||||
self.history_queue = []
|
||||
self.queue = Queue.Queue()
|
||||
|
||||
# Fast-queue for jobs already finished by DirectUnpack
|
||||
self.fast_queue = Queue.Queue()
|
||||
|
||||
# Regular queue for jobs that might need more attention
|
||||
self.slow_queue = Queue.Queue()
|
||||
|
||||
# Load all old jobs
|
||||
for nzo in self.history_queue:
|
||||
self.process(nzo)
|
||||
|
||||
# Counter to not only process fast-jobs
|
||||
self.__fast_job_count = 0
|
||||
|
||||
# State variables
|
||||
self.__stop = False
|
||||
self.__busy = False
|
||||
self.paused = False
|
||||
PostProcessor.do = self
|
||||
|
||||
self.__busy = False # True while a job is being processed
|
||||
|
||||
def save(self):
|
||||
""" Save postproc queue """
|
||||
logging.info("Saving postproc queue")
|
||||
@@ -115,7 +128,12 @@ class PostProcessor(Thread):
|
||||
""" Push on finished job in the queue """
|
||||
if nzo not in self.history_queue:
|
||||
self.history_queue.append(nzo)
|
||||
self.queue.put(nzo)
|
||||
|
||||
# Fast-track if it has DirectUnpacked jobs or if it's still going
|
||||
if nzo.direct_unpacker and (nzo.direct_unpacker.success_sets or not nzo.direct_unpacker.killed):
|
||||
self.fast_queue.put(nzo)
|
||||
else:
|
||||
self.slow_queue.put(nzo)
|
||||
self.save()
|
||||
sabnzbd.history_updated()
|
||||
|
||||
@@ -131,7 +149,8 @@ class PostProcessor(Thread):
|
||||
def stop(self):
|
||||
""" Stop thread after finishing running job """
|
||||
self.__stop = True
|
||||
self.queue.put(None)
|
||||
self.slow_queue.put(None)
|
||||
self.fast_queue.put(None)
|
||||
|
||||
def cancel_pp(self, nzo_id):
|
||||
""" Change the status, so that the PP is canceled """
|
||||
@@ -145,7 +164,7 @@ class PostProcessor(Thread):
|
||||
|
||||
def empty(self):
|
||||
""" Return True if pp queue is empty """
|
||||
return self.queue.empty() and not self.__busy
|
||||
return self.slow_queue.empty() and self.fast_queue.empty() and not self.__busy
|
||||
|
||||
def get_queue(self):
|
||||
""" Return list of NZOs that still need to be processed """
|
||||
@@ -174,6 +193,11 @@ class PostProcessor(Thread):
|
||||
except ImportError:
|
||||
logging.warning(T('Module subprocessww missing. Expect problems with Unicoded file and directory names in downloads.'))
|
||||
|
||||
# Do a pruge of the history-items if it was set, just to be sure
|
||||
history_db = database.HistoryDB()
|
||||
history_db.auto_history_purge()
|
||||
history_db.close()
|
||||
|
||||
# Start looping
|
||||
check_eoq = False
|
||||
while not self.__stop:
|
||||
@@ -183,15 +207,28 @@ class PostProcessor(Thread):
|
||||
time.sleep(5)
|
||||
continue
|
||||
|
||||
# Something in the fast queue?
|
||||
try:
|
||||
nzo = self.queue.get(timeout=1)
|
||||
# Every few fast-jobs we should check allow a
|
||||
# slow job so that they don't wait forever
|
||||
if self.__fast_job_count >= MAX_FAST_JOB_COUNT and self.slow_queue.qsize():
|
||||
raise Queue.Empty
|
||||
|
||||
nzo = self.fast_queue.get(timeout=2)
|
||||
self.__fast_job_count += 1
|
||||
except Queue.Empty:
|
||||
if check_eoq:
|
||||
check_eoq = False
|
||||
handle_empty_queue()
|
||||
# Try the slow queue
|
||||
try:
|
||||
nzo = self.slow_queue.get(timeout=2)
|
||||
# Reset fast-counter
|
||||
self.__fast_job_count = 0
|
||||
except Queue.Empty:
|
||||
# Check for empty queue
|
||||
if check_eoq:
|
||||
check_eoq = False
|
||||
handle_empty_queue()
|
||||
# No fast or slow jobs, better luck next loop!
|
||||
continue
|
||||
else:
|
||||
nzo = self.queue.get()
|
||||
|
||||
# Stop job
|
||||
if not nzo:
|
||||
@@ -247,7 +284,6 @@ def process_job(nzo):
|
||||
postproc_time = 0
|
||||
script_log = ''
|
||||
script_line = ''
|
||||
crash_msg = ''
|
||||
|
||||
# Get the job flags
|
||||
nzo.save_attribs()
|
||||
@@ -504,15 +540,15 @@ def process_job(nzo):
|
||||
Rating.do.update_auto_flag(nzo.nzo_id, Rating.FLAG_EXPIRED, host)
|
||||
|
||||
except:
|
||||
logging.error(T('Post Processing Failed for %s (%s)'), filename, crash_msg)
|
||||
if not crash_msg:
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
crash_msg = T('see logfile')
|
||||
nzo.fail_msg = T('PostProcessing was aborted (%s)') % unicoder(crash_msg)
|
||||
logging.error(T('Post Processing Failed for %s (%s)'), filename, T('see logfile'))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
|
||||
nzo.fail_msg = T('PostProcessing was aborted (%s)') % T('see logfile')
|
||||
notifier.send_notification(T('Download Failed'), filename, 'failed', nzo.cat)
|
||||
nzo.status = Status.FAILED
|
||||
par_error = True
|
||||
all_ok = False
|
||||
|
||||
if cfg.email_endjob():
|
||||
emailer.endjob(nzo.final_name, nzo.cat, all_ok, clip_path(workdir_complete), nzo.bytes_downloaded,
|
||||
nzo.fail_msg, nzo.unpack_info, '', '', 0)
|
||||
@@ -853,10 +889,14 @@ def nzb_redirect(wdir, nzbname, pp, script, cat, priority):
|
||||
def one_file_or_folder(folder):
|
||||
""" If the dir only contains one file or folder, join that file/folder onto the path """
|
||||
if os.path.exists(folder) and os.path.isdir(folder):
|
||||
cont = os.listdir(folder)
|
||||
if len(cont) == 1:
|
||||
folder = os.path.join(folder, cont[0])
|
||||
folder = one_file_or_folder(folder)
|
||||
try:
|
||||
cont = os.listdir(folder)
|
||||
if len(cont) == 1:
|
||||
folder = os.path.join(folder, cont[0])
|
||||
folder = one_file_or_folder(folder)
|
||||
except WindowsError:
|
||||
# Can occur on paths it doesn't like, for example "C:"
|
||||
pass
|
||||
return folder
|
||||
|
||||
|
||||
|
||||
@@ -94,8 +94,8 @@ class SABTrayThread(SysTrayIconThread):
|
||||
self.counter += 1
|
||||
if self.counter > 10:
|
||||
self.sabpaused, bytes_left, bpsnow, time_left = api.fast_queue()
|
||||
mb_left = to_units(bytes_left, dec_limit=1)
|
||||
speed = to_units(bpsnow, dec_limit=1)
|
||||
mb_left = to_units(bytes_left)
|
||||
speed = to_units(bpsnow)
|
||||
|
||||
if self.sabpaused:
|
||||
self.hover_text = self.txt_paused
|
||||
|
||||
@@ -78,8 +78,8 @@ class StatusIcon(Thread):
|
||||
# run this every updatefreq ms
|
||||
def run(self):
|
||||
self.sabpaused, bytes_left, bpsnow, time_left = api.fast_queue()
|
||||
mb_left = to_units(bytes_left, dec_limit=1)
|
||||
speed = to_units(bpsnow, dec_limit=1)
|
||||
mb_left = to_units(bytes_left)
|
||||
speed = to_units(bpsnow)
|
||||
|
||||
if self.sabpaused:
|
||||
self.tooltip = T('Paused')
|
||||
|
||||
@@ -712,6 +712,7 @@ SKIN_TEXT = {
|
||||
'button-SeasonS01E05' : TT('S01E05 Season Folder'),
|
||||
'button-Ep1x05' : TT('1x05 Episode Folder'),
|
||||
'button-EpS01E05' : TT('S01E05 Episode Folder'),
|
||||
'button-FileLikeFolder' : TT('Job Name as Filename'),
|
||||
'sort-title' : TT('Title'),
|
||||
'movie-sp-name' : TT('Movie Name'),
|
||||
'movie-dot-name' : TT('Movie.Name'),
|
||||
@@ -731,12 +732,11 @@ SKIN_TEXT = {
|
||||
'partNumber' : TT('Part Number'),
|
||||
'decade' : TT('Decade'),
|
||||
'orgFilename' : TT('Original Filename'),
|
||||
'orgDirname' : TT('Original Foldername'),
|
||||
'orgJobname' : TT('Original Job Name'),
|
||||
'lowercase' : TT('Lower Case'),
|
||||
'TEXT' : TT('TEXT'),
|
||||
'text' : TT('text'),
|
||||
'sort-File' : TT('file'),
|
||||
'sort-Folder' : TT('folder'),
|
||||
'sortString' : TT('Sort String'),
|
||||
'multiPartLabel' : TT('Multi-part label'),
|
||||
'button-inFolders' : TT('In folders'),
|
||||
@@ -862,6 +862,7 @@ SKIN_TEXT = {
|
||||
'Glitter-pausePromptFail': TT('Sorry, we could not interpret that. Try again.'),
|
||||
'Glitter-pauseFor' : TT('Pause for...'),
|
||||
'Glitter-refresh' : TT('Refresh'),
|
||||
'Glitter-logText' : TT('All usernames, passwords and API-keys are automatically removed from the log and the included copy of your settings.'),
|
||||
'Glitter-sortAgeAsc' : TT('Sort by Age <small>Oldest→Newest</small>'),
|
||||
'Glitter-sortAgeDesc' : TT('Sort by Age <small>Newest→Oldest</small>'),
|
||||
'Glitter-sortNameAsc' : TT('Sort by Name <small>A→Z</small>'),
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
"""
|
||||
sabnzbd.tvsort - Sorting Functions
|
||||
sabnzbd.sorting - Sorting Functions
|
||||
Series Sorting - Sorting downloads into seasons & episodes
|
||||
Date Sorting - Sorting downloads by a custom date matching
|
||||
Generic Sorting - Sorting large files by a custom matching
|
||||
@@ -101,23 +101,23 @@ class Sorter(object):
|
||||
self.cat = cat
|
||||
self.ext = ''
|
||||
|
||||
def detect(self, dirname, complete_dir):
|
||||
def detect(self, job_name, complete_dir):
|
||||
""" Detect which kind of sort applies """
|
||||
self.sorter = SeriesSorter(self.nzo, dirname, complete_dir, self.cat)
|
||||
self.sorter = SeriesSorter(self.nzo, job_name, complete_dir, self.cat)
|
||||
if self.sorter.matched:
|
||||
complete_dir = self.sorter.get_final_path()
|
||||
self.type = 'tv'
|
||||
self.sort_file = True
|
||||
return complete_dir
|
||||
|
||||
self.sorter = DateSorter(self.nzo, dirname, complete_dir, self.cat)
|
||||
self.sorter = DateSorter(self.nzo, job_name, complete_dir, self.cat)
|
||||
if self.sorter.matched:
|
||||
complete_dir = self.sorter.get_final_path()
|
||||
self.type = 'date'
|
||||
self.sort_file = True
|
||||
return complete_dir
|
||||
|
||||
self.sorter = GenericSorter(self.nzo, dirname, complete_dir, self.cat)
|
||||
self.sorter = MovieSorter(self.nzo, job_name, complete_dir, self.cat)
|
||||
if self.sorter.matched:
|
||||
complete_dir = self.sorter.get_final_path()
|
||||
self.type = 'movie'
|
||||
@@ -177,10 +177,10 @@ class Sorter(object):
|
||||
class SeriesSorter(object):
|
||||
""" Methods for Series Sorting """
|
||||
|
||||
def __init__(self, nzo, dirname, path, cat):
|
||||
def __init__(self, nzo, job_name, path, cat):
|
||||
self.matched = False
|
||||
|
||||
self.original_dirname = dirname
|
||||
self.original_job_name = job_name
|
||||
self.original_path = path
|
||||
self.nzo = nzo
|
||||
self.cat = cat
|
||||
@@ -205,9 +205,9 @@ class SeriesSorter(object):
|
||||
if force or (cfg.enable_tv_sorting() and cfg.tv_sort_string()):
|
||||
if force or (not self.cats) or (self.cat and self.cat.lower() in self.cats) or (not self.cat and 'None' in self.cats):
|
||||
# First check if the show matches TV episode regular expressions. Returns regex match object
|
||||
self.match_obj, self.extras = check_regexs(self.original_dirname, series_match)
|
||||
self.match_obj, self.extras = check_regexs(self.original_job_name, series_match)
|
||||
if self.match_obj:
|
||||
logging.debug("Found TV Show (%s)", self.original_dirname)
|
||||
logging.debug("Found TV Show (%s)", self.original_job_name)
|
||||
self.matched = True
|
||||
|
||||
def is_match(self):
|
||||
@@ -223,7 +223,7 @@ class SeriesSorter(object):
|
||||
return self.final_path
|
||||
else:
|
||||
# Error Sorting
|
||||
return os.path.join(self.original_path, self.original_dirname)
|
||||
return os.path.join(self.original_path, self.original_job_name)
|
||||
|
||||
def get_multi_ep_naming(self, one, two, extras):
|
||||
""" Returns a list of unique values joined into a string and separated by - (ex:01-02-03-04) """
|
||||
@@ -242,8 +242,8 @@ class SeriesSorter(object):
|
||||
def get_shownames(self):
|
||||
""" Get the show name from the match object and format it """
|
||||
# Get the formatted title and alternate title formats
|
||||
self.show_info['show_tname'], self.show_info['show_tname_two'], self.show_info['show_tname_three'] = get_titles(self.nzo, self.match_obj, self.original_dirname, True)
|
||||
self.show_info['show_name'], self.show_info['show_name_two'], self.show_info['show_name_three'] = get_titles(self.nzo, self.match_obj, self.original_dirname)
|
||||
self.show_info['show_tname'], self.show_info['show_tname_two'], self.show_info['show_tname_three'] = get_titles(self.nzo, self.match_obj, self.original_job_name, True)
|
||||
self.show_info['show_name'], self.show_info['show_name_two'], self.show_info['show_name_three'] = get_titles(self.nzo, self.match_obj, self.original_job_name)
|
||||
|
||||
def get_seasons(self):
|
||||
""" Get the season number from the match object and format it """
|
||||
@@ -289,7 +289,7 @@ class SeriesSorter(object):
|
||||
|
||||
def get_showdescriptions(self):
|
||||
""" Get the show descriptions from the match object and format them """
|
||||
self.show_info['ep_name'], self.show_info['ep_name_two'], self.show_info['ep_name_three'] = get_descriptions(self.nzo, self.match_obj, self.original_dirname)
|
||||
self.show_info['ep_name'], self.show_info['ep_name_two'], self.show_info['ep_name_three'] = get_descriptions(self.nzo, self.match_obj, self.original_job_name)
|
||||
|
||||
def get_values(self):
|
||||
""" Collect and construct all the values needed for path replacement """
|
||||
@@ -309,7 +309,7 @@ class SeriesSorter(object):
|
||||
return True
|
||||
|
||||
except:
|
||||
logging.error(T('Error getting TV info (%s)'), clip_path(self.original_dirname))
|
||||
logging.error(T('Error getting TV info (%s)'), clip_path(self.original_job_name))
|
||||
logging.info("Traceback: ", exc_info=True)
|
||||
return False
|
||||
|
||||
@@ -338,7 +338,7 @@ class SeriesSorter(object):
|
||||
mapping.append(('%0s', self.show_info['season_num_alt']))
|
||||
|
||||
# Original dir name
|
||||
mapping.append(('%dn', self.original_dirname))
|
||||
mapping.append(('%dn', self.original_job_name))
|
||||
|
||||
# Replace episode names
|
||||
if self.show_info['ep_name']:
|
||||
@@ -428,9 +428,9 @@ class SeriesSorter(object):
|
||||
|
||||
|
||||
_RE_MULTIPLE = (
|
||||
re.compile(r'cd\W?(\d+)\W?', re.I), # .cd1.avi
|
||||
re.compile(r'\w\W?([\w\d])[{}]*$', re.I), # blah1.avi blaha.avi
|
||||
re.compile(r'\w\W([\w\d])\W', re.I) # blah-1-ok.avi blah-a-ok.avi
|
||||
re.compile(r'cd\W?(\d+)\W?', re.I), # .cd1.mkv
|
||||
re.compile(r'\w\W?([\w\d])[{}]*$', re.I), # blah1.mkv blaha.mkv
|
||||
re.compile(r'\w\W([\w\d])\W', re.I) # blah-1-ok.mkv blah-a-ok.mkv
|
||||
)
|
||||
|
||||
|
||||
@@ -448,7 +448,7 @@ def check_for_sequence(regex, files):
|
||||
matches = {}
|
||||
prefix = None
|
||||
# Build up a dictionary of matches
|
||||
# The key is based off the match, ie {1:'blah-part1.avi'}
|
||||
# The key is based off the match, ie {1:'blah-part1.mkv'}
|
||||
for _file in files:
|
||||
name, ext = os.path.splitext(_file)
|
||||
match1 = regex.search(name)
|
||||
@@ -483,7 +483,7 @@ def check_for_sequence(regex, files):
|
||||
else:
|
||||
passed = False
|
||||
if passed:
|
||||
# convert {'b':'filename-b.avi'} to {'2', 'filename-b.avi'}
|
||||
# convert {'b':'filename-b.mkv'} to {'2', 'filename-b.mkv'}
|
||||
item = matches.pop(akey)
|
||||
matches[str(key)] = item
|
||||
|
||||
@@ -493,13 +493,13 @@ def check_for_sequence(regex, files):
|
||||
return {}
|
||||
|
||||
|
||||
class GenericSorter(object):
|
||||
class MovieSorter(object):
|
||||
""" Methods for Generic Sorting """
|
||||
|
||||
def __init__(self, nzo, dirname, path, cat):
|
||||
def __init__(self, nzo, job_name, path, cat):
|
||||
self.matched = False
|
||||
|
||||
self.original_dirname = dirname
|
||||
self.original_job_name = job_name
|
||||
self.original_path = path
|
||||
self.sort_string = cfg.movie_sort_string()
|
||||
self.extra = cfg.movie_sort_extra()
|
||||
@@ -524,7 +524,7 @@ class GenericSorter(object):
|
||||
if force or (cfg.enable_movie_sorting() and self.sort_string):
|
||||
# First check if the show matches TV episode regular expressions. Returns regex match object
|
||||
if force or (self.cat and self.cat.lower() in self.cats) or (not self.cat and 'None' in self.cats):
|
||||
logging.debug("Found Movie (%s)", self.original_dirname)
|
||||
logging.debug("Found Movie (%s)", self.original_job_name)
|
||||
self.matched = True
|
||||
|
||||
def get_final_path(self):
|
||||
@@ -536,7 +536,7 @@ class GenericSorter(object):
|
||||
return self.final_path
|
||||
else:
|
||||
# Error Sorting
|
||||
return os.path.join(self.original_path, self.original_dirname)
|
||||
return os.path.join(self.original_path, self.original_job_name)
|
||||
|
||||
def get_values(self):
|
||||
""" Collect and construct all the values needed for path replacement """
|
||||
@@ -548,13 +548,13 @@ class GenericSorter(object):
|
||||
if year:
|
||||
year_m = None
|
||||
else:
|
||||
dirname = self.original_dirname.replace('_', ' ')
|
||||
job_name = self.original_job_name.replace('_', ' ')
|
||||
RE_YEAR = re.compile(year_match, re.I)
|
||||
year_m = RE_YEAR.search(dirname)
|
||||
year_m = RE_YEAR.search(job_name)
|
||||
if year_m:
|
||||
# Find the last matched date
|
||||
# Keep year_m to use in get_titles
|
||||
year = RE_YEAR.findall(dirname)[-1][0]
|
||||
year = RE_YEAR.findall(job_name)[-1][0]
|
||||
else:
|
||||
year = ''
|
||||
self.movie_info['year'] = year
|
||||
@@ -563,8 +563,8 @@ class GenericSorter(object):
|
||||
self.movie_info['decade'], self.movie_info['decade_two'] = get_decades(year)
|
||||
|
||||
# - Get Title
|
||||
self.movie_info['ttitle'], self.movie_info['ttitle_two'], self.movie_info['ttitle_three'] = get_titles(self.nzo, year_m, self.original_dirname, True)
|
||||
self.movie_info['title'], self.movie_info['title_two'], self.movie_info['title_three'] = get_titles(self.nzo, year_m, self.original_dirname)
|
||||
self.movie_info['ttitle'], self.movie_info['ttitle_two'], self.movie_info['ttitle_three'] = get_titles(self.nzo, year_m, self.original_job_name, True)
|
||||
self.movie_info['title'], self.movie_info['title_two'], self.movie_info['title_three'] = get_titles(self.nzo, year_m, self.original_job_name)
|
||||
|
||||
return True
|
||||
|
||||
@@ -605,7 +605,7 @@ class GenericSorter(object):
|
||||
mapping.append(('%0decade', self.movie_info['decade_two']))
|
||||
|
||||
# Original dir name
|
||||
mapping.append(('%dn', self.original_dirname))
|
||||
mapping.append(('%dn', self.original_job_name))
|
||||
|
||||
path = path_subst(sorter, mapping)
|
||||
|
||||
@@ -698,10 +698,10 @@ class GenericSorter(object):
|
||||
class DateSorter(object):
|
||||
""" Methods for Date Sorting """
|
||||
|
||||
def __init__(self, nzo, dirname, path, cat):
|
||||
def __init__(self, nzo, job_name, path, cat):
|
||||
self.matched = False
|
||||
|
||||
self.original_dirname = dirname
|
||||
self.original_job_name = job_name
|
||||
self.original_path = path
|
||||
self.sort_string = cfg.date_sort_string()
|
||||
self.cats = cfg.date_categories()
|
||||
@@ -726,9 +726,9 @@ class DateSorter(object):
|
||||
if force or (cfg.enable_date_sorting() and self.sort_string):
|
||||
# First check if the show matches TV episode regular expressions. Returns regex match object
|
||||
if force or (self.cat and self.cat.lower() in self.cats) or (not self.cat and 'None' in self.cats):
|
||||
self.match_obj, self.date_type = check_for_date(self.original_dirname, date_match)
|
||||
self.match_obj, self.date_type = check_for_date(self.original_job_name, date_match)
|
||||
if self.match_obj:
|
||||
logging.debug("Found date for sorting (%s)", self.original_dirname)
|
||||
logging.debug("Found date for sorting (%s)", self.original_job_name)
|
||||
self.matched = True
|
||||
|
||||
def is_match(self):
|
||||
@@ -744,7 +744,7 @@ class DateSorter(object):
|
||||
return self.final_path
|
||||
else:
|
||||
# Error Sorting
|
||||
return os.path.join(self.original_path, self.original_dirname)
|
||||
return os.path.join(self.original_path, self.original_job_name)
|
||||
|
||||
def get_values(self):
|
||||
""" Collect and construct all the values needed for path replacement """
|
||||
@@ -767,10 +767,10 @@ class DateSorter(object):
|
||||
self.date_info['decade'], self.date_info['decade_two'] = get_decades(self.date_info['year'])
|
||||
|
||||
# - Get Title
|
||||
self.date_info['ttitle'], self.date_info['ttitle_two'], self.date_info['ttitle_three'] = get_titles(self.nzo, self.match_obj, self.original_dirname, True)
|
||||
self.date_info['title'], self.date_info['title_two'], self.date_info['title_three'] = get_titles(self.nzo, self.match_obj, self.original_dirname)
|
||||
self.date_info['ttitle'], self.date_info['ttitle_two'], self.date_info['ttitle_three'] = get_titles(self.nzo, self.match_obj, self.original_job_name, True)
|
||||
self.date_info['title'], self.date_info['title_two'], self.date_info['title_three'] = get_titles(self.nzo, self.match_obj, self.original_job_name)
|
||||
|
||||
self.date_info['ep_name'], self.date_info['ep_name_two'], self.date_info['ep_name_three'] = get_descriptions(self.nzo, self.match_obj, self.original_dirname)
|
||||
self.date_info['ep_name'], self.date_info['ep_name_two'], self.date_info['ep_name_three'] = get_descriptions(self.nzo, self.match_obj, self.original_job_name)
|
||||
|
||||
return True
|
||||
|
||||
@@ -814,6 +814,9 @@ class DateSorter(object):
|
||||
mapping.append(('%.desc', ''))
|
||||
mapping.append(('%_desc', ''))
|
||||
|
||||
# Replace dir-name before replacing %d for month
|
||||
mapping.append(('%dn', self.original_job_name))
|
||||
|
||||
# Replace decades
|
||||
mapping.append(('%decade', self.date_info['decade']))
|
||||
mapping.append(('%0decade', self.date_info['decade_two']))
|
||||
@@ -1168,13 +1171,13 @@ def eval_sort(sorttype, expression, name=None, multipart=''):
|
||||
name = sanitize_foldername(name)
|
||||
if sorttype == 'series':
|
||||
name = name or ('%s S01E05 - %s [DTS]' % (Ttemplate('show-name'), Ttemplate('ep-name')))
|
||||
sorter = sabnzbd.tvsort.SeriesSorter(None, name, path, 'tv')
|
||||
elif sorttype == 'generic':
|
||||
sorter = SeriesSorter(None, name, path, 'tv')
|
||||
elif sorttype == 'movie':
|
||||
name = name or (Ttemplate('movie-sp-name') + ' (2009)')
|
||||
sorter = sabnzbd.tvsort.GenericSorter(None, name, path, 'tv')
|
||||
sorter = MovieSorter(None, name, path, 'tv')
|
||||
elif sorttype == 'date':
|
||||
name = name or (Ttemplate('show-name') + ' 2009-01-02')
|
||||
sorter = sabnzbd.tvsort.DateSorter(None, name, path, 'tv')
|
||||
sorter = DateSorter(None, name, path, 'tv')
|
||||
else:
|
||||
return None
|
||||
sorter.sort_string = expression
|
||||
@@ -1183,14 +1186,14 @@ def eval_sort(sorttype, expression, name=None, multipart=''):
|
||||
path = os.path.normpath(os.path.join(path, sorter.filename_set))
|
||||
fname = Ttemplate('orgFilename')
|
||||
fpath = path
|
||||
if sorttype == 'generic' and '%1' in multipart:
|
||||
if sorttype == 'movie' and '%1' in multipart:
|
||||
fname = fname + multipart.replace('%1', '1')
|
||||
fpath = fpath + multipart.replace('%1', '1')
|
||||
if '%fn' in path:
|
||||
path = path.replace('%fn', fname + '.avi')
|
||||
path = path.replace('%fn', fname + '.mkv')
|
||||
else:
|
||||
if sorter.rename_or_not:
|
||||
path = fpath + '.avi'
|
||||
path = fpath + '.mkv'
|
||||
else:
|
||||
if sabnzbd.WIN32:
|
||||
path += '\\'
|
||||
@@ -30,7 +30,7 @@ from httplib import IncompleteRead
|
||||
from threading import Thread
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.constants import FUTURE_Q_FOLDER, Status
|
||||
from sabnzbd.constants import DEF_TIMEOUT, MAX_URL_RETRIES, FUTURE_Q_FOLDER, Status
|
||||
from sabnzbd.encoding import unicoder
|
||||
import sabnzbd.misc as misc
|
||||
import sabnzbd.dirscanner as dirscanner
|
||||
@@ -59,8 +59,17 @@ class URLGrabber(Thread):
|
||||
|
||||
def add(self, url, future_nzo, when=None):
|
||||
""" Add an URL to the URLGrabber queue, 'when' is seconds from now """
|
||||
if when and future_nzo:
|
||||
future_nzo.wait = time.time() + when
|
||||
if future_nzo and when:
|
||||
# Always increase counter
|
||||
future_nzo.url_tries += 1
|
||||
|
||||
# Too many tries? Cancel
|
||||
if future_nzo.url_tries > MAX_URL_RETRIES:
|
||||
bad_fetch(future_nzo, url, T('Maximum retries'))
|
||||
return
|
||||
|
||||
future_nzo.url_wait = time.time() + when
|
||||
|
||||
self.queue.put((url, future_nzo))
|
||||
|
||||
def stop(self):
|
||||
@@ -81,7 +90,7 @@ class URLGrabber(Thread):
|
||||
|
||||
if future_nzo:
|
||||
# Re-queue when too early and still active
|
||||
if future_nzo.wait and future_nzo.wait > time.time():
|
||||
if future_nzo.url_wait and future_nzo.url_wait > time.time():
|
||||
self.add(url, future_nzo)
|
||||
time.sleep(1.0)
|
||||
continue
|
||||
@@ -187,7 +196,7 @@ class URLGrabber(Thread):
|
||||
retry = True
|
||||
fn = None
|
||||
elif retry:
|
||||
fn, msg, retry, wait, data = _analyse(fn, url)
|
||||
fn, msg, retry, wait, data = _analyse(fn, url, future_nzo)
|
||||
|
||||
if not fn:
|
||||
if retry:
|
||||
@@ -300,23 +309,28 @@ def _build_request(url):
|
||||
return urllib2.urlopen(req)
|
||||
|
||||
|
||||
def _analyse(fn, url):
|
||||
def _analyse(fn, url, future_nzo):
|
||||
""" Analyze response of indexer
|
||||
returns fn|None, error-message|None, retry, wait-seconds, data
|
||||
"""
|
||||
data = None
|
||||
if not fn or fn.code != 200:
|
||||
logging.debug('No usable response from indexer, retry after 60 sec')
|
||||
if fn:
|
||||
msg = fn.msg
|
||||
else:
|
||||
msg = ''
|
||||
return None, msg, True, 60, data
|
||||
|
||||
# Increasing wait-time in steps for standard errors
|
||||
when = DEF_TIMEOUT * (future_nzo.url_tries + 1)
|
||||
logging.debug('No usable response from indexer, retry after %s sec', when)
|
||||
return None, msg, True, when, data
|
||||
|
||||
# Check for an error response
|
||||
if not fn or fn.msg != 'OK':
|
||||
logging.debug('Received nothing from indexer, retry after 60 sec')
|
||||
return None, fn.msg, True, 60, data
|
||||
# Increasing wait-time in steps for standard errors
|
||||
when = DEF_TIMEOUT * (future_nzo.url_tries + 1)
|
||||
logging.debug('Received nothing from indexer, retry after %s sec', when)
|
||||
return None, fn.msg, True, when, data
|
||||
|
||||
return fn, fn.msg, False, 0, data
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ def test_nntp_server(host, port, server=None, username=None, password=None, ssl=
|
||||
servers = get_servers()
|
||||
got_pass = False
|
||||
for server in servers:
|
||||
if host in server:
|
||||
if host in servers[server].host():
|
||||
srv = servers[server]
|
||||
password = srv.password()
|
||||
got_pass = True
|
||||
|
||||
@@ -189,6 +189,7 @@ class SysTrayIconThread(Thread):
|
||||
elif lparam == win32con.WM_LBUTTONDOWN:
|
||||
# Wrapper of win32api, timeout is in ms
|
||||
# We need to wait at least untill what user has defined as double click
|
||||
self.stop_click_timer()
|
||||
self.click_timer = timer.set_timer(win32gui.GetDoubleClickTime(), self.click)
|
||||
return True
|
||||
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
|
||||
# You MUST use double quotes (so " and not ')
|
||||
|
||||
__version__ = "2.3.1"
|
||||
__baseline__ = "f1695ec8753fbdb07bd67bdce25eeb3ebe70b972"
|
||||
__version__ = "2.3.2"
|
||||
__baseline__ = "1cac5799eb3f74f2e39942453b7b244fb0366e9a"
|
||||
|
||||
@@ -121,7 +121,9 @@ class Wizard(object):
|
||||
info['ssl'] = 0
|
||||
info['ssl_verify'] = 2
|
||||
else:
|
||||
for server in servers:
|
||||
# Sort servers to get the first enabled one
|
||||
server_names = sorted(servers.keys(), key=lambda svr: '%d%02d%s' % (int(not servers[svr].enable()), servers[svr].priority(), servers[svr].displayname().lower()))
|
||||
for server in server_names:
|
||||
# If there are multiple servers, just use the first enabled one
|
||||
s = servers[server]
|
||||
info['host'] = s.host()
|
||||
|
||||
55
six/__init__.py
Normal file → Executable file
55
six/__init__.py
Normal file → Executable file
@@ -1,6 +1,4 @@
|
||||
"""Utilities for writing code that runs on Python 2 and 3"""
|
||||
|
||||
# Copyright (c) 2010-2015 Benjamin Peterson
|
||||
# Copyright (c) 2010-2017 Benjamin Peterson
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -20,6 +18,8 @@
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
"""Utilities for writing code that runs on Python 2 and 3"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
|
||||
import functools
|
||||
@@ -29,7 +29,7 @@ import sys
|
||||
import types
|
||||
|
||||
__author__ = "Benjamin Peterson <benjamin@python.org>"
|
||||
__version__ = "1.10.0"
|
||||
__version__ = "1.11.0"
|
||||
|
||||
|
||||
# Useful for very coarse version differentiation.
|
||||
@@ -241,6 +241,7 @@ _moved_attributes = [
|
||||
MovedAttribute("map", "itertools", "builtins", "imap", "map"),
|
||||
MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"),
|
||||
MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"),
|
||||
MovedAttribute("getoutput", "commands", "subprocess"),
|
||||
MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"),
|
||||
MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"),
|
||||
MovedAttribute("reduce", "__builtin__", "functools"),
|
||||
@@ -262,10 +263,11 @@ _moved_attributes = [
|
||||
MovedModule("html_entities", "htmlentitydefs", "html.entities"),
|
||||
MovedModule("html_parser", "HTMLParser", "html.parser"),
|
||||
MovedModule("http_client", "httplib", "http.client"),
|
||||
MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"),
|
||||
MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"),
|
||||
MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"),
|
||||
MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"),
|
||||
MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"),
|
||||
MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"),
|
||||
MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"),
|
||||
MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"),
|
||||
MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"),
|
||||
@@ -337,10 +339,12 @@ _urllib_parse_moved_attributes = [
|
||||
MovedAttribute("quote_plus", "urllib", "urllib.parse"),
|
||||
MovedAttribute("unquote", "urllib", "urllib.parse"),
|
||||
MovedAttribute("unquote_plus", "urllib", "urllib.parse"),
|
||||
MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"),
|
||||
MovedAttribute("urlencode", "urllib", "urllib.parse"),
|
||||
MovedAttribute("splitquery", "urllib", "urllib.parse"),
|
||||
MovedAttribute("splittag", "urllib", "urllib.parse"),
|
||||
MovedAttribute("splituser", "urllib", "urllib.parse"),
|
||||
MovedAttribute("splitvalue", "urllib", "urllib.parse"),
|
||||
MovedAttribute("uses_fragment", "urlparse", "urllib.parse"),
|
||||
MovedAttribute("uses_netloc", "urlparse", "urllib.parse"),
|
||||
MovedAttribute("uses_params", "urlparse", "urllib.parse"),
|
||||
@@ -416,6 +420,8 @@ _urllib_request_moved_attributes = [
|
||||
MovedAttribute("URLopener", "urllib", "urllib.request"),
|
||||
MovedAttribute("FancyURLopener", "urllib", "urllib.request"),
|
||||
MovedAttribute("proxy_bypass", "urllib", "urllib.request"),
|
||||
MovedAttribute("parse_http_list", "urllib2", "urllib.request"),
|
||||
MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"),
|
||||
]
|
||||
for attr in _urllib_request_moved_attributes:
|
||||
setattr(Module_six_moves_urllib_request, attr.name, attr)
|
||||
@@ -679,11 +685,15 @@ if PY3:
|
||||
exec_ = getattr(moves.builtins, "exec")
|
||||
|
||||
def reraise(tp, value, tb=None):
|
||||
if value is None:
|
||||
value = tp()
|
||||
if value.__traceback__ is not tb:
|
||||
raise value.with_traceback(tb)
|
||||
raise value
|
||||
try:
|
||||
if value is None:
|
||||
value = tp()
|
||||
if value.__traceback__ is not tb:
|
||||
raise value.with_traceback(tb)
|
||||
raise value
|
||||
finally:
|
||||
value = None
|
||||
tb = None
|
||||
|
||||
else:
|
||||
def exec_(_code_, _globs_=None, _locs_=None):
|
||||
@@ -699,19 +709,28 @@ else:
|
||||
exec("""exec _code_ in _globs_, _locs_""")
|
||||
|
||||
exec_("""def reraise(tp, value, tb=None):
|
||||
raise tp, value, tb
|
||||
try:
|
||||
raise tp, value, tb
|
||||
finally:
|
||||
tb = None
|
||||
""")
|
||||
|
||||
|
||||
if sys.version_info[:2] == (3, 2):
|
||||
exec_("""def raise_from(value, from_value):
|
||||
if from_value is None:
|
||||
raise value
|
||||
raise value from from_value
|
||||
try:
|
||||
if from_value is None:
|
||||
raise value
|
||||
raise value from from_value
|
||||
finally:
|
||||
value = None
|
||||
""")
|
||||
elif sys.version_info[:2] > (3, 2):
|
||||
exec_("""def raise_from(value, from_value):
|
||||
raise value from from_value
|
||||
try:
|
||||
raise value from from_value
|
||||
finally:
|
||||
value = None
|
||||
""")
|
||||
else:
|
||||
def raise_from(value, from_value):
|
||||
@@ -802,10 +821,14 @@ def with_metaclass(meta, *bases):
|
||||
# This requires a bit of explanation: the basic idea is to make a dummy
|
||||
# metaclass for one level of class instantiation that replaces itself with
|
||||
# the actual metaclass.
|
||||
class metaclass(meta):
|
||||
class metaclass(type):
|
||||
|
||||
def __new__(cls, name, this_bases, d):
|
||||
return meta(name, bases, d)
|
||||
|
||||
@classmethod
|
||||
def __prepare__(cls, name, this_bases):
|
||||
return meta.__prepare__(name, bases)
|
||||
return type.__new__(metaclass, 'temporary_class', (), {})
|
||||
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
This is version 2005-Feb-10 of the Info-ZIP copyright and license.
|
||||
The definitive version of this document should be available at
|
||||
ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely.
|
||||
|
||||
|
||||
Copyright (c) 1990-2005 Info-ZIP. All rights reserved.
|
||||
|
||||
For the purposes of this copyright and license, "Info-ZIP" is defined as
|
||||
the following set of individuals:
|
||||
|
||||
Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
|
||||
Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth,
|
||||
Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
|
||||
David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
|
||||
Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
|
||||
Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda,
|
||||
Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren,
|
||||
Rich Wales, Mike White
|
||||
|
||||
This software is provided "as is," without warranty of any kind, express
|
||||
or implied. In no event shall Info-ZIP or its contributors be held liable
|
||||
for any direct, indirect, incidental, special or consequential damages
|
||||
arising out of the use of or inability to use this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
definition, disclaimer, and this list of conditions.
|
||||
|
||||
2. Redistributions in binary form (compiled executables) must reproduce
|
||||
the above copyright notice, definition, disclaimer, and this list of
|
||||
conditions in documentation and/or other materials provided with the
|
||||
distribution. The sole exception to this condition is redistribution
|
||||
of a standard UnZipSFX binary (including SFXWiz) as part of a
|
||||
self-extracting archive; that is permitted without inclusion of this
|
||||
license, as long as the normal SFX banner has not been removed from
|
||||
the binary or disabled.
|
||||
|
||||
3. Altered versions--including, but not limited to, ports to new operating
|
||||
systems, existing ports with new graphical interfaces, and dynamic,
|
||||
shared, or static library versions--must be plainly marked as such
|
||||
and must not be misrepresented as being the original source. Such
|
||||
altered versions also must not be misrepresented as being Info-ZIP
|
||||
releases--including, but not limited to, labeling of the altered
|
||||
versions with the names "Info-ZIP" (or any variation thereof, including,
|
||||
but not limited to, different capitalizations), "Pocket UnZip," "WiZ"
|
||||
or "MacZip" without the explicit permission of Info-ZIP. Such altered
|
||||
versions are further prohibited from misrepresentative use of the
|
||||
Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s).
|
||||
|
||||
4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip,"
|
||||
"UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its
|
||||
own source and binary releases.
|
||||
288
win/unzip/README
288
win/unzip/README
@@ -1,288 +0,0 @@
|
||||
This is the README file for the 28 February 2005 public release of the
|
||||
Info-ZIP group's portable UnZip zipfile-extraction program (and related
|
||||
utilities).
|
||||
|
||||
unzip552.zip portable UnZip, version 5.52, source code distribution
|
||||
unzip552.tar.Z same as above, but compress'd tar format
|
||||
unzip552.tar.gz same as above, but gzip'd tar format
|
||||
|
||||
__________________________________________________________________________
|
||||
|
||||
BEFORE YOU ASK: UnZip, its companion utility Zip, and related utilities
|
||||
and support files can be found in many places; read the file "WHERE" for
|
||||
further details. To contact the authors with suggestions, bug reports,
|
||||
or fixes, continue reading this file (README) and, if this is part of a
|
||||
source distribution, the file "ZipPorts" in the proginfo directory. Also
|
||||
in source distributions: read "BUGS" for a list of known bugs, non-bugs
|
||||
and possible future bugs; INSTALL for instructions on how to build UnZip;
|
||||
and "Contents" for a commented listing of all the distributed files.
|
||||
__________________________________________________________________________
|
||||
|
||||
|
||||
GENERAL INFO
|
||||
------------
|
||||
UnZip is an extraction utility for archives compressed in .zip format (also
|
||||
called "zipfiles"). Although highly compatible both with PKWARE's PKZIP
|
||||
and PKUNZIP utilities for MS-DOS and with Info-ZIP's own Zip program, our
|
||||
primary objectives have been portability and non-MSDOS functionality.
|
||||
|
||||
This version of UnZip has been ported to a stupendous array of hardware--
|
||||
from micros to supercomputers--and operating systems: Unix (many flavors),
|
||||
VMS, OS/2 (including DLL version), Windows NT and Windows 95 (including DLL
|
||||
version), Windows CE (GUI version), Windows 3.x (including DLL version),
|
||||
MS-DOS, AmigaDOS, Atari TOS, Acorn RISC OS, BeOS, Macintosh (GUI version),
|
||||
SMS/QDOS, MVS, VM/CMS, FlexOS, Tandem NSK, Human68k (mostly), AOS/VS (partly)
|
||||
and TOPS-20 (partly). UnZip features not found in PKUNZIP include source
|
||||
code; default extraction of directory trees (with a switch to defeat this,
|
||||
rather than the reverse); system-specific extended file attributes; and, of
|
||||
course, the ability to run under most of your favorite operating systems.
|
||||
Plus, it's free. :-)
|
||||
|
||||
For source distributions, see the main Contents file for a list of what's
|
||||
included, and read INSTALL for instructions on compiling (including OS-
|
||||
specific comments). The individual operating systems' Contents files (for
|
||||
example, vms/Contents) may list important compilation info in addition to
|
||||
explaining what files are what, so be sure to read them. Some of the ports
|
||||
have their own, special README files, so be sure to look for those, too.
|
||||
|
||||
See unzip.1 or unzip.txt for usage (or the corresponding UnZipSFX, ZipInfo,
|
||||
fUnZip and ZipGrep docs). For VMS, unzip_def.rnh or unzip_cli.help may be
|
||||
compiled into unzip.hlp and installed as a normal VMS help entry; see
|
||||
vms/descrip.mms.
|
||||
|
||||
|
||||
CHANGES AND NEW FEATURES
|
||||
------------------------
|
||||
The 5.52 maintenance release fixes a few minor problems found in the 5.51
|
||||
release, closes some more security holes, adds a new AtheOS port, and
|
||||
contains a Win32 extra-field code cleanup that was not finished earlier.
|
||||
The most important changes are:
|
||||
|
||||
- (re)enabled unshrinking support by default, the LZW patents have expired
|
||||
- fixed an extraction size bug for encrypted stored entries (12 excess bytes
|
||||
were written with 5.51)
|
||||
- fixed false "uncompressed size mismatch" messages when extracting
|
||||
encrypted archive entries
|
||||
- do not restore SUID/SGID/Tacky attribute bits on Unix (BeOS, AtheOS)
|
||||
unless explicitely requested by new "-K" command line qualifier
|
||||
- optional support for "-W" qualifier to modify the pattern matching syntax
|
||||
(with -W: "*" stops at directory delimiter, "**" matches unlimited)
|
||||
- prevent buffer overflow caused by bogus extra-long Zipfile specification
|
||||
- performance enhancements for VMS port
|
||||
- fixed windll interface handling of its extraction mode qualifiers
|
||||
nfflag, ExtractOnlyNewer, noflag, PromptToOverwrite; added detailed
|
||||
explanation of their meanings and interactions to the windll documentation
|
||||
|
||||
The 5.51 maintenance release adds a command-line CE port, intended for
|
||||
batch processing. With the integration of this port, the pUnZip port
|
||||
has been revised and "revitalized".
|
||||
The most important changes for the general public are a number of
|
||||
bug fixes, mostly related to security issues:
|
||||
|
||||
- repair a serious bug in the textmode output conversion code for the 16-bit
|
||||
ports (16-bit MSDOS, OS/2 1.x, some variants of AMIGA, possibly others)
|
||||
which was introduced by the Deflate64 support of release 5.5
|
||||
- fix a long standing bug in the the inflate decompression method that
|
||||
prevented correct extraction in some rare cases
|
||||
- fixed holes in parent dir traversal security code (e.g.: ".^C." slipped
|
||||
through the previous version of the check code)
|
||||
- fixed security hole: check naming consistency in local and central header
|
||||
- fixed security hole: prevent extracted symlinks from redirecting file
|
||||
extraction paths
|
||||
|
||||
The main addition in the 5.5 release is support for PKWARE's new Deflate64(tm)
|
||||
algorithm, which appeared first in PKZIP 4.0 (published November 2000).
|
||||
As usual, some other bugfixes and clean-ups have been integrated:
|
||||
|
||||
- support for Deflate64 (Zip compression method #9)
|
||||
- support for extracting VMS variable length record text files on
|
||||
any system
|
||||
- optional "cheap autorun" feature for the SFX stub
|
||||
- security fixes:
|
||||
* strip leading slash from stored pathspecs,
|
||||
* remove "../" parent dir path components from extracted file names
|
||||
- new option "-:" to allow verbatim extraction of file names containing
|
||||
"../" parent dir path specs
|
||||
- fixed file handle leak for the DLL code
|
||||
- repaired OS2 & WinNT ACL extraction which was broken in 5.42
|
||||
|
||||
The 5.42 maintenance release fixes more bugs and cleans up the redistribution
|
||||
conditions:
|
||||
|
||||
- removal of unreduce.c and amiga/timelib.c code to get rid of the last
|
||||
distribution restrictions beyond the BSD-like Info-ZIP LICENSE
|
||||
- new generic timelib replacement (currently used by AMIGA port)
|
||||
- more reasonable mapping rules of UNIX "leading-dot" filenames to the
|
||||
DOS 8.3 name convention
|
||||
- repaired screensize detection in MORE paging code
|
||||
(was broken for DOS/OS2/WIN32 in 5.41)
|
||||
|
||||
The 5.41 maintenance release adds another new port and fixes some bugs.
|
||||
|
||||
- new BSD-like LICENSE
|
||||
- new Novell Netware NLM port
|
||||
- supports extraction of archives with more than 64k entries
|
||||
- attribute handling of VMS port was broken in UnZip 5.4
|
||||
- decryption support integrated in the main source distribution
|
||||
|
||||
The 5.4 release adds new ports, again. Other important items are changes
|
||||
to the listing format, new supplemental features and several bug fixes
|
||||
(especially concerning time-stamp handling...):
|
||||
|
||||
- new IBM OS/390 port, a UNIX derivate (POSIX with EBCDIC charset)
|
||||
- complete revision of the MacOS port
|
||||
- changed listing formats to enlarge the file size fields for more digits
|
||||
- added capability to restore directory attributes on MSDOS, OS/2, WIN32
|
||||
- enabled support of symbolic links on BeOS
|
||||
- Unix: optional Acorn filetype support, useful for volumes exported via NFS
|
||||
- several changes/additions to the DLL API
|
||||
- GUI SFX stub for Win16 (Windows 3.1) and Win32 (Windows 9x, Windows NT)
|
||||
- new free GCC compiler environments supported on WIN32
|
||||
- many time-zone handling bug fixes for WIN32, AMIGA, ...
|
||||
|
||||
The 5.32 release adds two new ports and a fix for at least one relatively
|
||||
serious bug:
|
||||
|
||||
- new FlexOS port
|
||||
- new Tandem NSK port
|
||||
- new Visual BASIC support (compatibility with the Windows DLLs)
|
||||
- new -T option (set zipfile timestamp) for virtually all ports
|
||||
- fix for timestamps beyond 2038 (e.g., 2097; crashed under DOS/Win95/NT)
|
||||
- fix for undetected "dangling" symbolic links (i.e., no pointee)
|
||||
- fix for VMS indexed-file extraction problem (stored with Zip 2.0 or 2.1)
|
||||
- further performance optimizations
|
||||
|
||||
The 5.31 release included nothing but small bug-fixes and typo corrections,
|
||||
with the exception of some minor performance tweaks.
|
||||
|
||||
The 5.3 release added still more ports and more cross-platform portability
|
||||
features:
|
||||
|
||||
- new BeOS port
|
||||
- new SMS/QDOS port
|
||||
- new Windows CE graphical port
|
||||
- VM/CMS port fully updated and tested
|
||||
- MVS port fully updated and tested
|
||||
- updated Windows DLL port, with WiZ GUI spun off to a separate package
|
||||
- full Universal Time (UTC or GMT) support for trans-timezone consistency
|
||||
- cross-platform support for 8-bit characters (ISO Latin-1, OEM code pages)
|
||||
- support for NT security descriptors (ACLs)
|
||||
- support for overwriting OS/2 directory EAs if -o option given
|
||||
- updated Solaris/SVR4 package facility
|
||||
|
||||
What is (still!) not added is multi-part archive support (a.k.a. "diskette
|
||||
spanning") and a unified and more powerful DLL interface. These are the
|
||||
two highest priorities for the 6.x releases. Work on the former is almost
|
||||
certain to have commenced by the time you read this. This time we mean it!
|
||||
You betcha. :-)
|
||||
|
||||
Although the DLLs are still basically a mess, the Windows DLLs (16- and 32-
|
||||
bit) now have some documentation and a small example application. Note that
|
||||
they should now be compatible with C/C++, Visual BASIC and Delphi. Weirder
|
||||
languages (FoxBase, etc.) are probably Right Out.
|
||||
|
||||
Finally, note that support for unshrinking has now been turned OFF by default,
|
||||
although the source code is still available (as with unreducing). This was
|
||||
done for legal reasons, not technical ones, and no, we're not any happier
|
||||
about it than you are. :-( See the COPYING file for details.
|
||||
|
||||
|
||||
INTERNET RESOURCES
|
||||
------------------
|
||||
|
||||
Info-ZIP's web site is at http://www.info-zip.org/pub/infozip/
|
||||
and contains the most up-to-date information about coming releases,
|
||||
links to binaries, and common problems.
|
||||
(See http://www.info-zip.org/pub/infozip/FAQ.html for the latter.)
|
||||
Files may also be retrieved via ftp://ftp.info-zip.org/pub/infozip/ .
|
||||
Thanks to LEO (Munich, Germany) for hosting our primary site.
|
||||
|
||||
|
||||
DISTRIBUTION
|
||||
------------
|
||||
If you have a question regarding redistribution of Info-ZIP software, either
|
||||
as is, as packaging for a commercial product, or as an integral part of a
|
||||
commercial product, please read the Frequently Asked Questions (FAQ) section
|
||||
of the included COPYING file.
|
||||
|
||||
Insofar as C compilers are rare on some platforms and the authors only have
|
||||
direct access to a subset of the supported systems, others may wish to pro-
|
||||
vide ready-to-run executables for new systems. In general there is no prob-
|
||||
lem with this; we require only that such distributions include this README
|
||||
file, the WHERE file, the COPYING file (contains copyright/redistribution
|
||||
information), and the appropriate documentation files (unzip.txt and/or
|
||||
unzip.1 for UnZip, etc.). If the local system provides a way to make self-
|
||||
extracting archives in which both the executables and text files can be
|
||||
stored together, that's best (in particular, use UnZipSFX if at all possible,
|
||||
even if it's a few kilobytes bigger than the alternatives); otherwise we
|
||||
suggest a bare UnZip executable and a separate zipfile containing the re-
|
||||
maining text and binary files. If another archiving method is in common
|
||||
use on the target system (for example, Zoo or LHa), that may also be used.
|
||||
|
||||
|
||||
BUGS AND NEW PORTS: CONTACTING INFO-ZIP
|
||||
----------------------------------------
|
||||
All bug reports and patches (context diffs only, please!) should go to
|
||||
Zip-Bugs@lists.wku.edu, which is the e-mail address for the Info-ZIP
|
||||
authors. (Note that a few rare systems require the Zip-Bugs part to be
|
||||
capitalized as shown; most systems work OK with lowercase "zip-bugs,"
|
||||
however.) DO NOT MAIL US LARGE BINARIES--EVER. If you need to send us
|
||||
a problem archive that happens to be large (> 20K), contact us first for
|
||||
instructions.
|
||||
|
||||
"Dumb questions" that aren't adequately answered in the documentation
|
||||
should also be directed to Zip-Bugs rather than to a global forum such
|
||||
as Usenet. (Kindly make certain that your question *isn't* answered by
|
||||
the documentation, however--a great deal of effort has gone into making
|
||||
it clear and complete.)
|
||||
|
||||
Suggestions for new features can be discussed on Info-ZIP@lists.wku.edu,
|
||||
a mailing list for Info-ZIP beta testers and interested parties; you need
|
||||
to subscribe first, however (see below). We make no promises to act on all
|
||||
suggestions or even all patches, but if it is something that is manifestly
|
||||
useful, sending the required patches to Zip-Bugs directly (as per the
|
||||
instructions in the ZipPorts file) is likely to produce a quicker response
|
||||
than asking us to do it--the authors are always ridiculously short on time.
|
||||
(Please do NOT send patches or encoded zipfiles to the Info-ZIP list.
|
||||
Please DO read the ZipPorts file before sending any large patch. It would
|
||||
be difficult to over-emphasize this point...)
|
||||
|
||||
If you are considering a port, not only should you read the ZipPorts file,
|
||||
but also please check in with Zip-Bugs BEFORE getting started, since the
|
||||
code is constantly being updated behind the scenes. (For example, VxWorks,
|
||||
VMOS and Netware ports were once claimed to be under construction, although
|
||||
we have yet to see any up-to-date patches.) We will arrange to send you the
|
||||
latest sources. The alternative is the possibility that your hard work will
|
||||
be tucked away in a subdirectory and mostly ignored, or completely ignored
|
||||
if someone else has already done the port (and you'd be surprised how often
|
||||
this has happened).
|
||||
|
||||
|
||||
BETA TESTING: JOINING INFO-ZIP
|
||||
-------------------------------
|
||||
If you'd like to keep up to date with our UnZip (and companion Zip utility)
|
||||
development, join the ranks of beta testers, add your own thoughts and
|
||||
contributions, or simply lurk, you may join one of our mailing lists.
|
||||
There is an announcements-only list (Info-ZIP-announce) and a general
|
||||
discussion/testing list (Info-ZIP). You must be a subscriber to post, and
|
||||
you can subscribe via the links on our Frequently Asked Questions page:
|
||||
|
||||
http://www.info-zip.org/pub/infozip/FAQ.html#lists
|
||||
|
||||
(Please note that as of late May 2004, the lists are unavailable pending
|
||||
a move to a new site; we hope to have them restored shortly. In the
|
||||
interim ...) Feel free to use our bug-reporting web page for bug reports
|
||||
and to ask questions not answered on the FAQ page above:
|
||||
|
||||
http://www.info-zip.org/zip-bug.html
|
||||
|
||||
There is also a closed mailing list for internal discussions of our core
|
||||
development team. This list is now kept secret to prevent us from being
|
||||
flooded with spam messages.
|
||||
|
||||
|
||||
-- Greg Roelofs (sometimes known as Cave Newt), principal UnZip developer
|
||||
guy, with inspiration from David Kirschbaum, was Author of this text.
|
||||
|
||||
-- Christian Spieler (shorthand: SPC), current UnZip maintenance coordinator,
|
||||
applied the most recent changes.
|
||||
@@ -1,40 +0,0 @@
|
||||
README.NT 27 February 2005
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Contents of the UnZip 5.52 distribution archive for Win9x/NT/2K/XP/2K3 (Intel):
|
||||
|
||||
README general information
|
||||
LICENSE terms and conditions for using Info-Zip code
|
||||
COPYING.OLD additional Copyright notes
|
||||
WHERE where to get the current Info-ZIP software
|
||||
unzip.txt UnZip manual (preformatted unix man page)
|
||||
unzipsfx.txt UnZipSFX manual (dto.)
|
||||
funzip.txt manual for fUnZip
|
||||
zipinfo.txt manual for UnZip's ZipInfo mode
|
||||
ziplimit.txt infos about limitations of Info-Zip's progs
|
||||
README.NT this file ...
|
||||
unzip.exe UnZip for NT command line utility, MSVC++ 6.0
|
||||
unzipsfx.exe console mode SFX stub for NT, MSVC++ 6.0
|
||||
funzip.exe UnZip "filter" utility
|
||||
SFXWiz32.exe GUI mode SFX stub for NT, MSVC++ 6.0
|
||||
unzipsfx-gcc.exe console mode SFX stub for NT, gcc/mingw32
|
||||
SFXWiz32-gcc.exe GUI mode SFX stub for NT, gcc/mingw32
|
||||
|
||||
|
||||
The program executables were compiled with MS Visual C++ 6.0 SP6 (MSC v12.00),
|
||||
using the win32/Makefile as supplied in the UnZip 5.52 source distribution
|
||||
(with support for ASM_CRC enabled). Additionally, the sfx stubs have been
|
||||
compressed by the free exe packer UPX 1.25.
|
||||
|
||||
The alternative unzipsfx-gcc.exe and SFXWiz32-gcc.exe stubs were compiled
|
||||
by gcc 3.2 using the mingw32 environment. These stubs are significantly
|
||||
smaller, but require the presence of the "msvcrt.dll" C runtime DLL.
|
||||
Normally, this should not be a problem, since this dll is supplied as part
|
||||
of the operating system core for Win2k/XP/2K3 and Windows 98/Me. Older Windows
|
||||
systems (Win95/NT4) support this runtime DLL when Internet Explorer 4.0 (or
|
||||
newer) is installed. The dll is not supplied in a Win32s environment, but
|
||||
this should be a minor problem. (For the text-mode stub this is not a
|
||||
problem at all; Win32s cannot be used to run text-mode applications, anyway.)
|
||||
|
||||
--------
|
||||
Christian Spieler
|
||||
258
win/unzip/WHERE
258
win/unzip/WHERE
@@ -1,258 +0,0 @@
|
||||
__________________________________________________________________________
|
||||
|
||||
This is the Info-ZIP file ``WHERE,'' last updated on 17 February 2005.
|
||||
__________________________________________________________________________
|
||||
|
||||
The latest version of this file can be found online at:
|
||||
|
||||
ftp://ftp.info-zip.org/pub/infozip/doc/WHERE
|
||||
|
||||
Note that some ftp sites may not yet have the latest versions of Zip
|
||||
and UnZip when you read this. The latest versions always appear in
|
||||
ftp://ftp.info-zip.org/pub/infozip/ (and subdirectories thereof) first,
|
||||
except for encryption binaries, which always appear in
|
||||
ftp://ftp.icce.rug.nl/infozip/ (and subdirectories) first.
|
||||
|
||||
IF YOU FIND AN ERROR: please let us know! We don't have time to
|
||||
check each and every site personally (or even collectively), so any
|
||||
number of the sites listed below may have moved or disappeared en-
|
||||
tirely. E-mail to Zip-Bugs@lists.wku.edu and we'll update this file.
|
||||
__________________________________________________________________________
|
||||
|
||||
|
||||
Info-ZIP's home WWW site is listed on Yahoo and is at:
|
||||
|
||||
ftp://ftp.info-zip.org/pub/infozip/Info-ZIP.html (master version)
|
||||
http://ftp.info-zip.org/pub/infozip/ (master version)
|
||||
http://www.info-zip.org/
|
||||
|
||||
Note that the old sites at http://www.cdrom.com/pub/infozip/ and
|
||||
http://www.freesoftware.com/pub/infozip are PERMANENTLY BROKEN. They
|
||||
cannot be updated or removed, apparently.
|
||||
|
||||
The Zip and UnZip pages have links to most known mirror sites carrying our
|
||||
source and/or binary distributions, and they generally are more up-to-date
|
||||
and have better information than what you are reading:
|
||||
|
||||
ftp://ftp.info-zip.org/pub/infozip/Zip.html
|
||||
ftp://ftp.info-zip.org/pub/infozip/UnZip.html
|
||||
|
||||
The related zlib package by Info-ZIP's Jean-loup Gailly and Mark Adler is at:
|
||||
|
||||
http://www.zlib.org/
|
||||
|
||||
Source-code archives for Info-ZIP's portable Zip, UnZip, and related
|
||||
utilities:
|
||||
|
||||
zip231.zip Zip 2.31 (deflation; includes zipnote/zipsplit/zipcloak)
|
||||
zip231.tar.Z ditto, compress'd tar format
|
||||
|
||||
zip11.zip Zip 1.1 (shrinking, implosion; compatible w. PKUNZIP 1.1)
|
||||
zip11.tar.Z ditto, compress'd tar format
|
||||
|
||||
unzip552.zip UnZip 5.52 (all methods[*]; unzip/funzip/unzipsfx/zipgrep)
|
||||
unzip552.tar.gz ditto, gzip'd tar format
|
||||
unzip552.tar.Z ditto, compress'd tar format
|
||||
|
||||
unred552.zip UnZip 5.52 add-on, contains copyrighted unreduce support
|
||||
|
||||
zcrypt29.zip encryption support for Zip 2.3[**]
|
||||
zcrypt10.zip encryption support for Zip 1.1
|
||||
|
||||
MacZip106src.zip contains all the GUI stuff and the project files to build
|
||||
the MacZip main-app. To build MacZip successfully, both
|
||||
the Zip 2.31 and UnZip 5.52 sources are required, too.
|
||||
|
||||
wiz502.zip WiZ 5.02, Windows 9x/NT GUI front-end for Info-ZIP DLLs
|
||||
wiz502+dlls.zip WiZ 5.02, Windows 9x/NT GUI front-end plus DLL sources
|
||||
|
||||
[*] Unreducing is disabled by default, but is available as add-on.
|
||||
As of July 2004, Unisys's LZW patent was expired worldwide, and
|
||||
unshrinking is turned on by default since the release of UnZip 5.52.
|
||||
See UnZip's INSTALL file for details.
|
||||
|
||||
[**] As of January 2000, US export regulations were amended to allow export
|
||||
of free encryption source code from the US. As of June 2002, these
|
||||
regulations were further relaxed to allow export of encryption binaries
|
||||
associated with free encryption source code. The Zip 2.31, UnZip 5.52
|
||||
and Wiz 5.02 archives now include full crypto source code. As of the
|
||||
Zip 2.31 release, all official binaries include encryption support; the
|
||||
former "zcr" archives ceased to exist.
|
||||
(Note that restrictions may still exist in other countries, of course.)
|
||||
|
||||
Executables archives (and related files) for Info-ZIP's software; not all
|
||||
of these will be immediately available due to lack of access to appropriate
|
||||
systems on the part of Info-ZIP members.
|
||||
|
||||
zip231x.zip MSDOS executables and docs
|
||||
zip231x1.zip OS/2 1.x (16-bit) executables and docs
|
||||
zip231x2.zip OS/2 2/3/4.x (32-bit) executables and docs
|
||||
zip231xA.zip Amiga executables and docs
|
||||
zip231xB.zip BeOS executables and docs
|
||||
zip231xC.zip VM/CMS executable and docs
|
||||
zip231xK.zip Tandem NSK executables and docs
|
||||
zip231xM.xmit MVS classic executable
|
||||
zip231xM-docs.zip MVS classic port, docs only
|
||||
zip231dN.zip WinNT/Win9x (Intel) DLL, header files, docs
|
||||
zip231xN.zip WinNT/Win9x (Intel) executables and docs
|
||||
zip231xN-axp.zip WinNT (Alpha AXP) executables and docs
|
||||
zip231xN-mip.zip WinNT (MIPS R4000) executables and docs
|
||||
zip231xN-ppc.zip WinNT (PowerPC) executables and docs
|
||||
zip231xO.zip IBM OS/390 Open Edition binaries and docs
|
||||
zip231xQ.zip SMS/QDOS executables and docs
|
||||
zip231xR.zip Acorn RISC OS executables and docs
|
||||
zip231xT.zip Atari TOS executables and docs
|
||||
zip231-vms-axp-obj.zip
|
||||
VMS (Alpha AXP) object libs, link procedure and docs
|
||||
zip231-vms-axp-exe.zip
|
||||
VMS (Alpha AXP) executables for VMS 6.1 or later and docs
|
||||
zip231-vms-vax-decc-obj.zip
|
||||
VMS (VAX) object libs (new DEC C), link procedure and docs
|
||||
zip231-vms-vax-decc-exe.zip
|
||||
VMS (VAX) executables (DEC C) for VMS 6.1 or later; docs
|
||||
zip231-vms-vax-vaxc-obj.zip
|
||||
VMS (VAX) object libs (old VAX C), link procedure and docs
|
||||
zip231x.hqx Macintosh BinHex'd executables and docs
|
||||
|
||||
unz552x.exe MSDOS self-extracting executable (16-bit unzip, ..., docs)
|
||||
unz552x3.exe MSDOS self-extracting executable (16-, 32-bit unzip, docs)
|
||||
unz552x1.exe OS/2 1.x (16-bit) self-extracting executables and docs
|
||||
unz552x2.exe OS/2 2/3/4.x (32-bit) self-extracting executables and docs
|
||||
unz552d2.zip OS/2 2/3/4.x (32-bit) DLL, header file, demo exe and docs
|
||||
unz552xA.ami Amiga self-extracting executables and docs
|
||||
unz552xA.lha Amiga executables and docs, LHa archive
|
||||
unz552xB.sfx BeOS self-extracting executables and docs
|
||||
unz552xB.tar.gz BeOS executables and docs, gzip'd tar archive
|
||||
unz552xC.mod VM/CMS executable module in "packed" format
|
||||
unz552xC-docs.zip VM/CMS docs, only
|
||||
unz552xF.zip FlexOS executable and docs
|
||||
unz552xK.zip Tandem NSK executable and docs
|
||||
unz552xM.xmit MVS classic executable
|
||||
unz552xM-docs.zip MVS classic port, docs only
|
||||
unz552dN.zip NT4/W2K/XP/2K3/W9x (32-bit Intel) DLL, header files, docs
|
||||
unz552xN.exe NT/2K/XP/2K3/W9x self-extracting i386 executables and docs
|
||||
unz552xN-axp.exe WinNT (Alpha AXP) self-extracting executables and docs
|
||||
unz552xN-mip.exe WinNT (MIPS R4000) self-extracting executables and docs
|
||||
unz552xN-ppc.exe WinNT (PowerPC) self-extracting executables and docs
|
||||
unz552xQ.sfx SMS/QDOS self-extracting executables and docs
|
||||
unz552xO.tar.Z IBM OS/390 Open edition (Unix-like), exes and docs
|
||||
unz552xR.exe Acorn RISC OS self-extracting executables and docs
|
||||
unz552xR.spk Acorn RISC OS Spark'd executables and docs
|
||||
unz552xT.tos Atari TOS self-extracting executables and docs
|
||||
unz552x-vms-axp-obj.bck VMS backup saveset,
|
||||
contains UnZip (Alpha) obj libs, link procedure, docs
|
||||
unz552x-vms-axp-obj.exe VMS (Alpha AXP) SFX archive (statically linked),
|
||||
contains UnZip (Alpha) obj libs, link procedure, docs
|
||||
unz552x-vms-axp-exe.exe VMS (Alpha AXP) SFX archive (dynamically linked),
|
||||
contains UnZip (Alpha AXP, DEC C) executables and docs,
|
||||
smaller than object archive, but requires VMS 6.1
|
||||
unz552x-vms-vax-decc-obj.bck VMS backup saveset,
|
||||
contains UnZip (new DEC C) obj libs, link procedure, docs
|
||||
unz552x-vms-vax-decc-obj.exe VMS (VAX) SFX archive (statically linked),
|
||||
contains UnZip (new DEC C) obj libs, link procedure, docs
|
||||
unz552x-vms-vax-decc-exe.exe VMS (VAX) SFX archive (dynamically linked),
|
||||
contains UnZip (new DEC C) executables and docs,
|
||||
smaller than object archive, but requires VMS 6.1
|
||||
unz552x-vms-vax-vaxc-obj.bck VMS backup saveset,
|
||||
contains UnZip (old VAX C) obj libs, link procedure, docs
|
||||
unz552x-vms-vax-vaxc-obj.exe VMS (VAX) SFX archive (statically linked),
|
||||
contains UnZip (old VAX C) obj libs, link procedure, docs
|
||||
unz552x.hqx Macintosh BinHex'd executables and docs for unzip
|
||||
(unz552x.tar.{Z,gz} Unix exes/docs for Solaris 2.x, SCO Unix, Linux, etc.,
|
||||
depending on directory/location; generally only provided
|
||||
in cases where the OS does *not* ship with a bundled C
|
||||
compiler)
|
||||
|
||||
MacZip106nc.hqx Macintosh combined Zip&UnZip application with GUI,
|
||||
executables and docs (no encryption)
|
||||
MacZip106c.hqx Macintosh combined Zip&UnZip application with GUI,
|
||||
executables and docs (with encryption)
|
||||
|
||||
wiz502xN.exe WiZ 5.02 32-bit (Win9x/NT/2K/XP/2K3) app+docs (self-extr.)
|
||||
|
||||
UnzpHist.zip complete changes-history of UnZip and its precursors
|
||||
ZipHist.zip complete changes-history of Zip
|
||||
|
||||
ftp/web sites for the US-exportable sources and executables:
|
||||
|
||||
NOTE: Look for the Info-ZIP file names given above (not PKWARE or third-
|
||||
party stuff) in the following locations. Some sites like to use slightly
|
||||
different names, such as zip-2.31.tar.gz instead of zip231.tar.Z.
|
||||
|
||||
ftp://ftp.info-zip.org/pub/infozip/ [THE INFO-ZIP HOME SITE]
|
||||
ftp://sunsite.doc.ic.ac.uk/packages/zip/ [MIRRORS THE INFO-ZIP HOME SITE]
|
||||
ftp://unix.hensa.ac.uk/mirrors/uunet/pub/archiving/zip/
|
||||
|
||||
ftp://ftp.cmdl.noaa.gov/aerosol/doc/archiver/{all,dos,os2,mac,vax_alpha}/
|
||||
ftp://garbo.uwasa.fi/pc/arcers/ [AND OTHER GARBO MIRRORS]
|
||||
ftp://garbo.uwasa.fi/unix/arcers/ [AND OTHER GARBO MIRRORS]
|
||||
ftp://ftp.elf.stuba.sk/pub/pc/pack/ [AND OTHER STUBA MIRRORS]
|
||||
ftp://ftp-os2.cdrom.com/pub/os2/archiver/
|
||||
ftp://ftp-os2.nmsu.edu/os2/archiver/
|
||||
ftp://ftp.informatik.tu-muenchen.de/pub/comp/os/os2/archiver/
|
||||
ftp://sumex-aim.stanford.edu/info-mac/cmp/
|
||||
ftp://ftp.wustl.edu/pub/aminet/util/arc/ [AND OTHER AMINET MIRRORS]
|
||||
ftp://atari.archive.umich.edu/pub/Archivers/ [AND OTHER UMICH MIRRORS]
|
||||
http://www.umich.edu/~archive/atari/Archivers/
|
||||
ftp://jake.educom.com.au/pub/infozip/acorn/ [Acorn RISC OS]
|
||||
http://www.sitec.net/maczip/ [MacZip port]
|
||||
|
||||
ftp/web sites for the encryption and decryption sources and/or executables:
|
||||
|
||||
Outside the US:
|
||||
ftp://ftp.info-zip.org/pub/infozip/ [THE INFO-ZIP HOME SITE]
|
||||
ftp://ftp.icce.rug.nl/infozip/ [THE INFO-ZIP ENCRYPTION HOME SITE]
|
||||
ftp://ftp.elf.stuba.sk/pub/pc/pack/
|
||||
ftp://garbo.uwasa.fi/pc/arcers/
|
||||
ftp://ftp.inria.fr/system/arch-compr/
|
||||
ftp://ftp.leo.org/pub/comp/os/os2/leo/archiver/
|
||||
(mail server at ftp-mailer@ftp.leo.org)
|
||||
|
||||
ftp://ftp.win.tue.nl/pub/compression/zip/
|
||||
ftp://ftp.uni-erlangen.de/pub/pc/msdos/arc-utils/zip/
|
||||
|
||||
|
||||
The primary distribution site for the MacZip port can be found at:
|
||||
|
||||
http://www.sitec.net/maczip/
|
||||
|
||||
ftp sites for VMS-format Zip and UnZip packages (sources, object files and
|
||||
executables, no encryption/decryption--see also "Mail servers" section below):
|
||||
|
||||
ftp.spc.edu [192.107.46.27] and ftp.wku.edu:
|
||||
|
||||
[.MACRO32]AAAREADME.TXT
|
||||
[.MACRO32.SAVESETS]UNZIP.BCK or UNZIP.ZIP (if already have older version)
|
||||
[.MACRO32.SAVESETS]ZIP.ZIP
|
||||
|
||||
To find other ftp/web sites:
|
||||
|
||||
The "archie" ftp database utility can be used to find an ftp site near
|
||||
you (although the command-line versions always seem to find old ver-
|
||||
sions...the `FTPsearch' server at http://ftpsearch.ntnu.no/ftpsearch
|
||||
--formerly `Archie 95'--is quite up-to-date, however). Or check a stan-
|
||||
dard WWW search engine like AltaVista (http://www.altavista.digital.com/)
|
||||
or Yahoo (http://www.yahoo.com/). If you don't know how to use these,
|
||||
DON'T ASK US--read the web sites' help pages or check the Usenet groups
|
||||
news.announce.newusers or news.answers or some such, or ask your system
|
||||
administrator.
|
||||
|
||||
Mail servers:
|
||||
|
||||
To get the encryption sources by e-mail, send the following commands
|
||||
to ftp-mailer@informatik.tu-muenchen.de:
|
||||
|
||||
get /pub/comp/os/os2/archiver/zcrypt29.zip
|
||||
quit
|
||||
|
||||
To get the VMS Zip/UnZip package by e-mail, send the following
|
||||
commands in the body of a mail message to fileserv@wku.edu (the
|
||||
"HELP" command is also accepted):
|
||||
|
||||
SEND FILESERV_TOOLS
|
||||
SEND UNZIP
|
||||
SEND ZIP
|
||||
|
||||
To get Atari executables by e-mail, send a message to
|
||||
atari@atari.archive.umich.edu for information about the mail server.
|
||||
__________________________________________________________________________
|
||||
Binary file not shown.
Reference in New Issue
Block a user