Compare commits
337 Commits
0.6.3
...
0.7.0Alpha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b07214b706 | ||
|
|
a929d9d8ce | ||
|
|
386601ccdd | ||
|
|
75677d88cf | ||
|
|
1e8d51d921 | ||
|
|
9dadef60e7 | ||
|
|
edb39c34b7 | ||
|
|
be96f029a2 | ||
|
|
e741a6644a | ||
|
|
55e60a3e8e | ||
|
|
75e8381924 | ||
|
|
bf3a1b8d43 | ||
|
|
4c5e8a57c5 | ||
|
|
7c5e9b7874 | ||
|
|
1f35bc58e1 | ||
|
|
da105ba12f | ||
|
|
fa0474611d | ||
|
|
610c2c7f0f | ||
|
|
643f20048b | ||
|
|
6dc59f0d9a | ||
|
|
30cbe48f10 | ||
|
|
dc6f8a19e3 | ||
|
|
1da2c73ce0 | ||
|
|
15537de378 | ||
|
|
c72ecf0373 | ||
|
|
2b6adc90c9 | ||
|
|
5878ac81d7 | ||
|
|
92f12911ea | ||
|
|
5863ec6878 | ||
|
|
aeb83d3c93 | ||
|
|
6571788800 | ||
|
|
c335371b77 | ||
|
|
9f534f788f | ||
|
|
bf6b2c3809 | ||
|
|
ab00c54270 | ||
|
|
6932ccbfcd | ||
|
|
dd07dd44ba | ||
|
|
81ad6c1b05 | ||
|
|
4aa902429e | ||
|
|
8a683e4ef0 | ||
|
|
9046658d0f | ||
|
|
4c259d8d2b | ||
|
|
05ab19b5a6 | ||
|
|
9fb74616e8 | ||
|
|
eea2dab3a8 | ||
|
|
a133bb28cd | ||
|
|
b7cda43d36 | ||
|
|
3bee9b3ec0 | ||
|
|
6281684c46 | ||
|
|
41bc05a108 | ||
|
|
da2c0d5539 | ||
|
|
ac1c77d862 | ||
|
|
eccece6799 | ||
|
|
7dd5c03f64 | ||
|
|
406e155284 | ||
|
|
63069407b8 | ||
|
|
1314219d78 | ||
|
|
c602eadfa8 | ||
|
|
ea28b7023f | ||
|
|
c5580f8de4 | ||
|
|
c6b361950e | ||
|
|
4a12acc82c | ||
|
|
a1594f4915 | ||
|
|
be96a611af | ||
|
|
2104f3cb81 | ||
|
|
6761338dfe | ||
|
|
08966da22d | ||
|
|
d497ab0232 | ||
|
|
ff371e1328 | ||
|
|
0a0a8aae4b | ||
|
|
b98ef1817c | ||
|
|
e9f2abd954 | ||
|
|
2a7117d324 | ||
|
|
816850f211 | ||
|
|
45d14f92e5 | ||
|
|
9fa1840c31 | ||
|
|
47854f491b | ||
|
|
bd94148648 | ||
|
|
a54df8f2be | ||
|
|
3563b6450b | ||
|
|
5bb995f601 | ||
|
|
649ca5ad9a | ||
|
|
fed1c16524 | ||
|
|
e9a6f4b9bc | ||
|
|
8bb6d676ef | ||
|
|
8b3954d31b | ||
|
|
fa7ef0fc65 | ||
|
|
b9f42f689e | ||
|
|
9f85063eb3 | ||
|
|
f5a0ba59e5 | ||
|
|
8f553199a4 | ||
|
|
c9347eece8 | ||
|
|
b94c3ede4a | ||
|
|
0fafbd6f2e | ||
|
|
db8f9b5f8c | ||
|
|
76449721b1 | ||
|
|
bb29eb9dbc | ||
|
|
15a66b1f28 | ||
|
|
722c523893 | ||
|
|
9f553fd61f | ||
|
|
b16b625c7c | ||
|
|
dd7335c257 | ||
|
|
e6cb6d0171 | ||
|
|
af54add471 | ||
|
|
f812e9f6e6 | ||
|
|
96e1b81179 | ||
|
|
8b2bcc8d10 | ||
|
|
140cb53485 | ||
|
|
975bbbdbcd | ||
|
|
fe6d4f3673 | ||
|
|
095f3576c4 | ||
|
|
753ed1c846 | ||
|
|
ab80e2b15b | ||
|
|
11b5d2e998 | ||
|
|
3568d067be | ||
|
|
f85f5bf317 | ||
|
|
3f772b3ba7 | ||
|
|
293882b2bb | ||
|
|
103f71fa01 | ||
|
|
f30b5b1063 | ||
|
|
ae6deed7cd | ||
|
|
eaa1efb910 | ||
|
|
c5b7e021cd | ||
|
|
7b3c400124 | ||
|
|
6e31d55941 | ||
|
|
7ae2396167 | ||
|
|
d6bb30c84b | ||
|
|
9ffb2c2438 | ||
|
|
c0a12d5a11 | ||
|
|
ed720fffec | ||
|
|
a7e0cffe0f | ||
|
|
cf6eca6789 | ||
|
|
d5e60bf250 | ||
|
|
93f0f6f08c | ||
|
|
7ef486c44e | ||
|
|
36704e4ad6 | ||
|
|
c735e1da89 | ||
|
|
2ae38c8c04 | ||
|
|
9b79188526 | ||
|
|
d792ef30f9 | ||
|
|
60e1569016 | ||
|
|
de8ba245e9 | ||
|
|
1f125ca0fc | ||
|
|
bb30a5600a | ||
|
|
0229335c15 | ||
|
|
d3d16da3f0 | ||
|
|
4b959da7d2 | ||
|
|
eae8f65e15 | ||
|
|
816ea12993 | ||
|
|
7d186e4585 | ||
|
|
b128f4fa89 | ||
|
|
7c7cb84fd1 | ||
|
|
d3b2fba6a1 | ||
|
|
330b836e08 | ||
|
|
a7defa37bf | ||
|
|
a7724069b5 | ||
|
|
e4bba37ccb | ||
|
|
28aff1e8f3 | ||
|
|
8c060dbd44 | ||
|
|
c2ade817e7 | ||
|
|
681c466a18 | ||
|
|
d328762cd3 | ||
|
|
7299b61244 | ||
|
|
361c7dd51e | ||
|
|
cb2922a805 | ||
|
|
17e33def2e | ||
|
|
d817af8897 | ||
|
|
2904075724 | ||
|
|
730c2ec631 | ||
|
|
8b45af529a | ||
|
|
fbb5bc608c | ||
|
|
87bfcd4fb4 | ||
|
|
0fb45ba563 | ||
|
|
2eb62bf8c9 | ||
|
|
4f87b33df7 | ||
|
|
97de9cb93e | ||
|
|
72cfd48135 | ||
|
|
a886253bea | ||
|
|
d6363252ea | ||
|
|
d2c4f316c7 | ||
|
|
cdec953d96 | ||
|
|
0bc0d4b0e8 | ||
|
|
ec0555a86f | ||
|
|
e89ad70701 | ||
|
|
95c8440c36 | ||
|
|
a814b45851 | ||
|
|
0730f86304 | ||
|
|
84029045ba | ||
|
|
37cd87f3f4 | ||
|
|
b362ae3d8a | ||
|
|
a39cfa485b | ||
|
|
b4ae208943 | ||
|
|
45369fb5b2 | ||
|
|
713993140f | ||
|
|
57476ef7b7 | ||
|
|
176e6b6afd | ||
|
|
5ecbf795af | ||
|
|
42b1202b06 | ||
|
|
37acad6ec7 | ||
|
|
74d90b8361 | ||
|
|
952682d557 | ||
|
|
c1f3e44fb8 | ||
|
|
fa2a6c673c | ||
|
|
b46ae4782d | ||
|
|
6ebbc81792 | ||
|
|
1d7170f193 | ||
|
|
3dea948ecc | ||
|
|
1e960ae2e9 | ||
|
|
e6b21f1ca5 | ||
|
|
ebd3cbd932 | ||
|
|
b8fb5cbfbf | ||
|
|
01494bd010 | ||
|
|
dd95becdff | ||
|
|
8d532a75ee | ||
|
|
27ac80c154 | ||
|
|
15058c37b3 | ||
|
|
6b85bf0a49 | ||
|
|
2b24ec2ece | ||
|
|
d99369d4f0 | ||
|
|
f85ec9007c | ||
|
|
f89ca6b390 | ||
|
|
6571ba90ca | ||
|
|
a638d182ab | ||
|
|
d5caeddb30 | ||
|
|
d818020915 | ||
|
|
9a0c8aa660 | ||
|
|
dd4918b6d8 | ||
|
|
11f7260b40 | ||
|
|
052746e16f | ||
|
|
c03921ad55 | ||
|
|
b0cd07dfc0 | ||
|
|
7e635e1f3d | ||
|
|
c5d675ac88 | ||
|
|
94b3629fa5 | ||
|
|
0956915d33 | ||
|
|
5e3cd8d77b | ||
|
|
53aed799a1 | ||
|
|
3a95707d79 | ||
|
|
c59a7a91a9 | ||
|
|
cdc086f2db | ||
|
|
6dd4c0551e | ||
|
|
8225dae182 | ||
|
|
9999065f0a | ||
|
|
90d11ada6b | ||
|
|
67a1ee3cde | ||
|
|
0f8df0f072 | ||
|
|
9c9936e7ae | ||
|
|
92926a4825 | ||
|
|
92ac787315 | ||
|
|
2cc53e8dc3 | ||
|
|
18cb5710f9 | ||
|
|
11b8f23528 | ||
|
|
cf72abedfd | ||
|
|
31f92ebdd5 | ||
|
|
39a6635229 | ||
|
|
a87a70d9c6 | ||
|
|
2d79e2ac92 | ||
|
|
7982ef2f11 | ||
|
|
9280daad41 | ||
|
|
e22709b5ff | ||
|
|
ed37330fee | ||
|
|
f1fb3f904b | ||
|
|
a3b6bb9ad9 | ||
|
|
54e6431d11 | ||
|
|
3e6f46483c | ||
|
|
f7aadb1b61 | ||
|
|
c7d5ea6ecd | ||
|
|
1060f15463 | ||
|
|
559d3064a9 | ||
|
|
084e638d30 | ||
|
|
428ab1ad96 | ||
|
|
b15673d0cd | ||
|
|
abf15149e9 | ||
|
|
1f9e328c2d | ||
|
|
2c2c1c93a1 | ||
|
|
196c06a17e | ||
|
|
be78580ece | ||
|
|
748d525ccc | ||
|
|
2269407b1c | ||
|
|
af7beab5e9 | ||
|
|
fb9abcc583 | ||
|
|
29e829de73 | ||
|
|
5225925a78 | ||
|
|
15bd0f8a78 | ||
|
|
1557f3f8e8 | ||
|
|
b0a833f3a9 | ||
|
|
8b66deef0e | ||
|
|
61608545c5 | ||
|
|
4f163ad979 | ||
|
|
a01cd34b58 | ||
|
|
e6a5b0de57 | ||
|
|
b3b1209293 | ||
|
|
4cc21efe90 | ||
|
|
6acd599d53 | ||
|
|
b73f74470b | ||
|
|
6b3efe9398 | ||
|
|
e5c9058201 | ||
|
|
897d982e2f | ||
|
|
333b83f3c5 | ||
|
|
94938847fb | ||
|
|
64f17675e2 | ||
|
|
a97974d66c | ||
|
|
349395f67a | ||
|
|
344c1ff42d | ||
|
|
08435bc138 | ||
|
|
ce00490b40 | ||
|
|
cc702dde6d | ||
|
|
913121bcc4 | ||
|
|
6448f4ff5e | ||
|
|
1fbb56fc6f | ||
|
|
6442391589 | ||
|
|
80ca43fe7d | ||
|
|
3514973f2a | ||
|
|
def241c5c4 | ||
|
|
04e1605b27 | ||
|
|
a931e80f2e | ||
|
|
f891a0ceac | ||
|
|
41697d022f | ||
|
|
f0b1b9d284 | ||
|
|
b1455398c8 | ||
|
|
396e779517 | ||
|
|
e9bc192bc7 | ||
|
|
287490d549 | ||
|
|
dcd55b552a | ||
|
|
4ac2b0d27c | ||
|
|
ea4d1e9474 | ||
|
|
61c29e232d | ||
|
|
7b6ef157e9 | ||
|
|
14d6a033ae | ||
|
|
1db567b5ae | ||
|
|
ad6c9a56d8 | ||
|
|
15f6732a5b | ||
|
|
e517218240 | ||
|
|
89fc5fc124 | ||
|
|
4025087f89 | ||
|
|
31b620b8e5 | ||
|
|
55786df7bd |
15
.bzreol
@@ -1,15 +0,0 @@
|
||||
[LF]
|
||||
.bzreol
|
||||
.bzrignore
|
||||
*.py
|
||||
*.tmpl
|
||||
*.js
|
||||
*.css
|
||||
*.txt
|
||||
*.po
|
||||
*.pot
|
||||
*.sh
|
||||
[CRLF]
|
||||
*.bat
|
||||
*.cmd
|
||||
*.nsi
|
||||
10
.bzrignore
@@ -1,10 +0,0 @@
|
||||
*.pyc
|
||||
*.pyo
|
||||
build
|
||||
dist
|
||||
locale
|
||||
srcdist
|
||||
cherrypy
|
||||
*.wpr
|
||||
*.keep
|
||||
*.bak
|
||||
13
.bzrtab
@@ -1,13 +0,0 @@
|
||||
[NOTAB]
|
||||
*.py
|
||||
*.txt
|
||||
*.po
|
||||
*.pot
|
||||
*.sh
|
||||
*.bat
|
||||
*.cmd
|
||||
*.nsi
|
||||
*.tmpl
|
||||
*.js
|
||||
*.css
|
||||
[TAB]
|
||||
28
.gitignore
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#Compiled python
|
||||
*.py[co]
|
||||
|
||||
# Working folders for Win build
|
||||
build/
|
||||
dist/
|
||||
locale/
|
||||
srcdist/
|
||||
|
||||
# Generated email templates
|
||||
email/
|
||||
|
||||
# Romanian ro.po is generated from ro.px, due to mapping to latin-1
|
||||
po/*/ro.po
|
||||
|
||||
# Build results
|
||||
SABnzbd*.zip
|
||||
SABnzbd*.exe
|
||||
SABnzbd*.gz
|
||||
SABnzbd*.dmg
|
||||
|
||||
# WingIDE project file
|
||||
*.wpr
|
||||
|
||||
# General junk
|
||||
*.keep
|
||||
*.bak
|
||||
*.log
|
||||
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
[submodule "interfaces/Config"]
|
||||
path = interfaces/Config
|
||||
url = https://github.com/thezoggy/sabnzbd-uni_Config.git
|
||||
56
ABOUT.txt
Normal file
@@ -0,0 +1,56 @@
|
||||
*******************************************
|
||||
*** This is SABnzbd 0.7.0 ***
|
||||
*******************************************
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
It simplifies the process of downloading from Usenet dramatically,
|
||||
thanks to its friendly web-based user interface and advanced
|
||||
built-in post-processing options that automatically verify, repair,
|
||||
extract and clean up posts downloaded from Usenet.
|
||||
SABnzbd also has a fully customizable user interface,
|
||||
and offers a complete API for third-party applications to hook into.
|
||||
|
||||
There is an extensive Wiki on the use of SABnzbd.
|
||||
http://wiki.sabnzbd.org/
|
||||
|
||||
IMPORTANT INFORMATION about release 0.7.0:
|
||||
http://wiki.sabnzbd.org/introducing-0-7-0
|
||||
|
||||
|
||||
Please also read the file "ISSUES.txt"
|
||||
|
||||
*******************************************
|
||||
*** Upgrading from 0.6.x ***
|
||||
*******************************************
|
||||
Stop SABnzbd.
|
||||
Install new version
|
||||
Start SABnzbd.
|
||||
|
||||
|
||||
*******************************************
|
||||
*** Upgrading from 0.5.x ***
|
||||
*******************************************
|
||||
Stop SABnzbd.
|
||||
Uninstall current version, keeping the data.
|
||||
Install new version
|
||||
Start SABnzbd.
|
||||
|
||||
The organization of the download queue is different from 0.5.x.
|
||||
0.6.x will finish downloading an existing queue, but you
|
||||
cannot go back to an older version without losing your queue.
|
||||
Also, your sabnzbd.ini file will be upgraded, making it
|
||||
incompatible with release 0.5.x
|
||||
|
||||
|
||||
*******************************************
|
||||
*** Upgrading from 0.4.x ***
|
||||
*******************************************
|
||||
|
||||
>>>>> PLEASE DOWNLOAD YOUR CURRENT QUEUE BEFORE UPGRADING <<<<<<
|
||||
|
||||
When upgrading from a 0.4.x release such as 0.4.12 your old settings will be kept.
|
||||
You will however be given a fresh queue and history. If you have items in your queue
|
||||
from the older version of SABnzbd, you can either re-import the nzb files if you kept
|
||||
an nzb backup folder, or temporarily go back to 0.4.x until your queue is complete.
|
||||
|
||||
The history is now stored in a better format meaning future upgrades should be backwards
|
||||
compatible.
|
||||
153
CHANGELOG.txt
@@ -1,3 +1,156 @@
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.15Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Flag post-processing as failed when files cannot be moved/copied to destination
|
||||
- Fixed another newzbin link
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.15RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Change newzbin URL
|
||||
- Prevent setting watched-folder speed to 0 (while having no watched-folder)
|
||||
from triggering an inifinite loop.
|
||||
- Move "locale" construction from Plush skin to Python code.
|
||||
Some embedded Linux platforms show unstable behavior with the original construction.
|
||||
- Extend OSX menu with troubleshooting options
|
||||
- Add trailing slashes to internal Plush paths to support reverse proxies better.
|
||||
- Ignore whitespace around regular expressions in RSS filters.
|
||||
- Prevent crash on restoring URL-fetches when using --repair-all option
|
||||
- Fix "Repair" button on smpl Connection page. Current path fails when using a reverse proxy
|
||||
- Suppress "incompatible feed" error when doing a scheduled/automatic RSS read-out.
|
||||
- Add special setting to use "pickle" library instead of cPickle.
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.14Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Prevent potential crash in RSS feed analysis
|
||||
- Add --console to force console logging for OSX app (diagnostic tool)
|
||||
- Don't reset watched folder path to default when it doesn't exist at startup
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.13Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Disable "SABnzbd will now listen on all "localhost" addresses" feature
|
||||
- When retrying an URL fetch from History, remove the History entry
|
||||
- Make sure that paths coming from Sorting are normalized
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.12Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix issue with new localhost handling on some IPv4-only Unixes
|
||||
- Fix job folder creation by Movie Sort when the Sort expression specifies one
|
||||
- Fix problem with retrieving ZIP files from some web sites
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.11Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Better support for Yahoo pipes
|
||||
- Accept NZB files containing incorrect dates
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.11RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix some Growl issues (OSX)
|
||||
- Improve detection of encrypted RAR files during download
|
||||
- SABnzbd will now listen on all "localhost" addresses
|
||||
- Remove unneeded extra temporary folder level in Generic Sort
|
||||
- Show the promised 10 queue entries in the OSX menu instead of 9
|
||||
- Fix logging of pre-queue script result
|
||||
- "Get bookmarks now" for newzbin only worked when automatic readout was also enabled.
|
||||
- When par2 fails do an SFV-based check when SFV files present and feature enabled.
|
||||
(previously SFV was only used when no par2 files were available at all)
|
||||
- Do extra checks on job administration on disk
|
||||
(an attempt to diagnose jobs with missing admin files)
|
||||
- Make newzbin "Get bookmarks now" button independent of automatic readout
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.10Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Convert ambiguous Windows paths like D: and D:folder to D:\ and D:\folder
|
||||
- Fix file name encoding problems when verifying using SFV files
|
||||
- Add GNTP module to source distribution
|
||||
- Prevent reading newzbin bookmarks when newzbin credentials are not set
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.10RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Allow saving of category paths ending in a *
|
||||
This is will prevent the creation of job folders in the final folder
|
||||
- Fix incompatibility with unrar 4.01 regarding detection of encrypted files
|
||||
- Create .bak (backup) file for sabnzbd.ini before modifying it
|
||||
- OSX: Compatible with Growl 1.2.2 and 1.3
|
||||
- OSX: Prevent changes to SABnzbd.app folder which confused the OSX Firewall
|
||||
- OSX: Fix access rights of SABnzbs.app so that restricted users can run SABnzbd
|
||||
- OSX: Combined SnowLeopard/Lion DMG and separate Leopard DMG
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.9Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Change the OSX DMG window size (again) so that the optional "path bar"
|
||||
doesn't obsure part of the background image.
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.9RC2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Generic Sorter failed to uppercase first letter of title when starting with "the/a/to" etc.
|
||||
- Add "hidden" option allow_64bit_tools (lost when going from 0.5.6 to 0.6.0)
|
||||
- Improve handling of non-creatable final and category folders
|
||||
- Fix and I18N the "Downloaded in X days Y hours Z seconds" text in the history report.
|
||||
- Change the OSX DMG window size so that the optional "path bar" doesn't obsure part of the background image.
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.9RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Update Plush to solve minor browser incompatibilities
|
||||
- On Windows the 64bit versions of par2 and unrar were never used
|
||||
- Updated unrar to 4.01
|
||||
- Using the "Download" button in newzbin.com RSS feeds produced malformed names.
|
||||
- For OSX make a Lion and a Leopard/SnowLeopard version and show this in DMG background image
|
||||
- When removing job folders in the "temporary download folder", remove everything.
|
||||
This is needed because some operating systems add spurious files and folders.
|
||||
- Servers with square brackets in the name could not be removed.
|
||||
- Check email parameters also when only email_rss is set.
|
||||
- Try out work-around for potential memory leak in pickle.
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.8Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix several RSS issues, due to corruption of stored RSS data
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.7Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Prevent immediate exit after startup when queue is empty and
|
||||
an end-of-queue action like "shutdown" was set
|
||||
- Fix failure to launch browser when clicking shortcut the second time
|
||||
- Allow jobs still waiting for post-processing to be deleted
|
||||
- Delay starting of dowload task until after webserver is started.
|
||||
- Plush: button "Purge failed NZBs & delete files" will now actually delete files
|
||||
- Classic/smpl: add link "Purge failed NZBs & delete files"
|
||||
- Plush: fix flashing top menu in Safari 5.1
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.6Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Prevent crashes when running into disk-full situations.
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.6RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- When "Download only" is used, do not send downloaded NZB files to the queue
|
||||
- Fix bad links coming from nzbclub.com
|
||||
- A job sometimes fails verification when the option "don't download samples" is used.
|
||||
Now this option will be ignored when you click "Retry" in the history.
|
||||
- File an error message when the RSS-email template is missing.
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.6Beta2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix sending of duplicate emails when using a list of recipients
|
||||
- Fix handle leakage on Windows
|
||||
- On OSX, SABnzbd didn't handle "Open With" of nzb.gz files properly
|
||||
- Limit the amount of retries when getting a partial NZB from an index site
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.6Beta1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Compatible with OSX Lion
|
||||
- End-of-queue action now ignores paused items in the queue
|
||||
- Fetching extra par2 files now obeys pause too
|
||||
- Extension-based cleanup now also cleans sub-folders
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.5Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Since 0.6.3, all end-of-queue actions failed.
|
||||
- Generic sort: failed to recognize years surounded by underscores.
|
||||
- When running the Wizard in German, the last page crashed.
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.4Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix silly error in the Wizard
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.3Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
(c) Copyright 2007-2011 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2012 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
|
||||
The SABnzbd-team is:
|
||||
|
||||
|
||||
37
INSTALL.txt
@@ -1,10 +1,10 @@
|
||||
SABnzbd 0.6.3
|
||||
SABnzbd 0.7.0
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
0) LICENSE
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
(c) Copyright 2007-2011 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2012 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
@@ -39,9 +39,14 @@ Start the SABnzbd.exe program.
|
||||
Within 5-10 seconds your web browser will start and show the user interface.
|
||||
Use the "Help" button in the web-interface to be directed to the Help Wiki.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
3) INSTALL pre-built OSX binaries
|
||||
-------------------------------------------------------------------------------
|
||||
Download teh DMG file, mount and drag the SABnzbd icon to Programs.
|
||||
Just like you do with so many apps.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
3) INSTALL with only sources
|
||||
4) INSTALL with only sources
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
You need to have Python installed and some modules.
|
||||
@@ -49,13 +54,16 @@ You need to have Python installed and some modules.
|
||||
Unix/Linux/OSX
|
||||
Python-2.5, 2.6 or 2.7 http://www.python.org
|
||||
|
||||
OSX Leopard/SnowLeopard
|
||||
Python 2.6 http://www.activestate.com
|
||||
|
||||
OSX Lion Apple Python 2.7 (included in OSX)
|
||||
|
||||
Windows
|
||||
Python-2.5.latest http://www.activestate.com
|
||||
Python-2.6.latest
|
||||
Python-2.7.latest
|
||||
Python-2.7.latest http://www.activestate.com
|
||||
|
||||
Essential modules
|
||||
cheetah-2.0.1+ http://www.cheetahtemplate.org/
|
||||
cheetah-2.0.1+ http://www.cheetahtemplate.org/ (or use "pypm install cheetah")
|
||||
yenc module >= 0.3 http://sabnzbd.sourceforge.net/yenc-0.3.tar.gz
|
||||
http://sabnzbd.sourceforge.net/yenc-0.3-w32fixed.zip (Win32-only)
|
||||
par2cmdline >= 0.4 http://parchive.sourceforge.net/
|
||||
@@ -65,22 +73,25 @@ Optional modules
|
||||
unrar >= 3.90+ http://www.rarlab.com/rar_add.htm
|
||||
unzip >= 5.52 http://www.info-zip.org/
|
||||
gnu gettext http://www.gnu.org/software/gettext/
|
||||
gntp https://github.com/kfdm/gntp/ (or use "pypm install gntp")
|
||||
|
||||
Optional modules Windows
|
||||
pyopenssl >= 0.11 http://pypi.python.org/pypi/pyOpenSSL
|
||||
(Binaries, including the OpenSSL libraries)
|
||||
|
||||
Optional modules Unix/Linux/OSX
|
||||
pyopenssl >= 0.10 http://pypi.python.org/pypi/pyOpenSSL
|
||||
pyopenssl >= 0.11 http://pypi.python.org/pypi/pyOpenSSL
|
||||
openssl => v0.9.8g+ http://www.openssl.org/
|
||||
Make sure the OpenSSL libraries match with PyOpenSSL
|
||||
pynotify Should be part of GTK for Python support on Debian/Ubuntu
|
||||
If not, you cannot use the NotifyOSD feature.
|
||||
|
||||
Embedded modules (only use the included version)
|
||||
CherryPy-3.2 rev2138 with patches http://www.cherrypy.org
|
||||
|
||||
|
||||
Unpack the ZIP-file containing the SABnzbd sources to any folder of your liking.
|
||||
If fou want multiple languages, you need to compile the translations.
|
||||
If you want multiple languages, you need to compile the translations.
|
||||
Start this from a shell terminal (or command prompt):
|
||||
python tools/make_mo.py
|
||||
|
||||
@@ -91,7 +102,7 @@ Use the "Help" button in the web-interface to be directed to the Help Wiki.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
4) TROUBLESHOOTING
|
||||
5) TROUBLESHOOTING
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Your browser may start up with just an error page.
|
||||
@@ -109,7 +120,7 @@ This will show a black window where logging information will be shown. This
|
||||
may help you solve problems easier.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
5) MORE INFORMATION
|
||||
6) MORE INFORMATION
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Visit the WIKI site:
|
||||
@@ -117,9 +128,9 @@ Visit the WIKI site:
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
6) CREDITS
|
||||
7) CREDITS
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Serveral parts of SABnzbd were built by other people, illustrating the
|
||||
Several parts of SABnzbd were built by other people, illustrating the
|
||||
wonderful world of Free Open Source Software.
|
||||
See the licences folder of the main program and of the skin folders.
|
||||
|
||||
30
ISSUES.txt
@@ -2,8 +2,8 @@
|
||||
*** Known issues ***
|
||||
*******************************************
|
||||
|
||||
- To prevent unexpectedly large NZBs from eating your quotum you can set
|
||||
the option 'size_limit' in the INI file.
|
||||
- To prevent unexpectedly large NZBs from eating your download quota you can set
|
||||
the option 'size_limit' on the Config->Special page.
|
||||
Any NZB larger than this size will be set to paused and get a low priority.
|
||||
|
||||
- When par2 or unrar hang up, never just stop SABnzbd.
|
||||
@@ -27,18 +27,19 @@
|
||||
For Windows the default is 128 and for others 256.
|
||||
A quite safe value for Windows would be 64.
|
||||
SABnzbd will take care of overlapping names.
|
||||
See: http://wiki.sabnzbd.org/configure-special
|
||||
See: http://wiki.sabnzbd.org/configure-special-0-7
|
||||
|
||||
- Some Usenet servers have intermittent login (or other) problems.
|
||||
For these the server blocking method is not very favourable.
|
||||
There is an INI-only option that will limit blocks to 1 minute.
|
||||
no_penalties = 1
|
||||
See: http://wiki.sabnzbd.org/configure-special
|
||||
See: http://wiki.sabnzbd.org/configure-special-0-7
|
||||
|
||||
- Some third-party utilties try to probe SABnzbd API in such a way that you will
|
||||
often see warnings about unauthenticated access.
|
||||
If you are sure these probes are harmless, you can suppress the warnings by
|
||||
setting the option "api_warnings" to 0 in the file sabnzbd.ini
|
||||
setting the option "api_warnings" to 0.
|
||||
See: http://wiki.sabnzbd.org/configure-special-0-7
|
||||
|
||||
- On OSX you may encounter downloaded files with foreign characters.
|
||||
The par2 repair may fail when the files were created on a Windows system.
|
||||
@@ -48,6 +49,8 @@
|
||||
- On Linux when you download files they may have the wrong character encoding.
|
||||
You will see this only when downloaded files contain accented characters.
|
||||
You need to fix it yourself by running the convmv utility (availaible for most Linux platforms).
|
||||
Possible the file system override setting 'fsys_type' might be solve things:
|
||||
See: http://wiki.sabnzbd.org/configure-special-0-7
|
||||
|
||||
- The "Watched Folder" sometimes fails to delete the NZB files it has
|
||||
processed. This happens when other software still accesses these files.
|
||||
@@ -55,10 +58,6 @@
|
||||
We cannot solve this problem, because the Operating System (read Windows)
|
||||
prevents the removal.
|
||||
|
||||
- Jobs deleted from the queue will leave downloaded files behind
|
||||
in the "incomplete" folder.
|
||||
You will have to remove these files manually.
|
||||
|
||||
- Memory usage can sometimes have high peaks. This makes using SABnzbd on very low
|
||||
memory systems (eg a SAN device) a challenge.
|
||||
|
||||
@@ -73,3 +72,16 @@
|
||||
make sure that the drives are mounted.
|
||||
The operating system wil simply redirect your files to alternative locations.
|
||||
You may have trouble finding the files when mounting the drive later.
|
||||
On OSX, SABnzbd will not create new folders in /Volumes.
|
||||
The result will be a failed job that can be retried once the volume has been mounted.
|
||||
|
||||
- On some operating systems it looks like there is a problem with one of the standard Python libraries.
|
||||
It is possible that you get errors about saving admin files and even unexplained crashes.
|
||||
If so, you can enable the option for the alternative library.
|
||||
It has the same functionality, but is slower.
|
||||
We've had reports about this issue on non-mainstream Linux platforms.
|
||||
- OpenElec
|
||||
- Squeeze Linux
|
||||
There is a "special" option that will allow you to select an alternative library.
|
||||
use_pickle = 1
|
||||
See: http://wiki.sabnzbd.org/configure-special-0-7
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(c) Copyright 2007-2011 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2012 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
||||
@@ -21,36 +21,115 @@
|
||||
|
||||
!include "MUI2.nsh"
|
||||
!include "registerExtension.nsh"
|
||||
!include "LogicLib.nsh"
|
||||
!include "WinVer.nsh"
|
||||
!include "WinSxSQuery.nsh"
|
||||
|
||||
;------------------------------------------------------------------
|
||||
;
|
||||
; Marco for removing existing and the current installation
|
||||
; It share buy the installer and the uninstaller.
|
||||
; Make sure it covers 0.5.x, 0.6.x and 0.7.x in one go.
|
||||
;
|
||||
!define RemovePrev "!insertmacro RemovePrev"
|
||||
!macro RemovePrev idir
|
||||
Delete "${idir}\email\email-de.tmpl"
|
||||
Delete "${idir}\email\email-en.tmpl"
|
||||
Delete "${idir}\email\email-nl.tmpl"
|
||||
Delete "${idir}\email\email-fr.tmpl"
|
||||
Delete "${idir}\email\email-sv.tmpl"
|
||||
Delete "${idir}\email\email-da.tmpl"
|
||||
Delete "${idir}\email\email-nb.tmpl"
|
||||
Delete "${idir}\email\email-ro.tmpl"
|
||||
Delete "${idir}\email\rss-de.tmpl"
|
||||
Delete "${idir}\email\rss-en.tmpl"
|
||||
Delete "${idir}\email\rss-nl.tmpl"
|
||||
Delete "${idir}\email\rss-fr.tmpl"
|
||||
Delete "${idir}\email\rss-sv.tmpl"
|
||||
Delete "${idir}\email\rss-da.tmpl"
|
||||
Delete "${idir}\email\rss-nb.tmpl"
|
||||
Delete "${idir}\email\rss-ro.tmpl"
|
||||
RMDir "${idir}\email"
|
||||
RMDir /r "${idir}\locale"
|
||||
RMDir /r "${idir}\interfaces\Classic"
|
||||
RMDir /r "${idir}\interfaces\Plush"
|
||||
RMDir /r "${idir}\interfaces\smpl"
|
||||
RMDir /r "${idir}\interfaces\Mobile"
|
||||
RMDir /r "${idir}\interfaces\wizard"
|
||||
RMDir "${idir}\interfaces"
|
||||
RMDir /r "${idir}\win\par2"
|
||||
RMDir /r "${idir}\win\unrar"
|
||||
RMDir /r "${idir}\win\unzip"
|
||||
RMDir /r "${idir}\win"
|
||||
RMDir /r "${idir}\licenses"
|
||||
RMDir /r "${idir}\lib\"
|
||||
RMDir /r "${idir}\po\email"
|
||||
RMDir /r "${idir}\po\main"
|
||||
RMDir /r "${idir}\po\nsis"
|
||||
RMDir "${idir}\po"
|
||||
RMDir /r "${idir}\icons"
|
||||
Delete "${idir}\CHANGELOG.txt"
|
||||
Delete "${idir}\COPYRIGHT.txt"
|
||||
Delete "${idir}\email.tmpl"
|
||||
Delete "${idir}\GPL2.txt"
|
||||
Delete "${idir}\GPL3.txt"
|
||||
Delete "${idir}\INSTALL.txt"
|
||||
Delete "${idir}\ISSUES.txt"
|
||||
Delete "${idir}\LICENSE.txt"
|
||||
Delete "${idir}\nzbmatrix.txt"
|
||||
Delete "${idir}\MSVCR71.dll"
|
||||
Delete "${idir}\nzb.ico"
|
||||
Delete "${idir}\sabnzbd.ico"
|
||||
Delete "${idir}\PKG-INFO"
|
||||
Delete "${idir}\python25.dll"
|
||||
Delete "${idir}\python26.dll"
|
||||
Delete "${idir}\python27.dll"
|
||||
Delete "${idir}\README.txt"
|
||||
Delete "${idir}\README.rtf"
|
||||
Delete "${idir}\ABOUT.txt"
|
||||
Delete "${idir}\IMPORTANT_MESSAGE.txt"
|
||||
Delete "${idir}\SABnzbd-console.exe"
|
||||
Delete "${idir}\SABnzbd.exe"
|
||||
Delete "${idir}\SABnzbd-helper.exe"
|
||||
Delete "${idir}\SABnzbd-service.exe"
|
||||
Delete "${idir}\Sample-PostProc.cmd"
|
||||
Delete "${idir}\Uninstall.exe"
|
||||
Delete "${idir}\w9xpopen.exe"
|
||||
RMDir "${idir}"
|
||||
!macroend
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Define names of the product
|
||||
Name "${SAB_PRODUCT}"
|
||||
OutFile "${SAB_FILE}"
|
||||
InstallDir "$PROGRAMFILES\SABnzbd"
|
||||
InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" ""
|
||||
;DirText $(MsgSelectDir)
|
||||
|
||||
|
||||
Name "${SAB_PRODUCT}"
|
||||
OutFile "${SAB_FILE}"
|
||||
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Some default compiler settings (uncomment and change at will):
|
||||
; SetCompress auto ; (can be off or force)
|
||||
; SetDatablockOptimize on ; (can be off)
|
||||
; CRCCheck on ; (can be off)
|
||||
; AutoCloseWindow false ; (can be true for the window go away automatically at end)
|
||||
; ShowInstDetails hide ; (can be show to have them shown, or nevershow to disable)
|
||||
; SetDateSave off ; (can be on to have files restored to their orginal date)
|
||||
WindowIcon on
|
||||
SetCompress auto ; (can be off or force)
|
||||
SetDatablockOptimize on ; (can be off)
|
||||
CRCCheck on ; (can be off)
|
||||
AutoCloseWindow false ; (can be true for the window go away automatically at end)
|
||||
ShowInstDetails hide ; (can be show to have them shown, or nevershow to disable)
|
||||
SetDateSave off ; (can be on to have files restored to their orginal date)
|
||||
WindowIcon on
|
||||
|
||||
InstallDir "$PROGRAMFILES\SABnzbd"
|
||||
InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" ""
|
||||
;DirText $(MsgSelectDir)
|
||||
|
||||
;Vista redirects $SMPROGRAMS to all users without this
|
||||
;------------------------------------------------------------------
|
||||
; Vista/Win7 redirects $SMPROGRAMS to all users without this
|
||||
RequestExecutionLevel admin
|
||||
FileErrorText "If you have no admin rights, try to install into a user directory."
|
||||
|
||||
|
||||
;--------------------------------
|
||||
;------------------------------------------------------------------
|
||||
;Variables
|
||||
|
||||
Var MUI_TEMP
|
||||
Var STARTMENU_FOLDER
|
||||
;--------------------------------
|
||||
|
||||
;------------------------------------------------------------------
|
||||
;Interface Settings
|
||||
|
||||
!define MUI_ABORTWARNING
|
||||
@@ -82,7 +161,6 @@ InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" ""
|
||||
|
||||
!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
|
||||
|
||||
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
!define MUI_FINISHPAGE_RUN
|
||||
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink"
|
||||
@@ -101,10 +179,9 @@ InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" ""
|
||||
!insertmacro MUI_UNPAGE_COMPONENTS
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
;--------------------------------
|
||||
;Languages
|
||||
|
||||
; Set supported languages
|
||||
;------------------------------------------------------------------
|
||||
; Set supported languages
|
||||
!insertmacro MUI_LANGUAGE "English" ;first language is the default language
|
||||
!insertmacro MUI_LANGUAGE "French"
|
||||
!insertmacro MUI_LANGUAGE "German"
|
||||
@@ -115,9 +192,8 @@ InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" ""
|
||||
!insertmacro MUI_LANGUAGE "Romanian"
|
||||
|
||||
|
||||
;--------------------------------
|
||||
;------------------------------------------------------------------
|
||||
;Reserve Files
|
||||
|
||||
;If you are using solid compression, files that are required before
|
||||
;the actual installation should be stored first in the data block,
|
||||
;because this will make your installer start faster.
|
||||
@@ -125,31 +201,80 @@ InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd" ""
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
|
||||
|
||||
;------------------------------------------------------------------
|
||||
Function LaunchLink
|
||||
ExecShell "" "$INSTDIR\SABnzbd.exe"
|
||||
FunctionEnd
|
||||
|
||||
;--------------------------------
|
||||
|
||||
;------------------------------------------------------------------
|
||||
Function .onInit
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
|
||||
;make sure sabnzbd.exe isnt running..if so abort
|
||||
loop:
|
||||
;--------------------------------
|
||||
;make sure that the requires MS Runtimes are installed
|
||||
;
|
||||
runtime_loop:
|
||||
push 'msvcr90.dll'
|
||||
push 'Microsoft.VC90.CRT,version="9.0.21022.8",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"'
|
||||
call WinSxS_HasAssembly
|
||||
pop $0
|
||||
|
||||
StrCmp $0 "1" nodownload
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgNoRuntime) /SD IDOK IDOK download IDCANCEL noinstall
|
||||
download:
|
||||
inetc::get /BANNER $(MsgDLRuntime) \
|
||||
"http://download.microsoft.com/download/1/1/1/1116b75a-9ec3-481a-a3c8-1777b5381140/vcredist_x86.exe" \
|
||||
"$TEMP\vcredist_x86.exe"
|
||||
Pop $0
|
||||
DetailPrint "Downloaded MS runtime library"
|
||||
StrCmp $0 "OK" dlok
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgDLError) /SD IDCANCEL IDCANCEL exitinstall IDOK download
|
||||
dlok:
|
||||
ExecWait "$TEMP\vcredist_x86.exe" $1
|
||||
DetailPrint "VCRESULT=$1"
|
||||
DetailPrint "Tried to install MS runtime library"
|
||||
delete "$TEMP\vcredist_x86.exe"
|
||||
StrCmp $1 "0" nodownload
|
||||
noinstall:
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgDLNeed) /SD IDOK IDOK runtime_loop IDCANCEL exitinstall
|
||||
Abort
|
||||
nodownload:
|
||||
|
||||
|
||||
;------------------------------------------------------------------
|
||||
;make sure user terminates sabnzbd.exe or else abort
|
||||
;
|
||||
loop:
|
||||
StrCpy $0 "SABnzbd.exe"
|
||||
KillProc::FindProcesses
|
||||
StrCmp $0 "0" endcheck
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgCloseSab) IDOK loop IDCANCEL exitinstall
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgCloseSab) /SD IDCANCEL IDOK loop IDCANCEL exitinstall
|
||||
exitinstall:
|
||||
Abort
|
||||
Abort
|
||||
endcheck:
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; Make sure old versions are gone
|
||||
ReadRegStr $R0 HKLM \
|
||||
"Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "UninstallString"
|
||||
StrCmp $R0 "" done
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgRemoveOld) IDOK uninst
|
||||
Abort
|
||||
uninst:
|
||||
${RemovePrev} "$INSTDIR"
|
||||
done:
|
||||
FunctionEnd
|
||||
|
||||
|
||||
;------------------------------------------------------------------
|
||||
; SECTION main program
|
||||
;
|
||||
Section "SABnzbd" SecDummy
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
IfFileExists $INSTDIR\sabnzbd.exe 0 endWarnExist
|
||||
IfFileExists $INSTDIR\locale\nl\LC_MESSAGES\SABnzbd.mo endWarnExist 0
|
||||
IfFileExists $INSTDIR\python25.dll endWarnExist 0
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION $(MsgOldQueue) IDOK endWarnExist IDCANCEL 0
|
||||
Abort
|
||||
endWarnExist:
|
||||
@@ -239,73 +364,7 @@ Section "un.$(MsgDelProgram)" Uninstall
|
||||
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\SABnzbd"
|
||||
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd"
|
||||
|
||||
; Delete installation files are carefully as possible
|
||||
; Using just rmdir /r "$instdir" is considered unsafe!
|
||||
Delete "$INSTDIR\email\email-de.tmpl"
|
||||
Delete "$INSTDIR\email\email-en.tmpl"
|
||||
Delete "$INSTDIR\email\email-nl.tmpl"
|
||||
Delete "$INSTDIR\email\email-fr.tmpl"
|
||||
Delete "$INSTDIR\email\email-sv.tmpl"
|
||||
Delete "$INSTDIR\email\email-da.tmpl"
|
||||
Delete "$INSTDIR\email\email-nb.tmpl"
|
||||
Delete "$INSTDIR\email\email-ro.tmpl"
|
||||
Delete "$INSTDIR\email\rss-de.tmpl"
|
||||
Delete "$INSTDIR\email\rss-en.tmpl"
|
||||
Delete "$INSTDIR\email\rss-nl.tmpl"
|
||||
Delete "$INSTDIR\email\rss-fr.tmpl"
|
||||
Delete "$INSTDIR\email\rss-sv.tmpl"
|
||||
Delete "$INSTDIR\email\rss-da.tmpl"
|
||||
Delete "$INSTDIR\email\rss-nb.tmpl"
|
||||
Delete "$INSTDIR\email\rss-ro.tmpl"
|
||||
RMDir "$INSTDIR\email"
|
||||
RMDir /r "$INSTDIR\locale"
|
||||
RMDir /r "$INSTDIR\interfaces\Classic"
|
||||
RMDir /r "$INSTDIR\interfaces\Plush"
|
||||
RMDir /r "$INSTDIR\interfaces\smpl"
|
||||
RMDir /r "$INSTDIR\interfaces\Mobile"
|
||||
RMDir /r "$INSTDIR\interfaces\wizard"
|
||||
RMDir "$INSTDIR\interfaces"
|
||||
RMDir /r "$INSTDIR\win\par2"
|
||||
RMDir /r "$INSTDIR\win\unrar"
|
||||
RMDir /r "$INSTDIR\win\unzip"
|
||||
RMDir /r "$INSTDIR\win"
|
||||
Delete "$INSTDIR\licenses\*.txt"
|
||||
Delete "$INSTDIR\licenses\Python\*.txt"
|
||||
RMDir "$INSTDIR\licenses\Python"
|
||||
RMDir "$INSTDIR\licenses"
|
||||
Delete "$INSTDIR\lib\libeay32.dll"
|
||||
Delete "$INSTDIR\lib\pywintypes25.dll"
|
||||
Delete "$INSTDIR\lib\ssleay32.dll"
|
||||
Delete "$INSTDIR\lib\sabnzbd.zip"
|
||||
Delete "$INSTDIR\lib\*.pyd"
|
||||
RMDir /r "$INSTDIR\lib\"
|
||||
RMDir /r "$INSTDIR\po\email"
|
||||
RMDir /r "$INSTDIR\po\main"
|
||||
RMDir /r "$INSTDIR\po\nsis"
|
||||
RMDIR "$INSTDIR\po"
|
||||
Delete "$INSTDIR\CHANGELOG.txt"
|
||||
Delete "$INSTDIR\COPYRIGHT.txt"
|
||||
Delete "$INSTDIR\email.tmpl"
|
||||
Delete "$INSTDIR\GPL2.txt"
|
||||
Delete "$INSTDIR\GPL3.txt"
|
||||
Delete "$INSTDIR\INSTALL.txt"
|
||||
Delete "$INSTDIR\ISSUES.txt"
|
||||
Delete "$INSTDIR\LICENSE.txt"
|
||||
Delete "$INSTDIR\nzbmatrix.txt"
|
||||
Delete "$INSTDIR\MSVCR71.dll"
|
||||
Delete "$INSTDIR\nzb.ico"
|
||||
Delete "$INSTDIR\PKG-INFO"
|
||||
Delete "$INSTDIR\python25.dll"
|
||||
Delete "$INSTDIR\python26.dll"
|
||||
Delete "$INSTDIR\README.txt"
|
||||
Delete "$INSTDIR\SABnzbd-console.exe"
|
||||
Delete "$INSTDIR\SABnzbd.exe"
|
||||
Delete "$INSTDIR\SABnzbd-helper.exe"
|
||||
Delete "$INSTDIR\SABnzbd-service.exe"
|
||||
Delete "$INSTDIR\Sample-PostProc.cmd"
|
||||
Delete "$INSTDIR\Uninstall.exe"
|
||||
Delete "$INSTDIR\w9xpopen.exe"
|
||||
RMDir "$INSTDIR"
|
||||
${RemovePrev} "$INSTDIR"
|
||||
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
|
||||
@@ -327,19 +386,9 @@ Section "un.$(MsgDelProgram)" Uninstall
|
||||
SectionEnd ; end of uninstall section
|
||||
|
||||
Section "un.$(MsgDelSettings)" DelSettings
|
||||
DetailPrint "Uninstall settings $LOCALAPPDATA"
|
||||
Delete "$LOCALAPPDATA\sabnzbd\sabnzbd.ini"
|
||||
RMDir /r "$LOCALAPPDATA\sabnzbd\admin"
|
||||
SectionEnd
|
||||
|
||||
|
||||
Section "un.$(MsgDelLogs)" DelLogs
|
||||
RMDir /r "$LOCALAPPDATA\sabnzbd\logs"
|
||||
SectionEnd
|
||||
|
||||
|
||||
Section "un.$(MsgDelCache)" DelCache
|
||||
RMDir /r "$LOCALAPPDATA\sabnzbd\cache"
|
||||
RMDir "$LOCALAPPDATA\sabnzbd"
|
||||
RMDir /r "$LOCALAPPDATA\sabnzbd"
|
||||
SectionEnd
|
||||
|
||||
; eof
|
||||
@@ -348,121 +397,148 @@ SectionEnd
|
||||
;Language strings
|
||||
; MsgWarnRunning 'Please close "SABnzbd.exe" first'
|
||||
LangString MsgStartSab ${LANG_ENGLISH} "Start SABnzbd (hidden)"
|
||||
LangString MsgStartSab ${LANG_DANISH} "Start SABnzbd"
|
||||
LangString MsgStartSab ${LANG_GERMAN} "SABnzbd starten (unsichtbar)"
|
||||
LangString MsgStartSab ${LANG_FRENCH} "D<EFBFBD>marrer SABnzbd (cach<63>)"
|
||||
LangString MsgStartSab ${LANG_NORWEGIAN} "Start SABnzbd (hidden)"
|
||||
LangString MsgStartSab ${LANG_DUTCH} "Start SABnzbd (verborgen)"
|
||||
LangString MsgStartSab ${LANG_ROMANIAN} "Porneste SABnzbd (ascuns)"
|
||||
LangString MsgStartSab ${LANG_SWEDISH} "Starta SABnzbd (dold)"
|
||||
LangString MsgStartSab ${LANG_DANISH} "Start SABnzbd (hidden)$\"
|
||||
"
|
||||
LangString MsgStartSab ${LANG_GERMAN} "Start SABnzbd (hidden)$\"
|
||||
"
|
||||
LangString MsgStartSab ${LANG_FRENCH} "Start SABnzbd (hidden)$\"
|
||||
"
|
||||
LangString MsgStartSab ${LANG_NORWEGIAN} "Start SABnzbd (hidden)$\"
|
||||
"
|
||||
LangString MsgStartSab ${LANG_DUTCH} "Start SABnzbd (hidden)$\"
|
||||
LangString MsgShowRelNote ${LANG_DANISH} "Vis udgivelsesbem<65>rkninger"
|
||||
LangString MsgShowRelNote ${LANG_GERMAN} "Versionshinweise anzeigen"
|
||||
LangString MsgShowRelNote ${LANG_FRENCH} "Afficher les notes de version"
|
||||
LangString MsgShowRelNote ${LANG_NORWEGIAN} "Show Release Notes"
|
||||
LangString MsgShowRelNote ${LANG_DUTCH} "Toon vrijgave bericht"
|
||||
LangString MsgShowRelNote ${LANG_ROMANIAN} "Arat<EFBFBD> Notele de Publicare"
|
||||
LangString MsgShowRelNote ${LANG_SWEDISH} "Visa release noteringar"
|
||||
"
|
||||
LangString MsgStartSab ${LANG_ROMANIAN} "Start SABnzbd (hidden)$\"
|
||||
"
|
||||
LangString MsgStartSab ${LANG_SWEDISH} "Start SABnzbd (hidden)$\"
|
||||
"
|
||||
|
||||
LangString MsgShowRelNote ${LANG_ENGLISH} "Show Release Notes"
|
||||
LangString MsgShowRelNote ${LANG_DANISH} "Show Release Notes$\"
|
||||
"
|
||||
LangString MsgSupportUs ${LANG_DANISH} "St<EFBFBD>tte projektet, donere!"
|
||||
LangString MsgSupportUs ${LANG_GERMAN} "Bitte unterst<73>tzen Sie das Projekt durch eine Spende!"
|
||||
LangString MsgSupportUs ${LANG_FRENCH} "Supportez le projet, faites un don !"
|
||||
LangString MsgSupportUs ${LANG_NORWEGIAN} "Support the project, Donate!"
|
||||
LangString MsgSupportUs ${LANG_DUTCH} "Steun het project, Doneer!"
|
||||
LangString MsgSupportUs ${LANG_ROMANIAN} "Sustine proiectul, Doneaz<61>!"
|
||||
LangString MsgSupportUs ${LANG_SWEDISH} "Donera och st<73>d detta projekt!"
|
||||
LangString MsgShowRelNote ${LANG_GERMAN} "Show Release Notes$\"
|
||||
"
|
||||
LangString MsgShowRelNote ${LANG_FRENCH} "Show Release Notes$\"
|
||||
"
|
||||
LangString MsgShowRelNote ${LANG_NORWEGIAN} "Show Release Notes$\"
|
||||
"
|
||||
LangString MsgShowRelNote ${LANG_DUTCH} "Show Release Notes$\"
|
||||
"
|
||||
LangString MsgShowRelNote ${LANG_ROMANIAN} "Show Release Notes$\"
|
||||
LangString MsgCloseSab ${LANG_DANISH} "Luk 'SABnzbd.exe' f<>rst"
|
||||
LangString MsgCloseSab ${LANG_GERMAN} "Schliessen Sie bitte zuerst $\"SABnzbd.exe$\"."
|
||||
LangString MsgCloseSab ${LANG_FRENCH} "Quittez $\"SABnzbd.exe$\" avant l'installation, SVP"
|
||||
LangString MsgCloseSab ${LANG_NORWEGIAN} "Please close $\"SABnzbd.exe$\" first"
|
||||
LangString MsgCloseSab ${LANG_DUTCH} "Sluit $\"SABnzbd.exe$\" eerst af"
|
||||
LangString MsgCloseSab ${LANG_ROMANIAN} "<EFBFBD>nchideti mai <20>nt<6E>i $\"SABnzbd.exe$\""
|
||||
LangString MsgCloseSab ${LANG_SWEDISH} "Var v<>nlig st<73>ng $\"SABnzbd.exe$\" f<>rst"
|
||||
"
|
||||
LangString MsgShowRelNote ${LANG_SWEDISH} "Show Release Notes$\"
|
||||
"
|
||||
|
||||
LangString MsgSupportUs ${LANG_ENGLISH} "Support the project, Donate!"
|
||||
LangString MsgSupportUs ${LANG_DANISH} "Support the project, Donate!$\"
|
||||
"
|
||||
LangString MsgSupportUs ${LANG_GERMAN} "Support the project, Donate!$\"
|
||||
"
|
||||
LangString MsgOldQueue ${LANG_DANISH} " >>>> WARNING <<<<$\r$\n$\r$\nVenligst, kontroll<6C>r f<>rst udgivelsesnoter eller g<> til http://wiki.sabnzbd.org/introducing-0-6-0 !"
|
||||
LangString MsgOldQueue ${LANG_GERMAN} " >>>> WARNUNG <<<<$\r$\n$\r$\nBitte zuerst die Versionsanmerkungen lesen oder $\"http://wiki.sabnzbd.org/introducing-0-6-0 besuchen!$\""
|
||||
LangString MsgOldQueue ${LANG_FRENCH} " >>>> AVERTISSEMENT<<<<$\r$\n$\r$\nS'il vous pla<6C>t, v<>rifiez d'abord les notes de version ou visiter http://wiki.sabnzbd.org/introducing-0-6-0 !"
|
||||
LangString MsgOldQueue ${LANG_NORWEGIAN} " >>>> WARNING <<<<$\r$\n$\r$\nPlease, first check the release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !"
|
||||
LangString MsgOldQueue ${LANG_DUTCH} " >>>> WAARSCHUWING <<<<$\r$\n$\r$\nLees eerst het vrijgave bericht of ga naar $\"http://wiki.sabnzbd.org/introducing-0-6-0 !$\""
|
||||
LangString MsgOldQueue ${LANG_ROMANIAN} " >>>> ATENTIE <<<<$\r$\n$\r$\nV<6E> rug<75>m, verificati mai <20>nt<6E>i notele de publicare sau mergeti la http://wiki.sabnzbd.org/introducing-0-6-0 !"
|
||||
LangString MsgOldQueue ${LANG_SWEDISH} " >>>> VARNING <<<<$\r$\n$\r$\nVar v<>nlig och l<>s versions noteringarna eller g<> till http://wiki.sabnzbd.org/introducing-0-6-0 !"
|
||||
LangString MsgSupportUs ${LANG_FRENCH} "Support the project, Donate!$\"
|
||||
"
|
||||
LangString MsgSupportUs ${LANG_NORWEGIAN} "Support the project, Donate!$\"
|
||||
"
|
||||
LangString MsgSupportUs ${LANG_DUTCH} "Support the project, Donate!$\"
|
||||
"
|
||||
LangString MsgSupportUs ${LANG_ROMANIAN} "Support the project, Donate!$\"
|
||||
"
|
||||
LangString MsgSupportUs ${LANG_SWEDISH} "Support the project, Donate!$\"
|
||||
LangString MsgUninstall ${LANG_DANISH} "Dette vil afinstallere SABnzbd fra dit system"
|
||||
LangString MsgUninstall ${LANG_GERMAN} "Dies entfernt SABnzbd von Ihrem System"
|
||||
LangString MsgUninstall ${LANG_FRENCH} "Ceci d<>sinstallera SABnzbd de votre syst<73>me"
|
||||
LangString MsgUninstall ${LANG_NORWEGIAN} "This will uninstall SABnzbd from your system"
|
||||
LangString MsgUninstall ${LANG_DUTCH} "Dit verwijdert SABnzbd van je systeem"
|
||||
LangString MsgUninstall ${LANG_ROMANIAN} "Acest lucru va dezinstala SABnzbd din sistem"
|
||||
LangString MsgUninstall ${LANG_SWEDISH} "Detta kommer att avinstallera SABnzbd fr<66>n systemet"
|
||||
"
|
||||
|
||||
LangString MsgCloseSab ${LANG_ENGLISH} "Please close $\"SABnzbd.exe$\" first"
|
||||
LangString MsgCloseSab ${LANG_DANISH} "Please close $\"SABnzbd.exe$\" first$\"
|
||||
"
|
||||
LangString MsgCloseSab ${LANG_GERMAN} "Please close $\"SABnzbd.exe$\" first$\"
|
||||
"
|
||||
LangString MsgCloseSab ${LANG_FRENCH} "Please close $\"SABnzbd.exe$\" first$\"
|
||||
"
|
||||
LangString MsgRunAtStart ${LANG_DANISH} "K<EFBFBD>r ved opstart"
|
||||
LangString MsgRunAtStart ${LANG_GERMAN} "Beim Systemstart ausf<73>hren"
|
||||
LangString MsgRunAtStart ${LANG_FRENCH} "Lancer au d<>marrage"
|
||||
LangString MsgRunAtStart ${LANG_NORWEGIAN} "Run at startup"
|
||||
LangString MsgRunAtStart ${LANG_DUTCH} "Opstarten bij systeem start"
|
||||
LangString MsgRunAtStart ${LANG_ROMANIAN} "Executare la pornire"
|
||||
LangString MsgRunAtStart ${LANG_SWEDISH} "K<EFBFBD>r vid uppstart"
|
||||
LangString MsgCloseSab ${LANG_NORWEGIAN} "Please close $\"SABnzbd.exe$\" first$\"
|
||||
"
|
||||
LangString MsgCloseSab ${LANG_DUTCH} "Please close $\"SABnzbd.exe$\" first$\"
|
||||
"
|
||||
LangString MsgCloseSab ${LANG_ROMANIAN} "Please close $\"SABnzbd.exe$\" first$\"
|
||||
"
|
||||
LangString MsgCloseSab ${LANG_SWEDISH} "Please close $\"SABnzbd.exe$\" first$\"
|
||||
"
|
||||
|
||||
LangString MsgIcon ${LANG_DANISH} "Skrivebords ikon"
|
||||
LangString MsgIcon ${LANG_GERMAN} "Desktop-Symbol"
|
||||
LangString MsgIcon ${LANG_FRENCH} "Ic<EFBFBD>ne sur le Bureau"
|
||||
LangString MsgIcon ${LANG_NORWEGIAN} "Desktop Icon"
|
||||
LangString MsgIcon ${LANG_DUTCH} "Pictogram op bureaublad"
|
||||
LangString MsgIcon ${LANG_ROMANIAN} "Icoan<EFBFBD> Desktop"
|
||||
LangString MsgIcon ${LANG_SWEDISH} "Skrivbordsikon"
|
||||
LangString MsgOldQueue ${LANG_ENGLISH} " >>>> WARNING <<<<$\r$\n$\r$\nPlease, first check the release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !"
|
||||
LangString MsgOldQueue ${LANG_DANISH} " >>>> WARNING <<<<$\r$\n$\r$\nPlease, first check the release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !$\"
|
||||
"
|
||||
LangString MsgOldQueue ${LANG_GERMAN} " >>>> WARNING <<<<$\r$\n$\r$\nPlease, first check the release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !$\"
|
||||
"
|
||||
LangString MsgOldQueue ${LANG_FRENCH} " >>>> WARNING <<<<$\r$\n$\r$\nPlease, first check the release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !$\"
|
||||
"
|
||||
LangString MsgOldQueue ${LANG_NORWEGIAN} " >>>> WARNING <<<<$\r$\n$\r$\nPlease, first check the release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !$\"
|
||||
"
|
||||
LangString MsgAssoc ${LANG_DANISH} "NZB filtilknytning"
|
||||
LangString MsgAssoc ${LANG_GERMAN} "Mit NZB-Dateien verkn<6B>pfen"
|
||||
LangString MsgAssoc ${LANG_FRENCH} "Association des fichiers NZB"
|
||||
LangString MsgAssoc ${LANG_NORWEGIAN} "NZB File association"
|
||||
LangString MsgAssoc ${LANG_DUTCH} "NZB bestanden koppelen aan SABnzbd"
|
||||
LangString MsgAssoc ${LANG_ROMANIAN} "Asociere cu Fisierele NZB"
|
||||
LangString MsgAssoc ${LANG_SWEDISH} "NZB Filassosication"
|
||||
LangString MsgOldQueue ${LANG_DUTCH} " >>>> WARNING <<<<$\r$\n$\r$\nPlease, first check the release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !$\"
|
||||
"
|
||||
LangString MsgOldQueue ${LANG_ROMANIAN} " >>>> WARNING <<<<$\r$\n$\r$\nPlease, first check the release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !$\"
|
||||
"
|
||||
LangString MsgOldQueue ${LANG_SWEDISH} " >>>> WARNING <<<<$\r$\n$\r$\nPlease, first check the release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !$\"
|
||||
"
|
||||
|
||||
LangString MsgUninstall ${LANG_ENGLISH} "This will uninstall SABnzbd from your system"
|
||||
LangString MsgUninstall ${LANG_DANISH} "This will uninstall SABnzbd from your system$\"
|
||||
LangString MsgDelProgram ${LANG_DANISH} "Slet program"
|
||||
LangString MsgDelProgram ${LANG_GERMAN} "Programm l<>schen"
|
||||
LangString MsgDelProgram ${LANG_FRENCH} "Supprimer le programme"
|
||||
LangString MsgDelProgram ${LANG_NORWEGIAN} "Delete Program"
|
||||
LangString MsgDelProgram ${LANG_DUTCH} "Verwijder programma"
|
||||
LangString MsgDelProgram ${LANG_ROMANIAN} "Sterge Program"
|
||||
LangString MsgDelProgram ${LANG_SWEDISH} "Ta bort programmet"
|
||||
"
|
||||
LangString MsgUninstall ${LANG_GERMAN} "This will uninstall SABnzbd from your system$\"
|
||||
"
|
||||
LangString MsgUninstall ${LANG_FRENCH} "This will uninstall SABnzbd from your system$\"
|
||||
"
|
||||
LangString MsgUninstall ${LANG_NORWEGIAN} "This will uninstall SABnzbd from your system$\"
|
||||
"
|
||||
LangString MsgUninstall ${LANG_DUTCH} "This will uninstall SABnzbd from your system$\"
|
||||
"
|
||||
LangString MsgDelSettings ${LANG_DANISH} "Slet instillinger"
|
||||
LangString MsgDelSettings ${LANG_GERMAN} "Einstellungen l<>schen"
|
||||
LangString MsgDelSettings ${LANG_FRENCH} "Supprimer les Param<61>tres"
|
||||
LangString MsgDelSettings ${LANG_NORWEGIAN} "Delete Settings"
|
||||
LangString MsgDelSettings ${LANG_DUTCH} "Verwijder instellingen"
|
||||
LangString MsgDelSettings ${LANG_ROMANIAN} "Stergeti Set<65>ri"
|
||||
LangString MsgDelSettings ${LANG_SWEDISH} "Ta bort inst<73>llningar"
|
||||
LangString MsgUninstall ${LANG_ROMANIAN} "This will uninstall SABnzbd from your system$\"
|
||||
"
|
||||
LangString MsgUninstall ${LANG_SWEDISH} "This will uninstall SABnzbd from your system$\"
|
||||
"
|
||||
|
||||
LangString MsgRunAtStart ${LANG_ENGLISH} "Run at startup"
|
||||
LangString MsgRunAtStart ${LANG_DANISH} "Run at startup$\"
|
||||
"
|
||||
LangString MsgDelLogs ${LANG_ENGLISH} "Delete Logs"
|
||||
LangString MsgDelLogs ${LANG_DANISH} "Slet logs"
|
||||
LangString MsgDelLogs ${LANG_GERMAN} "Protokoll l<>schen"
|
||||
LangString MsgDelLogs ${LANG_FRENCH} "Supprimer les logs"
|
||||
LangString MsgDelLogs ${LANG_NORWEGIAN} "Delete Logs"
|
||||
LangString MsgDelLogs ${LANG_DUTCH} "Verwijder logging"
|
||||
LangString MsgDelLogs ${LANG_ROMANIAN} "Stergeti Activitate"
|
||||
LangString MsgDelLogs ${LANG_SWEDISH} "Ta bort logg"
|
||||
LangString MsgRunAtStart ${LANG_GERMAN} "Run at startup$\"
|
||||
"
|
||||
LangString MsgRunAtStart ${LANG_FRENCH} "Run at startup$\"
|
||||
"
|
||||
LangString MsgRunAtStart ${LANG_NORWEGIAN} "Run at startup$\"
|
||||
"
|
||||
LangString MsgRunAtStart ${LANG_DUTCH} "Run at startup$\"
|
||||
"
|
||||
LangString MsgRunAtStart ${LANG_ROMANIAN} "Run at startup$\"
|
||||
LangString MsgDelCache ${LANG_ENGLISH} "Delete Cache"
|
||||
LangString MsgDelCache ${LANG_DANISH} "Slet hukommelse"
|
||||
LangString MsgDelCache ${LANG_GERMAN} "Cache l<>schen"
|
||||
LangString MsgDelCache ${LANG_FRENCH} "Supprimer le Cache"
|
||||
LangString MsgDelCache ${LANG_NORWEGIAN} "Delete Cache"
|
||||
LangString MsgDelCache ${LANG_DUTCH} "Verwijder Cache"
|
||||
LangString MsgDelCache ${LANG_ROMANIAN} "Stergeti Cache"
|
||||
LangString MsgDelCache ${LANG_SWEDISH} "Ta bort tempor<6F>r-mapp"
|
||||
"
|
||||
LangString MsgRunAtStart ${LANG_SWEDISH} "Run at startup$\"
|
||||
"
|
||||
|
||||
LangString MsgIcon ${LANG_ENGLISH} "Desktop Icon"
|
||||
LangString MsgIcon ${LANG_DANISH} "Desktop Icon$\"
|
||||
"
|
||||
LangString MsgIcon ${LANG_GERMAN} "Desktop Icon$\"
|
||||
"
|
||||
LangString MsgIcon ${LANG_FRENCH} "Desktop Icon$\"
|
||||
"
|
||||
LangString MsgIcon ${LANG_NORWEGIAN} "Desktop Icon$\"
|
||||
"
|
||||
LangString MsgIcon ${LANG_DUTCH} "Desktop Icon$\"
|
||||
"
|
||||
LangString MsgIcon ${LANG_ROMANIAN} "Desktop Icon$\"
|
||||
"
|
||||
LangString MsgIcon ${LANG_SWEDISH} "Desktop Icon$\"
|
||||
"
|
||||
|
||||
LangString MsgAssoc ${LANG_ENGLISH} "NZB File association"
|
||||
LangString MsgAssoc ${LANG_DANISH} "NZB File association$\"
|
||||
"
|
||||
LangString MsgAssoc ${LANG_GERMAN} "NZB File association$\"
|
||||
"
|
||||
LangString MsgAssoc ${LANG_FRENCH} "NZB File association$\"
|
||||
"
|
||||
LangString MsgAssoc ${LANG_NORWEGIAN} "NZB File association$\"
|
||||
"
|
||||
LangString MsgAssoc ${LANG_DUTCH} "NZB File association$\"
|
||||
"
|
||||
LangString MsgAssoc ${LANG_ROMANIAN} "NZB File association$\"
|
||||
"
|
||||
LangString MsgAssoc ${LANG_SWEDISH} "NZB File association$\"
|
||||
"
|
||||
|
||||
LangString MsgDelProgram ${LANG_ENGLISH} "Delete Program"
|
||||
LangString MsgDelProgram ${LANG_DANISH} "Delete Program$\"
|
||||
|
||||
4
PKG-INFO
@@ -1,7 +1,7 @@
|
||||
Metadata-Version: 1.0
|
||||
Name: SABnzbd
|
||||
Version: 0.6.3
|
||||
Summary: SABnzbd-0.6.3
|
||||
Version: 0.7.0Aplha1
|
||||
Summary: SABnzbd-0.7.0Alpha1
|
||||
Home-page: http://sourceforge.net/projects/sabnzbdplus
|
||||
Author: The SABnzbd Team
|
||||
Author-email: team@sabnzbd.org
|
||||
|
||||
54
README.md
Normal file
@@ -0,0 +1,54 @@
|
||||
SABnzbd - The automated Usenet download tool
|
||||
============================================
|
||||
|
||||
SABnzbd is an Open Source Binary Newsreader written in Python.
|
||||
|
||||
It's totally free, incredibly easy to use, and works practically everywhere.
|
||||
|
||||
SABnzbd makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.
|
||||
|
||||
If you want to know more you can head over to our website: http://sabnzbd.org.
|
||||
|
||||
## Resolving Dependencies
|
||||
|
||||
SABnzbd has a good deal of dependencies you'll need before you can get running. If you've previously run SABnzbd from one of the various Linux packages floating around (Ubuntu, Debian, Fedora, etc), then you likely already have all the needed dependencies. If not, here's what you're looking for:
|
||||
|
||||
- `python` (We support Python 2.5-2.7, preferably 2.6 or 2.7.)
|
||||
- `python-cheetah`
|
||||
- `python-configobj`
|
||||
- `python-feedparser`
|
||||
- `python-dbus`
|
||||
- `python-openssl`
|
||||
- `python-support`
|
||||
- `python-yenc`
|
||||
- `par2` (Multi-threaded par2 can be downloaded from [ChuChuSoft](http://chuchusoft.com/par2_tbb/download.html) )
|
||||
- `unrar` (Make sure you get the "official" non-free version of unrar)
|
||||
- `unzip`
|
||||
|
||||
Your package manager should supply these. If not, we've got links in our more in-depth [installation guide](https://github.com/sabnzbd/sabnzbd/blob/master/INSTALL.txt).
|
||||
|
||||
## Running SABnzbd from source
|
||||
|
||||
Once you've sorted out all the dependencies, simply run:
|
||||
|
||||
```
|
||||
python SABnzbd.py
|
||||
```
|
||||
|
||||
Or, if you want to run in the background:
|
||||
|
||||
```
|
||||
python -d -f /path/to/sabnzbd.ini
|
||||
```
|
||||
|
||||
If you want multi-language support, run:
|
||||
|
||||
```
|
||||
python tools/make_mo.py
|
||||
```
|
||||
|
||||
Our many other commandline options are explained in depth [here](http://wiki.sabnzbd.org/command-line-parameters).
|
||||
|
||||
## About Our Repo
|
||||
|
||||
We're going to be attempting to follow the [gitflow model](http://nvie.com/posts/a-successful-git-branching-model/), so you can consider "master" to be whatever our present stable release build is (presently 0.6.x) and "develop" to be whatever our next build will be (presently 0.7.x). Once we transition from unstable to stable dev builds we'll create release branches, and encourage you to follow along and help us test.
|
||||
28
README.rtf
@@ -1,13 +1,31 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
|
||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
\paperw11900\paperh16840\vieww16360\viewh15680\viewkind0
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
|
||||
|
||||
\f0\b\fs48 \cf0 SABnzbd 0.6.3\
|
||||
\f0\b\fs48 \cf0 SABnzbd 0.7.0Alpha1\
|
||||
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural
|
||||
|
||||
\b0\fs26 \cf0 \
|
||||
|
||||
\b What's new
|
||||
\b0 \
|
||||
- Download quota management\
|
||||
- Windows: simple system tray menu\
|
||||
- Multi-platform Growl support\
|
||||
- NotifyOSD support for Linux distros that have it\
|
||||
- Option to set maximum number of retries for servers (prevents deadlock)\
|
||||
- Pre-download check to estimate completeness (reliability is limited)\
|
||||
- Prevent partial downloading of par2 files that are not needed yet\
|
||||
- Config->Special for settings previously only available in the sabnzbd.ini file\
|
||||
- For Usenet servers with multiple IP addresses, pick a random one per connection\
|
||||
- Add pseudo-priority "Stop" that will send the job immediately to the post-processing queue\
|
||||
- Allow jobs still waiting for post-processing to be deleted too\
|
||||
\
|
||||
|
||||
\b About
|
||||
\b0 \
|
||||
SABnzbd is an open-source cross-platform binary newsreader.\
|
||||
It simplifies the process of downloading from Usenet dramatically,\
|
||||
thanks to its friendly web-based user interface and advanced\
|
||||
@@ -15,6 +33,8 @@ built-in post-processing options that automatically verify, repair,\
|
||||
extract and clean up posts downloaded from Usenet.\
|
||||
SABnzbd also has a fully customizable user interface,\
|
||||
and offers a complete API for third-party applications to hook into.\
|
||||
\
|
||||
(c) Copyright 2007-2012 by "The SABnzbd-team" <team@sabnzbd.org>\
|
||||
\
|
||||
There is an extensive Wiki on the use of SABnzbd.\
|
||||
{\field{\*\fldinst{HYPERLINK "http://wiki.sabnzbd.org/"}}{\fldrslt http://wiki.sabnzbd.org/}}\
|
||||
@@ -27,9 +47,7 @@ There is an extensive Wiki on the use of SABnzbd.\
|
||||
|
||||
\b Known problems and solutions\
|
||||
|
||||
\b0 Read the file
|
||||
\b
|
||||
\b0 "ISSUES.txt"
|
||||
\b0 Read the file"ISSUES.txt"
|
||||
\b \
|
||||
|
||||
\b0 \
|
||||
|
||||
79
README.txt
@@ -1,63 +1,24 @@
|
||||
*******************************************
|
||||
*** This is SABnzbd 0.6.3 ***
|
||||
*******************************************
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
It simplifies the process of downloading from Usenet dramatically,
|
||||
thanks to its friendly web-based user interface and advanced
|
||||
built-in post-processing options that automatically verify, repair,
|
||||
extract and clean up posts downloaded from Usenet.
|
||||
SABnzbd also has a fully customizable user interface,
|
||||
and offers a complete API for third-party applications to hook into.
|
||||
************************ SABnzbd 0.7.0Alpha1 ************************
|
||||
|
||||
There is an extensive Wiki on the use of SABnzbd.
|
||||
http://wiki.sabnzbd.org/
|
||||
What's new:
|
||||
|
||||
IMPORTANT INFORMATION about release 0.6.0:
|
||||
http://wiki.sabnzbd.org/introducing-0-6-0
|
||||
- Download quota management
|
||||
- Windows: simple system tray menu
|
||||
- Multi-platform Growl support
|
||||
- NotifyOSD support for Linux distros that have it
|
||||
- Option to set maximum number of retries for servers (prevents deadlock)
|
||||
- Pre-download check to estimate completeness (reliability is limited)
|
||||
- Prevent partial downloading of par2 files that are not needed yet
|
||||
- Config->Special for settings previously only available in the sabnzbd.ini file
|
||||
- For Usenet servers with multiple IP addresses, pick a random one per connection
|
||||
- Add pseudo-priority "Stop" that will send the job immediately to the post-processing queue
|
||||
- Allow jobs still waiting for post-processing to be deleted too
|
||||
|
||||
About:
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
It simplifies the process of downloading from Usenet dramatically,
|
||||
thanks to its friendly web-based user interface and advanced
|
||||
built-in post-processing options that automatically verify, repair,
|
||||
extract and clean up posts downloaded from Usenet.
|
||||
|
||||
Please also read the file "ISSUES.txt"
|
||||
|
||||
*******************************************
|
||||
*** Upgrading from 0.6.x ***
|
||||
*******************************************
|
||||
Stop SABnzbd.
|
||||
Install new version
|
||||
Start SABnzbd.
|
||||
|
||||
|
||||
*******************************************
|
||||
*** Upgrading from 0.5.x ***
|
||||
*******************************************
|
||||
Stop SABnzbd.
|
||||
Uninstall current version, keeping the data.
|
||||
Install new version
|
||||
Start SABnzbd.
|
||||
|
||||
The organization of the download queue is different from 0.5.x.
|
||||
0.6.x will finish downloading an existing queue, but you
|
||||
cannot go back to an older version without losing your queue.
|
||||
Also, your sabnzbd.ini file will be upgraded, making it
|
||||
incompatible with release 0.5.x
|
||||
|
||||
|
||||
*******************************************
|
||||
*** Upgrading from 0.4.x ***
|
||||
*******************************************
|
||||
|
||||
>>>>> PLEASE DOWNLOAD YOUR CURRENT QUEUE BEFORE UPGRADING <<<<<<
|
||||
|
||||
When upgrading from a 0.4.x release such as 0.4.12 your old settings will be kept.
|
||||
You will however be given a fresh queue and history. If you have items in your queue
|
||||
from the older version of SABnzbd, you can either re-import the nzb files if you kept
|
||||
an nzb backup folder, or temporarily go back to 0.4.x until your queue is complete.
|
||||
|
||||
The history is now stored in a better format meaning future upgrades should be backwards
|
||||
compatible.
|
||||
|
||||
|
||||
*******************************************
|
||||
*** Changes since 0.5.6 ***
|
||||
*******************************************
|
||||
|
||||
See: http://wiki.sabnzbd.org/introducing-0-6-0
|
||||
(c) Copyright 2007-2012 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
|
||||
247
SABnzbd.py
@@ -37,7 +37,7 @@ except ValueError:
|
||||
print "Sorry, requires Python module Cheetah 2.0rc7 or higher."
|
||||
sys.exit(1)
|
||||
except:
|
||||
print "The following modules need to be installed: Cheetah, cherrypy(included, unpack the zip)"
|
||||
print "The Python module Cheetah is required"
|
||||
sys.exit(1)
|
||||
|
||||
import cherrypy
|
||||
@@ -62,21 +62,23 @@ except:
|
||||
else:
|
||||
SQLITE_DLL = False
|
||||
|
||||
import sabnzbd.lang
|
||||
import sabnzbd
|
||||
import sabnzbd.lang
|
||||
import sabnzbd.interface
|
||||
from sabnzbd.constants import *
|
||||
import sabnzbd.newsunpack
|
||||
from sabnzbd.misc import get_user_shellfolders, launch_a_browser, real_path, \
|
||||
check_latest_version, panic_tmpl, panic_port, panic_host, panic_fwall, panic_sqlite, panic, exit_sab, \
|
||||
panic_xport, notify, split_host, get_ext, create_https_certificates, \
|
||||
from sabnzbd.misc import get_user_shellfolders, real_path, \
|
||||
check_latest_version, exit_sab, \
|
||||
split_host, get_ext, create_https_certificates, \
|
||||
windows_variant, ip_extract, set_serv_parms, get_serv_parms, globber
|
||||
from sabnzbd.panic import panic_tmpl, panic_port, panic_host, panic_fwall, \
|
||||
panic_sqlite, panic, launch_a_browser, panic_xport
|
||||
import sabnzbd.scheduler as scheduler
|
||||
import sabnzbd.config as config
|
||||
import sabnzbd.cfg
|
||||
import sabnzbd.downloader
|
||||
from sabnzbd.encoding import unicoder
|
||||
from sabnzbd.utils import osx
|
||||
from sabnzbd.encoding import unicoder, latin1
|
||||
import sabnzbd.growler as growler
|
||||
|
||||
from threading import Thread
|
||||
|
||||
@@ -229,7 +231,7 @@ def print_help():
|
||||
print " -t --templates <templ> Template directory [*]"
|
||||
print " -2 --template2 <templ> Secondary template dir [*]"
|
||||
print
|
||||
print " -l --logging <0..2> Set logging level (0= least, 2= most) [*]"
|
||||
print " -l --logging <0..2> Set logging level (-1=off, 0= least, 2= most) [*]"
|
||||
print " -w --weblogging <0..2> Set cherrypy logging (0= off, 1= on, 2= file-only) [*]"
|
||||
print
|
||||
print " -b --browser <0..1> Auto browser launch (0= off, 1= on) [*]"
|
||||
@@ -249,6 +251,7 @@ def print_help():
|
||||
print " with full data reconstruction"
|
||||
print " --https <port> Port to use for HTTPS server"
|
||||
print " --log-all Log all article handling (for developers)"
|
||||
print " --console Force console logging for OSX app"
|
||||
print " --new Run a new instance of SABnzbd"
|
||||
|
||||
def print_version():
|
||||
@@ -318,7 +321,8 @@ def Web_Template(key, defweb, wdir):
|
||||
wdir = ''
|
||||
if not wdir:
|
||||
wdir = defweb
|
||||
key.set(wdir)
|
||||
if key:
|
||||
key.set(wdir)
|
||||
if not wdir:
|
||||
# No default value defined, accept empty path
|
||||
return ''
|
||||
@@ -328,6 +332,10 @@ def Web_Template(key, defweb, wdir):
|
||||
logging.info("Web dir is %s", full_dir)
|
||||
|
||||
if not os.path.exists(full_main):
|
||||
# Temporarily fix that allows missing Config
|
||||
if defweb == DEF_STDCONFIG:
|
||||
return ''
|
||||
# end temp fix
|
||||
logging.warning(Ta('Cannot find web template: %s, trying standard template'), full_main)
|
||||
full_dir = real_path(sabnzbd.DIR_INTERFACES, DEF_STDINTF)
|
||||
full_main = real_path(full_dir, DEF_MAIN_TMPL)
|
||||
@@ -357,12 +365,14 @@ def fix_webname(name):
|
||||
xname = name.title()
|
||||
else:
|
||||
xname = ''
|
||||
if xname in ('Default',):
|
||||
if xname in ('Default', ):
|
||||
return 'Classic'
|
||||
elif xname in ('Classic', 'Plush', 'Mobile'):
|
||||
return xname
|
||||
elif xname in ('Smpl', 'Wizard'):
|
||||
return name.lower()
|
||||
elif xname in ('Config',):
|
||||
return 'Plush'
|
||||
else:
|
||||
return name
|
||||
|
||||
@@ -489,6 +499,31 @@ def print_modules():
|
||||
logging.info("pyOpenSSL... NOT found - try apt-get install python-pyopenssl (SSL is optional)")
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
def all_localhosts():
|
||||
""" Return all unique values of localhost in order of preference """
|
||||
ips = ['127.0.0.1']
|
||||
try:
|
||||
# Check whether IPv6 is available and enabled
|
||||
info = socket.getaddrinfo('::1', None)
|
||||
af, socktype, proto, canonname, sa = info[0]
|
||||
s = socket.socket(af, socktype, proto)
|
||||
s.close()
|
||||
except socket.error:
|
||||
return ips
|
||||
try:
|
||||
info = socket.getaddrinfo('localhost', None)
|
||||
except:
|
||||
# localhost does not resolve
|
||||
return ips
|
||||
ips = []
|
||||
for item in info:
|
||||
item = item[4][0]
|
||||
if item not in ips:
|
||||
ips.append(item)
|
||||
return ips
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
def get_webhost(cherryhost, cherryport, https_port):
|
||||
""" Determine the webhost address and port,
|
||||
@@ -602,7 +637,7 @@ def get_webhost(cherryhost, cherryport, https_port):
|
||||
# if the https port was specified, assume they want HTTPS enabling also
|
||||
sabnzbd.cfg.enable_https.set(True)
|
||||
|
||||
if cherryport == https_port:
|
||||
if cherryport == https_port and sabnzbd.cfg.enable_https():
|
||||
sabnzbd.cfg.enable_https.set(False)
|
||||
# Should have a translated message, but that's not available yet
|
||||
#logging.error(Ta('HTTP and HTTPS ports cannot be the same'))
|
||||
@@ -611,6 +646,18 @@ def get_webhost(cherryhost, cherryport, https_port):
|
||||
return cherryhost, cherryport, browserhost, https_port
|
||||
|
||||
|
||||
def attach_server(host, port, cert=None, key=None):
|
||||
""" Define and attach server, optionally HTTPS
|
||||
"""
|
||||
http_server = _cpwsgi_server.CPWSGIServer()
|
||||
http_server.bind_addr = (host, port)
|
||||
if cert and key:
|
||||
http_server.ssl_certificate = cert
|
||||
http_server.ssl_private_key = key
|
||||
adapter = _cpserver.ServerAdapter(cherrypy.engine, http_server, http_server.bind_addr)
|
||||
adapter.subscribe()
|
||||
|
||||
|
||||
def is_sabnzbd_running(url):
|
||||
""" Return True when there's already a SABnzbd instance running.
|
||||
"""
|
||||
@@ -639,9 +686,12 @@ def find_free_port(host, currentport):
|
||||
return 0
|
||||
|
||||
|
||||
def check_for_sabnzbd(url, upload_nzbs):
|
||||
def check_for_sabnzbd(url, upload_nzbs, allow_browser=True):
|
||||
""" Check for a running instance of sabnzbd(same version) on this port
|
||||
allow_browser==True|None will launch the browser, False will not.
|
||||
"""
|
||||
if allow_browser is None:
|
||||
allow_browser = True
|
||||
if is_sabnzbd_running(url):
|
||||
# Upload any specified nzb files to the running instance
|
||||
if upload_nzbs:
|
||||
@@ -650,8 +700,9 @@ def check_for_sabnzbd(url, upload_nzbs):
|
||||
upload_file(url, f)
|
||||
else:
|
||||
# Launch the web browser and quit since sabnzbd is already running
|
||||
# Trim away everything after the final slash in the URL
|
||||
url = url[:url.rfind('/')+1]
|
||||
launch_a_browser(url, force=True)
|
||||
launch_a_browser(url, force=allow_browser)
|
||||
exit_sab(0)
|
||||
return True
|
||||
return False
|
||||
@@ -742,6 +793,12 @@ def commandline_handler(frozen=True):
|
||||
serv_opts = [os.path.normpath(os.path.abspath(sys.argv[0]))]
|
||||
upload_nzbs = []
|
||||
|
||||
# OSX binary: get rid of the weird -psn_0_123456 parameter
|
||||
for arg in sys.argv:
|
||||
if arg.startswith('-psn_'):
|
||||
sys.argv.remove(arg)
|
||||
break
|
||||
|
||||
# Ugly hack to remove the extra "SABnzbd*" parameter the Windows binary
|
||||
# gets when it's restarted
|
||||
if len(sys.argv) > 1 and \
|
||||
@@ -761,7 +818,7 @@ def commandline_handler(frozen=True):
|
||||
'weblogging=', 'server=', 'templates',
|
||||
'template2', 'browser=', 'config-file=', 'force',
|
||||
'version', 'https=', 'autorestarted', 'repair', 'repair-all',
|
||||
'log-all', 'no-login', 'pid=', 'new',
|
||||
'log-all', 'no-login', 'pid=', 'new', 'sessions', 'console',
|
||||
# Below Win32 Service options
|
||||
'password=', 'username=', 'startup=', 'perfmonini=', 'perfmondll=',
|
||||
'interactive', 'wait=',
|
||||
@@ -808,6 +865,7 @@ def get_f_option(opts):
|
||||
#------------------------------------------------------------------------------
|
||||
def main():
|
||||
global LOG_FLAG
|
||||
import sabnzbd # Due to ApplePython bug
|
||||
|
||||
autobrowser = None
|
||||
autorestarted = False
|
||||
@@ -833,6 +891,8 @@ def main():
|
||||
re_argv = [sys.argv[0]]
|
||||
pid_path = None
|
||||
new_instance = False
|
||||
force_sessions = False
|
||||
osx_console = False
|
||||
|
||||
service, sab_opts, serv_opts, upload_nzbs = commandline_handler()
|
||||
|
||||
@@ -881,8 +941,8 @@ def main():
|
||||
try:
|
||||
logging_level = int(arg)
|
||||
except:
|
||||
logging_level = -1
|
||||
if logging_level < 0 or logging_level > 2:
|
||||
logging_level = -2
|
||||
if logging_level < -1 or logging_level > 2:
|
||||
print_help()
|
||||
exit_sab(1)
|
||||
elif opt in ('-v', '--version'):
|
||||
@@ -913,6 +973,12 @@ def main():
|
||||
re_argv.append(arg)
|
||||
elif opt in ('--new',):
|
||||
new_instance = True
|
||||
elif opt in ('--sessions',):
|
||||
re_argv.append(opt)
|
||||
force_sessions = True
|
||||
elif opt in ('--console',):
|
||||
re_argv.append(opt)
|
||||
osx_console = True
|
||||
|
||||
sabnzbd.MY_FULLNAME = os.path.normpath(os.path.abspath(sabnzbd.MY_FULLNAME))
|
||||
sabnzbd.MY_NAME = os.path.basename(sabnzbd.MY_FULLNAME)
|
||||
@@ -930,11 +996,11 @@ def main():
|
||||
consoleLogging = consoleLogging and not sabnzbd.DAEMON
|
||||
|
||||
# No console logging needed for OSX app
|
||||
noConsoleLoggingOSX = (sabnzbd.DIR_PROG.find('.app/Contents/Resources') > 0)
|
||||
noConsoleLoggingOSX = (not osx_console) and (sabnzbd.DIR_PROG.find('.app/Contents/Resources') > 0)
|
||||
if noConsoleLoggingOSX:
|
||||
consoleLogging = 1
|
||||
|
||||
LOGLEVELS = (logging.WARNING, logging.INFO, logging.DEBUG)
|
||||
LOGLEVELS = (logging.FATAL, logging.WARNING, logging.INFO, logging.DEBUG)
|
||||
|
||||
# Setup primary logging to prevent default console logging
|
||||
gui_log = guiHandler(MAX_WARNINGS)
|
||||
@@ -951,6 +1017,8 @@ def main():
|
||||
# Detect Windows variant
|
||||
if sabnzbd.WIN32:
|
||||
vista_plus, vista64 = windows_variant()
|
||||
sabnzbd.WIN64 = vista64
|
||||
|
||||
|
||||
if not SQLITE_DLL:
|
||||
panic_sqlite(sabnzbd.MY_FULLNAME)
|
||||
@@ -1020,7 +1088,7 @@ def main():
|
||||
url = None
|
||||
if sabnzbd.WIN32 and not new_instance:
|
||||
url = get_connection_info()
|
||||
if url and check_for_sabnzbd(url, upload_nzbs):
|
||||
if url and check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
exit_sab(0)
|
||||
|
||||
# If an instance of sabnzbd(same version) is already running on this port, launch the browser
|
||||
@@ -1038,7 +1106,7 @@ def main():
|
||||
else:
|
||||
if not url:
|
||||
url = 'https://%s:%s/sabnzbd/api?' % (browserhost, port)
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs):
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
newport = find_free_port(browserhost, port)
|
||||
if newport > 0:
|
||||
sabnzbd.cfg.https_port.set(newport)
|
||||
@@ -1058,7 +1126,7 @@ def main():
|
||||
else:
|
||||
if not url:
|
||||
url = 'http://%s:%s/sabnzbd/api?' % (browserhost, cherryport)
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs):
|
||||
if new_instance or not check_for_sabnzbd(url, upload_nzbs, autobrowser):
|
||||
port = find_free_port(browserhost, cherryport)
|
||||
if port > 0:
|
||||
sabnzbd.cfg.cherryport.set(port)
|
||||
@@ -1117,7 +1185,7 @@ def main():
|
||||
rollover_log.addFilter(FilterCP3())
|
||||
sabnzbd.LOGHANDLER = rollover_log
|
||||
logger.addHandler(rollover_log)
|
||||
logger.setLevel(LOGLEVELS[logging_level])
|
||||
logger.setLevel(LOGLEVELS[logging_level+1])
|
||||
|
||||
except IOError:
|
||||
print "Error:"
|
||||
@@ -1145,7 +1213,7 @@ def main():
|
||||
if consoleLogging:
|
||||
console = logging.StreamHandler()
|
||||
console.addFilter(FilterCP3())
|
||||
console.setLevel(LOGLEVELS[logging_level])
|
||||
console.setLevel(LOGLEVELS[logging_level+1])
|
||||
console.setFormatter(logging.Formatter(format))
|
||||
logger.addHandler(console)
|
||||
if noConsoleLoggingOSX:
|
||||
@@ -1164,7 +1232,6 @@ def main():
|
||||
suffix = ' (=Vista+)'
|
||||
if vista64:
|
||||
suffix = ' (=Vista+ x64)'
|
||||
sabnzbd.WIN64 = True
|
||||
try:
|
||||
logging.info('Platform=%s%s Class=%s', platform.platform(), suffix, os.name)
|
||||
except:
|
||||
@@ -1172,6 +1239,7 @@ def main():
|
||||
else:
|
||||
logging.info('Platform = %s', os.name)
|
||||
logging.info('Python-version = %s', sys.version)
|
||||
logging.info('Arguments = %s', sabnzbd.CMDLINE)
|
||||
|
||||
# OSX 10.5 I/O priority setting
|
||||
if sabnzbd.DARWIN:
|
||||
@@ -1206,12 +1274,14 @@ def main():
|
||||
|
||||
web_dir = Web_Template(sabnzbd.cfg.web_dir, DEF_STDINTF, fix_webname(web_dir))
|
||||
web_dir2 = Web_Template(sabnzbd.cfg.web_dir2, '', fix_webname(web_dir2))
|
||||
web_dirc = Web_Template(None, DEF_STDCONFIG, '')
|
||||
|
||||
wizard_dir = os.path.join(sabnzbd.DIR_INTERFACES, 'wizard')
|
||||
#sabnzbd.lang.install_language(os.path.join(wizard_dir, DEF_INT_LANGUAGE), sabnzbd.cfg.language(), 'wizard')
|
||||
|
||||
sabnzbd.WEB_DIR = web_dir
|
||||
sabnzbd.WEB_DIR2 = web_dir2
|
||||
sabnzbd.WEB_DIRC = web_dirc
|
||||
sabnzbd.WIZARD_DIR = wizard_dir
|
||||
|
||||
sabnzbd.WEB_COLOR = CheckColor(sabnzbd.cfg.web_color(), web_dir)
|
||||
@@ -1225,21 +1295,12 @@ def main():
|
||||
# Save the INI file
|
||||
config.save_config(force=True)
|
||||
|
||||
logging.info('Starting %s-%s', sabnzbd.MY_NAME, sabnzbd.__version__)
|
||||
try:
|
||||
sabnzbd.start()
|
||||
except:
|
||||
logging.exception("Failed to start %s-%s", sabnzbd.MY_NAME, sabnzbd.__version__)
|
||||
sabnzbd.halt()
|
||||
if sabnzbd.WIN32 and sabnzbd.cfg.win_menu() and not sabnzbd.DAEMON:
|
||||
import sabnzbd.sabtray
|
||||
sabnzbd.WINTRAY = sabnzbd.sabtray.SABTrayThread()
|
||||
|
||||
print_modules()
|
||||
|
||||
# Upload any nzb/zip/rar/nzb.gz files from file association
|
||||
if upload_nzbs:
|
||||
from sabnzbd.utils.upload import add_local
|
||||
for f in upload_nzbs:
|
||||
add_local(f)
|
||||
|
||||
cherrylogtoscreen = False
|
||||
sabnzbd.WEBLOGFILE = None
|
||||
|
||||
@@ -1268,23 +1329,51 @@ def main():
|
||||
logging.warning(Ta('Disabled HTTPS because of missing CERT and KEY files'))
|
||||
enable_https = False
|
||||
|
||||
if enable_https:
|
||||
if https_port:
|
||||
# Prepare an extra server for the HTTP port
|
||||
http_server = _cpwsgi_server.CPWSGIServer()
|
||||
http_server.bind_addr = (cherryhost, cherryport)
|
||||
#secure_server.ssl_certificate = https_cert
|
||||
#secure_server.ssl_private_key = https_key
|
||||
adapter = _cpserver.ServerAdapter(cherrypy.engine, http_server, http_server.bind_addr)
|
||||
adapter.subscribe()
|
||||
cherryport = https_port
|
||||
cherrypy.config.update({'server.ssl_certificate' : https_cert,
|
||||
'server.ssl_private_key' : https_key })
|
||||
# Determine if this system has multiple definitions for 'localhost'
|
||||
hosts = all_localhosts()
|
||||
multilocal = len(hosts) > 1 and cherryhost in ('localhost', '0.0.0.0')
|
||||
|
||||
# For 0.0.0.0 CherryPy will always pick IPv4, so make sure the secondary localhost is IPv6
|
||||
if multilocal and cherryhost == '0.0.0.0' and hosts[1] == '127.0.0.1':
|
||||
hosts[1] = '::1'
|
||||
|
||||
# The Windows binary requires numeric localhost as primary address
|
||||
if multilocal and cherryhost == 'localhost' and hosts[1] == '127.0.0.1':
|
||||
cherryhost = '::1'
|
||||
|
||||
if enable_https:
|
||||
if https_port:
|
||||
# Extra HTTP port for primary localhost
|
||||
attach_server(cherryhost, cherryport)
|
||||
if multilocal:
|
||||
# Extra HTTP port for secondary localhost
|
||||
attach_server(hosts[1], cherryport)
|
||||
# Extra HTTPS port for secondary localhost
|
||||
attach_server(hosts[1], https_port, https_cert, https_key)
|
||||
cherryport = https_port
|
||||
elif multilocal:
|
||||
# Extra HTTPS port for secondary localhost
|
||||
attach_server(hosts[1], cherryport, https_cert, https_key)
|
||||
|
||||
cherrypy.config.update({'server.ssl_certificate' : https_cert,
|
||||
'server.ssl_private_key' : https_key })
|
||||
elif multilocal:
|
||||
# Extra HTTP port for secondary localhost
|
||||
attach_server(hosts[1], cherryport)
|
||||
|
||||
|
||||
if no_login:
|
||||
sabnzbd.cfg.username.set('')
|
||||
sabnzbd.cfg.password.set('')
|
||||
|
||||
# Fix leakage in memory-based CherryPy session support by using file-based.
|
||||
# However, we don't really need session support.
|
||||
if force_sessions:
|
||||
sessions = sabnzbd.misc.create_real_path('sessions', sabnzbd.cfg.admin_dir.get_path(), 'sessions')[1]
|
||||
sabnzbd.misc.remove_all(sessions, 'session-*.lock', keep_folder=True)
|
||||
else:
|
||||
sessions = None
|
||||
|
||||
cherrypy.config.update({'server.environment': 'production',
|
||||
'server.socket_host': cherryhost,
|
||||
'server.socket_port': cherryport,
|
||||
@@ -1294,14 +1383,21 @@ def main():
|
||||
'engine.reexec_retry' : 100,
|
||||
'tools.encode.on' : True,
|
||||
'tools.gzip.on' : True,
|
||||
'tools.sessions.on' : True,
|
||||
'tools.gzip.mime_types' : ['text/html', 'text/plain', 'text/javascript', 'text/css', 'application/x-javascript'],
|
||||
'tools.sessions.on' : bool(sessions),
|
||||
'tools.sessions.storage_type' : 'file',
|
||||
'tools.sessions.storage_path' : sessions,
|
||||
'tools.sessions.timeout' : 60,
|
||||
'request.show_tracebacks': True,
|
||||
'checker.check_localhost' : bool(consoleLogging),
|
||||
'error_page.401': sabnzbd.misc.error_page_401
|
||||
'error_page.401': sabnzbd.panic.error_page_401,
|
||||
'error_page.404': sabnzbd.panic.error_page_404
|
||||
})
|
||||
|
||||
|
||||
static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir, 'static')}
|
||||
if web_dirc:
|
||||
staticcfg = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dirc, 'staticcfg')}
|
||||
wizard_static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(wizard_dir, 'static')}
|
||||
|
||||
appconfig = {'/sabnzbd/api' : {'tools.basic_auth.on' : False},
|
||||
@@ -1316,6 +1412,9 @@ def main():
|
||||
'/sabnzbd/wizard/static': wizard_static,
|
||||
'/wizard/static': wizard_static
|
||||
}
|
||||
if web_dirc:
|
||||
appconfig['/sabnzbd/staticcfg'] = staticcfg
|
||||
appconfig['/staticcfg'] = staticcfg
|
||||
|
||||
if web_dir2:
|
||||
static2 = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir2, 'static')}
|
||||
@@ -1326,8 +1425,11 @@ def main():
|
||||
appconfig['/m/static'] = static2
|
||||
appconfig['/sabnzbd/m/wizard/static'] = wizard_static
|
||||
appconfig['/m/wizard/static'] = wizard_static
|
||||
if web_dirc:
|
||||
appconfig['/sabnzbd/m/staticcfg'] = staticcfg
|
||||
appconfig['/m/staticcfg'] = staticcfg
|
||||
|
||||
login_page = sabnzbd.interface.MainPage(web_dir, '/', web_dir2, '/m/', first=2)
|
||||
login_page = sabnzbd.interface.MainPage(web_dir, '/', web_dir2, '/m/', web_dirc, first=2)
|
||||
cherrypy.tree.mount(login_page, '/', config=appconfig)
|
||||
|
||||
# Set authentication for CherryPy
|
||||
@@ -1362,20 +1464,22 @@ def main():
|
||||
|
||||
if enable_https:
|
||||
browser_url = "https://%s:%s/sabnzbd" % (browserhost, cherryport)
|
||||
cherrypy.wsgiserver.REDIRECT_URL = browser_url
|
||||
else:
|
||||
browser_url = "http://%s:%s/sabnzbd" % (browserhost, cherryport)
|
||||
cherrypy.wsgiserver.REDIRECT_URL = browser_url
|
||||
|
||||
sabnzbd.BROWSER_URL = browser_url
|
||||
if not autorestarted:
|
||||
launch_a_browser(browser_url)
|
||||
notify("SAB_Launched", None)
|
||||
osx.sendGrowlMsg('SABnzbd %s' % (sabnzbd.__version__),"http://%s:%s/sabnzbd" % (browserhost, cherryport),osx.NOTIFICATION['startup'])
|
||||
if sabnzbd.FOUNDATION:
|
||||
import sabnzbd.osxmenu
|
||||
sabnzbd.osxmenu.notify("SAB_Launched", None)
|
||||
growler.send_notification('SABnzbd %s' % (sabnzbd.__version__),
|
||||
"http://%s:%s/sabnzbd" % (browserhost, cherryport), 'startup')
|
||||
# Now's the time to check for a new version
|
||||
check_latest_version()
|
||||
autorestarted = False
|
||||
|
||||
|
||||
mail = None
|
||||
if sabnzbd.WIN32:
|
||||
if enable_https:
|
||||
@@ -1399,6 +1503,20 @@ def main():
|
||||
if pid_path:
|
||||
sabnzbd.pid_file(pid_path, cherryport)
|
||||
|
||||
# Start all SABnzbd tasks
|
||||
logging.info('Starting %s-%s', sabnzbd.MY_NAME, sabnzbd.__version__)
|
||||
try:
|
||||
sabnzbd.start()
|
||||
except:
|
||||
logging.exception("Failed to start %s-%s", sabnzbd.MY_NAME, sabnzbd.__version__)
|
||||
sabnzbd.halt()
|
||||
|
||||
# Upload any nzb/zip/rar/nzb.gz files from file association
|
||||
if upload_nzbs:
|
||||
from sabnzbd.utils.upload import add_local
|
||||
for f in upload_nzbs:
|
||||
add_local(f)
|
||||
|
||||
# Have to keep this running, otherwise logging will terminate
|
||||
timer = 0
|
||||
while not sabnzbd.SABSTOP:
|
||||
@@ -1418,7 +1536,7 @@ def main():
|
||||
# Check for loglevel changes
|
||||
if LOG_FLAG:
|
||||
LOG_FLAG = False
|
||||
level = LOGLEVELS[sabnzbd.cfg.log_level()]
|
||||
level = LOGLEVELS[sabnzbd.cfg.log_level()+1]
|
||||
logger.setLevel(level)
|
||||
if consoleLogging:
|
||||
console.setLevel(level)
|
||||
@@ -1484,11 +1602,14 @@ def main():
|
||||
|
||||
config.save_config()
|
||||
|
||||
if sabnzbd.WINTRAY:
|
||||
sabnzbd.WINTRAY.terminate = True
|
||||
|
||||
if sabnzbd.WIN_SERVICE and mail:
|
||||
mail.send('stop')
|
||||
if sabnzbd.WIN32:
|
||||
del_connection_info()
|
||||
notify("SAB_Shutdown", None)
|
||||
if sabnzbd.FOUNDATION: sabnzbd.osxmenu.notify("SAB_Shutdown", None)
|
||||
logging.info('Leaving SABnzbd')
|
||||
sys.stderr.flush()
|
||||
sys.stdout.flush()
|
||||
@@ -1496,8 +1617,7 @@ def main():
|
||||
if getattr(sys, 'frozen', None) == 'macosx_app':
|
||||
AppHelper.stopEventLoop()
|
||||
else:
|
||||
if sabnzbd.DARWIN:
|
||||
osx.sendGrowlMsg('SABnzbd',T('SABnzbd shutdown finished'),osx.NOTIFICATION['startup'])
|
||||
growler.send_notification('SABnzbd',T('SABnzbd shutdown finished'), 'startup')
|
||||
os._exit(0)
|
||||
|
||||
|
||||
@@ -1620,6 +1740,15 @@ def HandleCommandLine(allow_service=True):
|
||||
#
|
||||
if __name__ == '__main__':
|
||||
|
||||
args = []
|
||||
for txt in sys.argv:
|
||||
if ' ' in txt:
|
||||
txt = '"%s"' % latin1(txt)
|
||||
else:
|
||||
txt = latin1(txt)
|
||||
args.append(txt)
|
||||
sabnzbd.CMDLINE = ' '.join(args)
|
||||
|
||||
if sabnzbd.WIN32:
|
||||
if not HandleCommandLine(allow_service=not hasattr(sys, "frozen")):
|
||||
main()
|
||||
|
||||
22
email/badfetch-en.tmpl
Normal file
@@ -0,0 +1,22 @@
|
||||
##
|
||||
## Bad URL Fetch Email template for SABnzbd
|
||||
## This a Cheetah template
|
||||
## Documentation: http://sabnzbd.wikidot.com/email-templates
|
||||
##
|
||||
## Newlines and whitespace are significant!
|
||||
##
|
||||
## These are the email headers
|
||||
To: $to
|
||||
From: $from
|
||||
Date: $date
|
||||
Subject: SABnzbd failed to fetch an NZB
|
||||
X-priority: 5
|
||||
X-MS-priority: 5
|
||||
## After this comes the body, the empty line is required!
|
||||
|
||||
Hi,
|
||||
|
||||
SABnzbd has failed to retrieve the NZB from $url.
|
||||
The error message was: $msg
|
||||
|
||||
Bye
|
||||
441
gntp/__init__.py
Normal file
@@ -0,0 +1,441 @@
|
||||
import re
|
||||
import hashlib
|
||||
import time
|
||||
import platform
|
||||
|
||||
__version__ = '0.4'
|
||||
|
||||
class BaseError(Exception):
|
||||
pass
|
||||
|
||||
class ParseError(BaseError):
|
||||
def gntp_error(self):
|
||||
error = GNTPError(errorcode=500,errordesc='Error parsing the message')
|
||||
return error.encode()
|
||||
|
||||
class AuthError(BaseError):
|
||||
def gntp_error(self):
|
||||
error = GNTPError(errorcode=400,errordesc='Error with authorization')
|
||||
return error.encode()
|
||||
|
||||
class UnsupportedError(BaseError):
|
||||
def gntp_error(self):
|
||||
error = GNTPError(errorcode=500,errordesc='Currently unsupported by gntp.py')
|
||||
return error.encode()
|
||||
|
||||
class _GNTPBase(object):
|
||||
info = {
|
||||
'version':'1.0',
|
||||
'messagetype':None,
|
||||
'encryptionAlgorithmID':None
|
||||
}
|
||||
_requiredHeaders = []
|
||||
headers = {}
|
||||
resources = {}
|
||||
def add_origin_info(self):
|
||||
self.add_header('Origin-Machine-Name',platform.node())
|
||||
self.add_header('Origin-Software-Name','gntp.py')
|
||||
self.add_header('Origin-Software-Version',__version__)
|
||||
self.add_header('Origin-Platform-Name',platform.system())
|
||||
self.add_header('Origin-Platform-Version',platform.platform())
|
||||
def __str__(self):
|
||||
return self.encode()
|
||||
def _parse_info(self,data):
|
||||
'''
|
||||
Parse the first line of a GNTP message to get security and other info values
|
||||
@param data: GNTP Message
|
||||
@return: GNTP Message information in a dictionary
|
||||
'''
|
||||
#GNTP/<version> <messagetype> <encryptionAlgorithmID>[:<ivValue>][ <keyHashAlgorithmID>:<keyHash>.<salt>]
|
||||
match = re.match('GNTP/(?P<version>\d+\.\d+) (?P<messagetype>REGISTER|NOTIFY|SUBSCRIBE|\-OK|\-ERROR)'+
|
||||
' (?P<encryptionAlgorithmID>[A-Z0-9]+(:(?P<ivValue>[A-F0-9]+))?) ?'+
|
||||
'((?P<keyHashAlgorithmID>[A-Z0-9]+):(?P<keyHash>[A-F0-9]+).(?P<salt>[A-F0-9]+))?\r\n', data,re.IGNORECASE)
|
||||
|
||||
if not match:
|
||||
raise ParseError('ERROR_PARSING_INFO_LINE')
|
||||
|
||||
info = match.groupdict()
|
||||
if info['encryptionAlgorithmID'] == 'NONE':
|
||||
info['encryptionAlgorithmID'] = None
|
||||
|
||||
return info
|
||||
def set_password(self,password,encryptAlgo='MD5'):
|
||||
'''
|
||||
Set a password for a GNTP Message
|
||||
@param password: Null to clear password
|
||||
@param encryptAlgo: Supports MD5,SHA1,SHA256,SHA512
|
||||
@todo: Support other hash functions
|
||||
'''
|
||||
hash = {
|
||||
'MD5': hashlib.md5,
|
||||
'SHA1': hashlib.sha1,
|
||||
'SHA256': hashlib.sha256,
|
||||
'SHA512': hashlib.sha512,
|
||||
}
|
||||
|
||||
self.password = password
|
||||
self.encryptAlgo = encryptAlgo.upper()
|
||||
if not password:
|
||||
self.info['encryptionAlgorithmID'] = None
|
||||
self.info['keyHashAlgorithm'] = None;
|
||||
return
|
||||
if not self.encryptAlgo in hash.keys():
|
||||
raise UnsupportedError('INVALID HASH "%s"'%self.encryptAlgo)
|
||||
|
||||
hashfunction = hash.get(self.encryptAlgo)
|
||||
|
||||
password = password.encode('utf8')
|
||||
seed = time.ctime()
|
||||
salt = hashfunction(seed).hexdigest()
|
||||
saltHash = hashfunction(seed).digest()
|
||||
keyBasis = password+saltHash
|
||||
key = hashfunction(keyBasis).digest()
|
||||
keyHash = hashfunction(key).hexdigest()
|
||||
|
||||
self.info['keyHashAlgorithmID'] = self.encryptAlgo
|
||||
self.info['keyHash'] = keyHash.upper()
|
||||
self.info['salt'] = salt.upper()
|
||||
def _decode_hex(self,value):
|
||||
'''
|
||||
Helper function to decode hex string to `proper` hex string
|
||||
@param value: Value to decode
|
||||
@return: Hex string
|
||||
'''
|
||||
result = ''
|
||||
for i in range(0,len(value),2):
|
||||
tmp = int(value[i:i+2],16)
|
||||
result += chr(tmp)
|
||||
return result
|
||||
def _decode_binary(self,rawIdentifier,identifier):
|
||||
rawIdentifier += '\r\n\r\n'
|
||||
dataLength = int(identifier['Length'])
|
||||
pointerStart = self.raw.find(rawIdentifier)+len(rawIdentifier)
|
||||
pointerEnd = pointerStart + dataLength
|
||||
data = self.raw[pointerStart:pointerEnd]
|
||||
if not len(data) == dataLength:
|
||||
raise ParseError('INVALID_DATA_LENGTH Expected: %s Recieved %s'%(dataLength,len(data)))
|
||||
return data
|
||||
def _validate_password(self,password):
|
||||
'''
|
||||
Validate GNTP Message against stored password
|
||||
'''
|
||||
self.password = password
|
||||
if password == None: raise Exception()
|
||||
keyHash = self.info.get('keyHash',None)
|
||||
if keyHash is None and self.password is None:
|
||||
return True
|
||||
if keyHash is None:
|
||||
raise AuthError('Invalid keyHash')
|
||||
if self.password is None:
|
||||
raise AuthError('Missing password')
|
||||
|
||||
password = self.password.encode('utf8')
|
||||
saltHash = self._decode_hex(self.info['salt'])
|
||||
|
||||
keyBasis = password+saltHash
|
||||
key = hashlib.md5(keyBasis).digest()
|
||||
keyHash = hashlib.md5(key).hexdigest()
|
||||
|
||||
if not keyHash.upper() == self.info['keyHash'].upper():
|
||||
raise AuthError('Invalid Hash')
|
||||
return True
|
||||
def validate(self):
|
||||
'''
|
||||
Verify required headers
|
||||
'''
|
||||
for header in self._requiredHeaders:
|
||||
if not self.headers.get(header,False):
|
||||
raise ParseError('Missing Notification Header: '+header)
|
||||
|
||||
def _format_info(self):
|
||||
'''
|
||||
Generate info line for GNTP Message
|
||||
@return: Info line string
|
||||
'''
|
||||
info = u'GNTP/%s %s'%(
|
||||
self.info.get('version'),
|
||||
self.info.get('messagetype'),
|
||||
)
|
||||
if self.info.get('encryptionAlgorithmID',None):
|
||||
info += ' %s:%s'%(
|
||||
self.info.get('encryptionAlgorithmID'),
|
||||
self.info.get('ivValue'),
|
||||
)
|
||||
else:
|
||||
info+=' NONE'
|
||||
|
||||
if self.info.get('keyHashAlgorithmID',None):
|
||||
info += ' %s:%s.%s'%(
|
||||
self.info.get('keyHashAlgorithmID'),
|
||||
self.info.get('keyHash'),
|
||||
self.info.get('salt')
|
||||
)
|
||||
|
||||
return info
|
||||
def _parse_dict(self,data):
|
||||
'''
|
||||
Helper function to parse blocks of GNTP headers into a dictionary
|
||||
@param data:
|
||||
@return: Dictionary of headers
|
||||
'''
|
||||
dict = {}
|
||||
for line in data.split('\r\n'):
|
||||
match = re.match('([\w-]+):(.+)', line)
|
||||
if not match: continue
|
||||
|
||||
key = match.group(1).strip()
|
||||
val = match.group(2).strip()
|
||||
dict[key] = val
|
||||
return dict
|
||||
def add_header(self,key,value):
|
||||
if isinstance(value, unicode):
|
||||
self.headers[key] = value
|
||||
else:
|
||||
self.headers[key] = unicode('%s'%value,'utf8','replace')
|
||||
def decode(self,data,password=None):
|
||||
'''
|
||||
Decode GNTP Message
|
||||
@param data:
|
||||
'''
|
||||
self.password = password
|
||||
self.raw = data
|
||||
parts = self.raw.split('\r\n\r\n')
|
||||
self.info = self._parse_info(data)
|
||||
self.headers = self._parse_dict(parts[0])
|
||||
def encode(self):
|
||||
'''
|
||||
Encode a GNTP Message
|
||||
@return: GNTP Message ready to be sent
|
||||
'''
|
||||
self.validate()
|
||||
EOL = u'\r\n'
|
||||
|
||||
message = self._format_info() + EOL
|
||||
#Headers
|
||||
for k,v in self.headers.iteritems():
|
||||
message += u'%s: %s%s'%(k,v,EOL)
|
||||
|
||||
message += EOL
|
||||
return message
|
||||
class GNTPRegister(_GNTPBase):
|
||||
"""Represents a GNTP Registration Command"""
|
||||
notifications = []
|
||||
_requiredHeaders = [
|
||||
'Application-Name',
|
||||
'Notifications-Count'
|
||||
]
|
||||
_requiredNotificationHeaders = ['Notification-Name']
|
||||
def __init__(self,data=None,password=None):
|
||||
'''
|
||||
@param data: (Optional) See decode()
|
||||
@param password: (Optional) Password to use while encoding/decoding messages
|
||||
'''
|
||||
self.info['messagetype'] = 'REGISTER'
|
||||
|
||||
if data:
|
||||
self.decode(data,password)
|
||||
else:
|
||||
self.set_password(password)
|
||||
self.add_header('Application-Name', 'pygntp')
|
||||
self.add_header('Notifications-Count', 0)
|
||||
self.add_origin_info()
|
||||
def validate(self):
|
||||
'''
|
||||
Validate required headers and validate notification headers
|
||||
'''
|
||||
for header in self._requiredHeaders:
|
||||
if not self.headers.get(header,False):
|
||||
raise ParseError('Missing Registration Header: '+header)
|
||||
for notice in self.notifications:
|
||||
for header in self._requiredNotificationHeaders:
|
||||
if not notice.get(header,False):
|
||||
raise ParseError('Missing Notification Header: '+header)
|
||||
def decode(self,data,password):
|
||||
'''
|
||||
Decode existing GNTP Registration message
|
||||
@param data: Message to decode.
|
||||
'''
|
||||
self.raw = data
|
||||
parts = self.raw.split('\r\n\r\n')
|
||||
self.info = self._parse_info(data)
|
||||
self._validate_password(password)
|
||||
self.headers = self._parse_dict(parts[0])
|
||||
|
||||
for i,part in enumerate(parts):
|
||||
if i==0: continue #Skip Header
|
||||
if part.strip()=='': continue
|
||||
notice = self._parse_dict(part)
|
||||
if notice.get('Notification-Name',False):
|
||||
self.notifications.append(notice)
|
||||
elif notice.get('Identifier',False):
|
||||
notice['Data'] = self._decode_binary(part,notice)
|
||||
#open('register.png','wblol').write(notice['Data'])
|
||||
self.resources[ notice.get('Identifier') ] = notice
|
||||
|
||||
def add_notification(self,name,enabled=True):
|
||||
'''
|
||||
Add new Notification to Registration message
|
||||
@param name: Notification Name
|
||||
@param enabled: Default Notification to Enabled
|
||||
'''
|
||||
notice = {}
|
||||
notice['Notification-Name'] = u'%s'%name
|
||||
notice['Notification-Enabled'] = u'%s'%enabled
|
||||
|
||||
self.notifications.append(notice)
|
||||
self.add_header('Notifications-Count', len(self.notifications))
|
||||
def encode(self):
|
||||
'''
|
||||
Encode a GNTP Registration Message
|
||||
@return: GNTP Registration Message ready to be sent
|
||||
'''
|
||||
self.validate()
|
||||
EOL = u'\r\n'
|
||||
|
||||
message = self._format_info() + EOL
|
||||
#Headers
|
||||
for k,v in self.headers.iteritems():
|
||||
message += u'%s: %s%s'%(k,v,EOL)
|
||||
|
||||
#Notifications
|
||||
if len(self.notifications)>0:
|
||||
for notice in self.notifications:
|
||||
message += EOL
|
||||
for k,v in notice.iteritems():
|
||||
message += u'%s: %s%s'%(k,v,EOL)
|
||||
|
||||
message += EOL
|
||||
return message
|
||||
|
||||
class GNTPNotice(_GNTPBase):
|
||||
"""Represents a GNTP Notification Command"""
|
||||
_requiredHeaders = [
|
||||
'Application-Name',
|
||||
'Notification-Name',
|
||||
'Notification-Title'
|
||||
]
|
||||
def __init__(self,data=None,app=None,name=None,title=None,password=None):
|
||||
'''
|
||||
|
||||
@param data: (Optional) See decode()
|
||||
@param app: (Optional) Set Application-Name
|
||||
@param name: (Optional) Set Notification-Name
|
||||
@param title: (Optional) Set Notification Title
|
||||
@param password: (Optional) Password to use while encoding/decoding messages
|
||||
'''
|
||||
self.info['messagetype'] = 'NOTIFY'
|
||||
|
||||
if data:
|
||||
self.decode(data,password)
|
||||
else:
|
||||
self.set_password(password)
|
||||
if app:
|
||||
self.add_header('Application-Name', app)
|
||||
if name:
|
||||
self.add_header('Notification-Name', name)
|
||||
if title:
|
||||
self.add_header('Notification-Title', title)
|
||||
self.add_origin_info()
|
||||
def decode(self,data,password):
|
||||
'''
|
||||
Decode existing GNTP Notification message
|
||||
@param data: Message to decode.
|
||||
'''
|
||||
self.raw = data
|
||||
parts = self.raw.split('\r\n\r\n')
|
||||
self.info = self._parse_info(data)
|
||||
self._validate_password(password)
|
||||
self.headers = self._parse_dict(parts[0])
|
||||
|
||||
for i,part in enumerate(parts):
|
||||
if i==0: continue #Skip Header
|
||||
if part.strip()=='': continue
|
||||
notice = self._parse_dict(part)
|
||||
if notice.get('Identifier',False):
|
||||
notice['Data'] = self._decode_binary(part,notice)
|
||||
#open('notice.png','wblol').write(notice['Data'])
|
||||
self.resources[ notice.get('Identifier') ] = notice
|
||||
def encode(self):
|
||||
'''
|
||||
Encode a GNTP Notification Message
|
||||
@return: GNTP Notification Message ready to be sent
|
||||
'''
|
||||
self.validate()
|
||||
EOL = u'\r\n'
|
||||
|
||||
message = self._format_info() + EOL
|
||||
#Headers
|
||||
for k,v in self.headers.iteritems():
|
||||
message += u'%s: %s%s'%(k,v,EOL)
|
||||
|
||||
message += EOL
|
||||
return message
|
||||
|
||||
class GNTPSubscribe(_GNTPBase):
|
||||
"""Represents a GNTP Subscribe Command"""
|
||||
def __init__(self,data=None,password=None):
|
||||
self.info['messagetype'] = 'SUBSCRIBE'
|
||||
self._requiredHeaders = [
|
||||
'Subscriber-ID',
|
||||
'Subscriber-Name',
|
||||
]
|
||||
if data:
|
||||
self.decode(data,password)
|
||||
else:
|
||||
self.set_password(password)
|
||||
self.add_origin_info()
|
||||
|
||||
class GNTPOK(_GNTPBase):
|
||||
"""Represents a GNTP OK Response"""
|
||||
_requiredHeaders = ['Response-Action']
|
||||
def __init__(self,data=None,action=None):
|
||||
'''
|
||||
@param data: (Optional) See _GNTPResponse.decode()
|
||||
@param action: (Optional) Set type of action the OK Response is for
|
||||
'''
|
||||
self.info['messagetype'] = '-OK'
|
||||
if data:
|
||||
self.decode(data)
|
||||
if action:
|
||||
self.add_header('Response-Action', action)
|
||||
self.add_origin_info()
|
||||
|
||||
class GNTPError(_GNTPBase):
|
||||
_requiredHeaders = ['Error-Code','Error-Description']
|
||||
def __init__(self,data=None,errorcode=None,errordesc=None):
|
||||
'''
|
||||
@param data: (Optional) See _GNTPResponse.decode()
|
||||
@param errorcode: (Optional) Error code
|
||||
@param errordesc: (Optional) Error Description
|
||||
'''
|
||||
self.info['messagetype'] = '-ERROR'
|
||||
if data:
|
||||
self.decode(data)
|
||||
if errorcode:
|
||||
self.add_header('Error-Code', errorcode)
|
||||
self.add_header('Error-Description', errordesc)
|
||||
self.add_origin_info()
|
||||
def error(self):
|
||||
return self.headers['Error-Code'],self.headers['Error-Description']
|
||||
|
||||
def parse_gntp(data,password=None):
|
||||
'''
|
||||
Attempt to parse a message as a GNTP message
|
||||
@param data: Message to be parsed
|
||||
@param password: Optional password to be used to verify the message
|
||||
'''
|
||||
match = re.match('GNTP/(?P<version>\d+\.\d+) (?P<messagetype>REGISTER|NOTIFY|SUBSCRIBE|\-OK|\-ERROR)',data,re.IGNORECASE)
|
||||
if not match:
|
||||
raise ParseError('INVALID_GNTP_INFO')
|
||||
info = match.groupdict()
|
||||
if info['messagetype'] == 'REGISTER':
|
||||
return GNTPRegister(data,password=password)
|
||||
elif info['messagetype'] == 'NOTIFY':
|
||||
return GNTPNotice(data,password=password)
|
||||
elif info['messagetype'] == 'SUBSCRIBE':
|
||||
return GNTPSubscribe(data,password=password)
|
||||
elif info['messagetype'] == '-OK':
|
||||
return GNTPOK(data)
|
||||
elif info['messagetype'] == '-ERROR':
|
||||
return GNTPError(data)
|
||||
raise ParseError('INVALID_GNTP_MESSAGE')
|
||||
172
gntp/notifier.py
Normal file
@@ -0,0 +1,172 @@
|
||||
"""
|
||||
The gntp.notifier module is provided as a simple way to send notifications
|
||||
using GNTP
|
||||
|
||||
.. note::
|
||||
This class is intended to mostly mirror the older Python bindings such
|
||||
that you should be able to replace instances of the old bindings with
|
||||
this class.
|
||||
`Original Python bindings <http://code.google.com/p/growl/source/browse/Bindings/python/Growl.py>`_
|
||||
|
||||
"""
|
||||
import gntp
|
||||
import socket
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class GrowlNotifier(object):
|
||||
"""Helper class to simplfy sending Growl messages
|
||||
|
||||
:param string applicationName: Sending application name
|
||||
:param list notification: List of valid notifications
|
||||
:param list defaultNotifications: List of notifications that should be enabled
|
||||
by default
|
||||
:param string applicationIcon: Icon URL
|
||||
:param string hostname: Remote host
|
||||
:param integer port: Remote port
|
||||
"""
|
||||
applicationName = 'Python GNTP'
|
||||
notifications = []
|
||||
defaultNotifications = []
|
||||
applicationIcon = None
|
||||
passwordHash = 'MD5'
|
||||
|
||||
#GNTP Specific
|
||||
password = None
|
||||
hostname = 'localhost'
|
||||
port = 23053
|
||||
|
||||
def __init__(self, applicationName=None, notifications=None, defaultNotifications=None, applicationIcon=None, hostname=None, password=None, port=None):
|
||||
if applicationName:
|
||||
self.applicationName = applicationName
|
||||
assert self.applicationName, 'An application name is required.'
|
||||
|
||||
if notifications:
|
||||
self.notifications = list(notifications)
|
||||
assert self.notifications, 'A sequence of one or more notification names is required.'
|
||||
|
||||
if defaultNotifications is not None:
|
||||
self.defaultNotifications = list(defaultNotifications)
|
||||
elif not self.defaultNotifications:
|
||||
self.defaultNotifications = list(self.notifications)
|
||||
|
||||
if applicationIcon is not None:
|
||||
self.applicationIcon = self._checkIcon(applicationIcon)
|
||||
elif self.applicationIcon is not None:
|
||||
self.applicationIcon = self._checkIcon(self.applicationIcon)
|
||||
|
||||
#GNTP Specific
|
||||
if password:
|
||||
self.password = password
|
||||
|
||||
if hostname:
|
||||
self.hostname = hostname
|
||||
assert self.hostname, 'Requires valid hostname'
|
||||
|
||||
if port:
|
||||
self.port = int(port)
|
||||
assert isinstance(self.port, int), 'Requires valid port'
|
||||
|
||||
def _checkIcon(self, data):
|
||||
'''
|
||||
Check the icon to see if it's valid
|
||||
@param data:
|
||||
@todo Consider checking for a valid URL
|
||||
'''
|
||||
return data
|
||||
|
||||
def register(self):
|
||||
"""Send GNTP Registration
|
||||
|
||||
.. warning::
|
||||
Before sending notifications to Growl, you need to have
|
||||
sent a registration message at least once
|
||||
"""
|
||||
logger.info('Sending registration to %s:%s', self.hostname, self.port)
|
||||
register = gntp.GNTPRegister()
|
||||
register.add_header('Application-Name', self.applicationName)
|
||||
for notification in self.notifications:
|
||||
enabled = notification in self.defaultNotifications
|
||||
register.add_notification(notification, enabled)
|
||||
if self.applicationIcon:
|
||||
register.add_header('Application-Icon', self.applicationIcon)
|
||||
if self.password:
|
||||
register.set_password(self.password, self.passwordHash)
|
||||
response = self._send('register', register.encode())
|
||||
if isinstance(response, gntp.GNTPOK):
|
||||
return True
|
||||
logger.error('Invalid response %s', response.error())
|
||||
return response.error()
|
||||
|
||||
def notify(self, noteType, title, description, icon=None, sticky=False, priority=None):
|
||||
"""Send a GNTP notifications
|
||||
|
||||
.. warning::
|
||||
Must have registered with growl beforehand or messages will be ignored
|
||||
|
||||
:param string noteType: One of the notification names registered earlier
|
||||
:param string title: Notification title (usually displayed on the notification)
|
||||
:param string description: The main content of the notification
|
||||
:param string icon: Icon URL path
|
||||
:param boolean sticky: Sticky notification
|
||||
:param integer priority: Message priority level from -2 to 2
|
||||
"""
|
||||
logger.info('Sending notification [%s] to %s:%s', noteType, self.hostname, self.port)
|
||||
assert noteType in self.notifications
|
||||
notice = gntp.GNTPNotice()
|
||||
notice.add_header('Application-Name', self.applicationName)
|
||||
notice.add_header('Notification-Name', noteType)
|
||||
notice.add_header('Notification-Title', title)
|
||||
if self.password:
|
||||
notice.set_password(self.password, self.passwordHash)
|
||||
if sticky:
|
||||
notice.add_header('Notification-Sticky', sticky)
|
||||
if priority:
|
||||
notice.add_header('Notification-Priority', priority)
|
||||
if icon:
|
||||
notice.add_header('Notification-Icon', self._checkIcon(icon))
|
||||
if description:
|
||||
notice.add_header('Notification-Text', description)
|
||||
response = self._send('notify', notice.encode())
|
||||
if isinstance(response, gntp.GNTPOK):
|
||||
return True
|
||||
logger.error('Invalid response %s', response.error())
|
||||
return response.error()
|
||||
|
||||
def subscribe(self, id, name, port):
|
||||
"""Send a Subscribe request to a remote machine"""
|
||||
sub = gntp.GNTPSubscribe()
|
||||
sub.add_header('Subscriber-ID', id)
|
||||
sub.add_header('Subscriber-Name', name)
|
||||
sub.add_header('Subscriber-Port', port)
|
||||
if self.password:
|
||||
sub.set_password(self.password, self.passwordHash)
|
||||
response = self._send('subscribe', sub.encode())
|
||||
if isinstance(response, gntp.GNTPOK):
|
||||
return True
|
||||
logger.error('Invalid response %s', response.error())
|
||||
return response.error()
|
||||
|
||||
def _send(self, type, data):
|
||||
"""Send the GNTP Packet"""
|
||||
#logger.debug('To : %s:%s <%s>\n%s', self.hostname, self.port, type, data)
|
||||
#Less verbose please
|
||||
logger.debug('To : %s:%s <%s>', self.hostname, self.port, type)
|
||||
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.connect((self.hostname, self.port))
|
||||
s.send(data.encode('utf8', 'replace'))
|
||||
try:
|
||||
s.settimeout(10)
|
||||
except:
|
||||
pass
|
||||
response = gntp.parse_gntp(s.recv(1024))
|
||||
s.close()
|
||||
|
||||
#logger.debug('From : %s:%s <%s>\n%s', self.hostname, self.port, response.__class__, response)
|
||||
#Less verbose please
|
||||
logger.debug('From : %s:%s <%s>', self.hostname, self.port, response.__class__)
|
||||
|
||||
return response
|
||||
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 281 KiB |
BIN
icons/sabnzbd16.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
icons/sabnzbd16green.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
icons/sabnzbd16paused.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath=".."#-->
|
||||
<!--#set global $helpsubject="Configure"#-->
|
||||
<!--#set global $helpsubject="Configure-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu=""#-->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="configure-categories"#-->
|
||||
<!--#set global $helpsubject="configure-categories-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu="categories"#-->
|
||||
@@ -72,6 +72,7 @@ $T('explain-relFolder') $defdir<br/>
|
||||
<option value="1" <!--#if $slot.priority == 1 then 'selected' else ''#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $slot.priority == 0 then 'selected' else ''#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $slot.priority == -1 then 'selected' else ''#-->>$T('pr-low')</option>
|
||||
<option value="-2" <!--#if $slot.priority == -2 then 'selected' else ''#-->>$T('pr-paused')</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="Configure+Directories+V2"#-->
|
||||
<!--#set global $helpsubject="Configure+Folders-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu="directories"#-->
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="Configure+General+V2"#-->
|
||||
<!--#set global $helpsubject="Configure+General-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu="general"#-->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="Configure+Index+Sites"#-->
|
||||
<!--#set global $helpsubject="Configure+Indexers-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu="newzbin"#-->
|
||||
@@ -49,7 +49,7 @@ $T('explain-bookmark_rate')<br>
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('processedBM')</legend>
|
||||
<!--#for $msgid in $bookmarks_list#-->
|
||||
<a href="https://www.newzbin.com/browse/post/$msgid/" target="_blank">$msgid</a>
|
||||
<a href="https://$newzbin_url/browse/post/$msgid/" target="_blank">$msgid</a>
|
||||
<!--#end for#-->
|
||||
</fieldset>
|
||||
<!--#end if#-->
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="Configure+Email"#-->
|
||||
<!--#set global $helpsubject="Configure+Notifications-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl" #-->
|
||||
|
||||
<!--#set global $submenu="email"#-->
|
||||
@@ -52,11 +52,39 @@ $T('explain-email_account')<br>
|
||||
<strong>$T('opt-email_pwd'):</strong><br>
|
||||
$T('explain-email_pwd')<br>
|
||||
<input type="password" size="35" name="email_pwd" value="$email_pwd">
|
||||
<input type="hidden" name="session" value="$session">
|
||||
</fieldset>
|
||||
|
||||
<!--#if $have_growl or $have_ntfosd#-->
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('growlSettings')</legend>
|
||||
<!--#if $have_ntfosd#-->
|
||||
<label><input type="checkbox" name="ntfosd_enable" value="1" <!--#if $ntfosd_enable != "0" then "checked=1" else ""#--> /> <strong>$T('opt-ntfosd_enable'):</strong></label><br>
|
||||
$T('explain-ntfosd_enable')
|
||||
<br/>
|
||||
<br/>
|
||||
<!--#end if#-->
|
||||
<!--#if $have_growl#-->
|
||||
<label><input type="checkbox" name="growl_enable" value="1" <!--#if $growl_enable != "0" then "checked=1" else ""#--> /> <strong>$T('opt-growl_enable'):</strong></label><br>
|
||||
$T('explain-growl_enable')
|
||||
<br/>
|
||||
<br/>
|
||||
<strong>$T('opt-growl_server'):</strong><br>
|
||||
$T('explain-growl_server')<br>
|
||||
<input type="text" size="35" name="growl_server" value="$growl_server">
|
||||
<br>
|
||||
<br>
|
||||
<strong>$T('opt-growl_password'):</strong><br>
|
||||
$T('explain-growl_password')<br>
|
||||
<input type="password" size="35" name="growl_password" value="$growl_password">
|
||||
</fieldset>
|
||||
<!--#end if#-->
|
||||
<!--#end if#-->
|
||||
|
||||
</div>
|
||||
<input type="hidden" name="session" value="$session">
|
||||
<p><input type="submit" value="$T('button-saveChanges')">
|
||||
<input type="button" onclick="if (confirm('$T('askTestEmail').replace("'","`") ')) { this.form.action='testmail?session=$session&'; this.form.submit(); return false;}" value="$T('link-testEmail')"/>
|
||||
<input type="button" onclick="this.form.action='testnotification?session=$session&'; this.form.submit(); return false;"value="$T('testNotify')"/>
|
||||
</p>
|
||||
</form>
|
||||
<!--#if $lastmail#-->
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="Configure+RSS+V2"#-->
|
||||
<!--#set global $helpsubject="Configure+RSS-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu="rss"#-->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="Configure+Scheduling+V2"#-->
|
||||
<!--#set global $helpsubject="Configure+Scheduling-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu="scheduling"#-->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="Configure+Servers+V2"#-->
|
||||
<!--#set global $helpsubject="Configure+Servers-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu="servers"#-->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="Configure+Sorting"#-->
|
||||
<!--#set global $helpsubject="Configure+Sorting-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu="sorting"#-->
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!--#set global $topmenu="config"#-->
|
||||
<!--#set global $statpath="../.."#-->
|
||||
<!--#set global $helpsubject="Configure+Switches+V3"#-->
|
||||
<!--#set global $helpsubject="Configure+Switches-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<!--#set global $submenu="switches"#-->
|
||||
@@ -14,6 +14,9 @@
|
||||
<label><input type="checkbox" name="quick_check" value="1" <!--#if $quick_check > 0 then "checked=1" else ""#--> /> <strong>$T('opt-quick_check')</strong></label><br/>
|
||||
$T('explain-quick_check')<br>
|
||||
<br/>
|
||||
<label><input type="checkbox" name="pre_check" value="1" <!--#if $pre_check > 0 then "checked=1" else ""#--> /> <strong>$T('opt-pre_check')</strong></label><br/>
|
||||
$T('explain-pre_check')<br>
|
||||
<br/>
|
||||
<label><input type="checkbox" name="enable_unrar" value="1" <!--#if $enable_unrar > 0 then "checked=1" else ""#--> /> <strong>$T('opt-enable_unrar')</strong></label><br>
|
||||
$T('explain-enable_unrar')<br>
|
||||
<br>
|
||||
@@ -97,6 +100,13 @@
|
||||
</fieldset>
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('otherSwitches')</legend>
|
||||
<label><strong>$T('opt-max_art_tries')</strong></label><br>
|
||||
$T('explain-max_art_tries')<br>
|
||||
<input type="text" size=5" name="max_art_tries" value="$max_art_tries" />
|
||||
<br><br>
|
||||
<label><input type="checkbox" name="max_opt_only" value="1" <!--#if $max_opt_only > 0 then "checked=1" else ""#--> /> <strong>$T('opt-max_opt_only')</strong></label><br>
|
||||
$T('explain-max_opt_only')<br>
|
||||
<br>
|
||||
<label><input type="checkbox" name="auto_disconnect" value="1" <!--#if $auto_disconnect > 0 then "checked=1" else ""#--> /> <strong>$T('opt-auto_disconnect')</strong></label><br>
|
||||
$T('explain-auto_disconnect')<br>
|
||||
<br>
|
||||
@@ -146,6 +156,32 @@
|
||||
</select>
|
||||
<br/>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="EntryFieldSet">
|
||||
<strong>$T('opt-quota_size'):</strong><br/>
|
||||
$T('explain-quota_size')<br/>
|
||||
<input type="text" name="quota_size" value="$quota_size"/>
|
||||
<br>
|
||||
<br>
|
||||
<strong>$T('opt-quota_period'):</strong><br>
|
||||
$T('explain-quota_period')<br>
|
||||
<select name="ssl_type">
|
||||
<option value="m" <!--#if $quota_period == 'm' then 'selected' else ''#--> >$T('month')</option>
|
||||
<option value="w" <!--#if $quota_period == 'w' then 'selected' else ''#--> >$T('week')</option>
|
||||
<option value="d" <!--#if $quota_period == 'd' then 'selected' else ''#--> >$T('day')</option>
|
||||
<option value="x" <!--#if $quota_period == 'x' then 'selected' else ''#--> >$T('manual')</option>
|
||||
</select>
|
||||
<br/><br/>
|
||||
<strong>$T('opt-quota_day'):</strong><br/>
|
||||
$T('explain-quota_day')<br/>
|
||||
<input type="text" name="quota_day" value="$quota_day"/>
|
||||
<br>
|
||||
<br>
|
||||
<legend>$T('swtag-quota')</legend>
|
||||
<label><input type="checkbox" name="quota_resume" value="1" <!--#if $quota_resume > 0 then "checked=1" else ""#--> /> <strong>$T('opt-quota_resume')</strong></label><br>
|
||||
$T('explain-quota_resume')<br>
|
||||
<br/>
|
||||
</fieldset>
|
||||
</div>
|
||||
<p><input type="submit" value="$T('button-saveChanges')"></p>
|
||||
</form>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<span class="SubMenu">
|
||||
<a href="./purge?session=$session" onclick="return confirm('$T('purgeHistConf').replace("'","`") ');">$T('purgeHist')</a> |
|
||||
<a href="./purge_failed?session=$session" onclick="return confirm('$T('purgeHistFailedConf').replace("'","`") ');">$T('purgeHistFailed')</a> |
|
||||
<a href="./purge_failed?session=$session&del_files=1" onclick="return confirm('$T('purgeFailed-Files').replace("'","`") ');">$T('purgeFailed-Files')</a> |
|
||||
<!--#if $isverbose#-->
|
||||
<a href="./tog_verbose?session=$session">$T('hideDetails')</a> |
|
||||
<!--#else#-->
|
||||
|
||||
@@ -9,14 +9,17 @@
|
||||
<br>
|
||||
<!--#if int($cache_max)#-->
|
||||
<!--#set $msg=$T('ft-buffer@2')%($cache_art, $cache_size)#-->
|
||||
$msg<br>
|
||||
$msg
|
||||
<!--#end if#-->
|
||||
<!--#if $have_quota#-->
|
||||
| <strong>$T('quota-left'):</strong> $left_quota ⁄ $quota</strong>
|
||||
<!--#end if#-->
|
||||
<!--#if $new_release#-->
|
||||
<!--#set $msg=$T('ft-newRelease@1')%($new_release)#-->
|
||||
<b>$msg <a href="$new_rel_url/" target="_blank">SF.net</a></b><br>
|
||||
<!--#end if#-->
|
||||
<!--#if $have_warnings != "0"#-->
|
||||
<strong><a href="$statpath/connections/">$T('ft-warning')($have_warnings)!</a></strong>
|
||||
<strong><a href="$statpath/status/">$T('ft-warning')($have_warnings)!</a></strong>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<!--#set $mbleftrnd = str(int(float($mbleft)))#-->
|
||||
|
||||
@@ -11,10 +11,10 @@
|
||||
<a href="$cpath/general/">$T('cmenu-general')</a> |
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if $submenu=="directories"#-->
|
||||
<!--#if $submenu=="folders"#-->
|
||||
<a class="current" href="./">$T('cmenu-folders')</a> |
|
||||
<!--#else#-->
|
||||
<a href="$cpath/directories/">$T('cmenu-folders')</a> |
|
||||
<a href="$cpath/folders/">$T('cmenu-folders')</a> |
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if $submenu=="switches"#-->
|
||||
@@ -41,16 +41,16 @@
|
||||
<a href="$cpath/rss/">$T('cmenu-rss')</a> |
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if $submenu=="email"#-->
|
||||
<a class="current" href="./">$T('cmenu-email')</a> |
|
||||
<!--#if $submenu=="notify"#-->
|
||||
<a class="current" href="./">$T('cmenu-notif')</a> |
|
||||
<!--#else#-->
|
||||
<a href="$cpath/email/">$T('cmenu-email')</a> |
|
||||
<a href="$cpath/notify/">$T('cmenu-notif')</a> |
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if $submenu=="newzbin"#-->
|
||||
<!--#if $submenu=="indexers"#-->
|
||||
<a class="current" href="./">$T('cmenu-newzbin')</a> |
|
||||
<!--#else#-->
|
||||
<a href="$cpath/newzbin/">$T('cmenu-newzbin')</a> |
|
||||
<a href="$cpath/indexers/">$T('cmenu-newzbin')</a> |
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if $submenu=="categories"#-->
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<!--#if $topmenu=='connections'#-->
|
||||
<a class="current" href="$mypath/">$T('menu-cons')</a> |
|
||||
<!--#else#-->
|
||||
<a href="$statpath/connections/">$T('menu-cons')</a> |
|
||||
<a href="$statpath/status/">$T('menu-cons')</a> |
|
||||
<!--#end if#-->
|
||||
|
||||
<!--[if IE]>
|
||||
|
||||
@@ -103,6 +103,7 @@ $T('onQueueFinish'):
|
||||
<option value="set_priority?session=$session&nzo_id=$slot.nzo_id&priority=1" <!--#if $slot.priority == "High" then "selected" else ""#-->>$T('pr-high')</option>
|
||||
<option value="set_priority?session=$session&nzo_id=$slot.nzo_id&priority=0" <!--#if $slot.priority == "Normal" then "selected" else ""#-->>$T('pr-normal')</option>
|
||||
<option value="set_priority?session=$session&nzo_id=$slot.nzo_id&priority=-1" <!--#if $slot.priority == "Low" then "selected" else ""#-->>$T('pr-low')</option>
|
||||
<option value="set_priority?session=$session&nzo_id=$slot.nzo_id&priority=-4" <!--#if $slot.priority == "Stop" then "selected" else ""#-->>$T('pr-stop')</option>
|
||||
</select></form>
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
<!--#set global $have_refresh=5#-->
|
||||
<!--#set global $topmenu="connections"#-->
|
||||
<!--#set global $statpath=".."#-->
|
||||
<!--#set global $helpsubject="GUI+Connections"#-->
|
||||
<!--#set global $helpsubject="GUI+Status-0-7"#-->
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<span class="SubMenu">
|
||||
<!--#set $msg=$T('askTestEmail')#-->
|
||||
<!--#if $have_quota#-->
|
||||
<a href="./reset_quota?session=$session">$T('link-resetQuota')</a> |
|
||||
<!--#end if#-->
|
||||
<a href="./disconnect?session=$session">$T('link-forceDisc')</a> |
|
||||
<a href="./showlog?session=$session">$T('link-showLog')</a>
|
||||
$T('logging'):
|
||||
1
interfaces/Config
Submodule
@@ -4,7 +4,7 @@
|
||||
<!-- start Nzo footer -->
|
||||
#else#
|
||||
<!-- start other footer -->
|
||||
#if $pane!="Connections" and $pane !="RSS"#</div>#end if#
|
||||
#if $pane!="Status" and $pane !="RSS"#</div>#end if#
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#if $pane=="Connections" or $pane=="Config"#
|
||||
#if $pane=="Status" or $pane=="Config"#
|
||||
#set global $path = '../'#
|
||||
#else if $pane=="Main"#
|
||||
#set global $path = ''#
|
||||
@@ -13,7 +13,7 @@
|
||||
<title>SABnzbd $version - $T('queued'): $mbleft $T('MB')</title>
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="${path}rss?mode=history"/>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="${path}static/stylesheets/jqueryui/overcast/jquery-ui-1.8.9.custom.css?$version"/>
|
||||
<link rel="stylesheet" type="text/css" href="${path}static/stylesheets/jqueryui/overcast/jquery-ui-1.8.15.custom.css?$version"/>
|
||||
#if $color_scheme#
|
||||
<link rel="shortcut icon" type="image/ico" href="${path}static/stylesheets/colorschemes/$color_scheme/images/sabnzbdplus.ico"/>
|
||||
<link rel="stylesheet" type="text/css" href="${path}static/stylesheets/colorschemes/$color_scheme/${color_scheme}.css?$version"/>
|
||||
@@ -83,16 +83,16 @@
|
||||
</ul>
|
||||
<ul class="menu" id="navigation_menu_left">
|
||||
<li#if $pane=="Main"# class="active first"#else# class="first"#end if#><a href="${path}"><span class="icon_nav_download">$T('Plush-downloads').capitalize()</span></a></li>
|
||||
<li#if $pane=="Connections"# class="active"#end if#><a href="${path}connections"><span class="icon_nav_connections">$T('menu-cons').capitalize()</span></a></li>
|
||||
<li#if $pane=="RSS"# class="active"#end if#><a href="${path}config/rss"><span class="icon_nav_rss">$T('rss').upper()</span></a></li>
|
||||
<li#if $pane!="RSS" and $pane!="Nzo" and ($pane=="Config" or $path=='../../')# class="active last"#else# class="last"#end if#><a href="${path}config"><span class="icon_nav_config">$T('menu-config').capitalize()</span></a></li>
|
||||
<li#if $pane=="Status"# class="active"#end if#><a href="${path}status/"><span class="icon_nav_connections">$T('menu-cons').capitalize()</span></a></li>
|
||||
<li#if $pane=="RSS"# class="active"#end if#><a href="${path}config/rss/"><span class="icon_nav_rss">$T('rss').upper()</span></a></li>
|
||||
<li#if $pane!="RSS" and $pane!="Nzo" and ($pane=="Config" or $path=='../../')# class="active last"#else# class="last"#end if#><a href="${path}config/"><span class="icon_nav_config">$T('menu-config').capitalize()</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="nav_text_right">
|
||||
#if $loadavg#$T('ft-sysload'): <span id="loadavg">$loadavg</span>#end if#
|
||||
</div>
|
||||
<div id="nav_text_left">
|
||||
<span id="warning_box"><b><a href="${path}connections/#tabs-warnings" id="last_warning" title="#echo $last_warning.replace("\n"," ").replace('"',"'") #"><span id="have_warnings">$have_warnings</span> $T('warnings')</a></b></span>
|
||||
<span id="warning_box"><b><a href="${path}status/#tabs-warnings" id="last_warning" title="#echo $last_warning.replace("\n"," ").replace('"',"'") #"><span id="have_warnings">$have_warnings</span> $T('warnings')</a></b></span>
|
||||
#if $pane=="Main"#
|
||||
#if $new_release#⋅ <a href="$new_rel_url" id="new_release" target="_blank">$T('Plush-updateAvailable').replace(' ',' ')</a>#end if#
|
||||
#if $warning#⋅ <a id="warning_message">$warning.replace(' ',' ')</a>#end if#
|
||||
@@ -105,33 +105,35 @@
|
||||
|
||||
#if $pane=="Main"#
|
||||
#else if $pane=="Nzo"#
|
||||
#else if $pane=="Connections" or $pane =="RSS"#
|
||||
#else if $pane=="Status" or $pane =="RSS"#
|
||||
<div id="config_container" class="config_margin_status lang-$active_lang">
|
||||
<div id="config_content">
|
||||
#else#
|
||||
#if $pane=="Connections"#
|
||||
#if $pane=="Status"#
|
||||
#else if $pane=="RSS"#
|
||||
#else#
|
||||
<div class="config_nav">
|
||||
<ul>
|
||||
<li><a class="#if $pane=="General"#nav_active#end if#" id="config_nav_general" href="${path}config/general">
|
||||
<li><a class="#if $pane=="General"#nav_active#end if#" id="config_nav_general" href="${path}config/general/">
|
||||
<div class="config_sprite_container sprite_config_nav_general">$T('cmenu-general')</div></a></li>
|
||||
<li><a class="#if $pane=="Folders"#nav_active#end if#" id="config_nav_directories" href="${path}config/directories">
|
||||
<li><a class="#if $pane=="Folders"#nav_active#end if#" id="config_nav_directories" href="${path}config/folders/">
|
||||
<div class="config_sprite_container sprite_config_nav_folders">$T('cmenu-folders')</div></a></li>
|
||||
<li><a class="#if $pane=="Switches"#nav_active#end if#" id="config_nav_switches" href="${path}config/switches">
|
||||
<li><a class="#if $pane=="Switches"#nav_active#end if#" id="config_nav_switches" href="${path}config/switches/">
|
||||
<div class="config_sprite_container sprite_config_nav_switches">$T('cmenu-switches')</div></a></li>
|
||||
<li><a class="#if $pane=="Servers"#nav_active#end if#" id="config_nav_server" href="${path}config/server">
|
||||
<li><a class="#if $pane=="Servers"#nav_active#end if#" id="config_nav_server" href="${path}config/server/">
|
||||
<div class="config_sprite_container sprite_config_nav_servers">$T('cmenu-servers')</div></a></li>
|
||||
<li><a class="#if $pane=="Scheduling"#nav_active#end if#" id="config_nav_scheduling" href="${path}config/scheduling">
|
||||
<li><a class="#if $pane=="Scheduling"#nav_active#end if#" id="config_nav_scheduling" href="${path}config/scheduling/">
|
||||
<div class="config_sprite_container sprite_config_nav_scheduling">$T('Plush-cmenu-scheduling')</div></a></li>
|
||||
<li><a class="#if $pane=="Email"#nav_active#end if#" id="config_nav_email" href="${path}config/email">
|
||||
<div class="config_sprite_container sprite_config_nav_email">$T('cmenu-email')</div></a></li>
|
||||
<li><a class="#if $pane=="Index Sites"#nav_active#end if#" id="config_nav_index_sites" href="${path}config/newzbin">
|
||||
<li><a class="#if $pane=="Email"#nav_active#end if#" id="config_nav_email" href="${path}config/notify/">
|
||||
<div class="config_sprite_container sprite_config_nav_email">$T('cmenu-notif')</div></a></li>
|
||||
<li><a class="#if $pane=="Index Sites"#nav_active#end if#" id="config_nav_index_sites" href="${path}config/indexers/">
|
||||
<div class="config_sprite_container sprite_config_nav_indexsites">$T('cmenu-newzbin')</div></a></li>
|
||||
<li><a class="#if $pane=="Categories"#nav_active#end if#" id="config_nav_categories" href="${path}config/categories">
|
||||
<li><a class="#if $pane=="Categories"#nav_active#end if#" id="config_nav_categories" href="${path}config/categories/">
|
||||
<div class="config_sprite_container sprite_config_nav_categories">$T('cmenu-cat')</div></a></li>
|
||||
<li><a class="#if $pane=="Sorting"#nav_active#end if#" id="config_nav_sorting" href="${path}config/sorting">
|
||||
<li><a class="#if $pane=="Sorting"#nav_active#end if#" id="config_nav_sorting" href="${path}config/sorting/">
|
||||
<div class="config_sprite_container sprite_config_nav_sorting">$T('cmenu-sorting')</div></a></li>
|
||||
<li><a class="#if $pane=="Special"#nav_active#end if#" id="config_nav_special" href="${path}config/special/">
|
||||
<div class="config_sprite_container sprite_config_nav_special">$T('cmenu-special')</div></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
#end if#
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
<div id="plush_options_modal">
|
||||
|
||||
<p><a href="connections/disconnect?session=$session" class="juiButton">$T('link-forceDisc')</a></p>
|
||||
<p><a href="status/disconnect?session=$session" class="juiButton">$T('link-forceDisc')</a></p>
|
||||
<p><a href="config/restart?session=$session" class="juiButton" id="sabnzbd_restart" rel="#echo $T('explain-Restart').replace("<br />","\n")#">$T('sch-restart')</a>
|
||||
<a href="shutdown?session=$session" class="juiButton" id="sabnzbd_shutdown" rel="$T('shutdownOK?')">$T('sch-shutdown')</a></p>
|
||||
<br/>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Config"#-->
|
||||
<!--#set global $help_uri="Configure"#-->
|
||||
<!--#set global $help_uri="Configure-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<div id="config-components">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Categories"#-->
|
||||
<!--#set global $help_uri="configure-categories"#-->
|
||||
<!--#set global $help_uri="configure-categories-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<div style="padding:10px; overflow:auto;">
|
||||
@@ -55,6 +55,7 @@
|
||||
<option value="1" <!--#if $slot.priority == 1 then 'selected' else ''#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $slot.priority == 0 then 'selected' else ''#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $slot.priority == -1 then 'selected' else ''#-->>$T('pr-low')</option>
|
||||
<option value="-2" <!--#if $slot.priority == -2 then 'selected' else ''#-->>$T('pr-paused')</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Folders"#-->
|
||||
<!--#set global $help_uri="Configure+Directories+V2"#-->
|
||||
<!--#set global $help_uri="Configure+Folders-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<form action="saveDirectories" method="post" name="fullform" id="fullform">
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="General"#-->
|
||||
<!--#set global $help_uri="Configure+General+V2"#-->
|
||||
<!--#set global $help_uri="Configure+General-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<form action="saveGeneral" method="post" name="fullform" id="fullform" autocomplete="off">
|
||||
@@ -112,6 +112,7 @@
|
||||
<span class="component-title">$T('opt-apikey')</span>
|
||||
<input type="text" id="apikey" value="$session" class="apikey">
|
||||
<input type="button" class="juiButton" value="$T('button-apikey')" id="generate_new_apikey" rel="$T('Plush-confirm')">
|
||||
<input type="button" class="juiButton show_qrcode" value="$T('qr-code')" title="$T('explain-qr-code')" href="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=$session" >
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
@@ -123,6 +124,7 @@
|
||||
<span class="component-title">$T('opt-nzbkey')</span>
|
||||
<input type="text" id="nzbkey" value="$nzb_key" class="apikey">
|
||||
<input type="button" class="juiButton" value="$T('button-apikey')" id="generate_new_nzbkey" rel="$T('Plush-confirm')">
|
||||
<input type="button" class="juiButton show_qrcode" value="$T('qr-code')" title="$T('explain-qr-code')" href="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=$nzb_key" >
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Index Sites"#-->
|
||||
<!--#set global $help_uri="Configure+Index+Sites"#-->
|
||||
<!--#set global $help_uri="Configure+Indexers-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<form action="saveNewzbin" method="post" name="fullform" id="fullform" autocomplete="off">
|
||||
@@ -121,7 +121,7 @@
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
<!--#for $msgid in $bookmarks_list#-->
|
||||
<a href="https://www.newzbin.com/browse/post/$msgid/" target="_blank">$msgid</a><br/>
|
||||
<a href="https://$newzbin_url/browse/post/$msgid/" target="_blank">$msgid</a><br/>
|
||||
<!--#end for#-->
|
||||
</fieldset>
|
||||
</div><!-- /component-group4 -->
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Email"#-->
|
||||
<!--#set global $help_uri="Configure+Email"#-->
|
||||
<!--#set global $help_uri="Configure+Notifications-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<script>
|
||||
@@ -111,6 +111,54 @@
|
||||
</fieldset>
|
||||
</div><!-- /component-group2 -->
|
||||
|
||||
<!--#if $have_growl or $have_ntfosd#-->
|
||||
<div id="core-component-group3" class="component-group clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3>$T('growlSettings')</h3>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
<!--#if $have_ntfosd#-->
|
||||
<div class="field-pair">
|
||||
<input type="checkbox" name="ntfosd_enable" id="ntfosd_enable" value="1" <!--#if $ntfosd_enable != "0" then "checked=1" else ""#--> />
|
||||
<label class="clearfix" for="ntfosd_enable">
|
||||
<span class="component-title">$T('opt-ntfosd_enable')</span>
|
||||
<span class="component-desc">$T('explain-ntfosd_enable')</span>
|
||||
</label>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<!--#if $have_growl#-->
|
||||
<div class="field-pair">
|
||||
<input type="checkbox" name="growl_enable" id="growl_enable" value="1" <!--#if $growl_enable != "0" then "checked=1" else ""#--> />
|
||||
<label class="clearfix" for="growl_enable">
|
||||
<span class="component-title">$T('opt-growl_enable')</span>
|
||||
<span class="component-desc">$T('explain-growl_enable')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="nocheck clearfix" for="growl_server">
|
||||
<span class="component-title">$T('opt-growl_server')</span>
|
||||
<input type="text" name="growl_server" id="growl_server" value="$growl_server"/>
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
<span class="component-desc">$T('explain-growl_server')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="nocheck clearfix" for="growl_password">
|
||||
<span class="component-title">$T('opt-growl_password')</span>
|
||||
<input type="password" size="35" name="growl_password" id="growl_password" value="$growl_password"/>
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
<span class="component-desc">$T('explain-growl_password')</span>
|
||||
</label>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
</fieldset>
|
||||
</div><!-- /component-group3 -->
|
||||
<!--#end if#-->
|
||||
|
||||
<div class="component-group-last clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3> </h3>
|
||||
@@ -120,6 +168,8 @@
|
||||
<a id="save"><span class="config_sprite_container sprite_config_save"> </span> $T('button-saveChanges')</a>
|
||||
<a id="test_email" href="testmail?session=$session" rel="$T('askTestEmail')">
|
||||
<span class="config_sprite_container sprite_config_email_test"> </span> $T('link-testEmail')</a>
|
||||
<a id="test_notification" href="testnotification?session=$session">
|
||||
<span class="config_sprite_container sprite_config_email_test"> </span> $T('testNotify')</a>
|
||||
</div>
|
||||
<!--#if $lastmail#-->
|
||||
$T('emailResult') = <b>$lastmail</b>
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="RSS"#-->
|
||||
<!--#set global $help_uri="Configure+RSS+V2"#-->
|
||||
<!--#set global $help_uri="Configure+RSS-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ $T('explain-RSS')
|
||||
<th>$T('rss-filter')</th>
|
||||
<!--#if $rss[$feed]['pick_cat']#--><th>$T('category')</th><!--#end if#-->
|
||||
<th>$T('priority')</th>
|
||||
<th>Mode</th>
|
||||
<th>$T('mode')</th>
|
||||
<!--#if $rss[$feed]['pick_script']#--><th>$T('script')</th><!--#end if#-->
|
||||
<th>$T('Plush-rss-actions')</th>
|
||||
</tr>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Scheduling"#-->
|
||||
<!--#set global $help_uri="Configure+Scheduling+V2"#-->
|
||||
<!--#set global $help_uri="Configure+Scheduling-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<%
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Servers"#-->
|
||||
<!--#set global $help_uri="Configure+Servers+V2"#-->
|
||||
<!--#set global $help_uri="Configure+Servers-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<div id="config-components">
|
||||
@@ -118,6 +118,8 @@
|
||||
<span> </span>
|
||||
<br/><br/>
|
||||
<input type="button" class="juiButton delServer" style="padding:4px;" value="$T('button-delServer')" rel="$T('Plush-confirm') "/>
|
||||
<br/><br/>
|
||||
<input type="button" class="juiButton clrServer" style="padding:4px;" value="$T('button-clrServer')" rel="$T('Plush-confirm') "/>
|
||||
</p>
|
||||
|
||||
<!--#if 'amounts' in $servers[$server]#-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Sorting"#-->
|
||||
<!--#set global $help_uri="Configure+Sorting"#-->
|
||||
<!--#set global $help_uri="Configure+Sorting-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -244,16 +244,29 @@ function showDiv(id)
|
||||
</tr></thead>
|
||||
<tr>
|
||||
<td align="right"><strong>$T('show-name'):</strong></td>
|
||||
<td>%sn</td>
|
||||
<td>%sN</td>
|
||||
<td>$T('show-sp-name')</td>
|
||||
</tr><tr>
|
||||
<td></td>
|
||||
<td>%s.n</td>
|
||||
<td>%s.N</td>
|
||||
<td>$T('show-dot-name')</td>
|
||||
</tr><tr>
|
||||
<td></td>
|
||||
<td>%s_n</td>
|
||||
<td>%s_N</td>
|
||||
<td>$T('show-us-name')</td>
|
||||
</tr><tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>%sn</td>
|
||||
<td>$T('show-sp-name') ($T('case-adjusted'))</td>
|
||||
</tr><tr>
|
||||
<td></td>
|
||||
<td>%s.n</td>
|
||||
<td>$T('show-dot-name') ($T('case-adjusted'))</td>
|
||||
</tr><tr>
|
||||
<td></td>
|
||||
<td>%s_n</td>
|
||||
<td>$T('show-us-name') ($T('case-adjusted'))</td>
|
||||
</tr><tr>
|
||||
<td align="right"><strong>$T('show-seasonNum'):</strong></td>
|
||||
<td>%s</td>
|
||||
|
||||
66
interfaces/Plush/templates/config_special.tmpl
Normal file
@@ -0,0 +1,66 @@
|
||||
<!--#set global $pane="Specials"#-->
|
||||
<!--#set global $help_uri="Configure+Special-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<form action="saveSpecial" method="post" name="fullform" id="fullform">
|
||||
<input type="hidden" name="session" id="session" value="$session">
|
||||
|
||||
<div id="config-components">
|
||||
|
||||
<p><br>
|
||||
$T('explain-special')
|
||||
</p>
|
||||
|
||||
<div id="core-component-group1" class="component-group clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3>$T('sptag-boolean')</h3>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
|
||||
<!--#for $option in $switches#-->
|
||||
<div class="field-pair">
|
||||
<input type="checkbox" name="$option[0]" id="$option[0]" value="1" <!--#if $option[1] > 0 then "checked=1" else ""#--> />
|
||||
<label class="clearfix" for="$option[0]">
|
||||
<span class="component-title">$option[0] (<!--#if $option[2] then $T('on') else $T('off')#-->)</span>
|
||||
</label>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
|
||||
</fieldset>
|
||||
</div><!-- /component-group1 -->
|
||||
|
||||
<div id="core-component-group2" class="component-group clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3>$T('sptag-entries')</h3>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
|
||||
<!--#for $option in $entries#-->
|
||||
<div class="field-pair">
|
||||
<label class="nocheck clearfix" for="$option[0]">
|
||||
<span class="component-title">$option[0] ($option[2])</span>
|
||||
<input type="text" name="$option[0]" id="$option[0]" value="$option[1]"/>
|
||||
</label>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
|
||||
</fieldset>
|
||||
</div><!-- /component-group1 -->
|
||||
|
||||
|
||||
<div class="component-group-last clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3> </h3>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
<div class="left_links">
|
||||
<a id="save"><span class="config_sprite_container sprite_config_save"> </span> $T('button-saveChanges')</a>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /component-group -->
|
||||
|
||||
</div><!-- /config-components -->
|
||||
|
||||
</form>
|
||||
|
||||
<!--#include $webdir + "/_inc_footer.tmpl"#-->
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Switches"#-->
|
||||
<!--#set global $help_uri="Configure+Switches+V3"#-->
|
||||
<!--#set global $help_uri="Configure+Switches-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<form action="saveSwitches" method="post" name="fullform" id="fullform">
|
||||
@@ -35,7 +35,7 @@
|
||||
</label>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
</fieldset>
|
||||
</fieldset>
|
||||
</div><!-- /component-group1 -->
|
||||
|
||||
<div id="core-component-group2" class="component-group clearfix">
|
||||
@@ -43,6 +43,23 @@
|
||||
<h3>$T('swtag-server')</h3>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
<div class="field-pair">
|
||||
<label class="nocheck clearfix" for="max_art_tries">
|
||||
<span class="component-title">$T('opt-max_art_tries')</span>
|
||||
<input type="text" size="10" name="max_art_tries" id="max_art_tries" value="$max_art_tries" />
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
<span class="component-desc">$T('explain-max_art_tries')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<input type="checkbox" name="max_opt_only" id="max_opt_only" value="1" <!--#if $max_opt_only > 0 then "checked=1" else ""#--> />
|
||||
<label class="clearfix" for="max_opt_only">
|
||||
<span class="component-title">$T('opt-max_opt_only')</span>
|
||||
<span class="component-desc">$T('explain-max_opt_only')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<input type="checkbox" name="auto_disconnect" id="auto_disconnect" value="1" <!--#if $auto_disconnect > 0 then "checked=1" else ""#--> />
|
||||
<label class="clearfix" for="auto_disconnect">
|
||||
@@ -79,6 +96,13 @@
|
||||
<h3>$T('swtag-queue')</h3>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
<div class="field-pair alt">
|
||||
<input type="checkbox" name="pre_check" id="pre_check" value="1" <!--#if $pre_check > 0 then "checked=1" else ""#--> />
|
||||
<label class="clearfix" for="pre_check">
|
||||
<span class="component-title">$T('opt-pre_check')</span>
|
||||
<span class="component-desc">$T('explain-pre_check')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="nocheck clearfix" for="no_dupes">
|
||||
<span class="component-title">$T('opt-no_dupes')</span>
|
||||
@@ -311,6 +335,56 @@
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
</div><!-- /component-group6 -->
|
||||
<div id="core-component-group6" class="component-group clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3>$T('swtag-quota')</h3>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
<div class="field-pair">
|
||||
<label class="nocheck clearfix" for="quota_size">
|
||||
<span class="component-title">$T('opt-quota_size')</span>
|
||||
<input type="text" name="quota_size" id="quota_size" value="$quota_size"/>
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
<span class="component-desc">$T('explain-quota_size')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="nocheck clearfix" for="quota_period">
|
||||
<span class="component-title">$T('opt-quota_period')</span>
|
||||
<select name="quota_period" id="quota_period">
|
||||
<option value="m" <!--#if $quota_period == "m" then 'selected' else ''#--> >$T('month')</option>
|
||||
<option value="w" <!--#if $quota_period == "w" then 'selected' else ''#--> >$T('week')</option>
|
||||
<option value="d" <!--#if $quota_period == "d" then 'selected' else ''#--> >$T('day')</option>
|
||||
<option value="x" <!--#if $quota_period == "x" then 'selected' else ''#--> >$T('manual')</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
<span class="component-desc">$T('explain-quota_period')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="nocheck clearfix" for="quota_day">
|
||||
<span class="component-title">$T('opt-quota_day')</span>
|
||||
<input type="text" name="quota_day" id="quota_day" value="$quota_day"/>
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
<span class="component-desc">$T('explain-quota_day')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<input type="checkbox" name="quota_resume" id="quota_resume" value="1" <!--#if $quota_resume > 0 then "checked=1" else ""#--> />
|
||||
<label class="clearfix" for="quota_resume">
|
||||
<span class="component-title">$T('opt-quota_resume')</span>
|
||||
<span class="component-desc">$T('explain-quota_resume')</span>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /component-group5 -->
|
||||
|
||||
<div class="component-group-last clearfix">
|
||||
|
||||
@@ -61,18 +61,14 @@
|
||||
</td>
|
||||
<td>
|
||||
<!--#if $line.report #-->
|
||||
<a href="https://www.newzbin.com/browse/post/$line.report/" target="_blank">
|
||||
<div class="icon_history_verbose main_sprite_container sprite_hv_report pointer" title='$T('Plush-openSourceURL')<br><br>https://www.newzbin.com/browse/post/$line.report'> </div>
|
||||
<a href="https://$newzbin_url/browse/post/$line.report/" target="_blank">
|
||||
<div class="icon_history_verbose main_sprite_container sprite_hv_report pointer" title='$T('Plush-openSourceURL')<br><br>https://$newzbin_url/browse/post/$line.report'> </div>
|
||||
</a>
|
||||
<!--#else if $varExists('newzbinDetails')#-->
|
||||
<div class="icon_history_verbose main_sprite_container sprite_hv_report hvFaded"> </div>
|
||||
<!--#end if#-->
|
||||
<!--#if $line.url_info #-->
|
||||
<a href="$line.url_info" target="_blank">
|
||||
<div class="icon_history_verbose main_sprite_container sprite_hv_star pointer" title="$T('Plush-openInfoURL')<br><br>$line.url_info"> </div>
|
||||
</a>
|
||||
<!--#else if $varExists('newzbinDetails')#-->
|
||||
<div class="icon_history_verbose main_sprite_container sprite_hv_star hvFaded"> </div>
|
||||
<!--#end if#-->
|
||||
<!--#if $line.size or $line.category or $line.path or $line.storage#-->
|
||||
<div class="icon_history_verbose main_sprite_container sprite_hv_stats" title='<!--#if $line.size#-->$T('size'): $line.size<!--#end if#--><!--#if $line.category#--><br>$T('category'): $line.category<!--#end if#-->'> </div>
|
||||
@@ -90,7 +86,9 @@
|
||||
<!--#end for#-->
|
||||
<!--#end if#-->
|
||||
<!--#else#-->
|
||||
<div class="icon_history_verbose main_sprite_container sprite_hv_$stage.name.lower()" title='<!--#for $action in $stage.actions#--><!--#echo $action.replace("'","’") #--><br><!--#end for#-->'> </div>
|
||||
<!--#if $stage.name != "Source"#-->
|
||||
<div class="icon_history_verbose main_sprite_container sprite_hv_$stage.name.lower()" title='<!--#for $action in $stage.actions#--><!--#echo $action.replace("'","’") #--><br><!--#end for#-->'> </div>
|
||||
<!--#end if#-->
|
||||
<!--#end if#-->
|
||||
<!--#end for#-->
|
||||
<!--#if $line.retry#-->
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
<li class="main_sprite_container sprite_q_queue">
|
||||
<a class="sf-with-ul">$T('menu-queue')</a>
|
||||
<ul>
|
||||
<!--#if $have_quota#--><li><a id="reset_quota_now" class="pointer">$T('link-resetQuota')</a></li><!--#end if#-->
|
||||
<!--#if $varExists('newzbinDetails')#--><li><a id="get_bookmarks_now" class="pointer">$T('link-getBookmarks')</a></li><!--#end if#-->
|
||||
<!--#if $have_rss_defined#--><li><a id="get_rss_now" class="pointer">$T('button-rssNow')</a></li><!--#end if#-->
|
||||
<!--#if $have_watched_dir#--><li><a id="get_watched_now" class="pointer">$T('sch-scan_folder')</a></li><!--#end if#-->
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
<% import locale %>
|
||||
<% locale.setlocale(locale.LC_ALL, "") %>
|
||||
|
||||
<script type="text/javascript">
|
||||
if (typeof( jQuery ) == 'undefined')
|
||||
window.location = "../"; // redirect to main on direct template hit
|
||||
@@ -15,6 +12,9 @@
|
||||
|
||||
// set lower-right queue stats
|
||||
var stats = '';
|
||||
<!--#if $have_quota#-->
|
||||
stats += '<strong>$left_quota ⁄ $quota</strong> $T('quota-left') ';
|
||||
<!--#end if#-->
|
||||
<!--#if $noofslots > 0#-->
|
||||
stats += '<strong>$mbleft ⁄ $mb $T('MB')</strong> $T('Plush-remaining')';
|
||||
<!--#end if#-->
|
||||
@@ -62,14 +62,14 @@
|
||||
<td>
|
||||
<div class="main_sprite_container sprite_progressbar_bg">
|
||||
<div class="main_sprite_container sprite_progress_done" style="background-position: -<!--#if $slot.mb == "0.00" then "120" else int(120 - 120.0 / 100.0 * int(100 - float($slot.mbleft) / float($slot.mb) * 100))#-->px -401px">
|
||||
<div class="totalDownload"><!--#echo locale.format('%d', int(float($slot.mb)), True)#--> <small>$T('MB')</small></div>
|
||||
<div class="currentDownload"><!--#if $slot.mb!=$slot.mbleft#--><!--#echo locale.format('%d', int(float($slot.mb)-float($slot.mbleft)), True)#--> <small>$T('MB') $T('AofB')</small><!--#end if#--></div>
|
||||
<div class="totalDownload">$slot.mb_fmt <small>$T('MB')</small></div>
|
||||
<div class="currentDownload"><!--#if $slot.mb!=$slot.mbleft#-->$slot.mbdone_fmt <small>$T('MB') $T('AofB')</small><!--#end if#--></div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<td class="eta nowrap">
|
||||
<!--#if not $paused and $slot.status != "Paused"#-->
|
||||
<!--#if not $paused and $slot.status not in ("Paused", "Checking")#-->
|
||||
<span title="$slot.eta">$slot.timeleft $T('Plush-left')</span>
|
||||
<!--#else#-->
|
||||
$T('post-'+$slot.status)
|
||||
@@ -89,6 +89,7 @@
|
||||
<option value="1" <!--#if $slot.priority == "High" then "selected" else ""#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $slot.priority == "Normal" then "selected" else ""#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $slot.priority == "Low" then "selected" else ""#-->>$T('pr-low')</option>
|
||||
<option value="-4" <!--#if $slot.priority == "Stop" then "selected" else ""#-->>$T('pr-stop')</option>
|
||||
</optgroup></select>
|
||||
<select class="change_opts"><optgroup label="$T('pp')">
|
||||
<option value="0" <!--#if $slot.unpackopts == "0" then "selected " else ""#-->>$T('pp-none')</option>
|
||||
|
||||
@@ -25,6 +25,7 @@ jQuery(document).ready(function($){
|
||||
$("#help").colorbox({ inline:true, href:"#help_modal", title:$("#help").text(),
|
||||
innerWidth:"375px", innerHeight:"350px", initialWidth:"375px", initialHeight:"350px", speed:0, opacity:0.7
|
||||
});
|
||||
$(".show_qrcode").colorbox({ photo:true, innerHeight:"300px", innerWidth:"300px", speed:0, opacity: 0.7, scrolling:false });
|
||||
|
||||
// jqueryui tabs/buttons
|
||||
$('.juiButton').button();
|
||||
@@ -79,27 +80,27 @@ jQuery(document).ready(function($){
|
||||
|
||||
// selections
|
||||
$("#nzo_select_all").click(function(){
|
||||
$("INPUT[type='checkbox']").attr('checked', true).trigger('change');
|
||||
$("INPUT[type='checkbox']").prop('checked', true).trigger('change');
|
||||
});
|
||||
var last1, last2;
|
||||
$("#nzo_select_range").click(function(){
|
||||
if (last1 && last2 && last1 < last2)
|
||||
$("INPUT[type='checkbox']").slice(last1,last2).attr('checked', true).trigger('change');
|
||||
$("INPUT[type='checkbox']").slice(last1,last2).prop('checked', true).trigger('change');
|
||||
else if (last1 && last2)
|
||||
$("INPUT[type='checkbox']").slice(last2,last1).attr('checked', true).trigger('change');
|
||||
$("INPUT[type='checkbox']").slice(last2,last1).prop('checked', true).trigger('change');
|
||||
});
|
||||
$("#nzo_select_invert").click(function(){
|
||||
$("INPUT[type='checkbox']").each( function() {
|
||||
$(this).attr('checked', !$(this).attr('checked')).trigger('change');
|
||||
$(this).prop('checked', !$(this).prop('checked')).trigger('change');
|
||||
});
|
||||
});
|
||||
$("#nzo_select_none").click(function(){
|
||||
$("INPUT[type='checkbox']").attr('checked', false).trigger('change');
|
||||
$("INPUT[type='checkbox']").prop('checked', false).trigger('change');
|
||||
});
|
||||
|
||||
// click filenames to select
|
||||
$('#config_content .nzoTable .nzf_row').click(function(event) {
|
||||
$('#box-'+$(event.target).parent().attr('id')).attr('checked', !$('#box-'+$(event.target).parent().attr('id')).attr('checked')).trigger('change');
|
||||
$('#box-'+$(event.target).parent().attr('id')).prop('checked', !$('#box-'+$(event.target).parent().attr('id')).prop('checked')).trigger('change');
|
||||
|
||||
// range event interaction -- see further above
|
||||
if (last1) last2 = last1;
|
||||
@@ -108,7 +109,7 @@ jQuery(document).ready(function($){
|
||||
|
||||
//
|
||||
$('#config_content .nzoTable .nzf_row input').change(function(e){
|
||||
if ($(e.target).attr('checked'))
|
||||
if ($(e.target).prop('checked'))
|
||||
$(e.target).parent().parent().addClass("nzo_highlight");
|
||||
else
|
||||
$(e.target).parent().parent().removeClass("nzo_highlight");
|
||||
@@ -121,7 +122,7 @@ jQuery(document).ready(function($){
|
||||
break;
|
||||
|
||||
|
||||
case 'Connections':
|
||||
case 'Status':
|
||||
$('#logging_level').change(function(event){
|
||||
window.location = './change_loglevel?loglevel='+$(event.target).val()+'&session='+apikey;
|
||||
});
|
||||
@@ -178,6 +179,11 @@ jQuery(document).ready(function($){
|
||||
$(event.target).parents('form:first').attr('action','delServer').submit();
|
||||
return false;
|
||||
});
|
||||
$('form .clrServer').click(function(event){ // clear server
|
||||
if(confirm($(event.target).attr('rel')))
|
||||
$(event.target).parents('form:first').attr('action','clrServer').submit();
|
||||
return false;
|
||||
});
|
||||
break;
|
||||
|
||||
case 'Categories':
|
||||
|
||||
@@ -116,6 +116,20 @@ jQuery(function($){
|
||||
function(){ $(this).removeClass('sprite_q_queuesfHover'); }
|
||||
);
|
||||
|
||||
// fix for touch devices -- toggle visibility
|
||||
$('.sprite_q_menu_pausefor').bind('touchend', function(e) {
|
||||
e.preventDefault();
|
||||
if( $(this).hasClass('sprite_q_menu_pauseforsfHover') ) {
|
||||
$(this).find("ul").toggle();
|
||||
}
|
||||
});
|
||||
$('.sprite_q_queue').bind('touchend', function(e) {
|
||||
e.preventDefault();
|
||||
if( $(this).hasClass('sprite_q_queuesfHover') ) {
|
||||
$(this).find("ul").toggle();
|
||||
}
|
||||
});
|
||||
|
||||
// modals
|
||||
$("#help").colorbox({ inline:true, href:"#help_modal", title:$("#help").text(),
|
||||
innerWidth:"375px", innerHeight:"350px", initialWidth:"375px", initialHeight:"350px", speed:0, opacity:0.7
|
||||
@@ -161,20 +175,20 @@ jQuery(function($){
|
||||
}).trigger('change');
|
||||
|
||||
// Confirm Queue Deletions toggle
|
||||
$("#confirmDeleteQueue").attr('checked', $.plush.confirmDeleteQueue ).change( function() {
|
||||
$.plush.confirmDeleteQueue = $("#confirmDeleteQueue").attr('checked');
|
||||
$("#confirmDeleteQueue").prop('checked', $.plush.confirmDeleteQueue ).change( function() {
|
||||
$.plush.confirmDeleteQueue = $("#confirmDeleteQueue").prop('checked');
|
||||
$.cookie('plushConfirmDeleteQueue', $.plush.confirmDeleteQueue ? 1 : 0, { expires: 365, path: '/' });
|
||||
});
|
||||
|
||||
// Confirm History Deletions toggle
|
||||
$("#confirmDeleteHistory").attr('checked', $.plush.confirmDeleteHistory ).change( function() {
|
||||
$.plush.confirmDeleteHistory = $("#confirmDeleteHistory").attr('checked');
|
||||
$("#confirmDeleteHistory").prop('checked', $.plush.confirmDeleteHistory ).change( function() {
|
||||
$.plush.confirmDeleteHistory = $("#confirmDeleteHistory").prop('checked');
|
||||
$.cookie('plushConfirmDeleteHistory', $.plush.confirmDeleteHistory ? 1 : 0, { expires: 365, path: '/' });
|
||||
});
|
||||
|
||||
// Block Refreshes on Hover toggle
|
||||
$("#blockRefresh").attr('checked', $.plush.blockRefresh ).change( function() {
|
||||
$.plush.blockRefresh = $("#blockRefresh").attr('checked');
|
||||
$("#blockRefresh").prop('checked', $.plush.blockRefresh ).change( function() {
|
||||
$.plush.blockRefresh = $("#blockRefresh").prop('checked');
|
||||
$.cookie('plushBlockRefresh', $.plush.blockRefresh ? 1 : 0, { expires: 365, path: '/' });
|
||||
});
|
||||
|
||||
@@ -271,6 +285,16 @@ jQuery(function($){
|
||||
});
|
||||
});
|
||||
|
||||
// Reset Quota
|
||||
$('#reset_quota_now').click(function() {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "tapi",
|
||||
data: {mode:'reset_quota', apikey: $.plush.apikey},
|
||||
success: $.plush.RefreshQueue
|
||||
});
|
||||
});
|
||||
|
||||
// Get RSS
|
||||
$('#get_rss_now').click(function() {
|
||||
$.ajax({
|
||||
@@ -690,22 +714,22 @@ $.plush.queueprevslots = $.plush.queuenoofslots; // for the next refresh
|
||||
|
||||
// selections
|
||||
$("#multiops_select_all").click(function(){
|
||||
$("INPUT[type='checkbox']","#queueTable").attr('checked', true).trigger('change');
|
||||
$("INPUT[type='checkbox']","#queueTable").prop('checked', true).trigger('change');
|
||||
});
|
||||
var last1, last2;
|
||||
$("#multiops_select_range").click(function(){
|
||||
if (last1 && last2 && last1 < last2)
|
||||
$("INPUT[type='checkbox']","#queueTable").slice(last1,last2).attr('checked', true).trigger('change');
|
||||
$("INPUT[type='checkbox']","#queueTable").slice(last1,last2).prop('checked', true).trigger('change');
|
||||
else if (last1 && last2)
|
||||
$("INPUT[type='checkbox']","#queueTable").slice(last2,last1).attr('checked', true).trigger('change');
|
||||
$("INPUT[type='checkbox']","#queueTable").slice(last2,last1).prop('checked', true).trigger('change');
|
||||
});
|
||||
$("#multiops_select_invert").click(function(){
|
||||
$("INPUT[type='checkbox']","#queueTable").each( function() {
|
||||
$(this).attr('checked', !$(this).attr('checked')).trigger('change');
|
||||
$(this).prop('checked', !$(this).prop('checked')).trigger('change');
|
||||
});
|
||||
});
|
||||
$("#multiops_select_none").click(function(){
|
||||
$("INPUT[type='checkbox']","#queueTable").attr('checked', false).trigger('change');
|
||||
$("INPUT[type='checkbox']","#queueTable").prop('checked', false).trigger('change');
|
||||
});
|
||||
$("#queue").delegate('.multiops','change',function(event) {
|
||||
// range event interaction
|
||||
@@ -713,7 +737,7 @@ $.plush.queueprevslots = $.plush.queuenoofslots; // for the next refresh
|
||||
last1 = $(event.target).parent()[0].rowIndex ? $(event.target).parent()[0].rowIndex : $(event.target).parent().parent()[0].rowIndex;
|
||||
|
||||
// checkbox state persistence
|
||||
if ($(this).attr('checked'))
|
||||
if ($(this).prop('checked'))
|
||||
$.plush.multiOpsChecks[$(this).parent().parent().attr('id')] = true;
|
||||
else if ($.plush.multiOpsChecks[$(this).parent().parent().attr('id')])
|
||||
delete $.plush.multiOpsChecks[$(this).parent().parent().attr('id')];
|
||||
@@ -740,7 +764,7 @@ $("a","#multiops_inputs").click(function(e){
|
||||
nzo_ids = nzo_ids.substr(1);
|
||||
if (!nzo_ids) return;
|
||||
|
||||
$(this).attr('disabled',true);
|
||||
$(this).prop('disabled',true);
|
||||
|
||||
if ($('#multi_status').val())
|
||||
$.ajax({
|
||||
@@ -777,7 +801,7 @@ $("a","#multiops_inputs").click(function(e){
|
||||
data: {mode: 'change_script', value: nzo_ids, value2: $('#multi_script').val(), apikey: $.plush.apikey}
|
||||
});
|
||||
|
||||
$(this).attr('disabled',false);
|
||||
$(this).prop('disabled',false);
|
||||
$.plush.RefreshQueue();
|
||||
});
|
||||
|
||||
@@ -908,10 +932,10 @@ $("a","#multiops_inputs").click(function(e){
|
||||
$('#delete_nzb_modal_title').text( $(this).parent().prev().prev().children('a:first').text() );
|
||||
$('#delete_nzb_modal_job').val( $(this).parent().parent().attr('id') );
|
||||
$('#delete_nzb_modal_mode').val( 'history' );
|
||||
if ($(this).parent().parent().children('td:first').children().hasClass('sprite_hv_error'))
|
||||
$('#delete_nzb_modal_remove_files').button('enable');
|
||||
else
|
||||
if ($(this).parent().parent().children('td:first').children().hasClass('sprite_hv_star'))
|
||||
$('#delete_nzb_modal_remove_files').button('disable');
|
||||
else
|
||||
$('#delete_nzb_modal_remove_files').button('enable');
|
||||
$.colorbox({ inline:true, href:"#delete_nzb_modal", title:$(this).text(),
|
||||
innerWidth:"600px", innerHeight:"150px", initialWidth:"600px", initialHeight:"150px", speed:0, opacity:0.7
|
||||
});
|
||||
@@ -1073,7 +1097,7 @@ $.plush.histprevslots = $.plush.histnoofslots; // for the next refresh
|
||||
$('<input type="checkbox" class="multiops" />').appendTo('#queue tr td.nzb_status_col');
|
||||
if ($.plush.multiOpsChecks) // checkbox state persistence
|
||||
for (var nzo_id in $.plush.multiOpsChecks)
|
||||
$('#'+nzo_id+' .multiops').attr('checked',true);
|
||||
$('#'+nzo_id+' .multiops').prop('checked',true);
|
||||
|
||||
|
||||
$('#queue-pagination span').removeClass('loading'); // Remove spinner graphic from pagination
|
||||
|
||||
@@ -287,7 +287,7 @@ body {
|
||||
}
|
||||
|
||||
.navigation ul li a {
|
||||
color:#fff;
|
||||
color:#efefef;
|
||||
font-weight:bold;
|
||||
display: block;
|
||||
padding: 0 8px 0 0;
|
||||
@@ -297,9 +297,10 @@ body {
|
||||
line-height: 25px;
|
||||
background-color:#363636;
|
||||
/* background : -webkit-gradient(linear, right top, right bottom, from(rgb(168,168,168)), to(rgb(69,69,69)));
|
||||
background : -moz-linear-gradient(top, rgb(168,168,168), rgb(69,69,69)); */
|
||||
background : -moz-linear-gradient(top, rgb(168,168,168), rgb(69,69,69));
|
||||
-webkit-transition-property: background;
|
||||
-webkit-transition-duration: 700ms;
|
||||
*/
|
||||
-moz-transition-property: background;
|
||||
-moz-transition-duration: 700ms;
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 105 B After Width: | Height: | Size: 129 B |
|
Before Width: | Height: | Size: 96 B After Width: | Height: | Size: 142 B |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 5.2 KiB |
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* jQuery UI CSS Framework 1.8.9
|
||||
* jQuery UI CSS Framework 1.8.15
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* jQuery UI CSS Framework 1.8.9
|
||||
* jQuery UI CSS Framework 1.8.15
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
@@ -280,20 +280,44 @@
|
||||
----------------------------------*/
|
||||
|
||||
/* Corner radius */
|
||||
.ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; }
|
||||
.ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; }
|
||||
.ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
|
||||
.ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
|
||||
.ui-corner-top { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; }
|
||||
.ui-corner-bottom { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
|
||||
.ui-corner-right { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px; -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
|
||||
.ui-corner-left { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
|
||||
.ui-corner-all { -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }
|
||||
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; }
|
||||
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; }
|
||||
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
|
||||
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { background: #eeeeee url(images/ui-bg_flat_0_eeeeee_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }
|
||||
.ui-widget-shadow { margin: -4px 0 0 -4px; padding: 4px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 0pxdow=0px; -webkit-border-radius: 0pxdow=0px; border-radius: 0pxdow=0px; }/*
|
||||
* jQuery UI Button 1.8.9
|
||||
.ui-widget-shadow { margin: -4px 0 0 -4px; padding: 4px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 0pxdow=0px; -khtml-border-radius: 0pxdow=0px; -webkit-border-radius: 0pxdow=0px; border-radius: 0pxdow=0px; }/*
|
||||
* jQuery UI Resizable 1.8.15
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Resizable#theming
|
||||
*/
|
||||
.ui-resizable { position: relative;}
|
||||
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
|
||||
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
|
||||
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
|
||||
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
|
||||
* jQuery UI Selectable 1.8.15
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Selectable#theming
|
||||
*/
|
||||
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
|
||||
/*
|
||||
* jQuery UI Button 1.8.15
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
@@ -331,7 +355,28 @@ input.ui-button { padding: .4em 1em; }
|
||||
/* workarounds */
|
||||
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
|
||||
/*
|
||||
* jQuery UI Tabs 1.8.9
|
||||
* jQuery UI Dialog 1.8.15
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Dialog#theming
|
||||
*/
|
||||
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
|
||||
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
|
||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
|
||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
||||
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
||||
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
|
||||
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
|
||||
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
||||
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
||||
/*
|
||||
* jQuery UI Tabs 1.8.15
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Connections"#-->
|
||||
<!--#set global $help_uri="GUI+Connections"#-->
|
||||
<!--#set global $pane="Status"#-->
|
||||
<!--#set global $help_uri="GUI+Status-0-7"#-->
|
||||
<!--#include $webdir + "/_inc_header.tmpl"#-->
|
||||
|
||||
<div class="tabs">
|
||||
@@ -1,4 +1,4 @@
|
||||
<a href="${helpuri}configure-categories" id="help" target="_blank">$T('menu-help')</a>
|
||||
<a href="${helpuri}configure-categories-0-7" id="help" target="_blank">$T('menu-help')</a>
|
||||
<h3>$T('configCat')</h3>
|
||||
<br/>
|
||||
$T('explain-configCat')<br/>
|
||||
@@ -61,7 +61,8 @@ $T('explain-relFolder') $defdir<br/>
|
||||
<option value="2" <!--#if $slot.priority == 2 then "selected" else ""#-->>$T('pr-force')</option>
|
||||
<option value="1" <!--#if $slot.priority == 1 then "selected" else ""#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $slot.priority == 0 then "selected" else ""#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $slot.priority == -1 then "selected" else ""#-->>$T('pr-low')</option>>
|
||||
<option value="-1" <!--#if $slot.priority == -1 then "selected" else ""#-->>$T('pr-low')</option>
|
||||
<option value="-2" <!--#if $slot.priority == -2 then "selected" else ""#-->>$T('pr-paused')</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
<a href="${helpuri}Configure+Directories+V2" id="help" target="_blank">$T('menu-help')</a>
|
||||
<a href="${helpuri}Configure+Folders-0-7" id="help" target="_blank">$T('menu-help')</a>
|
||||
<h3>$T('folderConfig')</h3>
|
||||
<!--action="config/directories/saveDirectories" method="post"-->
|
||||
<!--action="config/folders/saveDirectories" method="post"-->
|
||||
<form id="configFolders" class="cmxform" action="">
|
||||
<div class="EntryBlock">
|
||||
<fieldset class="EntryFieldSet">
|
||||
@@ -85,7 +85,7 @@ $T('systemFolders')<br />
|
||||
|
||||
|
||||
</div><br class="clear" />
|
||||
<input type="button" size="40" value="$T('button-saveChanges')" onclick="javascript:submitconfig('config/directories/saveDirectories', this, 'configFolders')">
|
||||
<input type="button" size="40" value="$T('button-saveChanges')" onclick="javascript:submitconfig('config/folders/saveDirectories', this, 'configFolders')">
|
||||
</form>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
<a href="${helpuri}Configure+General+V2" id="help" target="_blank">$T('menu-help')</a><h3>$T('generalConfig')</h3>
|
||||
<a href="${helpuri}Configure+General-0-7" id="help" target="_blank">$T('menu-help')</a><h3>$T('generalConfig')</h3>
|
||||
<form class="cmxform" id="configGeneral" autocomplete="off">
|
||||
|
||||
<fieldset class="EntryFieldSet">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<a href="${helpuri}Configure+Index+Sites" id="help" target="_blank">$T('menu-help')</a><h3>Newzbin</h3>
|
||||
<a href="${helpuri}Configure+Indexers-0-7" id="help" target="_blank">$T('menu-help')</a><h3>Newzbin</h3>
|
||||
<form id="configNewzbin" class="cmxform" autocomplete="off">
|
||||
|
||||
$T('explain-newzbin')<br/>
|
||||
@@ -44,9 +44,9 @@ $T('explain-newzbin')<br/>
|
||||
|
||||
<a class="config" onClick="getBookmarks();">$T('link-getBookmarks')</a>
|
||||
<!--#if $bookmarks_list#-->
|
||||
<a class="config" onClick="lr('config/newzbin/hideBookmarks');">$T('link-HideBM')</a>
|
||||
<a class="config" onClick="lr('config/indexers/hideBookmarks');">$T('link-HideBM')</a>
|
||||
<!--#else#-->
|
||||
<a class="config" onClick="lr('config/newzbin/showBookmarks');">$T('link-ShowBM')</a>
|
||||
<a class="config" onClick="lr('config/indexers/showBookmarks');">$T('link-ShowBM')</a>
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if $bookmarks_list#-->
|
||||
@@ -54,7 +54,7 @@ $T('explain-newzbin')<br/>
|
||||
<legend>$T('processedBM')</legend>
|
||||
<hr />
|
||||
<!--#for $msgid in $bookmarks_list#-->
|
||||
<a href="https://www.newzbin.com/browse/post/$msgid/" target="_blank">$msgid</a>
|
||||
<a href="https://$newzbin_url/browse/post/$msgid/" target="_blank">$msgid</a>
|
||||
<!--#end for#-->
|
||||
<br class="clear" />
|
||||
</fieldset>
|
||||
@@ -93,6 +93,6 @@ $T('explain-nzbmatrix')<br/>
|
||||
</fieldset>
|
||||
|
||||
<p>
|
||||
<input type="button" size="40" value="$T('button-saveChanges')" onclick="javascript:submitconfig('config/newzbin/saveNewzbin', this, 'configNewzbin')">
|
||||
<input type="button" size="40" value="$T('button-saveChanges')" onclick="javascript:submitconfig('config/indexers/saveNewzbin', this, 'configNewzbin')">
|
||||
</p>
|
||||
</form>
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
<a href="${helpuri}Configure+Email" id="help" target="_blank">$T('menu-help')</a><h3>$T('configEmail')</h3>
|
||||
<a href="${helpuri}Configure+Notifications-0-7" id="help" target="_blank">$T('menu-help')</a><h3>$T('configEmail')</h3>
|
||||
<form id="configEmail" class="cmxform" autocomplete="off">
|
||||
<div class="EntryBlock">
|
||||
<fieldset class="EntryFieldSet">
|
||||
@@ -67,13 +67,44 @@
|
||||
<br class="clear" />
|
||||
|
||||
</fieldset>
|
||||
|
||||
<!--#if $have_growl or $have_ntfosd#-->
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('growlSettings')</legend>
|
||||
<hr />
|
||||
<!--#if $have_ntfosd#-->
|
||||
<label><span class="label">$T('opt-ntfosd_enable'):</span>
|
||||
<input class="radio" type="checkbox" name="ntfosd_enable" value="1" <!--#if $ntfosd_enable != "0" then "checked=1" else ""#--> />
|
||||
<span class="tips">$T('explain-ntfosd_enable')</span></label>
|
||||
<br class="clear" />
|
||||
<!--#end if#-->
|
||||
<!--#if $have_growl#-->
|
||||
<label><span class="label">$T('opt-growl_enable'):</span>
|
||||
<input class="radio" type="checkbox" name="growl_enable" value="1" <!--#if $growl_enable != "0" then "checked=1" else ""#--> />
|
||||
<span class="tips">$T('explain-growl_enable')</span></label>
|
||||
<br class="clear" />
|
||||
|
||||
<label class="label">$T('opt-growl_server'):</label>
|
||||
<input type="text" size="35" name="growl_server" value="$growl_server">
|
||||
<span class="tips">$T('explain-growl_server')</span>
|
||||
<br class="clear" />
|
||||
|
||||
<label class="label">$T('opt-growl_password'):</label>
|
||||
<input type="password" size="35" name="growl_password" value="$growl_password">
|
||||
<span class="tips">$T('explain-growl_password')</span>
|
||||
<br class="clear" />
|
||||
<!--#end if#-->
|
||||
|
||||
</fieldset>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<input type="button" size="40" value="$T('button-saveChanges')" onclick="javascript:submitconfig('config/email/saveEmail', this, 'configEmail')">
|
||||
<input type="button" size="40" value="$T('button-saveChanges')" onclick="javascript:submitconfig('config/notify/saveEmail', this, 'configEmail')">
|
||||
</p>
|
||||
<br class="clear" />
|
||||
<a class="config" onClick="testemail();">Test E-Mail</a>
|
||||
<a class="config" onClick="testemail();">$T('link-testEmail')</a>
|
||||
<a class="config" onClick="testnotification();">$T('testNotify')</a>
|
||||
<!--#if $lastmail#-->
|
||||
$T('emailResult') = <b>$lastmail</b>
|
||||
<!--#end if#-->
|
||||
@@ -2,7 +2,7 @@
|
||||
<script type="text/javascript">
|
||||
MochiKit.DOM.addLoadEvent(location = "../../#config-rss");
|
||||
</script>
|
||||
<a href="${helpuri}Configure+RSS+V2" id="help" target="_blank">$T('menu-help')</a>
|
||||
<a href="${helpuri}Configure+RSS-0-7" id="help" target="_blank">$T('menu-help')</a>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<a href="${helpuri}Configure+Scheduling+V2" id="help" target="_blank">$T('menu-help')</a>
|
||||
<a href="${helpuri}Configure+Scheduling-0-7" id="help" target="_blank">$T('menu-help')</a>
|
||||
<h3>$T('configSchedule')</h3>
|
||||
<div class="EntryBlock">
|
||||
<form class="cmxform" id="schedule">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
<a href="${helpuri}Configure+Servers+V2" id="help" target="_blank">$T('menu-help')</a>
|
||||
<a href="${helpuri}Configure+Servers-0-7" id="help" target="_blank">$T('menu-help')</a>
|
||||
<h3>$T('configServer')</h3>
|
||||
<div class="EntryBlock">
|
||||
<!--#set $slist = $servers.keys()#-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
<a href="${helpuri}Configure+Sorting" id="help" target="_blank">$T('menu-help')</a><h3>$T('configSort')</h3>
|
||||
<a href="${helpuri}Configure+Sorting-0-7" id="help" target="_blank">$T('menu-help')</a><h3>$T('configSort')</h3>
|
||||
<!--action="config/directories/saveDirectories" method="post"-->
|
||||
<form id="configSorting" class="cmxform" action="">
|
||||
<div class="EntryBlock">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
<a href="${helpuri}Configure+Switches+V3" id="help" target="_blank">$T('menu-help')</a>
|
||||
<a href="${helpuri}Configure+Switches-0-7" id="help" target="_blank">$T('menu-help')</a>
|
||||
<h3>$T('switchesConfig')</h3>
|
||||
<div class="EntryBlock">
|
||||
<form id="configSwitches" class="cmxform">
|
||||
@@ -11,6 +11,11 @@
|
||||
<span class="tips">$T('explain-quick_check')</span>
|
||||
<br class="clear" />
|
||||
|
||||
<label><span class="label">$T('opt-pre_check'):</span>
|
||||
<input class="radio" type="checkbox" name="pre_check" value="1" <!--#if $pre_check > 0 then 'checked="1"' else ""#--> /></label>
|
||||
<span class="tips">$T('explain-pre_check')</span>
|
||||
<br class="clear" />
|
||||
|
||||
<label><span class="label">$T('opt-enable_unrar'):</span>
|
||||
<input class="radio" type="checkbox" name="enable_unrar" value="1" <!--#if $enable_unrar == 1 then 'checked="1"' else ""#--> />
|
||||
<span class="tips">$T('explain-enable_unrar')</span></label>
|
||||
@@ -123,6 +128,16 @@
|
||||
<hr />
|
||||
|
||||
|
||||
<label><span class="label">$T('opt-max_art_tries'):</span>
|
||||
<input type="text" size="5" name="max_art_tries" value="$max_art_tries" />
|
||||
<span class="tips">$T('explain-max_art_tries')</span></label>
|
||||
<br class="clear" />
|
||||
|
||||
<label><span class="label">$T('opt-max_opt_only'):</span>
|
||||
<input class="radio" type="checkbox" name="max_opt_only" value="1" <!--#if $max_opt_only > 0 then 'checked="1"' else ""#--> />
|
||||
<span class="tips">$T('explain-max_opt_only')</span></label>
|
||||
<br class="clear" />
|
||||
|
||||
<label><span class="label">$T('opt-auto_disconnect'):</span>
|
||||
<input class="radio" type="checkbox" name="auto_disconnect" value="1" <!--#if $auto_disconnect > 0 then 'checked="1"' else ""#--> />
|
||||
<span class="tips">$T('explain-auto_disconnect')</span></label>
|
||||
@@ -193,6 +208,38 @@
|
||||
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('swtag-quota')</legend>
|
||||
<hr />
|
||||
|
||||
<span class="label">$T('opt-quota_size'):</span>
|
||||
<input type="text" name="quota_size" value="$quota_size"/>
|
||||
<span class="tips">$T('explain-quota_size')</span></label>
|
||||
<br class="clear" />
|
||||
|
||||
<span class="label">$T('opt-quota_period'):</span>
|
||||
<select name="quota_period" id="quota_period" class="select">
|
||||
<option value="m" <!--#if $quota_period == "m" then 'selected' else ''#--> >$T('month')</option>
|
||||
<option value="w" <!--#if $quota_period == "w" then 'selected' else ''#--> >$T('week')</option>
|
||||
<option value="d" <!--#if $quota_period == "d" then 'selected' else ''#--> >$T('day')</option>
|
||||
<option value="x" <!--#if $quota_period == "x" then 'selected' else ''#--> >$T('manual')</option>
|
||||
</select>
|
||||
<span class="tips">$T('explain-quota_period')</span>
|
||||
<br class="clear" />
|
||||
|
||||
|
||||
<span class="label">$T('opt-quota_day'):</span>
|
||||
<input type="text" name="quota_day" value="$quota_day"/>
|
||||
<span class="tips">$T('explain-quota_day')</span></label>
|
||||
<br class="clear" />
|
||||
|
||||
<label><span class="label">$T('opt-quota_resume'):</span>
|
||||
<input class="radio" type="checkbox" name="quota_resume" value="1" <!--#if $quota_resume > 0 then 'checked="1"' else ""#--> />
|
||||
<span class="tips">$T('explain-quota_resume')</span></label>
|
||||
<br class="clear" />
|
||||
|
||||
</fieldset>
|
||||
|
||||
|
||||
<p>
|
||||
<input type="button" size="40" value="$T('button-saveChanges')" onclick="javascript:submitconfig('config/switches/saveSwitches', this, 'configSwitches')">
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<div class="centerLinks"><br />
|
||||
<a onClick="if(confirm('$T('purgeHistConf')')){javascript:loadSearch('history/purge', 'historySearch', 'limit=$limit&start=0', -1,this.parentNode.parentNode.id);}">$T('smpl-purgehist')</a> |
|
||||
<a onClick="if(confirm('$T('smpl-purgefailhistOK?')')){javascript:loadSearch('history/purge_failed', 'historySearch', 'limit=$limit&start=0', -1,this.parentNode.parentNode.id);}">$T('smpl-purgefailhist')</a> |
|
||||
<a onClick="if(confirm('$T('smpl-purgefailhistOK?')')){javascript:loadSearch('history/purge_failed', 'historySearch', 'limit=$limit&start=0&del_files=1', -1,this.parentNode.parentNode.id);}">$T('purgeFailed-Files')</a> |
|
||||
<a onClick="javascript:loadSearch('history/tog_verbose', 'historySearch', 'limit=$limit&start=0', -1,this.parentNode.parentNode.id);"><!--#if $isverbose then $T('hideDetails') else $T('showDetails')#--></a> |
|
||||
<a onClick="javascript:loadSearch('history/tog_failed_only', 'historySearch', 'limit=$limit&start=0', -1,this.parentNode.parentNode.id);"><!--#if $failed_only then $T('showAllHis') else $T('showFailedHis')#--></a>
|
||||
</span>
|
||||
@@ -35,7 +36,7 @@
|
||||
<td>$line.name<!--#if $line.action_line#--> - <span class="action_message">$line.action_line</span><!--#else if $line.fail_message#--> - <span class="fail_message">$line.fail_message</span><!--#end if#--></td>
|
||||
<td>
|
||||
<!--#if $line.report#-->
|
||||
<a href="https://www.newzbin.com/browse/post/$line.report"><img class="imglink" src="static/images/newzbin.png" /></a>
|
||||
<a href="https://$newzbin_url/browse/post/$line.report"><img class="imglink" src="static/images/newzbin.png" /></a>
|
||||
<!--#end if#-->
|
||||
<!--#if $line.url_info#-->
|
||||
<a href="$line.url_info"><img class="imglink" src="static/images/browser.png" /></a>
|
||||
@@ -98,6 +99,9 @@ t = time.strftime(time_format("%H:%M:%S on %A %d %B %Y"), completed)
|
||||
<!--#end if#-->
|
||||
</table>
|
||||
<div class="centerLinks">
|
||||
<!--#if $have_quota#-->
|
||||
$T('quota-left'): <strong>$left_quota ⁄ $quota</strong> |
|
||||
<!--#end if#-->
|
||||
$T('smpl-size'): <span class="bold">$total_size</span> | $T('thisMonth'): <span class="bold">$month_size</span> | $T('thisWeek'): <span class="bold">$week_size</span> | $T('today'): <span class="bold">$day_size</span>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
@@ -424,7 +424,7 @@ function loadtitle() {
|
||||
case 'queue':
|
||||
lr('queue/','limit=15',1);
|
||||
break;
|
||||
case 'connections':
|
||||
case 'status':
|
||||
lr(url,'',1)
|
||||
default:
|
||||
lr(url)
|
||||
@@ -732,7 +732,7 @@ function lrb(url, extra, refresh)
|
||||
|
||||
function testemail()
|
||||
{
|
||||
d = doSimpleXMLHttpRequest('config/email/testmail?session='+session);
|
||||
d = doSimpleXMLHttpRequest('config/notify/testmail?session='+session);
|
||||
d.addCallback(function (d)
|
||||
{
|
||||
alert("$T('smpl-emailsent')");
|
||||
@@ -740,9 +740,19 @@ function lrb(url, extra, refresh)
|
||||
d.addErrback(handleServerError);
|
||||
}
|
||||
|
||||
function testnotification()
|
||||
{
|
||||
d = doSimpleXMLHttpRequest('config/notify/testnotification?session='+session);
|
||||
d.addCallback(function (d)
|
||||
{
|
||||
alert("$T('smpl-notesent')");
|
||||
});
|
||||
d.addErrback(handleServerError);
|
||||
}
|
||||
|
||||
function unblock_server(host, port)
|
||||
{
|
||||
d = doSimpleXMLHttpRequest('connections/unblock_server?server='+host+':'+port+'&session='+session);
|
||||
d = doSimpleXMLHttpRequest('status/unblock_server?server='+host+':'+port+'&session='+session);
|
||||
}
|
||||
|
||||
function getBookmarks()
|
||||
@@ -750,6 +760,11 @@ function lrb(url, extra, refresh)
|
||||
d = doSimpleXMLHttpRequest('tapi?mode=newzbin&name=get_bookmarks&session='+session);
|
||||
}
|
||||
|
||||
function resetQuota()
|
||||
{
|
||||
d = doSimpleXMLHttpRequest('tapi?mode=reset_quota&session='+session);
|
||||
}
|
||||
|
||||
function changequeueoptions(page)
|
||||
{
|
||||
d = doSimpleXMLHttpRequest('queue/'+page);
|
||||
@@ -1015,10 +1030,6 @@ function loadingJSON(){
|
||||
document.getElementById("mbtotal").innerHTML = info["mb"].toFixed(2);
|
||||
document.getElementById("ds1").innerHTML = info["diskspace1"].toFixed(2);
|
||||
document.getElementById("ds2").innerHTML = info["diskspace2"].toFixed(2);
|
||||
//var perc1 = 1 - (info["jobs"][0]["mbleft"].toFixed(2) / info["jobs"][0]["mb"].toFixed(2))
|
||||
//alert(info["jobs"][0]);
|
||||
if (info["jobs"]!="") document.getElementById("downloadinfo").innerHTML = "$T('smpl-downloading'): "+info["jobs"][0]["filename"];
|
||||
else document.getElementById("downloadinfo").innerHTML = "";
|
||||
document.getElementById("have_warnings").innerHTML = info["have_warnings"];
|
||||
load = document.getElementById("loadavg")
|
||||
if (load) load.innerHTML = info["loadavg"];
|
||||
@@ -1100,48 +1111,56 @@ function loadingJSON(){
|
||||
<br />
|
||||
<div class="centerLinks header-margin light-grey"><a onclick="javascript:toggle('addNew','',{duration:0.2})">[$T('smpl-toggleadd')]</a></div>
|
||||
</div>
|
||||
<!--#if $uniconfig#-->
|
||||
<!--#set prefix="."#-->
|
||||
<!--#else#-->
|
||||
<!--#set prefix="#"#-->
|
||||
<!--#end if#-->
|
||||
<div id="Content">
|
||||
<div id="Left">
|
||||
<ul id="menu">
|
||||
<li><a class="current" href="./">$T('menu-home')</a></li>
|
||||
<li><a href="#/queue/" onClick="lr('queue/', 'limit=15', 1, 0);">$T('menu-queue')</a></li>
|
||||
<li><a href="#/history/" onClick="lr('history/','limit=15', 1, 0);">$T('menu-history')</a></li>
|
||||
<li><a href="#/dv1/" onClick="lr('queue/','', 1, 1);lrb('history/','limit=15',1);">$T('smpl-dualView1')</a></li>
|
||||
<li><a href="#/dv2/" onClick="lr('queue/','', 1, 2);lrb('history/','limit=15',1);">$T('smpl-dualView2')</a></li>
|
||||
<li><a href="#/config/" onClick="toggle('hiddenNav','blind',{duration:0.2})">$T('menu-config')</a></li>
|
||||
<li><a href="#/queue/" onclick="lr('queue/', 'limit=15', 1, 0);">$T('menu-queue')</a></li>
|
||||
<li><a href="#/history/" onclick="lr('history/','limit=15', 1, 0);">$T('menu-history')</a></li>
|
||||
<li><a href="#/dv1/" onclick="lr('queue/','', 1, 1);lrb('history/','limit=15',1);">$T('smpl-dualView1')</a></li>
|
||||
<li><a href="#/dv2/" onclick="lr('queue/','', 1, 2);lrb('history/','limit=15',1);">$T('smpl-dualView2')</a></li>
|
||||
<li><a href="$prefix/config/" class="bold">$T('menu-config')</a> <a onclick="toggle('hiddenNav','blind',{duration:0.2})"><img src="static/images/bullet_arrow_down.png" border=0 /></a></li>
|
||||
<ul id="hiddenNav" class="secondul">
|
||||
<li><a class="config" href="#/config/general/" onClick="lr('config/general/','', 0, 0);">$T('cmenu-general')</a></li>
|
||||
<li><a class="config" href="#/config/directories/" onClick="lr('config/directories/','', 0, 0);">$T('cmenu-folders')</a> </li>
|
||||
<li><a class="config" href="#/config/switches/" onClick="lr('config/switches/','', 0, 0);">$T('cmenu-switches')</a> </li>
|
||||
<li><a class="config" href="#/config/server" onClick="lr('config/server/','', 0, 0);">$T('cmenu-servers')</a> </li>
|
||||
<li><a class="config" href="#/config/scheduling/" onClick="lr('config/scheduling/','', 0, 0);">$T('cmenu-scheduling')</a> </li>
|
||||
<li><a class="config" href="#/config/rss/" onClick="lr('config/rss/','', 0, 0);">$T('cmenu-rss')</a> </li>
|
||||
<li><a class="config" href="#/config/email/" onClick="lr('config/email/','', 0, 0);">$T('cmenu-email')</a></li>
|
||||
<li><a class="config" href="#/config/newzbin/" onClick="lr('config/newzbin/', '', 0, 0);">$T('cmenu-newzbin')</a></li>
|
||||
<li><a class="config" href="#/config/categories/" onClick="lr('config/categories/', '', 0, 0);">$T('cmenu-cat')</a></li>
|
||||
<li><a class="config" href="#/config/sorting/" onClick="lr('config/sorting/', '', 0, 0);">$T('cmenu-sorting')</a></li>
|
||||
<li><a class="config" href="$prefix/config/general/" onclick="lr('config/general/','', 0, 0);">$T('cmenu-general')</a></li>
|
||||
<li><a class="config" href="$prefix/config/folders/" onclick="lr('config/folders/','', 0, 0);">$T('cmenu-folders')</a> </li>
|
||||
<li><a class="config" href="$prefix/config/switches/" onclick="lr('config/switches/','', 0, 0);">$T('cmenu-switches')</a> </li>
|
||||
<li><a class="config" href="$prefix/config/server" onclick="lr('config/server/','', 0, 0);">$T('cmenu-servers')</a> </li>
|
||||
<li><a class="config" href="$prefix/config/scheduling/" onclick="lr('config/scheduling/','', 0, 0);">$T('cmenu-scheduling')</a> </li>
|
||||
<li><a class="config" href="$prefix/config/rss/" onclick="lr('config/rss/','', 0, 0);">$T('cmenu-rss')</a> </li>
|
||||
<li><a class="config" href="$prefix/config/notify/" onclick="lr('config/notify/','', 0, 0);">$T('cmenu-notif')</a></li>
|
||||
<li><a class="config" href="$prefix/config/indexers/" onclick="lr('config/indexers/', '', 0, 0);">$T('cmenu-newzbin')</a></li>
|
||||
<li><a class="config" href="$prefix/config/categories/" onclick="lr('config/categories/', '', 0, 0);">$T('cmenu-cat')</a></li>
|
||||
<li><a class="config" href="$prefix/config/sorting/" onclick="lr('config/sorting/', '', 0, 0);">$T('cmenu-sorting')</a></li>
|
||||
</ul>
|
||||
<li><a href="#/connections/" onClick="lr('connections/','', 1, 0);">$T('menu-cons')</a></li>
|
||||
<li><a href="#/connections/" onClick="lr('connections/','', 1, 0);">$T('smpl-warnings')(<span id="have_warnings">$have_warnings</span>)</a></li>
|
||||
<li><a href="#/status/" onclick="lr('status/','', 1, 0);">$T('menu-cons')</a></li>
|
||||
<li><a href="#/status/" onclick="lr('status/','', 1, 0);">$T('smpl-warnings')(<span id="have_warnings">$have_warnings</span>)</a></li>
|
||||
<br />
|
||||
<li><a class="bold" id="status2" onClick="toggle_paused()">$statusstr2</a> <a onClick="toggle('hiddenTimedPause','blind',{duration:0.2})"><img src="static/images/bullet_arrow_down.png" border=0 /></a></li>
|
||||
<li><a class="bold" id="status2" onclick="toggle_paused()">$statusstr2</a> <a onclick="toggle('hiddenTimedPause','blind',{duration:0.2})"><img src="static/images/bullet_arrow_down.png" border=0 /></a></li>
|
||||
<ul id="hiddenTimedPause" class="secondul">
|
||||
<li><a class="config" onClick="javascript:timedPause(5)">5 $T("minutes")</a></li>
|
||||
<li><a class="config" onClick="javascript:timedPause(15)">15 $T("minutes")</a></li>
|
||||
<li><a class="config" onClick="javascript:timedPause(30)">30 $T("minutes")</a></li>
|
||||
<li><a class="config" onClick="javascript:timedPause(60)">1 $T("hours")</a></li>
|
||||
<li><a class="config" onClick="javascript:timedPause(120)">2 $T("hours")</a></li>
|
||||
<li><a class="config" onClick="javascript:timedPause(180)">3 $T("hours")</a></li>
|
||||
<li><a class="config" onClick="javascript:timedPause(300)">5 $T("hours")</a></li>
|
||||
<li><a class="config" onClick="javascript:timedPause()">$T("smpl-custom")</a></li>
|
||||
<li><a class="config" onclick="javascript:timedPause(5)">5 $T("minutes")</a></li>
|
||||
<li><a class="config" onclick="javascript:timedPause(15)">15 $T("minutes")</a></li>
|
||||
<li><a class="config" onclick="javascript:timedPause(30)">30 $T("minutes")</a></li>
|
||||
<li><a class="config" onclick="javascript:timedPause(60)">1 $T("hours")</a></li>
|
||||
<li><a class="config" onclick="javascript:timedPause(120)">2 $T("hours")</a></li>
|
||||
<li><a class="config" onclick="javascript:timedPause(180)">3 $T("hours")</a></li>
|
||||
<li><a class="config" onclick="javascript:timedPause(300)">5 $T("hours")</a></li>
|
||||
<li><a class="config" onclick="javascript:timedPause()">$T("smpl-custom")</a></li>
|
||||
|
||||
</ul>
|
||||
<!--#if $varExists('newzbinDetails')#-->
|
||||
<li><a onClick="getBookmarks()">$T('smpl-getbookmarks')</a></li>
|
||||
<li><a onclick="getBookmarks()">$T('smpl-getbookmarks')</a></li>
|
||||
<!--#end if#-->
|
||||
<!--#if $have_quota#-->
|
||||
<li><a onclick="resetQuota()">$T('link-resetQuota')</a></li>
|
||||
<!--#end if#-->
|
||||
<br />
|
||||
<li><a style="text-decoration:underline;cursor:pointer;" onClick="if(confirm('$T('smpl-restartOK?')')){restart()}">$T('button-restart')</a></li>
|
||||
<li><a style="text-decoration:underline;cursor:pointer;" onClick="if(confirm('$T('shutdownOK?')')){shutdown()}">$T('link-shutdown')</a></li>
|
||||
<li><a style="text-decoration:underline;cursor:pointer;" onclick="if(confirm('$T('smpl-restartOK?')')){restart()}">$T('button-restart')</a></li>
|
||||
<li><a style="text-decoration:underline;cursor:pointer;" onclick="if(confirm('$T('shutdownOK?')')){shutdown()}">$T('link-shutdown')</a></li>
|
||||
<br/>
|
||||
<li><a href="$helpuri" target="_blank">$T('menu-wiki')</a></li>
|
||||
<li><a href="http://forums.sabnzbd.org" target="_blank">$T('menu-forums')</a></li>
|
||||
@@ -1252,7 +1271,6 @@ function loadingJSON(){
|
||||
</div>
|
||||
<div id="Footer">
|
||||
<div id="divchart"><canvas id="graph" height="100" width="700"></canvas></div>
|
||||
<span id="downloadinfo"></span><br /><br />
|
||||
<p id="versions">$T("smpl-refreshr"): <select id="refreshrate" onchange="javascript:applyrefresh(this.options[this.selectedIndex].value)">
|
||||
<option value="2" >2 $T("seconds")</option>
|
||||
<option value="3" >3 $T("seconds")</option>
|
||||
@@ -1265,7 +1283,7 @@ function loadingJSON(){
|
||||
<option value="300" >5 $T("minutes")</option>
|
||||
<option value="0" >$T("none")</option>
|
||||
</select>
|
||||
<br />SABnzbd $T('version'): $version | smpl $T('version'): 1.3</a></p>
|
||||
<br />SABnzbd $T('version'): $version | smpl skin</a></p>
|
||||
<!--#if $warning#-->
|
||||
<h2>$T('ft-warning')</h2>
|
||||
<b>$warning</b><br />
|
||||
|
||||
@@ -91,6 +91,7 @@ $T('smpl-timeleft'): <strong>$timeleft</strong> $T('eta'): <strong>$eta</strong>
|
||||
<option value="1" <!--#if $slot.priority == "High" then "selected" else ""#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $slot.priority == "Normal" then "selected" else ""#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $slot.priority == "Low" then "selected" else ""#-->>$T('pr-low')</option>
|
||||
<option value="-4" <!--#if $slot.priority == "Stop" then "selected" else ""#-->>$T('pr-stop')</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
<!--#end if#-->
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<script type="text/javascript">
|
||||
window.onload = function() {
|
||||
location = "../#/connections"
|
||||
location = "../#/status"
|
||||
};
|
||||
</script>
|
||||
<h3>$T('connections')</h3>
|
||||
<a class="config" onClick="lr('connections/disconnect', '', '-1', this.parentNode.id);">$T('link-forceDisc')</a> |
|
||||
<a class="config" onClick="lr('status/disconnect', '', '-1', this.parentNode.id);">$T('link-forceDisc')</a> |
|
||||
<a class="config" onClick="testemail();">$T('link-testEmail')</a> |
|
||||
<a class="config" href="connections/showlog?session=$session">$T('link-showLog')</a>
|
||||
<a class="config" href="status/showlog?session=$session">$T('link-showLog')</a>
|
||||
$T('logging'):
|
||||
<select onChange="javascript:lr('connections/change_loglevel','loglevel='+this.options[this.selectedIndex].value)">
|
||||
<select onChange="javascript:lr('status/change_loglevel','loglevel='+this.options[this.selectedIndex].value)">
|
||||
<option value="0" <!--#if $loglevel == "0" then "selected" else ""#-->>$T('log-errWarn')</option>
|
||||
<option value="1" <!--#if $loglevel == "1" then "selected" else ""#-->>$T('log-info')</option>
|
||||
<option value="2" <!--#if $loglevel == "2" then "selected" else ""#-->>$T('log-debug')</option>
|
||||
@@ -19,7 +19,7 @@ $T('logging'):
|
||||
<li>
|
||||
$server[0]: $server[2] <!--#if int($server[4])#--><img src="static/images/nuvola/kgpg.png" /><!--#end if#-->
|
||||
<!--#if not $server[5]#-->
|
||||
<a class="config" href="./connections/unblock_server?server=$server[0]&session=$session">
|
||||
<a class="config" href="./status/unblock_server?server=$server[0]&session=$session">
|
||||
($T('server-blocked'))</a>
|
||||
$server[6]
|
||||
<!--#end if#-->
|
||||
@@ -38,7 +38,7 @@ $T('logging'):
|
||||
$lastmail
|
||||
<!--#end if#-->
|
||||
<!--#if $warnings#-->
|
||||
<h2>$T('lastWarnings') (<a class="config" onClick="lr('connections/clearwarnings','', '-1', this.parentNode.id);">$T('clearWarnings')</a>)</h2>
|
||||
<h2>$T('lastWarnings') (<a class="config" onClick="lr('status/clearwarnings','', '-1', this.parentNode.id);">$T('clearWarnings')</a>)</h2>
|
||||
<!--#for $warn in $warnings#-->
|
||||
$warn<br/>
|
||||
<!--#end for#-->
|
||||
@@ -64,7 +64,7 @@ $T('explain-orphans')<br/>
|
||||
<form action="delete" method="get">
|
||||
<input type="hidden" value="$folder" name="name">
|
||||
<input type="hidden" value="$session" name="session">
|
||||
<input type="submit" onclick="this.form.action='connections/delete?session=$session'; this.form.submit(); return false;" value="$T('button-delCat')"/>
|
||||
<input type="submit" onclick="this.form.action='status/delete?session=$session'; this.form.submit(); return false;" value="$T('button-delCat')"/>
|
||||
</form>
|
||||
</td>
|
||||
|
||||
@@ -72,7 +72,7 @@ $T('explain-orphans')<br/>
|
||||
<form action="add" method="get">
|
||||
<input type="hidden" value="$folder" name="name">
|
||||
<input type="hidden" value="$session" name="session">
|
||||
<input type="submit" onclick="this.form.action='connections/add?session=$session'; this.form.submit(); return false;" value="$T('button-add')"/>
|
||||
<input type="submit" onclick="this.form.action='status/add?session=$session'; this.form.submit(); return false;" value="$T('button-add')"/>
|
||||
</form>
|
||||
</td>
|
||||
|
||||
@@ -86,6 +86,6 @@ $T('explain-orphans')<br/>
|
||||
<!--#end if#-->
|
||||
$T('explain-Repair')<br/>
|
||||
<form action="saveGeneral" method="post">
|
||||
<input type="submit" onclick="this.form.action='../config/repair?session=$session'; this.form.submit(); return false;" value="$T('button-repair')"/>
|
||||
<input type="submit" onclick="this.form.action='config/repair?session=$session'; this.form.submit(); return false;" value="$T('button-repair')"/>
|
||||
</form>
|
||||
|
||||
@@ -13,7 +13,7 @@ $(document).ready(function() {
|
||||
$("#serverTest").click(function(){
|
||||
$('#serverResponse').html(txtChecking);
|
||||
$.getJSON(
|
||||
"/tapi?mode=config&name=test_server&output=json",
|
||||
"../tapi?mode=config&name=test_server&output=json",
|
||||
$("form").serialize(),
|
||||
function(result) {
|
||||
if (result.value.result){
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<form action="./four" method="post" autocomplete="off">
|
||||
<p>$T('wizard-index-explain')</p>
|
||||
<div id="serverDetails">
|
||||
<h3><a href="http://newzbin.com" target="_blank">Newzbin.com</a> ($T('wizard-optional'))</h3>
|
||||
<h3><a href="http://$newzbin_url" target="_blank">Newzbin2.es</a> ($T('wizard-optional'))</h3>
|
||||
<label class="label">$T('srv-username'):</label><input type="text" size="20" value="$newzbin_user" name="newzbin_user">
|
||||
<br class="clear" />
|
||||
<label class="label">$T('srv-password'):</label><input type="password" size="20" value="$newzbin_pass" name="newzbin_pass">
|
||||
|
||||
@@ -1,21 +1,16 @@
|
||||
The module feedparser.py-4.1 is (c) Mark Pilgrim
|
||||
The module feedparser.py-5.1 is (c) Mark Pilgrim and Kurt McKee
|
||||
|
||||
We use only the feedparser itself, all additional material
|
||||
was removed.
|
||||
We use only the feedparser itself, all additional material was removed.
|
||||
|
||||
Home of the feedparser module:
|
||||
http://www.feedparser.org
|
||||
https://code.google.com/p/feedparser
|
||||
|
||||
It is covered by the following license.
|
||||
|
||||
|
||||
Universal Feed Parser (feedparser.py), its testing harness (feedparsertest.py),
|
||||
and its unit tests (everything in the tests/ directory) are released under the
|
||||
following license:
|
||||
|
||||
----- begin license block -----
|
||||
|
||||
Copyright (c) 2002-2005, Mark Pilgrim
|
||||
Copyright (c) 2010-2011 Kurt McKee <contactme@kurtmckee.org>
|
||||
Copyright (c) 2002-2008 Mark Pilgrim
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
@@ -37,6 +32,6 @@ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
POSSIBILITY OF SUCH DAMAGE."""
|
||||
|
||||
----- end license block -----
|
||||
|
||||
29
licenses/License-gntp.txt
Normal file
@@ -0,0 +1,29 @@
|
||||
The module gntp is (C) Paul Traylor
|
||||
|
||||
Home of the module:
|
||||
https://github.com/kfdm/gntp/
|
||||
|
||||
It is covered by the following license.
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
Copyright (c) 2011 Paul Traylor
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
-------------------------------------------------------------------------
|
||||
8
licenses/License-systrayicon.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
On http://www.brunningonline.net/simon/blog/archives/001835.html,
|
||||
the author licensed SysTrayIcon.py under a variant of the WTFPL:
|
||||
|
||||
> Any road up, help yourself. Consider SysTrayIcon.py to be under an
|
||||
> "Aleister Crowley" style license - "Do what thou wilt shall be the
|
||||
> only law".
|
||||
>
|
||||
> Err, but don't sue me if it doesn't work. ;-)
|
||||
BIN
osx/image/sabnzbd.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
osx/image/sabnzbd_leopard.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
34
osx/unrar/license.txt
Normal file
@@ -0,0 +1,34 @@
|
||||
****** ***** ****** UnRAR - free utility for RAR archives
|
||||
** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
****** ******* ****** License for use and distribution of
|
||||
** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
** ** ** ** ** ** FREEWARE version
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
The UnRAR utility is freeware. This means:
|
||||
|
||||
1. All copyrights to RAR and the utility UnRAR are exclusively
|
||||
owned by the author - Alexander Roshal.
|
||||
|
||||
2. The UnRAR utility may be freely distributed. It is allowed
|
||||
to distribute UnRAR inside of other software packages.
|
||||
|
||||
3. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS".
|
||||
NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT
|
||||
YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS,
|
||||
DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING
|
||||
OR MISUSING THIS SOFTWARE.
|
||||
|
||||
4. Neither RAR binary code, WinRAR binary code, UnRAR source or UnRAR
|
||||
binary code may be used or reverse engineered to re-create the RAR
|
||||
compression algorithm, which is proprietary, without written
|
||||
permission of the author.
|
||||
|
||||
5. If you don't agree with terms of the license you must remove
|
||||
UnRAR files from your storage devices and cease to use the
|
||||
utility.
|
||||
|
||||
Thank you for your interest in RAR and UnRAR.
|
||||
|
||||
|
||||
Alexander L. Roshal
|
||||
BIN
osx/unrar/unrar
175
package.py
@@ -34,6 +34,9 @@ except ImportError:
|
||||
try:
|
||||
import py2app
|
||||
from setuptools import setup
|
||||
OSX_LION = [int(n) for n in platform.mac_ver()[0].split('.')] >= [10, 7, 0]
|
||||
OSX_SL = not OSX_LION and [int(n) for n in platform.mac_ver()[0].split('.')] >= [10, 6, 0]
|
||||
OSX_LEOPARD = not (OSX_LION or OSX_SL)
|
||||
except ImportError:
|
||||
py2app = None
|
||||
|
||||
@@ -48,7 +51,8 @@ def DeleteFiles(name):
|
||||
''' Delete one file or set of files from wild-card spec '''
|
||||
for f in glob.glob(name):
|
||||
try:
|
||||
os.remove(f)
|
||||
if os.path.exists(f):
|
||||
os.remove(f)
|
||||
except:
|
||||
print "Cannot remove file %s" % f
|
||||
exit(1)
|
||||
@@ -70,26 +74,38 @@ def CheckPath(name):
|
||||
|
||||
|
||||
def PatchVersion(name):
|
||||
""" Patch in the Bazaar baseline number, but only when this is
|
||||
""" Patch in the Git commit hash, but only when this is
|
||||
an unmodified checkout
|
||||
"""
|
||||
global my_version, my_baseline
|
||||
|
||||
commit = ''
|
||||
try:
|
||||
pipe = subprocess.Popen(BzrVersion, shell=True, stdout=subprocess.PIPE).stdout
|
||||
pipe = subprocess.Popen(GitVersion, shell=True, stdout=subprocess.PIPE).stdout
|
||||
for line in pipe.read().split('\n'):
|
||||
if 'revno: ' in line:
|
||||
bzr = line.split(' ')[1].strip()
|
||||
if 'commit ' in line:
|
||||
commit = line.split(' ')[1].strip()
|
||||
break
|
||||
pipe.close()
|
||||
except:
|
||||
pass
|
||||
print 'Cannot run %s' % GitVersion
|
||||
exit(1)
|
||||
|
||||
if not bzr:
|
||||
print "WARNING: Cannot run %s" % BzrVersion
|
||||
bzr = 'unknown'
|
||||
state = ' (not committed)'
|
||||
try:
|
||||
pipe = subprocess.Popen(GitStatus, shell=True, stdout=subprocess.PIPE).stdout
|
||||
for line in pipe.read().split('\n'):
|
||||
if 'nothing to commit' in line:
|
||||
state = ''
|
||||
break
|
||||
pipe.close()
|
||||
except:
|
||||
print 'Cannot run %s' % GitStatus
|
||||
exit(1)
|
||||
|
||||
if not (bzr and bzr.isdigit()):
|
||||
bzr = 'unknown'
|
||||
if not commit:
|
||||
print "WARNING: Cannot run %s" % GitVersion
|
||||
commit = 'unknown'
|
||||
|
||||
try:
|
||||
ver = open(VERSION_FILE, 'rb')
|
||||
@@ -99,12 +115,12 @@ def PatchVersion(name):
|
||||
print "WARNING: cannot patch " + VERSION_FILE
|
||||
return
|
||||
|
||||
my_baseline = bzr
|
||||
my_baseline = commit + state
|
||||
my_version = name
|
||||
|
||||
regex = re.compile(r'__baseline__\s+=\s+"\w*"')
|
||||
text = re.sub(r'__baseline__\s*=\s*"[^"]*"', '__baseline__ = "%s"' % bzr, text)
|
||||
text = re.sub(r'__version__\s*=\s*"[^"]*"', '__version__ = "%s"' % name, text)
|
||||
text = re.sub(r'__baseline__\s*=\s*"[^"]*"', '__baseline__ = "%s"' % my_baseline, text)
|
||||
text = re.sub(r'__version__\s*=\s*"[^"]*"', '__version__ = "%s"' % my_version, text)
|
||||
|
||||
try:
|
||||
ver = open(VERSION_FILE, 'wb')
|
||||
@@ -120,14 +136,14 @@ def PairList(src):
|
||||
A dir returns for its root and each of its subdirs
|
||||
(path, <list-of-files>)
|
||||
Always return paths with Unix slashes.
|
||||
Skip all Bazaar elements, .bak .pyc .pyo and *.~*
|
||||
Skip all Git elements, .bak .pyc .pyo and *.~*
|
||||
"""
|
||||
lst = []
|
||||
for item in src:
|
||||
if item.endswith('/'):
|
||||
for root, dirs, files in os.walk(item.rstrip('/\\')):
|
||||
path = root.replace('\\', '/')
|
||||
if path.find('.bzr') < 0:
|
||||
if path.find('.git') < 0:
|
||||
flist = []
|
||||
for file in files:
|
||||
if not (file.endswith('.bak') or file.endswith('.pyc') or file.endswith('.pyo') or '~' in file):
|
||||
@@ -239,18 +255,27 @@ def check_runtimes():
|
||||
if path:
|
||||
path = os.path.join(path, 'Bazaar')
|
||||
if not os.path.exists(path):
|
||||
path = None
|
||||
if not path:
|
||||
print 'Cannot find runtime libraries, have you installed Bazaar'
|
||||
print 'in %s ?' % path
|
||||
exit(1)
|
||||
print 'Cannot find runtime libraries, have you installed Bazaar'
|
||||
print 'in %s ?' % path
|
||||
exit(1)
|
||||
return path
|
||||
|
||||
def write_dll_message(path):
|
||||
f = open(path, 'w')
|
||||
f.write('''
|
||||
**** IMPORTANT ****
|
||||
|
||||
If you get a Windows error message, claiming that DLL files are missing,
|
||||
please install "Microsoft Visual C++ 2008 Redistributable Package (x86)".
|
||||
Download from http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=29
|
||||
Install this and *not* the SP1 package (or install both).
|
||||
|
||||
''')
|
||||
f.close()
|
||||
|
||||
print sys.argv[0]
|
||||
|
||||
Bazaar = CheckPath('bzr')
|
||||
Git = CheckPath('git')
|
||||
ZipCmd = CheckPath('zip')
|
||||
UnZipCmd = CheckPath('unzip')
|
||||
if os.name == 'nt':
|
||||
@@ -258,12 +283,13 @@ if os.name == 'nt':
|
||||
else:
|
||||
NSIS = '-'
|
||||
|
||||
BzrRevertApp = Bazaar + ' revert '
|
||||
BzrUpdateApp = Bazaar + ' update '
|
||||
BzrRevert = Bazaar + ' revert ' + VERSION_FILE
|
||||
BzrVersion = Bazaar + ' version-info'
|
||||
GitRevertApp = Git + ' checkout -- '
|
||||
#GitUpdateApp = Git + ' update '
|
||||
GitRevertVersion = GitRevertApp + ' ' + VERSION_FILE
|
||||
GitVersion = Git + ' log -1'
|
||||
GitStatus = Git + ' status'
|
||||
|
||||
if not (BzrVersion and BzrRevert and ZipCmd and UnZipCmd and NSIS):
|
||||
if not (Git and ZipCmd and UnZipCmd and NSIS):
|
||||
exit(1)
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
@@ -290,6 +316,7 @@ fileIns = prod + '-win32-setup.exe'
|
||||
fileBin = prod + '-win32-bin.zip'
|
||||
fileSrc = prod + '-src.tar.gz'
|
||||
fileDmg = prod + '-osx.dmg'
|
||||
fileDmgLp = prod + '-osx-leopard.dmg'
|
||||
fileOSr = prod + '-osx-src.tar.gz'
|
||||
fileImg = prod + '.sparseimage'
|
||||
|
||||
@@ -299,6 +326,7 @@ PatchVersion(release)
|
||||
|
||||
# List of data elements, directories end with a '/'
|
||||
data_files = [
|
||||
'ABOUT.txt',
|
||||
'README.txt',
|
||||
'INSTALL.txt',
|
||||
'GPL2.txt',
|
||||
@@ -306,7 +334,6 @@ data_files = [
|
||||
'CHANGELOG.txt',
|
||||
'COPYRIGHT.txt',
|
||||
'ISSUES.txt',
|
||||
'nzb.ico',
|
||||
'Sample-PostProc.cmd',
|
||||
'Sample-PostProc.sh',
|
||||
'PKG-INFO',
|
||||
@@ -318,9 +345,11 @@ data_files = [
|
||||
'interfaces/Plush/',
|
||||
'interfaces/Mobile/',
|
||||
'interfaces/wizard/',
|
||||
'interfaces/Config/',
|
||||
'win/par2/',
|
||||
'win/unzip/',
|
||||
'win/unrar/'
|
||||
'win/unrar/',
|
||||
'icons/'
|
||||
]
|
||||
|
||||
options = dict(
|
||||
@@ -341,15 +370,37 @@ options = dict(
|
||||
if target == 'app':
|
||||
if not platform.system() == 'Darwin':
|
||||
print "Sorry, only works on Apple OSX!"
|
||||
os.system(BzrRevert)
|
||||
os.system(GitRevertVersion)
|
||||
exit(1)
|
||||
|
||||
# Check which Python flavour
|
||||
apple_py = 'ActiveState' not in sys.copyright
|
||||
|
||||
#Create sparseimage from template
|
||||
os.system("unzip sabnzbd-template.sparseimage.zip")
|
||||
os.system("unzip osx/image/template.sparseimage.zip")
|
||||
os.rename('sabnzbd-template.sparseimage', fileImg)
|
||||
|
||||
#mount sparseimage and modify volume label
|
||||
os.system("hdiutil mount %s | grep /Volumes/SABnzbd >mount.log" % (fileImg))
|
||||
|
||||
# Select OSX version specific background image
|
||||
# Take care to preserve the special attributes of the background image file
|
||||
if OSX_LION:
|
||||
# Lion and higher: generates SnowLeopard/Lion DMG
|
||||
f = open('osx/image/sabnzbd.png', 'rb')
|
||||
png = f.read()
|
||||
f.close()
|
||||
else:
|
||||
# Snow Leopard and lower: generates Leopard DMG
|
||||
fileDmg = fileDmgLp
|
||||
f = open('osx/image/sabnzbd_leopard.png', 'rb')
|
||||
png = f.read()
|
||||
f.close()
|
||||
f = open('/Volumes/SABnzbd/sabnzbd.png', 'wb')
|
||||
f.write(png)
|
||||
f.close()
|
||||
|
||||
# Rename the volume
|
||||
fp = open('mount.log', 'r')
|
||||
data = fp.read()
|
||||
fp.close()
|
||||
@@ -366,6 +417,11 @@ if target == 'app':
|
||||
#build SABnzbd.py
|
||||
sys.argv[1] = 'py2app'
|
||||
|
||||
# Due to ApplePython bug
|
||||
if apple_py:
|
||||
sys.argv.append('-p');
|
||||
sys.argv.append('email');
|
||||
|
||||
APP = ['SABnzbd.py']
|
||||
DATA_FILES = ['interfaces', 'locale', 'email', ('',glob.glob("osx/resources/*"))]
|
||||
|
||||
@@ -378,7 +434,7 @@ if target == 'app':
|
||||
LSTypeIsPackage = 0,
|
||||
NSPersistentStoreTypeKey = 'Binary',
|
||||
)
|
||||
OPTIONS = {'argv_emulation': True, 'iconfile': 'osx/resources/sabnzbdplus.icns','plist': {
|
||||
OPTIONS = {'argv_emulation': not apple_py, 'iconfile': 'osx/resources/sabnzbdplus.icns','plist': {
|
||||
'NSUIElement':1,
|
||||
'CFBundleShortVersionString':release,
|
||||
'NSHumanReadableCopyright':'The SABnzbd-Team',
|
||||
@@ -399,19 +455,23 @@ if target == 'app':
|
||||
os.system("cp -pR osx/par2/ dist/SABnzbd.app/Contents/Resources/osx/par2>/dev/null")
|
||||
os.system("mkdir dist/SABnzbd.app/Contents/Resources/osx/unrar>/dev/null")
|
||||
os.system("cp -pR osx/unrar/ dist/SABnzbd.app/Contents/Resources/osx/unrar>/dev/null")
|
||||
os.system("find dist/SABnzbd.app -name .bzr | xargs rm -rf")
|
||||
os.system("cp icons/sabnzbd.ico dist/SABnzbd.app/Contents/Resources >/dev/null")
|
||||
os.system("find dist/SABnzbd.app -name .git | xargs rm -rf")
|
||||
|
||||
#copy builded app to mounted sparseimage
|
||||
#copy app to mounted sparseimage
|
||||
os.system("cp -r dist/SABnzbd.app /Volumes/%s/>/dev/null" % volume)
|
||||
|
||||
#Create src tar.gz
|
||||
#os.system('tar -czf %s --exclude ".bzr" --exclude "sab*.zip" --exclude "SAB*.tar.gz" --exclude "*.cmd" --exclude "*.pyc" '
|
||||
# '--exclude "*.sparseimage" --exclude "dist" --exclude "build" --exclude "*.nsi" --exclude "win"'
|
||||
# './ >/dev/null' % (fileOSr) )
|
||||
print 'Create src %s' % fileOSr
|
||||
os.system('tar -czf %s --exclude ".git*" --exclude "sab*.zip" --exclude "SAB*.tar.gz" --exclude "*.cmd" --exclude "*.pyc" '
|
||||
'--exclude "*.sparseimage" --exclude "dist" --exclude "build" --exclude "*.nsi" --exclude "win" --exclude "*.dmg" '
|
||||
'./ >/dev/null' % (fileOSr) )
|
||||
|
||||
# Copy README.txt
|
||||
os.system("cp README.rtf /Volumes/%s/" % volume)
|
||||
|
||||
# Remove site.py to prevent re-compilation (otherwise the OSX Firewall may complain)
|
||||
os.remove('/Volumes/%s/SABnzbd.app/Contents/Resources/site.py' % volume)
|
||||
|
||||
#Unmount sparseimage
|
||||
os.system("hdiutil eject /Volumes/%s/>/dev/null" % volume)
|
||||
|
||||
@@ -427,18 +487,17 @@ if target == 'app':
|
||||
os.system("hdiutil internet-enable %s" % fileDmg)
|
||||
|
||||
|
||||
os.system(BzrRevertApp + "NSIS_Installer.nsi")
|
||||
os.system(BzrRevertApp + VERSION_FILEAPP)
|
||||
os.system(BzrRevertApp + VERSION_FILE)
|
||||
os.system(BzrUpdateApp)
|
||||
os.system(GitRevertApp + "NSIS_Installer.nsi")
|
||||
os.system(GitRevertApp + VERSION_FILEAPP)
|
||||
os.system(GitRevertApp + VERSION_FILE)
|
||||
|
||||
elif target in ('binary', 'installer'):
|
||||
if not py2exe:
|
||||
print "Sorry, only works on Windows!"
|
||||
os.system(BzrRevert)
|
||||
os.system(GitRevertVersion)
|
||||
exit(1)
|
||||
|
||||
run_times = check_runtimes()
|
||||
#run_times = check_runtimes()
|
||||
|
||||
# Create MO files
|
||||
os.system('tools\\make_mo.py all')
|
||||
@@ -447,7 +506,7 @@ elif target in ('binary', 'installer'):
|
||||
options['description'] = 'SABnzbd ' + str(my_version)
|
||||
|
||||
sys.argv[1] = 'py2exe'
|
||||
program = [ {'script' : 'SABnzbd.py', 'icon_resources' : [(0, "sabnzbd.ico")] } ]
|
||||
program = [ {'script' : 'SABnzbd.py', 'icon_resources' : [(0, "icons/sabnzbd.ico")] } ]
|
||||
options['options'] = {"py2exe":
|
||||
{
|
||||
"bundle_files": 3,
|
||||
@@ -513,14 +572,21 @@ elif target in ('binary', 'installer'):
|
||||
rename_file('dist', Win32HelperName, Win32ServiceHelpName)
|
||||
|
||||
|
||||
############################
|
||||
# Remove unwanted system DLL files that Py2Exe copies when running on Win7
|
||||
DeleteFiles(r'dist\lib\API-MS-Win-*.dll')
|
||||
DeleteFiles(r'dist\lib\MSWSOCK.DLL')
|
||||
DeleteFiles(r'dist\lib\POWRPROF.DLL')
|
||||
|
||||
############################
|
||||
# Copy MS runtime files or Curl
|
||||
if run_times:
|
||||
# MS Runtimes for Python 2.6+
|
||||
shutil.copy2(os.path.join(run_times, r'Microsoft.VC90.CRT.manifest'), r'dist')
|
||||
shutil.copy2(os.path.join(run_times, r'msvcp90.dll'), r'dist')
|
||||
shutil.copy2(os.path.join(run_times, r'msvcr90.dll'), r'dist')
|
||||
shutil.copy2(os.path.join(run_times, r'lib\Microsoft.VC90.CRT.manifest'), r'dist\lib')
|
||||
if sys.version > (2, 5):
|
||||
#Won't work with OpenSSL DLLs :(
|
||||
#shutil.copy2(os.path.join(run_times, r'Microsoft.VC90.CRT.manifest'), r'dist')
|
||||
#shutil.copy2(os.path.join(run_times, r'msvcp90.dll'), r'dist')
|
||||
#shutil.copy2(os.path.join(run_times, r'msvcr90.dll'), r'dist')
|
||||
#shutil.copy2(os.path.join(run_times, r'lib\Microsoft.VC90.CRT.manifest'), r'dist\lib')
|
||||
pass
|
||||
else:
|
||||
# Curl for Python 2.5
|
||||
os.system(r'unzip -o win\curl\curl.zip -d dist\lib')
|
||||
@@ -534,12 +600,13 @@ elif target in ('binary', 'installer'):
|
||||
|
||||
|
||||
DeleteFiles(fileBin)
|
||||
write_dll_message('dist/IMPORTANT_MESSAGE.txt')
|
||||
os.rename('dist', prod)
|
||||
os.system('zip -9 -r -X %s %s' % (fileBin, prod))
|
||||
time.sleep(1.0)
|
||||
os.rename(prod, 'dist')
|
||||
|
||||
os.system(BzrRevert)
|
||||
os.system(GitRevertVersion)
|
||||
|
||||
############################
|
||||
# Check for uncompressed sqlite3.dll
|
||||
@@ -562,7 +629,7 @@ else:
|
||||
os.mkdir(root)
|
||||
|
||||
# Set data files
|
||||
data_files.extend(['po/', 'cherrypy/'])
|
||||
data_files.extend(['po/', 'cherrypy/', 'gntp/'])
|
||||
options['data_files'] = PairList(data_files)
|
||||
options['data_files'].append(('tools', ['tools/make_mo.py', 'tools/msgfmt.py']))
|
||||
|
||||
@@ -606,5 +673,5 @@ else:
|
||||
# Prepare the TAR.GZ pacakge
|
||||
CreateTar('srcdist', fileSrc, prod)
|
||||
|
||||
os.system(BzrRevert)
|
||||
os.system(GitRevertVersion)
|
||||
|
||||
|
||||
@@ -5,14 +5,13 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-0.6.x\n"
|
||||
"Project-Id-Version: SABnzbd-0.7.x\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: shypike@sabnzbd.org\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ASCII\n"
|
||||
"Content-Transfer-Encoding: 7bit\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
@@ -87,3 +86,29 @@ msgid ""
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
|
||||
|
||||
215
po/email/da.po
@@ -1,22 +1,21 @@
|
||||
#
|
||||
# SABnzbd Translation Template file
|
||||
# Copyright (C) 2010 by the SABnzbd Team
|
||||
# team@sabnzbd.org
|
||||
# Danish translation for sabnzbd
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the sabnzbd package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-0.6.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-01-15 19:19+0000\n"
|
||||
"PO-Revision-Date: 2011-01-15 19:31+0000\n"
|
||||
"Last-Translator: shypike <Unknown>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-03-09 19:01+0000\n"
|
||||
"PO-Revision-Date: 2012-03-14 04:51+0000\n"
|
||||
"Last-Translator: Rene <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: 2011-01-16 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 12177)\n"
|
||||
"Language: da\n"
|
||||
"X-Launchpad-Export-Date: 2012-03-15 05:11+0000\n"
|
||||
"X-Generator: Launchpad (build 14933)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
@@ -164,146 +163,50 @@ msgstr ""
|
||||
"\n"
|
||||
"Farvel\n"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "##\n"
|
||||
#~ "## RSS Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has added $amount jobs to the queue\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "\n"
|
||||
#~ "SABnzbd has added $amount job(s) to the queue.\n"
|
||||
#~ "They are from RSS feed \"$feed\".\n"
|
||||
#~ "<!--#for $job in $jobs#-->\n"
|
||||
#~ " $job <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "\n"
|
||||
#~ "Bye\n"
|
||||
#~ msgstr ""
|
||||
#~ "##\n"
|
||||
#~ "## RSS Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd har tilføjet $antal jobs til køen\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hej,\n"
|
||||
#~ "\n"
|
||||
#~ "SABnzbd har tilføjet $antal job(s) til køen.\n"
|
||||
#~ "De er fra RSS feed \"$feed\".\n"
|
||||
#~ "<!--#for $job in $jobs#-->\n"
|
||||
#~ " $job <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "\n"
|
||||
#~ "Farvel\n"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "##\n"
|
||||
#~ "## Default Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> "
|
||||
#~ "job $name\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "SABnzbd has downloaded \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "SABnzbd has failed to download \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "Finished at $end_time\n"
|
||||
#~ "Downloaded $size\n"
|
||||
#~ "\n"
|
||||
#~ "Results of the job:\n"
|
||||
#~ "<!--#for $stage in $stages #-->\n"
|
||||
#~ "Stage $stage <!--#slurp#-->\n"
|
||||
#~ "<!--#for $result in $stages[$stage]#-->\n"
|
||||
#~ " $result <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#if $script!=\"\" #-->\n"
|
||||
#~ "Output from user script \"$script\" (Exit code = $script_ret):\n"
|
||||
#~ "$script_output\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "Enjoy!\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "Sorry!\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ msgstr ""
|
||||
#~ "##\n"
|
||||
#~ "## Default Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> "
|
||||
#~ "job $name\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hej,\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "SABnzbd har downloaded \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "SABnzbd har ikke downloaded \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "Færdig kl. $end_time\n"
|
||||
#~ "Downloaded $size\n"
|
||||
#~ "\n"
|
||||
#~ "Resultat af job:\n"
|
||||
#~ "<!--#for $stage in $stages #-->\n"
|
||||
#~ "Stage $stage <!--#slurp#-->\n"
|
||||
#~ "<!--#for $result in $stages[$stage]#-->\n"
|
||||
#~ " $result <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#if $script!=\"\" #-->\n"
|
||||
#~ "Output from user script \"$script\" (Exit code = $script_ret):\n"
|
||||
#~ "$script_output\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "Enjoy!\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "Sorry!\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
|
||||
196
po/email/de.po
@@ -1,22 +1,21 @@
|
||||
#
|
||||
# SABnzbd Translation Template file
|
||||
# Copyright (C) 2010 by the SABnzbd Team
|
||||
# team@sabnzbd.org
|
||||
# German translation for sabnzbd
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the sabnzbd package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-0.6.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-01-15 19:19+0000\n"
|
||||
"PO-Revision-Date: 2011-01-22 10:43+0000\n"
|
||||
"Last-Translator: Severin Heiniger <severinheiniger@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-03-09 19:01+0000\n"
|
||||
"PO-Revision-Date: 2011-06-26 10:50+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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: 2011-01-23 05:11+0000\n"
|
||||
"X-Generator: Launchpad (build 12177)\n"
|
||||
"Language: de\n"
|
||||
"X-Launchpad-Export-Date: 2012-03-11 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 14914)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
@@ -165,149 +164,28 @@ msgstr ""
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "##\n"
|
||||
#~ "## Default Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> "
|
||||
#~ "job $name\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "SABnzbd has downloaded \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "SABnzbd has failed to download \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "Finished at $end_time\n"
|
||||
#~ "Downloaded $size\n"
|
||||
#~ "\n"
|
||||
#~ "Results of the job:\n"
|
||||
#~ "<!--#for $stage in $stages #-->\n"
|
||||
#~ "Stage $stage <!--#slurp#-->\n"
|
||||
#~ "<!--#for $result in $stages[$stage]#-->\n"
|
||||
#~ " $result <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#if $script!=\"\" #-->\n"
|
||||
#~ "Output from user script \"$script\" (Exit code = $script_ret):\n"
|
||||
#~ "$script_output\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "Enjoy!\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "Sorry!\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ msgstr ""
|
||||
#~ "#encoding UTF-8\n"
|
||||
#~ "## Translation by Severin Heiniger\n"
|
||||
#~ "##\n"
|
||||
#~ "## Default Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd <!--#if $status then \"hat\" else \"konnte\" #--> Auftrag "
|
||||
#~ "$name <!--#if $status then \"erfolgreich ausgeführt\" else \"nicht "
|
||||
#~ "ausführen\" #-->\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "SABnzbd hat \"$name\" <!--#if $msgid==\"\" then \"\" else \"(Newzbin #\" + "
|
||||
#~ "$msgid + \")\"#--> heruntergeladen\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "SABnzbd konnte \"$name\" <!--#if $msgid==\"\" then \"\" else \"(Newzbin #\" "
|
||||
#~ "+ $msgid + \")\"#--> nicht herunterladen\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "Fertiggestellt: $end_time\n"
|
||||
#~ "Heruntergeladen: $size\n"
|
||||
#~ "\n"
|
||||
#~ "Ergebnis des Auftrages:\n"
|
||||
#~ "<!--#for $stage in $stages #-->\n"
|
||||
#~ "Stufe $stage <!--#slurp#-->\n"
|
||||
#~ "<!--#for $result in $stages[$stage]#-->\n"
|
||||
#~ " $result <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#if $script!=\"\" #-->\n"
|
||||
#~ "Ausgabe des Benutzerskripts \"$script\" (beendet mit Code $script_ret):\n"
|
||||
#~ "$script_output\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "Viel Spass!\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "Entschuldigung!\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "##\n"
|
||||
#~ "## RSS Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has added $amount jobs to the queue\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "\n"
|
||||
#~ "SABnzbd has added $amount job(s) to the queue.\n"
|
||||
#~ "They are from RSS feed \"$feed\".\n"
|
||||
#~ "<!--#for $job in $jobs#-->\n"
|
||||
#~ " $job <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "\n"
|
||||
#~ "Bye\n"
|
||||
#~ msgstr ""
|
||||
#~ "##\n"
|
||||
#~ "## RSS Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has added $amount jobs to the queue\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "\n"
|
||||
#~ "SABnzbd has added $amount job(s) to the queue.\n"
|
||||
#~ "They are from RSS feed \"$feed\".\n"
|
||||
#~ "<!--#for $job in $jobs#-->\n"
|
||||
#~ " $job <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "\n"
|
||||
#~ "Bye\n"
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
|
||||
218
po/email/fr.po
@@ -1,22 +1,21 @@
|
||||
#
|
||||
# SABnzbd Translation Template file
|
||||
# Copyright (C) 2010 by the SABnzbd Team
|
||||
# team@sabnzbd.org
|
||||
# French translation for sabnzbd
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the sabnzbd package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-0.6.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-01-15 19:19+0000\n"
|
||||
"PO-Revision-Date: 2011-01-16 09:57+0000\n"
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-03-09 19:01+0000\n"
|
||||
"PO-Revision-Date: 2012-03-18 07:02+0000\n"
|
||||
"Last-Translator: Fox Ace <Unknown>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\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: 2011-01-17 05:03+0000\n"
|
||||
"X-Generator: Launchpad (build 12177)\n"
|
||||
"Language: fr\n"
|
||||
"X-Launchpad-Export-Date: 2012-03-19 04:59+0000\n"
|
||||
"X-Generator: Launchpad (build 14969)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
@@ -150,14 +149,14 @@ msgstr ""
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd a ajouté $ à la file d'attente\n"
|
||||
"Subject: SABnzbd a ajouté $amount fichier(s) à la file d'attente\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Après cela vient le contenu, la ligne vide est nécessaire!\n"
|
||||
"\n"
|
||||
"Bonjour,\n"
|
||||
"\n"
|
||||
"SABnzbd a ajouté $ à la file d'attente.\n"
|
||||
"SABnzbd a ajouté $amount fichier(s) à la file d'attente.\n"
|
||||
"Ils proviennent du Flux RSS \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
@@ -165,147 +164,50 @@ msgstr ""
|
||||
"\n"
|
||||
"Au Revoir\n"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "##\n"
|
||||
#~ "## Default Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> "
|
||||
#~ "job $name\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "SABnzbd has downloaded \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "SABnzbd has failed to download \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "Finished at $end_time\n"
|
||||
#~ "Downloaded $size\n"
|
||||
#~ "\n"
|
||||
#~ "Results of the job:\n"
|
||||
#~ "<!--#for $stage in $stages #-->\n"
|
||||
#~ "Stage $stage <!--#slurp#-->\n"
|
||||
#~ "<!--#for $result in $stages[$stage]#-->\n"
|
||||
#~ " $result <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#if $script!=\"\" #-->\n"
|
||||
#~ "Output from user script \"$script\" (Exit code = $script_ret):\n"
|
||||
#~ "$script_output\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "Enjoy!\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "Sorry!\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ msgstr ""
|
||||
#~ "#encoding UTF-8\n"
|
||||
#~ "##\n"
|
||||
#~ "## Template Email pour SABnzbd\n"
|
||||
#~ "## Ceci est un template Cheetah\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Les retours à la ligne et les espaces sont importants !\n"
|
||||
#~ "##\n"
|
||||
#~ "## Entêtes de l'email\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd <!--#if $status#-->Succès<!--#else#-->Echec<!--#end if#--> "
|
||||
#~ "du téléchargement $name\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## Le contenu du message, la ligne vide est obligatoire !\n"
|
||||
#~ "\n"
|
||||
#~ "Bonjour,\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "SABnzbd a téléchargé avec succès \"$name\" <!--#if $msgid==\"\" then \"\" "
|
||||
#~ "else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "SABnzbd a téléchargé sans succès \"$name\" <!--#if $msgid==\"\" then \"\" "
|
||||
#~ "else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "Terminé à $end_time\n"
|
||||
#~ "Téléchargé $size\n"
|
||||
#~ "\n"
|
||||
#~ "Résultat du téléchargement :\n"
|
||||
#~ "<!--#for $stage in $stages #-->\n"
|
||||
#~ "Etape $stage <!--#slurp#-->\n"
|
||||
#~ "<!--#for $result in $stages[$stage]#-->\n"
|
||||
#~ " $result <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#if $script!=\"\" #-->\n"
|
||||
#~ "Sortie du script utilisateur \"$script\" (Code Retour = $script_ret):\n"
|
||||
#~ "$script_output\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "A bientôt !\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "Désolé !\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "##\n"
|
||||
#~ "## RSS Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has added $amount jobs to the queue\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "\n"
|
||||
#~ "SABnzbd has added $amount job(s) to the queue.\n"
|
||||
#~ "They are from RSS feed \"$feed\".\n"
|
||||
#~ "<!--#for $job in $jobs#-->\n"
|
||||
#~ " $job <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "\n"
|
||||
#~ "Bye\n"
|
||||
#~ msgstr ""
|
||||
#~ "##\n"
|
||||
#~ "## RSS Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has added $amount jobs to the queue\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "\n"
|
||||
#~ "SABnzbd has added $amount job(s) to the queue.\n"
|
||||
#~ "They are from RSS feed \"$feed\".\n"
|
||||
#~ "<!--#for $job in $jobs#-->\n"
|
||||
#~ " $job <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "\n"
|
||||
#~ "Bye\n"
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
|
||||
195
po/email/nb.po
@@ -1,22 +1,21 @@
|
||||
#
|
||||
# SABnzbd Translation Template file
|
||||
# Copyright (C) 2010 by the SABnzbd Team
|
||||
# team@sabnzbd.org
|
||||
# Norwegian Bokmal translation for sabnzbd
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the sabnzbd package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SABnzbd-0.6.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-01-15 19:19+0000\n"
|
||||
"PO-Revision-Date: 2011-01-15 19:35+0000\n"
|
||||
"Last-Translator: shypike <Unknown>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-03-09 19:01+0000\n"
|
||||
"PO-Revision-Date: 2011-06-26 10:50+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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: 2011-01-16 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 12177)\n"
|
||||
"Language: no\n"
|
||||
"X-Launchpad-Export-Date: 2012-03-11 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 14914)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
@@ -166,148 +165,28 @@ msgstr ""
|
||||
"\n"
|
||||
"Hade\n"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "##\n"
|
||||
#~ "## Default Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has <!--#if $status then \"completed\" else \"failed\" #--> "
|
||||
#~ "job $name\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "SABnzbd has downloaded \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "SABnzbd has failed to download \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "Finished at $end_time\n"
|
||||
#~ "Downloaded $size\n"
|
||||
#~ "\n"
|
||||
#~ "Results of the job:\n"
|
||||
#~ "<!--#for $stage in $stages #-->\n"
|
||||
#~ "Stage $stage <!--#slurp#-->\n"
|
||||
#~ "<!--#for $result in $stages[$stage]#-->\n"
|
||||
#~ " $result <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#if $script!=\"\" #-->\n"
|
||||
#~ "Output from user script \"$script\" (Exit code = $script_ret):\n"
|
||||
#~ "$script_output\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "Enjoy!\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "Sorry!\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ msgstr ""
|
||||
#~ "#encoding UTF-8\n"
|
||||
#~ "## Translation by ProtX\n"
|
||||
#~ "##\n"
|
||||
#~ "## Default Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd har <!--#if $status then \"completed\" else \"failed\" #--> "
|
||||
#~ "jobb $name\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hei,\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "SABnzbd har lastet ned \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
#~ "\"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "SABnzbd mislyktes med å laste ned \"$name\" <!--#if $msgid==\"\" then \"\" "
|
||||
#~ "else \"(newzbin #\" + $msgid + \")\"#-->\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "Ferdig $end_time\n"
|
||||
#~ "Nedlastet $size\n"
|
||||
#~ "\n"
|
||||
#~ "Resultat av jobben:\n"
|
||||
#~ "<!--#for $stage in $stages #-->\n"
|
||||
#~ "Steg $stage <!--#slurp#-->\n"
|
||||
#~ "<!--#for $result in $stages[$stage]#-->\n"
|
||||
#~ " $result <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "<!--#if $script!=\"\" #-->\n"
|
||||
#~ "Utskrift fra brukerskript \"$script\" (Exit code = $script_ret):\n"
|
||||
#~ "$script_output\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
#~ "<!--#if $status #-->\n"
|
||||
#~ "Gratulerer!\n"
|
||||
#~ "<!--#else#-->\n"
|
||||
#~ "Synd!\n"
|
||||
#~ "<!--#end if#-->\n"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "##\n"
|
||||
#~ "## RSS Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd has added $amount jobs to the queue\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## After this comes the body, the empty line is required!\n"
|
||||
#~ "\n"
|
||||
#~ "Hi,\n"
|
||||
#~ "\n"
|
||||
#~ "SABnzbd has added $amount job(s) to the queue.\n"
|
||||
#~ "They are from RSS feed \"$feed\".\n"
|
||||
#~ "<!--#for $job in $jobs#-->\n"
|
||||
#~ " $job <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "\n"
|
||||
#~ "Bye\n"
|
||||
#~ msgstr ""
|
||||
#~ "##\n"
|
||||
#~ "## RSS Email template for SABnzbd\n"
|
||||
#~ "## This a Cheetah template\n"
|
||||
#~ "## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
#~ "##\n"
|
||||
#~ "## Newlines and whitespace are significant!\n"
|
||||
#~ "##\n"
|
||||
#~ "## These are the email headers\n"
|
||||
#~ "to: $to\n"
|
||||
#~ "from: $from\n"
|
||||
#~ "date: $date\n"
|
||||
#~ "subject: SABnzbd har lagt $amount jobber til køen\n"
|
||||
#~ "X-priority: 5\n"
|
||||
#~ "X-MS-priority: 5\n"
|
||||
#~ "## Etter dette kommer meldingen, den tomme linjen er nødvendig!\n"
|
||||
#~ "\n"
|
||||
#~ "Hei,\n"
|
||||
#~ "\n"
|
||||
#~ "SABnzbd har lagt $amount jobb(er) til køen.\n"
|
||||
#~ "Disse er fra RSS feeden \"$feed\".\n"
|
||||
#~ "<!--#for $job in $jobs#-->\n"
|
||||
#~ " $job <!--#slurp#-->\n"
|
||||
#~ "<!--#end for#-->\n"
|
||||
#~ "\n"
|
||||
#~ "Hade\n"
|
||||
#: email/badfetch.tmpl:1
|
||||
msgid ""
|
||||
"##\n"
|
||||
"## Bad URL Fetch Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd failed to fetch an NZB\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hi,\n"
|
||||
"\n"
|
||||
"SABnzbd has failed to retrieve the NZB from $url.\n"
|
||||
"The error message was: $msg\n"
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
|
||||