Compare commits
324 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
852b0e3cc2 | ||
|
|
d3715e0ab9 | ||
|
|
8d28d8f000 | ||
|
|
1a3dd15609 | ||
|
|
ad58dde0e0 | ||
|
|
9e344114d6 | ||
|
|
2cc73c8ad1 | ||
|
|
efe473b4d7 | ||
|
|
f9e02458e7 | ||
|
|
07d8ceb284 | ||
|
|
fc141b6cb6 | ||
|
|
4b31bea0e3 | ||
|
|
44b1b6ca2e | ||
|
|
8da8b62446 | ||
|
|
dc03414659 | ||
|
|
be7222de8f | ||
|
|
0f64495d25 | ||
|
|
9f82347e72 | ||
|
|
f22b26ba09 | ||
|
|
f9081afe80 | ||
|
|
8c2eda4e4b | ||
|
|
5591127a0e | ||
|
|
823ec4fad8 | ||
|
|
661dc33912 | ||
|
|
28370c826a | ||
|
|
12086a247f | ||
|
|
f53c25ccc5 | ||
|
|
04d31bd807 | ||
|
|
433711bdc6 | ||
|
|
376428d12d | ||
|
|
8969b7c87e | ||
|
|
92bc48c241 | ||
|
|
d85708c5f5 | ||
|
|
fa4eaf3e42 | ||
|
|
8b788551bb | ||
|
|
db58025e96 | ||
|
|
9ec397d6a0 | ||
|
|
dc3fe36d8a | ||
|
|
d809b13936 | ||
|
|
c1607c6bf2 | ||
|
|
0ff3c5978c | ||
|
|
c1d283f299 | ||
|
|
04637c2c74 | ||
|
|
3a3eeba429 | ||
|
|
1404175ac8 | ||
|
|
081010d50b | ||
|
|
1591954472 | ||
|
|
c2a2b61e15 | ||
|
|
4b6c469831 | ||
|
|
2d10f879da | ||
|
|
c2043c6b83 | ||
|
|
b3a637d29c | ||
|
|
67395f0c19 | ||
|
|
55f0eccb88 | ||
|
|
e293a669d2 | ||
|
|
26b79513c6 | ||
|
|
fa1ef47341 | ||
|
|
746be02899 | ||
|
|
9a4fdd4582 | ||
|
|
c76f01b54b | ||
|
|
0849039bb4 | ||
|
|
a79d1173de | ||
|
|
2eeb6cd9c5 | ||
|
|
7571f146fa | ||
|
|
6753ed031d | ||
|
|
f4dd7d0df4 | ||
|
|
e5e9b37bf8 | ||
|
|
460841ae36 | ||
|
|
565d8bec8a | ||
|
|
4bf057b0a9 | ||
|
|
081da0a0fc | ||
|
|
7fe125fd7e | ||
|
|
9669580ea7 | ||
|
|
27cc3f9be5 | ||
|
|
57084ab6d1 | ||
|
|
56d0e2957b | ||
|
|
08ffaedaca | ||
|
|
3c3d6dbb4b | ||
|
|
a66ffc61fd | ||
|
|
7e04cb019d | ||
|
|
802c9cfab6 | ||
|
|
987a64d3a4 | ||
|
|
ea90e9e153 | ||
|
|
ace1ef5498 | ||
|
|
d2926dcbac | ||
|
|
5d4f8c2459 | ||
|
|
e2790cbaa9 | ||
|
|
1441eea5ae | ||
|
|
db4ecfc59c | ||
|
|
4a69dea144 | ||
|
|
3f790a5048 | ||
|
|
470c1fc13e | ||
|
|
6faeb578a7 | ||
|
|
44383deb33 | ||
|
|
80fccd92ec | ||
|
|
666e115032 | ||
|
|
048c36c107 | ||
|
|
de86ba7496 | ||
|
|
a58d070aaf | ||
|
|
30ed8a2d30 | ||
|
|
c503e3078f | ||
|
|
3d74d879a9 | ||
|
|
ae0268eb3c | ||
|
|
d6eb1ffbe0 | ||
|
|
d88b3a76a5 | ||
|
|
a6a68b9b67 | ||
|
|
182bce40a7 | ||
|
|
5072f55d6e | ||
|
|
dc2d4ffb85 | ||
|
|
22f2e0881e | ||
|
|
614510c00b | ||
|
|
ee32bb5419 | ||
|
|
99eb16b504 | ||
|
|
2da71a9fa2 | ||
|
|
9cc9e0eaea | ||
|
|
2d92069a3c | ||
|
|
a0cfc19682 | ||
|
|
d87cd33523 | ||
|
|
63186c671b | ||
|
|
3d3d8f1535 | ||
|
|
a90754149b | ||
|
|
ad6a896e46 | ||
|
|
f4e0559894 | ||
|
|
e517b67faf | ||
|
|
bbb2b27157 | ||
|
|
0b1f9dfe14 | ||
|
|
e7bd7ae0d3 | ||
|
|
8a4579d2ec | ||
|
|
0adf5ef93d | ||
|
|
fdacbeaa4d | ||
|
|
f5ecf3df05 | ||
|
|
eae644d8f6 | ||
|
|
406f18d6bb | ||
|
|
bf04f950c3 | ||
|
|
e90ff0eeb7 | ||
|
|
35381555a9 | ||
|
|
4bf956f4ff | ||
|
|
ddfe8653f4 | ||
|
|
0066b9f11e | ||
|
|
c897b2252d | ||
|
|
2aadcd032d | ||
|
|
23e9bf112e | ||
|
|
9b577df408 | ||
|
|
e6d75b45ae | ||
|
|
f68de5df4c | ||
|
|
8bda8efa2f | ||
|
|
62792f859b | ||
|
|
79fa42f90f | ||
|
|
acb3ed2c77 | ||
|
|
50f411fb0b | ||
|
|
38c13bc4f0 | ||
|
|
7a7bf0f4e4 | ||
|
|
4d1b02fa64 | ||
|
|
612e68b5e6 | ||
|
|
9645f947b8 | ||
|
|
c211969a81 | ||
|
|
86916cdf90 | ||
|
|
fa3e0f941b | ||
|
|
32c524c18d | ||
|
|
7ba1a4c20f | ||
|
|
3b3759e81e | ||
|
|
ba3aaab3dc | ||
|
|
30ec3c430d | ||
|
|
dac568fc35 | ||
|
|
1ee00e12ce | ||
|
|
15ae1ae5fd | ||
|
|
14f39a21e3 | ||
|
|
97ea4ee2eb | ||
|
|
c68fa9f0c5 | ||
|
|
06576baf5c | ||
|
|
7b5fcbe0af | ||
|
|
003ee07dee | ||
|
|
654b5e9a24 | ||
|
|
1b05bc9ed2 | ||
|
|
dc328c545b | ||
|
|
823816ddc4 | ||
|
|
8979598f23 | ||
|
|
f26bf9b21f | ||
|
|
5d3a0cc593 | ||
|
|
21d445b7a6 | ||
|
|
9c0df30d34 | ||
|
|
bc9be3f92b | ||
|
|
2dc5c329c9 | ||
|
|
67817978f4 | ||
|
|
e2ab8c6ce4 | ||
|
|
f33a952536 | ||
|
|
cc582b5321 | ||
|
|
bdc526c91b | ||
|
|
52039c29b4 | ||
|
|
1dc4175f82 | ||
|
|
92f70fc177 | ||
|
|
fd573208bd | ||
|
|
ca9f10c12f | ||
|
|
49a72d0902 | ||
|
|
6aafe3c531 | ||
|
|
9e84696f96 | ||
|
|
120c133d7a | ||
|
|
cf9713a4b0 | ||
|
|
d12e9889e7 | ||
|
|
711a546989 | ||
|
|
7f78e6fac1 | ||
|
|
72533eefa4 | ||
|
|
d9643d9ea8 | ||
|
|
2de71bb96c | ||
|
|
07be241112 | ||
|
|
fbdd264653 | ||
|
|
a8bc793132 | ||
|
|
6bce423f23 | ||
|
|
51cabf85a1 | ||
|
|
38fdc2c7c8 | ||
|
|
b91a2af9df | ||
|
|
71ee5969a8 | ||
|
|
1b1c772b55 | ||
|
|
458eb3a417 | ||
|
|
98b753f015 | ||
|
|
a3284e12d2 | ||
|
|
c85120bb4b | ||
|
|
903925e06b | ||
|
|
03196f25e4 | ||
|
|
e3f3f962b6 | ||
|
|
153f92e697 | ||
|
|
c1dcafe953 | ||
|
|
b53d97732b | ||
|
|
8f47cce9c8 | ||
|
|
3cf42a7f94 | ||
|
|
ae74370cfb | ||
|
|
2aaa283991 | ||
|
|
dca7a8ccdb | ||
|
|
3172d6e987 | ||
|
|
c237ddfef4 | ||
|
|
b543dcb5ac | ||
|
|
ccfbb07333 | ||
|
|
256ccbd6a1 | ||
|
|
d8d507f110 | ||
|
|
7b3309649f | ||
|
|
9a7a6652e8 | ||
|
|
db4891748f | ||
|
|
3dce2e8908 | ||
|
|
c91291c315 | ||
|
|
a2a5a1f8e4 | ||
|
|
7651f709ad | ||
|
|
a565077348 | ||
|
|
6cf99e7d3a | ||
|
|
f730a82005 | ||
|
|
5449607c1d | ||
|
|
c62415abfd | ||
|
|
dcbea3057c | ||
|
|
91642d16c8 | ||
|
|
2f2773149d | ||
|
|
adaba03f50 | ||
|
|
58a5e09540 | ||
|
|
20dc906095 | ||
|
|
e2f41d3761 | ||
|
|
ab1372c7fc | ||
|
|
e305678cf4 | ||
|
|
a82df9bf2e | ||
|
|
986604f27c | ||
|
|
59324c7453 | ||
|
|
91613a5b37 | ||
|
|
5ca05fd2c0 | ||
|
|
4d4045cff4 | ||
|
|
1f209a42d8 | ||
|
|
bffbb362db | ||
|
|
435eed8818 | ||
|
|
f86656543a | ||
|
|
9c510c6dd1 | ||
|
|
f81ab3d1c0 | ||
|
|
d1585c28a9 | ||
|
|
9c314532c0 | ||
|
|
853bda5d86 | ||
|
|
d05e31f7f0 | ||
|
|
383354871d | ||
|
|
2086a217e0 | ||
|
|
34f3574746 | ||
|
|
1dfe0b957e | ||
|
|
17d14bc3b4 | ||
|
|
885032e436 | ||
|
|
ceee95aaf7 | ||
|
|
bc6b3091eb | ||
|
|
4be1a13316 | ||
|
|
a77327ee7f | ||
|
|
aa706012af | ||
|
|
f5b6203194 | ||
|
|
1ced9a54e4 | ||
|
|
06c7089a77 | ||
|
|
ee1d864eea | ||
|
|
d703338935 | ||
|
|
e87b24c460 | ||
|
|
3404ef6516 | ||
|
|
181897e92b | ||
|
|
26a504e3e2 | ||
|
|
b72ed09011 | ||
|
|
bb99c0d58e | ||
|
|
4516027fdb | ||
|
|
e35f2ea3cd | ||
|
|
6b79fad626 | ||
|
|
ac311be430 | ||
|
|
4fb32bff5f | ||
|
|
5fda342a55 | ||
|
|
e23aab4710 | ||
|
|
3837d5dace | ||
|
|
f61e7cb1ed | ||
|
|
3de0c0e4ac | ||
|
|
63796d3feb | ||
|
|
6b07529300 | ||
|
|
e10676710c | ||
|
|
77f67c6666 | ||
|
|
bdbcdd61e1 | ||
|
|
4ab7ec754d | ||
|
|
20f98f48bc | ||
|
|
84e0502e50 | ||
|
|
2aa1b00dbb | ||
|
|
972078a514 | ||
|
|
be8382d25b | ||
|
|
8d46e88cd8 | ||
|
|
6b6b1b79ad | ||
|
|
e1fd40b34d | ||
|
|
bc1f8f97a8 | ||
|
|
b51705f458 | ||
|
|
aaed5f4797 | ||
|
|
a8eedef1d2 | ||
|
|
9407e21e1e | ||
|
|
ba6dcfd467 | ||
|
|
e2c1de5008 |
4
.gitignore
vendored
@@ -26,3 +26,7 @@ SABnzbd*.dmg
|
||||
*.keep
|
||||
*.bak
|
||||
*.log
|
||||
|
||||
# Some people use Emacs as an editor
|
||||
\#*
|
||||
.\#*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
*******************************************
|
||||
*** This is SABnzbd 0.7.4 ***
|
||||
*** This is SABnzbd 0.7.19 ***
|
||||
*******************************************
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
It simplifies the process of downloading from Usenet dramatically,
|
||||
|
||||
237
CHANGELOG.txt
@@ -1,3 +1,240 @@
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.19 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Support double quotes to delineate parameters in category match lists.
|
||||
- When a comma is present in a file name, quotes are needed when passed to a user script
|
||||
- The after-unrar-check needs to take the "flat_unpack" option into account
|
||||
- When sanitizing names, preserve "." and ".." elements in paths
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.19RC4 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix damaging of job's destination path on Windows
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.19RC3 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Improve password trial when the system uses an older unrar tool
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.19RC2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Make matching of SFV file against RAR-sets case-insensitive
|
||||
- Make sure final destination path is always sanitized and trimmed
|
||||
- Improve "check for unwanted extensions"
|
||||
- Upgrade unrar to version 5.11 (OSX and Windows)
|
||||
- Limit article cache to 1G to prevent a memory size bug in the _yenc module
|
||||
- Fix a number of problems with embedded passwords and folder size trimming
|
||||
- Allow "float" timestamps in RSS feeds
|
||||
- Expose 'rating_host' to Config->Special
|
||||
- Add Finnish translation
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.19RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- More oznzb filtering
|
||||
- Fix OSX notification center problem
|
||||
- Fix sort order of RSS feeds
|
||||
- Prevent multiple pauses in "unwanted extensions" option
|
||||
- Change renaming scheme for duplicate files
|
||||
- Fix sorting of the queue
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.18 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Update translations
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.18RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Support for X-Failure header
|
||||
- Support for detecting unwanted extensions inside RAR files
|
||||
- Using priority Force will override duplicate detection
|
||||
- Notification: Respect NotifyOSD-preference and allow testing of values from UI
|
||||
- Prevent pseudo error message when testing "Notification Center"
|
||||
- Testing email based on values in UI instead of stored config
|
||||
- Don't trim file names when renaming them (so revert to old behavior)
|
||||
- Add "pause_pp" to the API
|
||||
- Pause/abort on encryption failed when pre-check was active
|
||||
- Also remove colons ":" with option sanitize_safe
|
||||
- Update DMG template
|
||||
- Fix potential crash when unpacking due to unset variable
|
||||
- Fix problem of cookie interference with other apps
|
||||
- Add API function server_stats
|
||||
- Support password embedding in file detail page and AddNZB dialog
|
||||
- Pause/Remove posts when unwanted extensions are detected (like .exe)
|
||||
- Fix issue with some RAR file sets leading to Windows "87" error
|
||||
- Handle 5xx RSS feed error messages
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.17Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Implement "retry-after" header to support rate-limiting
|
||||
- Update OSX image to show Mavericks support
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.17RC2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Support UNC paths in Sort expressions (Windows)
|
||||
- URL in the queue should not show up "sanitized"
|
||||
- Fix shutdown issue in PP queue
|
||||
- Allow "Force" to be set as priority in files overview
|
||||
- Special option "warn_dupl_jobs" to suppress/enable warnings for duplicate jobs
|
||||
- Fix problem with "sanitize" in "renamer"
|
||||
- Add (partial) RAR5 support
|
||||
- Fix some more password-in-filename issues
|
||||
- Prevent unwanted change of queue order after editing job details
|
||||
- Add password entry boxes in smpl and Classic skins
|
||||
- Prevent unrar zombies on some systems
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.17RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix bug in rating system
|
||||
- Fix multiple encryption password issues
|
||||
- Allow Default category to be picked in Multi-Ops
|
||||
- Allow "force" prio to be picked in NZO page
|
||||
- Prevent PP queue timeout construction from keeping the CPU awake.
|
||||
- Special option "flat_unpack"
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.17Beta2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix regression errors in Beta1
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.17Beta1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Add command line option --pidfile
|
||||
- Another fix for false encryption reports
|
||||
- Fix issue with OSX Mavericks Notification Center
|
||||
- Add support for 'x-dnzb-propername', 'x-dnzb-episodename', 'x-dnzb-year'
|
||||
in meta-data of NZB. To be used in TV Sorting
|
||||
- Add OZnzb features need to be enabled in config ->switches
|
||||
- Add integration with OZnzb indexer enhanced functionality, allows user access to ratings and reporting directly from SABnzbd interface.
|
||||
- Add automatic feedback to OZnzb on failed downloads (if enabled)
|
||||
- Add X-DNZB-Failure and X-DNZB-Details support
|
||||
- Fix issue with passwords embedded in file names
|
||||
- Updated translations
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.16Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix Config->Special UI crash
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.15Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix false encryption alarms for some posts
|
||||
- Add "password" dialog to Plush's job details page
|
||||
- Add special "sanitize_safe" to remove bad Windows characters on other platforms
|
||||
- Remove "news" section from Config skin
|
||||
- Fix for faulty par2cmdline on some embbeded Unix systems
|
||||
- Add GUID fields to the History RSS feed.
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.14Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Another encryption detection fix (special case)
|
||||
- Missing mini-par2 sometimes prevents the other par2 files from being downloaded.
|
||||
- Make sure even invalid RAR files are fed to unrar and handle its reporting.
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.13Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Another encryption detection fix
|
||||
- Special option "enable_recursion" to control recursive unpacking
|
||||
- When post has just one par2 set, use wildcard so that all files are used
|
||||
- Accept partial par2 file when only one is available
|
||||
- Accept "nzbname" parameter in api-call "add url" even when a ZIP file is retrieved.
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.12Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix issue in encryption detection
|
||||
- Don't try to "join" a single X.000 file
|
||||
- Fix memory overflow caused by very large files to be joined
|
||||
- Make name sorting of the queue case-insensitive
|
||||
- Save data to disk after changing job password or other attributes
|
||||
- Add "resume_pp" entry to Plush pull-down menu when pause_pp event is scheduled
|
||||
- Deploy "abort when completion not possible" method also in pre-download check
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.11Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Bad articles from some servers were accepted as valid data
|
||||
- Show warning when the decoder encounters I/O errors
|
||||
- Generic Sort failed to rename files when an extra folder level was present in the RAR files
|
||||
- Obfuscated file name support caused regular NZBs to verify slower
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.10Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Disable obsolete newzbin bookmark readout
|
||||
- Show speed when downloading in Forced mode while paused
|
||||
- Plush History icons repair and unpack were swapped
|
||||
- Try to repair rar/par sets with obfuscated names
|
||||
- Reset "today" byte counters at midnight even when idle
|
||||
- Display next RSS scan moment in Cfg->RSS
|
||||
- An email about a failed should say that the download failed
|
||||
- Report errors coming from fully encrypted rar files
|
||||
- Accept NNTP error 400 without "too many connection" clues as a transient error.
|
||||
- Accept %fn (next to %fn.%ext) as end parameter in sorting strings.
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.9Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix fatal error in decoder when encountering a malformed article
|
||||
- Fix compatibility with free.xsusenet.com
|
||||
- Small fix in smpl-black CSS
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.8Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix problem with %fn substitution in Sorting
|
||||
- Add special "wait_for_dfolder", enables waiting for external temp download folder
|
||||
- Work-around for servers that do not support STAT command
|
||||
- Removed articles are now listed seperately in download report
|
||||
- Add "abort" option to encryption detection
|
||||
- Fix missing Retry link for "Out of retention" jobs.
|
||||
- Option to abort download when it is clear that not enough data is available
|
||||
- Support "nzbname" parameter in addfile/addlocalfile api calls for
|
||||
ZIP files with a single NZB
|
||||
- Support NZB-1.1 meta data "password" and "category"
|
||||
- Don't retry an empty but correct NZB from an indexer
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.7Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Windows/OSX: Update unrar to 4.20
|
||||
- Fix some issues with orphaned items
|
||||
- Generic sort didn't always rename media files in multi-part jobs properly
|
||||
- Optional web-ui watchdog
|
||||
- Always show RSS items in the same order as the original RSS feed
|
||||
- Remove unusable folders from folder selector (Plush skin)
|
||||
- Remove newzbin support
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.6Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Recursive scanning when re-queuing downloaded NZB files
|
||||
- Log "User-Agent" header of API calls
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.6Beta2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- A damaged smallest par2 can block fetching of more par2 files
|
||||
- Fix evaluation of schedules at startup
|
||||
- Make check for running SABnzbd instance more robust
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.6Beta1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Handle par2 sets that were renamed after creation
|
||||
- Prevent blocking assembly of completed files, ( this resulted in
|
||||
excessive CPU and memory usage)
|
||||
- Fix speed issues with some Usenet servers due to unreachable IPv6 addresses
|
||||
- Fix issues with SFV-base checks
|
||||
- Prevent crash on Unix-Pythons that don't have the os.getloadavg() function
|
||||
- Successfully pre-checked job lost its attributes when those were changed during check
|
||||
- Remove version check when looking for a running instance of SABnzbd
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.5Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Add missing %dn formula to Generic Sort
|
||||
- Improve RSS logging
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.5RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Prevent stuck jobs at end of pre-check.
|
||||
- Fix issues with accented and special characters in names of downloaded files.
|
||||
- Adjust nzbmatrix category table.
|
||||
- Add 'prio_sort_list' special
|
||||
- Add special option 'empty_postproc'.
|
||||
- Prevent CherryPy crash when reading a cookie from another app which has a non-standard name.
|
||||
- Prevent crash when trying to open non-existing "complete" folder from Windows System-tray icon.
|
||||
- Fix problem with "Read" button when RSS feed name contains "&".
|
||||
- Prevent unusual SFV files from crashing post-processing.
|
||||
- OSX: Retina compatible menu-bar icons.
|
||||
- Don't show speed and ETA when download is paused during post-processing
|
||||
- Prevent soft-crash when api-function "addfile" is called without parameters.
|
||||
- Add news channel frame
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.4Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
(c) Copyright 2007-2012 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2014 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
|
||||
The SABnzbd-team is:
|
||||
|
||||
@@ -7,6 +7,7 @@ Active team:
|
||||
ShyPike <shypike@sabnzbd.org>
|
||||
inpheaux <inpheaux@sabnzbd.org>
|
||||
zoggy <zoggy@sabnzbd.org>
|
||||
OZnzb-dev <sabdev@oznzb.com>
|
||||
Sleeping members
|
||||
sw1tch <switch@sabnzbd.org>
|
||||
pairofdimes <pairofdimes@sabnzbd.org>
|
||||
|
||||
18
Dockerfile
Normal file
@@ -0,0 +1,18 @@
|
||||
FROM ubuntu:14.04
|
||||
|
||||
MAINTAINER Johannes 'fish' Ziemke <docker@freigeist.org> @discordianfish
|
||||
|
||||
RUN echo deb http://archive.ubuntu.com/ubuntu/ trusty multiverse >> \
|
||||
/etc/apt/sources.list
|
||||
RUN apt-get -qy update && apt-get -qy install python python-cheetah unrar \
|
||||
unzip python-yenc par2
|
||||
|
||||
RUN useradd sabnzbd -d /sab -m && chown -R sabnzbd:sabnzbd /sab
|
||||
VOLUME /sab
|
||||
ADD . /sabnzbd
|
||||
|
||||
EXPOSE 8080
|
||||
USER sabnzbd
|
||||
ENV HOME /sab
|
||||
|
||||
ENTRYPOINT [ "python", "/sabnzbd/SABnzbd.py", "-s", "0.0.0.0:8080" ]
|
||||
@@ -1,10 +1,10 @@
|
||||
SABnzbd 0.7.4
|
||||
SABnzbd 0.7.19
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
0) LICENSE
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
(c) Copyright 2007-2012 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2014 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
|
||||
@@ -60,7 +60,8 @@ Unix/Linux/OSX
|
||||
OSX Leopard/SnowLeopard
|
||||
Python 2.6 http://www.activestate.com
|
||||
|
||||
OSX Lion Apple Python 2.7 (included in OSX)
|
||||
OSX Lion/MountainLion
|
||||
Apple Python 2.7 Included in OSX (default)
|
||||
|
||||
Windows
|
||||
Python-2.7.latest http://www.activestate.com
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(c) Copyright 2007-2012 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2014 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
|
||||
|
||||
@@ -320,7 +320,7 @@ WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninst
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "URLUpdateInfo" 'http://sabnzbd.org/'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "Comments" 'The automated Usenet download tool'
|
||||
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "DisplayIcon" '$INSTDIR\interfaces\Classic\templates\static\images\favicon.ico'
|
||||
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "EstimatedSize" 29622
|
||||
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "EstimatedSize" 25674
|
||||
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "NoRepair" -1
|
||||
WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\SABnzbd" "NoModify" -1
|
||||
; write out uninstaller
|
||||
|
||||
4
PKG-INFO
@@ -1,7 +1,7 @@
|
||||
Metadata-Version: 1.0
|
||||
Name: SABnzbd
|
||||
Version: 0.7.4
|
||||
Summary: SABnzbd-0.7.4
|
||||
Version: 0.7.19
|
||||
Summary: SABnzbd-0.7.19
|
||||
Home-page: http://sabnzbd.org
|
||||
Author: The SABnzbd Team
|
||||
Author-email: team@sabnzbd.org
|
||||
|
||||
@@ -51,4 +51,4 @@ Our many other commandline options are explained in depth [here](http://wiki.sab
|
||||
|
||||
## 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.
|
||||
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.7.x) and "develop" to be whatever our next build will be (presently 0.8.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.
|
||||
|
||||
50
README.mkd
@@ -1,36 +1,26 @@
|
||||
Release Notes - SABnzbd 0.7.4
|
||||
===============================
|
||||
|
||||
## Highlights in 0.7.4
|
||||
|
||||
- OSX Mountain Lion: Notification Center support
|
||||
- OSX Mountain Lion: improved "keep awake" support
|
||||
- Scheduler: action can now run on multiple weekdays
|
||||
- Fix: pre-check failed to consider extra par2 files
|
||||
Release Notes - SABnzbd 0.7.19
|
||||
================================
|
||||
|
||||
## Features
|
||||
- Support for HTTPS chain files (needed when you buy your own certificate)
|
||||
- Special option: rss_odd_titles, see [Wiki](http://wiki.sabnzbd.org/configure-special-0-7/ "Wiki")
|
||||
- Special option: 'overwrite_files', see [Wiki](http://wiki.sabnzbd.org/configure-special-0-7/ "Wiki")
|
||||
- Show memory usage on Linux systems
|
||||
- Scheduler: add "remove failed jobs" action
|
||||
|
||||
- Extended filtering for oznzb.com
|
||||
- Earlier detection of Unwanted Extension if in last rar file
|
||||
- Upgrade to unrar 5.11 (OSX and Windows)
|
||||
- Add Finnish translation
|
||||
|
||||
## Bug fixes
|
||||
- After successful pre-check, preserve a job's position in the queue
|
||||
- Restore SABnzbd icon for Growl
|
||||
- Make Windows version less eager to use par2-classic
|
||||
- Prevent jobs from showing up in queue and history simultaneously
|
||||
- Fix failure to fetch more par2-files for posts with badly formatted subject lines
|
||||
- Fix for third-party tools requesting too much history
|
||||
- New RSS feed should no longer be considered new after first, but empty readout.
|
||||
- Make "auth" call backward-compatible with 0.6.x releases.
|
||||
- Config->Notifications: email and growl server addresses should not be marked as "url" type.
|
||||
- OSX: fix top menu queue info so that it shows total queue size
|
||||
- Fixed unjustified warning that can occur with OSX Growl 2.0
|
||||
- Pre-queue script no longer got the show/season/episode information.
|
||||
- Prevent crash on startup when a fully downloaded job is still in download queue.
|
||||
- Fix incorrect end-of-month quota reset
|
||||
- Fix UI refresh issue when using Safari on iOS6 (Safari bug)
|
||||
- Fix OSX notification center problem
|
||||
- Fix sort order of RSS feeds
|
||||
- Prevent multiple pauses in "unwanted extensions" option
|
||||
- Change renaming scheme for duplicate files
|
||||
- Fix sorting of the queue
|
||||
- Prevent removal of embedded passwords in filenames by trimming option
|
||||
- Improve password trial when the system uses an older unrar tool
|
||||
- Support double quotes to delineate parameters in category match lists.
|
||||
- When a comma is present in a file name, quotes are needed when passed to a user script
|
||||
- The after-unrar-check needs to take the "flat_unpack" option into account
|
||||
- OSX app is signed properly
|
||||
|
||||
|
||||
## What's new in 0.7.0
|
||||
|
||||
@@ -60,7 +50,7 @@ Release Notes - SABnzbd 0.7.4
|
||||
built-in post-processing options that automatically verify, repair,
|
||||
extract and clean up posts downloaded from Usenet.
|
||||
|
||||
(c) Copyright 2007-2012 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
(c) Copyright 2007-2013 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
|
||||
|
||||
### IMPORTANT INFORMATION about release 0.7.x
|
||||
|
||||
62
SABnzbd.py
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python -OO
|
||||
# Copyright 2008-2012 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2008-2013 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
|
||||
@@ -28,6 +28,7 @@ import signal
|
||||
import socket
|
||||
import platform
|
||||
import time
|
||||
import re
|
||||
|
||||
try:
|
||||
import Cheetah
|
||||
@@ -239,7 +240,8 @@ def print_help():
|
||||
print " -d --daemon Use when run as a service"
|
||||
else:
|
||||
print " -d --daemon Fork daemon process"
|
||||
print " --pid <path> Create a PID file in the listed folder (full path)"
|
||||
print " --pid <path> Create a PID file in the given folder (full path)"
|
||||
print " --pidfile <path> Create a PID file with the given name (full path)"
|
||||
print
|
||||
print " --force Discard web-port timeout (see Wiki!)"
|
||||
print " -h --help Print this message"
|
||||
@@ -259,7 +261,7 @@ def print_version():
|
||||
print """
|
||||
%s-%s
|
||||
|
||||
Copyright (C) 2008-2012, The SABnzbd-Team <team@sabnzbd.org>
|
||||
Copyright (C) 2008-2013, The SABnzbd-Team <team@sabnzbd.org>
|
||||
SABnzbd comes with ABSOLUTELY NO WARRANTY.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions. It is licensed under the
|
||||
@@ -685,16 +687,13 @@ def attach_server(host, port, cert=None, key=None, chain=None):
|
||||
adapter.subscribe()
|
||||
|
||||
|
||||
def is_sabnzbd_running(url):
|
||||
def is_sabnzbd_running(url, timeout=None):
|
||||
""" Return True when there's already a SABnzbd instance running.
|
||||
"""
|
||||
try:
|
||||
url = '%s&mode=version' % (url)
|
||||
ver = sabnzbd.newsunpack.get_from_url(url)
|
||||
if ver and ver.strip(' \n\r\t') == sabnzbd.__version__:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
ver = sabnzbd.newsunpack.get_from_url(url, timeout=timeout)
|
||||
return bool(ver and re.search(r'\d+\.\d+\.', ver))
|
||||
except:
|
||||
return False
|
||||
|
||||
@@ -714,7 +713,7 @@ def find_free_port(host, currentport):
|
||||
|
||||
|
||||
def check_for_sabnzbd(url, upload_nzbs, allow_browser=True):
|
||||
""" Check for a running instance of sabnzbd(same version) on this port
|
||||
""" Check for a running instance of sabnzbd on this port
|
||||
allow_browser==True|None will launch the browser, False will not.
|
||||
"""
|
||||
if allow_browser is None:
|
||||
@@ -845,7 +844,7 @@ def commandline_handler(frozen=True):
|
||||
'weblogging=', 'server=', 'templates', 'no_ipv6',
|
||||
'template2', 'browser=', 'config-file=', 'force',
|
||||
'version', 'https=', 'autorestarted', 'repair', 'repair-all',
|
||||
'log-all', 'no-login', 'pid=', 'new', 'sessions', 'console',
|
||||
'log-all', 'no-login', 'pid=', 'new', 'sessions', 'console', 'pidfile=',
|
||||
# Below Win32 Service options
|
||||
'password=', 'username=', 'startup=', 'perfmonini=', 'perfmondll=',
|
||||
'interactive', 'wait=',
|
||||
@@ -917,6 +916,7 @@ def main():
|
||||
no_login = False
|
||||
re_argv = [sys.argv[0]]
|
||||
pid_path = None
|
||||
pid_file = None
|
||||
new_instance = False
|
||||
force_sessions = False
|
||||
osx_console = False
|
||||
@@ -999,6 +999,10 @@ def main():
|
||||
pid_path = arg
|
||||
re_argv.append(opt)
|
||||
re_argv.append(arg)
|
||||
elif opt in ('--pidfile',):
|
||||
pid_file = arg
|
||||
re_argv.append(opt)
|
||||
re_argv.append(arg)
|
||||
elif opt in ('--new',):
|
||||
new_instance = True
|
||||
elif opt in ('--sessions',):
|
||||
@@ -1272,6 +1276,25 @@ def main():
|
||||
logging.info('Python-version = %s', sys.version)
|
||||
logging.info('Arguments = %s', sabnzbd.CMDLINE)
|
||||
|
||||
if sabnzbd.cfg.log_level() > 1:
|
||||
try:
|
||||
s_ipv4 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s_ipv4.connect(('google.com', 80))
|
||||
logging.debug('My IPv4 address = %s', s_ipv4.getsockname()[0])
|
||||
s_ipv4.close()
|
||||
except:
|
||||
logging.debug('Could not determine my IPv4 address')
|
||||
pass
|
||||
|
||||
try:
|
||||
s_ipv6 = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
|
||||
s_ipv6.connect(('ipv6.google.com', 80))
|
||||
logging.debug('My IPv6 address = %s', s_ipv6.getsockname()[0])
|
||||
s_ipv6.close()
|
||||
except:
|
||||
logging.debug('Could not determine my IPv6 address')
|
||||
pass
|
||||
|
||||
# OSX 10.5 I/O priority setting
|
||||
if sabnzbd.DARWIN:
|
||||
logging.info('[osx] IO priority setting')
|
||||
@@ -1320,6 +1343,8 @@ def main():
|
||||
sabnzbd.WEB_COLOR2 = CheckColor(sabnzbd.cfg.web_color2(), web_dir2)
|
||||
sabnzbd.cfg.web_color2.set(sabnzbd.WEB_COLOR2)
|
||||
|
||||
logging.debug('Unwanted extensions are ... %s',sabnzbd.cfg.unwanted_extensions())
|
||||
|
||||
if fork and not sabnzbd.WIN32:
|
||||
daemonize()
|
||||
|
||||
@@ -1547,8 +1572,8 @@ def main():
|
||||
# Write URL directly to registry
|
||||
set_connection_info(api_url)
|
||||
|
||||
if pid_path:
|
||||
sabnzbd.pid_file(pid_path, cherryport)
|
||||
if pid_path or pid_file:
|
||||
sabnzbd.pid_file(pid_path, pid_file, cherryport)
|
||||
|
||||
# Start all SABnzbd tasks
|
||||
logging.info('Starting %s-%s', sabnzbd.MY_NAME, sabnzbd.__version__)
|
||||
@@ -1565,7 +1590,7 @@ def main():
|
||||
add_local(f)
|
||||
|
||||
# Have to keep this running, otherwise logging will terminate
|
||||
timer = 0
|
||||
timer = timer5 = 0
|
||||
while not sabnzbd.SABSTOP:
|
||||
if sabnzbd.WIN_SERVICE:
|
||||
rc = win32event.WaitForMultipleObjects((sabnzbd.WIN_SERVICE.hWaitStop,
|
||||
@@ -1605,6 +1630,15 @@ def main():
|
||||
if sabnzbd.WIN_SERVICE and mail:
|
||||
mail.send('active')
|
||||
|
||||
if timer5 > 9:
|
||||
### 5 minute polling tasks
|
||||
timer5 = 0
|
||||
if sabnzbd.cfg.web_watchdog() and not is_sabnzbd_running('%s/api?tickleme=1' % sabnzbd.BROWSER_URL, 120):
|
||||
autorestarted = True
|
||||
cherrypy.engine.execv = True
|
||||
else:
|
||||
timer5 += 1
|
||||
|
||||
else:
|
||||
timer += 1
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ echo The fourth parameter (newzbin #) = %4
|
||||
echo The fifth parameter (category) = %5
|
||||
echo The sixth parameter (group) = %6
|
||||
echo The seventh parameter (status) = %7
|
||||
echo The eigth parameter (failure_url)= %8
|
||||
echo.
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ echo "The fourth parameter (newzbin-id) =" "$4"
|
||||
echo "The fifth parameter (category) =" "$5"
|
||||
echo "The sixth parameter (group) =" "$6"
|
||||
echo "The seventh parameter (status) =" "$7"
|
||||
echo "The eigth parameter (failure_url) =" "$8"
|
||||
echo
|
||||
|
||||
|
||||
|
||||
@@ -658,7 +658,10 @@ class Request(object):
|
||||
# Handle cookies differently because on Konqueror, multiple
|
||||
# cookies come on different lines with the same key
|
||||
if name == 'Cookie':
|
||||
self.cookie.load(value)
|
||||
try:
|
||||
self.cookie.load(value)
|
||||
except:
|
||||
pass
|
||||
|
||||
if not dict.__contains__(headers, 'Host'):
|
||||
# All Internet-based HTTP/1.1 servers MUST respond with a 400
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright 2008-2012 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2008-2013 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
|
||||
|
||||
@@ -6,59 +6,6 @@
|
||||
<!--#set global $submenu="newzbin"#-->
|
||||
<!--#include $webdir + "/inc_cmenu.tmpl"#-->
|
||||
|
||||
<h2>Newzbin</h2>
|
||||
$T('explain-newzbin')<br/><br/>
|
||||
<form action="saveNewzbin" method="post" autocomplete="off">
|
||||
<div class="EntryBlock">
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('accountInfo')</legend>
|
||||
<strong>$T('opt-username_newzbin'):</strong><br>
|
||||
$T('explain-username_newzbin')<br>
|
||||
<input type="text" name="username_newzbin" value="$username_newzbin">
|
||||
<br>
|
||||
<br>
|
||||
<strong>$T('opt-password_newzbin'):</strong><br>
|
||||
$T('explain-password_newzbin')<br>
|
||||
<input type="password" name="password_newzbin" value="$password_newzbin">
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div class="EntryBlock">
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('newzbinBookmarks')</legend>
|
||||
<label><input type="checkbox" name="newzbin_bookmarks" value="1" <!--#if $newzbin_bookmarks > 0 then "checked=1" else ""#--> <strong>$T('opt-newzbin_bookmarks'):</strong></label><br>
|
||||
$T('explain-newzbin_bookmarks')<br>
|
||||
<a href="getBookmarks?session=$session">$T('link-getBookmarks')</a>
|
||||
<br>
|
||||
<!--#if $bookmarks_list#-->
|
||||
<a href="hideBookmarks?session=$session">$T('link-HideBM')</a>
|
||||
<!--#else#-->
|
||||
<a href="showBookmarks?session=$session">$T('link-ShowBM')</a>
|
||||
<!--#end if#-->
|
||||
<br/>
|
||||
<br/>
|
||||
<label><input type="checkbox" name="newzbin_unbookmark" value="1" <!--#if $newzbin_unbookmark > 0 then "checked=1" else ""#--> /> <strong>$T('opt-newzbin_unbookmark'):</strong></label><br>
|
||||
$T('explain-newzbin_unbookmark')<br>
|
||||
<br/>
|
||||
<strong>$T('opt-bookmark_rate'):</strong><br>
|
||||
$T('explain-bookmark_rate')<br>
|
||||
<input type="text" name="bookmark_rate" value="$bookmark_rate">
|
||||
</fieldset>
|
||||
</div>
|
||||
<!--#if $bookmarks_list#-->
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('processedBM')</legend>
|
||||
<!--#for $msgid in $bookmarks_list#-->
|
||||
<a href="https://$newzbin_url/browse/post/$msgid/" target="_blank">$msgid</a>
|
||||
<!--#end for#-->
|
||||
</fieldset>
|
||||
<!--#end if#-->
|
||||
<input type="hidden" name="session" value="$session">
|
||||
<p><input type="submit" value="$T('button-saveChanges')"></p>
|
||||
</form>
|
||||
|
||||
<hr/>
|
||||
|
||||
<h2>NzbMatrix</h2>
|
||||
$T('explain-nzbmatrix')<br/><br/>
|
||||
|
||||
|
||||
@@ -31,7 +31,15 @@ $T('thisWeek'): $week_size | $T('thisMonth'): $month_size
|
||||
<% from sabnzbd.misc import time_format %>
|
||||
<!--#if $lines#-->
|
||||
<table id="historyTable">
|
||||
<tr><th></th><th>$T('completed')</th><th>$T('name')</th><th>$T('size')</th><th>$T('status')</th><th></th></tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>$T('completed')</th>
|
||||
<th>$T('name')</th>
|
||||
<th>$T('size')</th>
|
||||
<th>$T('status')</th>
|
||||
<!--#if $rating_enable#--><th>Rating</th><!--#end if#-->
|
||||
<th></th>
|
||||
</tr>
|
||||
<!--#set $odd = False#-->
|
||||
<!--#for $line in $lines #-->
|
||||
<%
|
||||
@@ -44,7 +52,20 @@ compl = datetime.datetime.fromtimestamp(float(line['completed'])).strftime(time_
|
||||
</a></td>
|
||||
<td>$compl</td>
|
||||
<td>$line.name<!--#if $line.action_line#--> - $line.action_line<!--#else if $line.fail_message#--> - <span class="fail_message">$line.fail_message</span><!--#end if#--></td>
|
||||
<td>$line.size</td><td>$Tx('post-'+$line.status)</td>
|
||||
<td>$line.size</td>
|
||||
<td>$Tx('post-'+$line.status)</td>
|
||||
<!--#if $rating_enable#-->
|
||||
<!--#if $line.has_rating#-->
|
||||
<td><div class="rating_overall">$T('video') $line.rating_avg_video $T('audio') $line.rating_avg_audio</div>
|
||||
<form method="GET" action="./show_edit_rating">
|
||||
<input type="hidden" name="job" value="$line.nzo_id">
|
||||
<input type="hidden" name="session" value="$session">
|
||||
<input type="submit" value="$T('report')">
|
||||
</form></td>
|
||||
<!--#else#-->
|
||||
<td></td>
|
||||
<!--#end if#-->
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<!--#if not $line.loaded#-->
|
||||
<!--#if $line.retry#-->
|
||||
@@ -66,6 +87,41 @@ compl = datetime.datetime.fromtimestamp(float(line['completed'])).strftime(time_
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
</tr>
|
||||
<!--#if $line.edit_rating#-->
|
||||
<!--#set $oddLine = not False#-->
|
||||
<tr class="<!--#if $oddLine then "oddLine" else "evenLine"#-->"><td></td><td></td>
|
||||
<td colspan="3">
|
||||
<form action="action_edit_rating" method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" value="$line.nzo_id" name="job">
|
||||
<input type="hidden" value="$session" name="session" >
|
||||
<div class="rating_item">$T('video')
|
||||
<select name="video">
|
||||
<!--#if not $line.rating_user_video#--><option>-</option><!--#end if#-->
|
||||
<!--#for $val in $range(1, 11)#--><option <!--#if $line.rating_user_video==$val#-->selected<!--#end if#--> >$val</option><!--#end for#-->
|
||||
</select>
|
||||
</div>
|
||||
<div class="rating_item">$T('audio')
|
||||
<select name="audio">
|
||||
<!--#if not $line.rating_user_audio#--><option>-</option><!--#end if#-->
|
||||
<!--#for $val in $range(1, 11)#--><option <!--#if $line.rating_user_audio==$val#-->selected<!--#end if#--> >$val</option><!--#end for#-->
|
||||
</select>
|
||||
</div>
|
||||
<div class="rating_item">
|
||||
<input type="radio" name="rating_flag" value="spam"> $T('spam')
|
||||
<input type="radio" name="rating_flag" value="encrypted"> $T('encrypted')
|
||||
<input type="radio" name="rating_flag" value="expired"> $T('expired')
|
||||
<input type="text" name="expired_host" style="margin-left:10px" value="<$T('host')>">
|
||||
</div>
|
||||
<div class="rating_item">
|
||||
<input type="submit" name="send" value="$T('send')">
|
||||
<input type="submit" name="cancel" value="$T('cancel')">
|
||||
</div>
|
||||
</form>
|
||||
</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
<!--#if $line.show_details#-->
|
||||
<!--#set $oddLine = not False#-->
|
||||
<tr class="<!--#if $oddLine then "oddLine" else "evenLine"#-->"><td></td><td></td>
|
||||
@@ -91,6 +147,7 @@ compl = datetime.datetime.fromtimestamp(float(line['completed'])).strftime(time_
|
||||
</dl>
|
||||
</td>
|
||||
<td></td>
|
||||
<!--#if $rating_enable#--><td></td><!--#end if#-->
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
<!--#end for#-->
|
||||
|
||||
@@ -47,11 +47,13 @@
|
||||
<a href="$cpath/notify/">$T('cmenu-notif')</a> |
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if 0#-->
|
||||
<!--#if $submenu=="indexers"#-->
|
||||
<a class="current" href="./">$T('cmenu-newzbin')</a> |
|
||||
<!--#else#-->
|
||||
<a href="$cpath/indexers/">$T('cmenu-newzbin')</a> |
|
||||
<!--#end if#-->
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if $submenu=="categories"#-->
|
||||
<a class="current" href="./">$T('cmenu-cat')</a> |
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
<div class="EntryBlock">
|
||||
<form action="addID" method="get">
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('add')
|
||||
<!--#if $varExists('newzbinDetails')#--> $T('reportId') / <!--#end if#-->URL</legend>
|
||||
<legend>$T('add') URL</legend>
|
||||
<input type="text" name="id">
|
||||
<!--#if $cat_list#-->
|
||||
<select name="cat" >
|
||||
|
||||
@@ -73,7 +73,10 @@
|
||||
<h3>$T('nzoDetails')</h3>
|
||||
<form action="save" method="post">
|
||||
<label class="label">$T('nzoName'):</label><br />
|
||||
<input type="text" name="name" style="width:400px" size="80" value="$slot.filename">
|
||||
<input type="text" name="name" style="width:400px" size="80" value="$slot.filename_clean">
|
||||
<br />
|
||||
<label class="label">$T('srv-password'):</label><br />
|
||||
<input type="text" name="password" style="width:200px" size="100" value="$slot.password">
|
||||
<br />
|
||||
<label class="label">$T('pp'):</label><br />
|
||||
<select name="pp">
|
||||
@@ -88,6 +91,7 @@
|
||||
<label class="label">$T('priority'):</label><br />
|
||||
<select name="priority">
|
||||
<option value="-100" <!--#if $slot.priority == "-100" then "selected" else ""#-->>$T('default')</option>
|
||||
<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>
|
||||
|
||||
@@ -136,3 +136,12 @@ color:black;
|
||||
|
||||
.feedEnabled{color:green;}
|
||||
.feedDisabled{color:red;}
|
||||
|
||||
.rating_overall {
|
||||
margin:0px 5px 3px 0px;
|
||||
}
|
||||
|
||||
.rating_item {
|
||||
float:left;
|
||||
margin:5px 15px 5px 5px;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>SABnzbd $version - $T('queued'): $mbleft $T('MB')</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
@@ -99,6 +99,26 @@
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
* takes the inputs-elements found in the current selector
|
||||
* and extracts the values into the provided data-object.
|
||||
*/
|
||||
\$.fn.extractFormDataTo = function(target)
|
||||
{
|
||||
var inputs = \$("input[type != 'submit'][type != 'button']", this);
|
||||
|
||||
// could use .serializeArray() but that omits unchecked items
|
||||
inputs.each(function (i,elem) {
|
||||
if (elem.type == "checkbox") {
|
||||
target[elem.name] = elem.checked;
|
||||
} else {
|
||||
target[elem.name] = elem.value;
|
||||
}
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
@@ -128,9 +148,11 @@
|
||||
<a href="${root}config/notify/">
|
||||
<div #if $pane == "Email" then 'class="active"' else ""#>$T('cmenu-notif')</div>
|
||||
</a>
|
||||
<!--#if 0#-->
|
||||
<a href="${root}config/indexers/">
|
||||
<div #if $pane == "Index Sites" then 'class="active"' else ""#>$T('cmenu-newzbin')</div>
|
||||
</a>
|
||||
<!--#end if#-->
|
||||
<a href="${root}config/categories/">
|
||||
<div #if $pane == "Categories" then 'class="active"' else ""#>$T('cmenu-cat')</div>
|
||||
</a>
|
||||
|
||||
@@ -17,11 +17,12 @@
|
||||
<tr class="alt"><td class="infoTableHeader">$T('menu-forums') </td><td class="infoTableCell"><a href="http://forums.sabnzbd.org/" target="_blank">http://forums.sabnzbd.org/</a></td></tr>
|
||||
<tr><td class="infoTableHeader">$T('source') </td><td class="infoTableCell"><a href="https://github.com/sabnzbd/sabnzbd" target="_blank">https://github.com/sabnzbd/sabnzbd</a></td></tr>
|
||||
<tr class="alt"><td class="infoTableHeader">$T('menu-irc') </td><td class="infoTableCell"><a href="irc://irc.synirc.net/#sabnzbd"><i>#sabnzbd</i> on <i>irc.synirc.net</i></a> $T('or') (<a href="http://sabnzbd.org/live-chat/" target="_blank">webchat</a>)</td></tr>
|
||||
<tr><td class="infoTableHeader">$T('oznzb')</td><td class="infoTableCell"><a href="https://www.oznzb.com/register" target="_blank">https://www.oznzb.com/register</a></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="padding alt">
|
||||
<h5 class="copyright">Copyright © 2008-2012 The SABnzbd Team <<span style="color: #0000ff;">team@sabnzbd.org</span>></h5>
|
||||
<h5 class="copyright">Copyright © 2008-2013 The SABnzbd Team <<span style="color: #0000ff;">team@sabnzbd.org</span>></h5>
|
||||
<p class="copyright"><small>$T('yourRights')</small></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="cleanup_list">$T('opt-cleanup_list')</label>
|
||||
<input type="text" name="cleanup_list" id="cleanup_list" value="$cleanup_list" size="50" placeholder=".nfo, .sfv" />
|
||||
<input type="text" name="cleanup_list" id="cleanup_list" value="$cleanup_list" size="50"/>
|
||||
<span class="desc">$T('explain-cleanup_list')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
|
||||
@@ -33,84 +33,6 @@
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>Newzbin $T('accountInfo')</h3>
|
||||
<p>$T('explain-newzbin')</p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="username_newzbin">$T('opt-username_newzbin')</label>
|
||||
<input type="text" name="username_newzbin" id="username_newzbin" value="$username_newzbin" size="30" />
|
||||
<span class="desc">$T('explain-username_newzbin')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="password_newzbin">$T('opt-password_newzbin')</label>
|
||||
<input type="password" name="password_newzbin" id="password_newzbin" value="$password_newzbin" size="30" />
|
||||
<span class="desc">$T('explain-password_newzbin')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<input type="submit" value="$T('button-saveChanges')" class="saveButton" />
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>Newzbin $T('newzbinBookmarks')</h3>
|
||||
<p>
|
||||
<input type="button" id="getBookmarks" value="$T('link-getBookmarks')" />
|
||||
<span id="getBookmarks-result" class="icon"> </span>
|
||||
<br/><br/>
|
||||
<!--#if $bookmarks_list#-->
|
||||
<input type="button" id="hideBookmarks" value="$T('link-HideBM')" />
|
||||
<!--#else#-->
|
||||
<input type="button" id="showBookmarks" value="$T('link-ShowBM')" />
|
||||
<!--#end if#-->
|
||||
</p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="newzbin_bookmarks">$T('opt-newzbin_bookmarks')</label>
|
||||
<input type="checkbox" name="newzbin_bookmarks" id="newzbin_bookmarks" value="1" <!--#if int($newzbin_bookmarks) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-newzbin_bookmarks')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="newzbin_unbookmark">$T('opt-newzbin_unbookmark')</label>
|
||||
<input type="checkbox" name="newzbin_unbookmark" id="newzbin_unbookmark" value="1" <!--#if int($newzbin_unbookmark) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-newzbin_unbookmark')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="bookmark_rate">$T('opt-bookmark_rate')</label>
|
||||
<input type="number" name="bookmark_rate" id="bookmark_rate" value="$bookmark_rate" size="8" min="15" max="1440" />
|
||||
<span class="desc">$T('explain-bookmark_rate')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<input type="submit" value="$T('button-saveChanges')" class="saveButton" />
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<!--#if $bookmarks_list#-->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>Newzbin Bookmarks</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<!--#set $odd = False#-->
|
||||
<!--#for $msgid in $bookmarks_list#-->
|
||||
<!--#set $odd = not $odd#-->
|
||||
<div class="field-pair <!--#if $odd then "alt" else ""#-->">
|
||||
<a href="https://$newzbin_url/browse/post/$msgid/" target="_blank">$msgid</a><br/>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<!--#end if#-->
|
||||
<div class="padding alt">
|
||||
<input type="submit" value="$T('button-saveChanges')" class="saveButton" />
|
||||
<input type="button" value="$T('button-restart') SABnzbd" class="sabnzbd_restart" />
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="section" id="email">
|
||||
<div class="col2">
|
||||
<h3>$T('emailAccount')</h3>
|
||||
</div><!-- /col2 -->
|
||||
@@ -79,7 +79,7 @@
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="section" id="growl">
|
||||
<div class="col2">
|
||||
<h3>$T('growlSettings')</h3>
|
||||
</div><!-- /col2 -->
|
||||
@@ -139,10 +139,12 @@
|
||||
\$('#email_dir').fileBrowser({ title: 'Select $T('opt-email_dir')' });
|
||||
\$('#test_email').click(function () {
|
||||
if (confirm(\$('#test_email').attr('rel'))) {
|
||||
var data = { mode: 'test_email', apikey: '$session', output: 'json' };
|
||||
\$("#email").extractFormDataTo(data);
|
||||
\$.ajax({
|
||||
type: "GET",
|
||||
url: "../../tapi",
|
||||
data: {mode: 'test_email', apikey: '$session', output: 'json' },
|
||||
data: data,
|
||||
beforeSend: function () {
|
||||
\$('#test_email').attr("disabled", "disabled");
|
||||
\$('#testmail-result').removeClass("success failure").addClass("loading").html('$T('post-Verifying')');
|
||||
@@ -162,10 +164,12 @@
|
||||
}
|
||||
});
|
||||
\$('#test_notification').click(function () {
|
||||
var data = { mode: 'test_notif', apikey: '$session', output: 'json' };
|
||||
\$("#growl").extractFormDataTo(data);
|
||||
\$.ajax({
|
||||
type: "GET",
|
||||
url: "../../tapi",
|
||||
data: {mode: 'test_notif', apikey: '$session', output: 'json' },
|
||||
data: data,
|
||||
beforeSend: function () {
|
||||
\$('#test_notification').attr("disabled", "disabled");
|
||||
\$('#testnotice-result').removeClass("success failure").addClass("loading").html('$T('post-Verifying')');
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
<label class="config narrow" for="rss_rate">$T('opt-rss_rate')</label>
|
||||
<input type="number" name="rss_rate" id="rss_rate" value="$rss_rate" size="8" min="15" max="1440" />
|
||||
<input type="submit" value="$T('button-save')" />
|
||||
<span class "config narrow"> $T('Next scan at:') $rss_next</span>
|
||||
<span class="desc narrow">$T('explain-rss_rate')</span>
|
||||
</div>
|
||||
</fieldset>
|
||||
@@ -498,6 +499,10 @@
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script>
|
||||
function urlencode(str) {
|
||||
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
|
||||
}
|
||||
|
||||
\$(document).ready(function(){
|
||||
\$('.editFeed').click(function(){
|
||||
var oldURI = \$(this).prev().val();
|
||||
@@ -537,7 +542,7 @@
|
||||
url: "test_rss_feed",
|
||||
data: {feed: whichFeed, session: "$session" }
|
||||
}).done(function( msg ) {
|
||||
location = '?feed=' + whichFeed;
|
||||
location = '?feed=' + urlencode(whichFeed);
|
||||
// location.reload();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="password">$T('srv-password')</label>
|
||||
<input type="text" name="password" id="password" size="30" />
|
||||
<input type="password" name="password" id="password" size="30" />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="connections">$T('srv-connections')</label>
|
||||
@@ -155,10 +155,10 @@
|
||||
<div class="col2" style="display:block;">
|
||||
<!--#if 'amounts' in $servers[$server]#-->
|
||||
<b>$T('srv-bandwidth'):</b><br/>
|
||||
$T('total'): $servers[$server]['amounts'][0]<br/>
|
||||
$T('today'): $servers[$server]['amounts'][3]<br/>
|
||||
$T('thisWeek'): $servers[$server]['amounts'][2]<br/>
|
||||
$T('thisMonth'): $servers[$server]['amounts'][1]
|
||||
$T('total'): $(servers[$server]['amounts'][0])B<br/>
|
||||
$T('today'): $(servers[$server]['amounts'][3])B<br/>
|
||||
$T('thisWeek'): $(servers[$server]['amounts'][2])B<br/>
|
||||
$T('thisMonth'): $(servers[$server]['amounts'][1])B
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
</div><!-- /section -->
|
||||
|
||||
@@ -265,6 +265,11 @@
|
||||
<td>$T('sort-File')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgDirname'):</b></td>
|
||||
<td>%dn</td>
|
||||
<td>$T("sort-Folder")</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
<td>{$T('TEXT')}</td>
|
||||
<td>$T('text')</td>
|
||||
@@ -432,7 +437,7 @@
|
||||
return function(callback, ms){
|
||||
clearTimeout (timer);
|
||||
timer = setTimeout(callback, ms);
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
function tvSet(val) {
|
||||
|
||||
@@ -83,6 +83,11 @@
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="fail_hopeless">$T('opt-fail_hopeless')</label>
|
||||
<input type="checkbox" name="fail_hopeless" id="fail_hopeless" value="1" <!--#if int($fail_hopeless) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-fail_hopeless')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pre_check">$T('opt-pre_check')</label>
|
||||
<input type="checkbox" name="pre_check" id="pre_check" value="1" <!--#if int($pre_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
@@ -104,9 +109,27 @@
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pause_on_pwrar">$T('opt-pause_on_pwrar')</label>
|
||||
<input type="checkbox" name="pause_on_pwrar" id="pause_on_pwrar" value="1" <!--#if int($pause_on_pwrar) > 0 then 'checked="checked"' else ""#--> />
|
||||
<select name="pause_on_pwrar" id="pause_on_pwrar">
|
||||
<option value="0" <!--#if int($pause_on_pwrar) == 0 then 'selected="selected" class="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($pause_on_pwrar) == 1 then 'selected="selected" class="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="2" <!--#if int($pause_on_pwrar) == 2 then 'selected="selected" class="selected"' else ""#--> >$T('abort')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-pause_on_pwrar')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="action_on_unwanted_extensions">$T('opt-action_on_unwanted_extensions')</label>
|
||||
<select name="action_on_unwanted_extensions" id="action_on_unwanted_extensions">
|
||||
<option value="0" <!--#if int($action_on_unwanted_extensions) == 0 then 'selected="selected" class="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($action_on_unwanted_extensions) == 1 then 'selected="selected" class="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="2" <!--#if int($action_on_unwanted_extensions) == 2 then 'selected="selected" class="selected"' else ""#--> >$T('abort')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-action_on_unwanted_extensions')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="unwanted_extensions">$T('opt-unwanted_extensions')</label>
|
||||
<input type="text" name="unwanted_extensions" id="unwanted_extensions" value="$unwanted_extensions" size="50"/>
|
||||
<span class="desc">$T('explain-unwanted_extensions')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="top_only">$T('opt-top_only')</label>
|
||||
<input type="checkbox" name="top_only" id="top_only" value="1" <!--#if int($top_only) > 0 then 'checked="checked"' else ""#--> />
|
||||
@@ -296,6 +319,134 @@
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-indexing')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="rating_enable">$T('opt-rating_enable')</label>
|
||||
<input type="checkbox" name="rating_enable" id="rating_enable" value="1" <!--#if int($rating_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-rating_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="rating_api_key">$T('opt-rating_api_key')</label>
|
||||
<input type="text" name="rating_api_key" id="rating_api_key" value="$rating_api_key" size="35" />
|
||||
<span class="desc">$T('explain-rating_api_key')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="rating_feedback">$T('opt-rating_feedback')</label>
|
||||
<input type="checkbox" name="rating_feedback" id="rating_feedback" value="1" <!--#if int($rating_feedback) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-rating_feedback')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="rating_filter_enable">$T('opt-rating_filter_enable')</label>
|
||||
<input type="checkbox" name="rating_filter_enable" id="rating_filter_enable" value="1" <!--#if int($rating_filter_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-rating_filter_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair" id="rating_filter_abort">
|
||||
<label class="config" for="rating_filter_abort">$T('opt-rating_filter_abort_if')</label>
|
||||
<div class="rating-filter">
|
||||
<p>
|
||||
<label for="rating_filter_abort_video">$T('opt-rating_filter_video')</label>
|
||||
<select name="rating_filter_abort_video" id="rating_filter_abort_video">
|
||||
<option value="0" <!--#if $rating_filter_abort_video == 0 then 'selected="selected" class="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_abort_video == $val then 'selected="selected" class="selected"' else ""#--> >$val $T('orLess')</option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_abort_audio">$T('opt-rating_filter_audio')</label>
|
||||
<select name="rating_filter_abort_audio" id="rating_filter_abort_audio">
|
||||
<option value="0" <!--#if $rating_filter_abort_audio == 0 then 'selected="selected" class="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_abort_audio == $val then 'selected="selected" class="selected"' else ""#--> >$val $T('orLess')</option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_encrypted" name="rating_filter_abort_encrypted" <!--#if int($rating_filter_abort_encrypted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_encrypted">$T('opt-rating_filter_passworded')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_encrypted_confirm" name="rating_filter_abort_encrypted_confirm" <!--#if int($rating_filter_abort_encrypted_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_encrypted_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_spam" name="rating_filter_abort_spam" <!--#if int($rating_filter_abort_spam) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_spam">$T('opt-rating_filter_spam')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_spam_confirm" name="rating_filter_abort_spam_confirm" <!--#if int($rating_filter_abort_spam_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_spam_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_downvoted" name="rating_filter_abort_downvoted" <!--#if int($rating_filter_abort_downvoted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_downvoted">$T('opt-rating_filter_downvoted')</label>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_abort_keywords">$T('opt-rating_filter_keywords')</label>
|
||||
<input type="text" name="rating_filter_abort_keywords" id="rating_filter_abort_keywords" value="$rating_filter_abort_keywords" size="35"/>
|
||||
<span class="desc">$T('explain-rating_filter_keywords')</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair alt" id="rating_filter_pause">
|
||||
<label class="config" for="rating_filter_pause">$T('opt-rating_filter_pause_if')</label>
|
||||
<div class="rating-filter">
|
||||
<p>
|
||||
<label for="rating_filter_pause_video">$T('opt-rating_filter_video')</label>
|
||||
<select name="rating_filter_pause_video" id="rating_filter_pause_video">
|
||||
<option value="0" <!--#if $rating_filter_pause_video == 0 then 'selected="selected" class="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_pause_video == $val then 'selected="selected" class="selected"' else ""#--> >$val $T('orLess')</option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_pause_audio">$T('opt-rating_filter_audio')</label>
|
||||
<select name="rating_filter_pause_audio" id="rating_filter_pause_audio">
|
||||
<option value="0" <!--#if $rating_filter_pause_audio == 0 then 'selected="selected" class="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_pause_audio == $val then 'selected="selected" class="selected"' else ""#--> >$val $T('orLess') </option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_encrypted" name="rating_filter_pause_encrypted" <!--#if int($rating_filter_pause_encrypted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_encrypted">$T('opt-rating_filter_passworded')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_encrypted_confirm" name="rating_filter_pause_encrypted_confirm" <!--#if int($rating_filter_pause_encrypted_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_encrypted_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_spam" name="rating_filter_pause_spam" <!--#if int($rating_filter_pause_spam) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_spam">$T('opt-rating_filter_spam')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_spam_confirm" name="rating_filter_pause_spam_confirm" <!--#if int($rating_filter_pause_spam_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_spam_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_downvoted" name="rating_filter_pause_downvoted" <!--#if int($rating_filter_pause_downvoted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_downvoted">$T('opt-rating_filter_downvoted')</label>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_pause_keywords">$T('opt-rating_filter_keywords')</label>
|
||||
<input type="text" name="rating_filter_pause_keywords" id="rating_filter_pause_keywords" value="$rating_filter_pause_keywords" size="35"/>
|
||||
<span class="desc">$T('explain-rating_filter_keywords')</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<input type="submit" value="$T('button-saveChanges')" class="saveButton" />
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="padding alt">
|
||||
<input type="submit" value="$T('button-saveChanges')" class="saveButton" />
|
||||
<input type="button" value="$T('button-restart') SABnzbd" class="sabnzbd_restart" />
|
||||
@@ -303,4 +454,24 @@
|
||||
</form>
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script>
|
||||
\$(document).ready(function() {
|
||||
if (!\$('#rating_filter_enable').is(":checked")) {
|
||||
\$("#rating_filter_abort").hide();
|
||||
\$("#rating_filter_pause").hide();
|
||||
}
|
||||
\$('#rating_filter_enable').change(function () {
|
||||
if (\$(this).is(":checked")) {
|
||||
\$("#rating_filter_abort").show();
|
||||
\$("#rating_filter_pause").show();
|
||||
}
|
||||
else {
|
||||
\$("#rating_filter_abort").hide();
|
||||
\$("#rating_filter_pause").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
|
||||
@@ -13,3 +13,12 @@
|
||||
.checkbox-days p{margin: 0 0 5px 0}
|
||||
.checkbox-days input {vertical-align:middle; margin-top: -1px;}
|
||||
.checkbox-days label{padding-left: 20px}
|
||||
.rating-filter {float: left}
|
||||
.rating-filter p {margin: 0 0 5px 0}
|
||||
.rating-filter select {vertical-align:middle}
|
||||
.rating-filter input {vertical-align:middle; margin-top:-1px}
|
||||
.rating-filter label {display:inline-block; padding-left:0px; width:100px}
|
||||
.rating-filter input[type="checkbox"] {display:inline}
|
||||
.rating-filter input[type="checkbox"] + label {padding-left:20px; width:auto}
|
||||
.rating-filter p > span:first-child {float:left; width:130px}
|
||||
.rating-filter .desc {display:block; margin:0px; padding-left:103px}
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<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.15.custom.css?$version"/>
|
||||
<link rel="stylesheet" type="text/css" href="${path}static/stylesheets/rateit/rateit.css"/>
|
||||
#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"/>
|
||||
@@ -126,8 +127,10 @@
|
||||
<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/notify/">
|
||||
<div class="config_sprite_container sprite_config_nav_email">$T('cmenu-notif')</div></a></li>
|
||||
<!--#if 0#-->
|
||||
<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>
|
||||
<!--#end if#-->
|
||||
<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/">
|
||||
|
||||
@@ -1,3 +1,21 @@
|
||||
<script type="text/javascript">
|
||||
function expired_host_changed(self) {
|
||||
var host = document.getElementsByName('expired_host')[0];
|
||||
host.value = self.value;
|
||||
host.readOnly = self.value.length > 0;
|
||||
}
|
||||
function flag_modal_submit(self) {
|
||||
var radios = document.getElementsByName('rating_flag');
|
||||
for (var i = 0; i < radios.length; i++) {
|
||||
if (radios[i].checked) {
|
||||
document.getElementById('noopt').setAttribute('style', 'display:none;size:1');
|
||||
document.getElementById('submitbtn').click();
|
||||
return;
|
||||
}
|
||||
}
|
||||
document.getElementById('noopt').removeAttribute('style');
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- modals -->
|
||||
<div style='display:none'>
|
||||
@@ -10,7 +28,7 @@
|
||||
</table>
|
||||
<div class="sabnzbd_logo main_sprite_container sprite_sabnzbdplus_logo"></div>
|
||||
<p><strong>SABnzbd $T('version'):</strong> $version</p>
|
||||
<p><small>Copyright (C) 2008-2012, The SABnzbd Team <team@sabnzbd.org></small></p>
|
||||
<p><small>Copyright (C) 2008-2013, The SABnzbd Team <team@sabnzbd.org></small></p>
|
||||
<p><small>$T('yourRights')</small></p>
|
||||
</div>
|
||||
|
||||
@@ -142,6 +160,51 @@ $T('Plush-containerWidth'):
|
||||
<input type="submit" id="delete_nzb_modal_remove_files" value="$T('removeNZB-Files')" class="juiButton" />
|
||||
</div>
|
||||
|
||||
<div id="flag_modal">
|
||||
<input type="hidden" id="flag_modal_job" />
|
||||
<div class="rating_flag_radio"><input type="radio" name="rating_flag" value="spam"> $T('spam')</div>
|
||||
<div class="rating_flag_radio"><input type="radio" name="rating_flag" value="encrypted"> $T('encrypted')</div>
|
||||
<div class="rating_flag_radio">
|
||||
<input type="radio" name="rating_flag" value="expired"> $T('expired')
|
||||
<div class="rating_modal_extra">
|
||||
<div class="rating_modal_expired">$T('host') <input type="text" name="expired_host" value="www.altopia.com" readonly></div>
|
||||
<select name="common_host" onchange="expired_host_changed(this)">
|
||||
<option value='www.altopia.com' selected>Altopia</option>
|
||||
<option value='www.astraweb.com'>Astraweb</option>
|
||||
<option value='www.euroaccess.ln'>EuroAccess</option>
|
||||
<option value='www.forteinc.com'>Forte Agent</option>
|
||||
<option value='www.giganews.com'>Giganews</option>
|
||||
<option value='www.highwinds.com'>Highwinds</option>
|
||||
<option value='www.newsdemon.com'>Newsdemon</option>
|
||||
<option value='www.newsgroupdirect.com'>NewsGroupDirect</option>
|
||||
<option value='www.newshosting.com'>NewsHosting</option>
|
||||
<option value='www.readnews.com'>Readnews</option>
|
||||
<option value='www.supernews.com'>SuperNews</option>
|
||||
<option value='www.thundernews.com'>ThunderNews</option>
|
||||
<option value='www.tweaknews.eu'>Tweaknews</option>
|
||||
<option value='www.usenetserver.com'>UsenetServer</option>
|
||||
<option value='www.xentech.net'>XenTech</option>
|
||||
<option value='www.xsnews.nl'>XSnews</option>
|
||||
<option value=''>$T('other')</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rating_flag_radio">
|
||||
<input type="radio" name="rating_flag" value="other"> $T('otherProblem')
|
||||
<div class="rating_modal_extra"><input style="width:99%" type="text" name="other"></div>
|
||||
</div>
|
||||
<div class="rating_flag_radio">
|
||||
<input type="radio" name="rating_flag" value="comment"> $T('comment')
|
||||
<div class="rating_modal_extra"><input style="width:99%" type="text" name="comment"></div>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="center">
|
||||
<input id="submitbtn" type="submit" style="display:none;size:1"/>
|
||||
<input value="Send" class="juiButton" onclick="flag_modal_submit(this)"/>
|
||||
<label id="noopt" class="rating_modal_noopt" style="display:none;size:1">No option selected</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
#end if#
|
||||
|
||||
</div>
|
||||
|
||||
@@ -43,90 +43,6 @@
|
||||
</fieldset>
|
||||
</div><!-- /component-group1 -->
|
||||
|
||||
<div id="core-component-group2" class="component-group clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3>Newzbin $T('accountInfo')</h3>
|
||||
<p>$T('explain-newzbin')</p>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
<div class="field-pair">
|
||||
<label class="nocheck clearfix" for="username_newzbin">
|
||||
<span class="component-title">$T('opt-username_newzbin')</span>
|
||||
<input type="text" name="username_newzbin" id="username_newzbin" value="$username_newzbin"/>
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
<span class="component-desc">$T('explain-username_newzbin')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="nocheck clearfix" for="password_newzbin">
|
||||
<span class="component-title">$T('opt-password_newzbin')</span>
|
||||
<input type="password" name="password_newzbin" id="password_newzbin" value="$password_newzbin"/>
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
<span class="component-desc">$T('explain-password_newzbin')</span>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /component-group2 -->
|
||||
|
||||
<div id="core-component-group3" class="component-group clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3>Newzbin $T('newzbinBookmarks')</h3>
|
||||
<p>
|
||||
<input type="button" class="juiButton" id="getBookmarks" value="$T('link-getBookmarks')" />
|
||||
<br/><br/>
|
||||
<!--#if $bookmarks_list#-->
|
||||
<input type="button" class="juiButton" id="hideBookmarks" value="$T('link-HideBM')" />
|
||||
<!--#else#-->
|
||||
<input type="button" class="juiButton" id="showBookmarks" value="$T('link-ShowBM')" />
|
||||
<!--#end if#-->
|
||||
</p>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
<div class="field-pair">
|
||||
<input type="checkbox" name="newzbin_bookmarks" id="newzbin_bookmarks" value="1" <!--#if $newzbin_bookmarks > 0 then "checked=1" else ""#--> />
|
||||
<label class="clearfix" for="newzbin_bookmarks">
|
||||
<span class="component-title">$T('opt-newzbin_bookmarks')</span>
|
||||
<span class="component-desc">$T('explain-newzbin_bookmarks')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<input type="checkbox" name="newzbin_unbookmark" id="newzbin_unbookmark" value="1" <!--#if $newzbin_unbookmark > 0 then "checked=1" else ""#--> />
|
||||
<label class="clearfix" for="newzbin_unbookmark">
|
||||
<span class="component-title">$T('opt-newzbin_unbookmark')</span>
|
||||
<span class="component-desc">$T('explain-newzbin_unbookmark')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="nocheck clearfix" for="bookmark_rate">
|
||||
<span class="component-title">$T('opt-bookmark_rate')</span>
|
||||
<input type="text" name="bookmark_rate" id="bookmark_rate" size="6" value="$bookmark_rate"/>
|
||||
</label>
|
||||
<label class="nocheck clearfix">
|
||||
<span class="component-title"> </span>
|
||||
<span class="component-desc">$T('explain-bookmark_rate')</span>
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /component-group3 -->
|
||||
|
||||
<!--#if $bookmarks_list#-->
|
||||
<div id="core-component-group4" class="component-group clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3>Newzbin $T('accountInfo')</h3>
|
||||
<p>$T('explain-newzbin')</p>
|
||||
</div>
|
||||
<fieldset class="component-group-list">
|
||||
<!--#for $msgid in $bookmarks_list#-->
|
||||
<a href="https://$newzbin_url/browse/post/$msgid/" target="_blank">$msgid</a><br/>
|
||||
<!--#end for#-->
|
||||
</fieldset>
|
||||
</div><!-- /component-group4 -->
|
||||
<!--#end if#-->
|
||||
|
||||
<div class="component-group-last clearfix">
|
||||
<div class="component-group-desc">
|
||||
<h3> </h3>
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<div class="field-pair alt">
|
||||
<label class="nocheck clearfix" for="password">
|
||||
<span class="component-title">$T('srv-password')</span>
|
||||
<input type="text" size="25" name="password"/>
|
||||
<input type="password" size="25" name="password"/>
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -156,7 +156,7 @@
|
||||
<div class="field-pair alt">
|
||||
<label class="nocheck clearfix" for="password">
|
||||
<span class="component-title">$T('srv-password')</span>
|
||||
<input type="text" size="25" name="password" value="$servers[$server]['password']" />
|
||||
<input type="password" size="25" name="password" value="$servers[$server]['password']" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<td class="nzb_status_col">
|
||||
<div class="nzb_status <!--#if $line.action_line or $line.status=="Queued"#-->Loaded<!--#else if $line.status=="Failed"#-->main_sprite_container sprite_hv_error<!--#else#-->main_sprite_container sprite_hv_star<!--#end if#-->"> </div>
|
||||
</td>
|
||||
<td class="historyTitle">
|
||||
<td class="historyTitle" <!--#if $rating_enable#-->style="width:35%"<!--#end if#-->>
|
||||
<a href="scriptlog?name=$line.nzo_id" class="modal-detail" rel="details">$line.name</a>
|
||||
|
||||
<div style="display:none">
|
||||
@@ -106,6 +106,44 @@
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
|
||||
<!--#if $rating_enable#-->
|
||||
<!--#if $line.has_rating#-->
|
||||
<td>
|
||||
<div class="rating_stars_block_r">
|
||||
<div class="rating_stars">
|
||||
<div class="rating_icon_vision"></div><span class="avg_rate" value="$line.rating_avg_video"></span>
|
||||
<input class="user_combo" type="hidden" value="$line.rating_user_video">
|
||||
<select class="user_combo video" style="background:transparent">
|
||||
<!--#if not $line.rating_user_video#--><option>-</option><!--#end if#-->
|
||||
<!--#for $val in $range(1, 11)#--><option>$val</option><!--#end for#-->
|
||||
</select>
|
||||
</div>
|
||||
<div class="rating_stars">
|
||||
<div class="rating_icon_sound"></div><span class="avg_rate" value="$line.rating_avg_audio"></span>
|
||||
<input class="user_combo" type="hidden" value="$line.rating_user_audio">
|
||||
<select class="user_combo audio" style="background:transparent">
|
||||
<!--#if not $line.rating_user_audio#--><option>-</option><!--#end if#-->
|
||||
<!--#for $val in $range(1, 11)#--><option>$val</option><!--#end for#-->
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="rating_vote_block">
|
||||
<div class="rating_icon_thumbup user_vote up"></div>
|
||||
<!--#if $line.rating_user_vote==1#--><b><!--#end if#-->$line.rating_avg_vote_up<!--#if $line.rating_user_vote==1#--></b><!--#end if#-->
|
||||
<div class="rating_icon_thumbdown user_vote down"></div>
|
||||
<!--#if $line.rating_user_vote==2#--><b><!--#end if#-->$line.rating_avg_vote_down<!--#if $line.rating_user_vote==2#--></b><!--#end if#-->
|
||||
</div>
|
||||
<div class="rating_flag">
|
||||
<a href="#" class="show_flags">$T('report')</a>
|
||||
</div>
|
||||
</td>
|
||||
<!--#else#-->
|
||||
<td></td><td></td>
|
||||
<!--#end if#-->
|
||||
<!--#end if#-->
|
||||
|
||||
<td class="options nowrap">
|
||||
<!--#if not $line.loaded#-->
|
||||
<% d = datetime.datetime.fromtimestamp(float(line['completed'])) %>
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
<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#-->
|
||||
<!--#if $pp_pause_event#--><li><a id="resume_pp" class="pointer">$T('sch-resume_post')</a></li><!--#end if#-->
|
||||
<li><a id="topmenu_toggle" class="pointer">$T('Plush-topMenu')</a></li>
|
||||
<li><a id="multiops_toggle" class="pointer">$T('Plush-multiOperations')</a></li>
|
||||
<li>
|
||||
@@ -129,7 +129,7 @@
|
||||
<select id="multi_cat"><optgroup label="$T('category')">
|
||||
<option value="">$T('category')</option>
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<!--#if $ct != "Default"#--><option value="$ct">$Tspec($ct)</option><!--#end if#-->
|
||||
<option value="$ct">$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</optgroup></select>
|
||||
<!--#end if#-->
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
<form action="save" method="post" class="nzo_save_form">
|
||||
<input type="hidden" name="session" value="$session">
|
||||
|
||||
<input type="text" name="name" size="70" value="$slot.filename" />
|
||||
<input type="text" name="name" size="70" value="$slot.filename_clean" />
|
||||
<input type="text" name="password" style="width:200px" size="100" value="$slot.password" placeholder="$T('srv-password')"/>
|
||||
|
||||
<div>
|
||||
<select name="index"><optgroup label="$T('order')">
|
||||
@@ -23,6 +24,7 @@
|
||||
<!--#end if#-->
|
||||
<select name="priority"><optgroup label="$T('priority')">
|
||||
<option value="-100" <!--#if $slot.priority == "-100" then "selected" else ""#-->>$T('default')</option>
|
||||
<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>
|
||||
|
||||
@@ -55,10 +55,27 @@
|
||||
<% # <!--#else if $slot.status == "Downloading"#-->main_sprite_container sprite_ql_grip_active %>
|
||||
</td>
|
||||
|
||||
<td class="download-title">
|
||||
<td class="download-title" <!--#if $rating_enable#-->style="width:35%"<!--#end if#-->>
|
||||
<a href="nzb/$slot.nzo_id/" title="$T('status'): $T('post-'+$slot.status)<br/>$T('nzo-age'): $slot.avg_age<br/><!--#if $slot.missing#-->$T('missingArt'): $slot.missing<!--#end if#-->">$slot.filename.replace('.', '.​').replace('_', '_​')</a>
|
||||
</td>
|
||||
|
||||
<!--#if $rating_enable#-->
|
||||
<!--#if $slot.has_rating#-->
|
||||
<td>
|
||||
<div class="rating_stars_block_c">
|
||||
<div class="rating_stars">
|
||||
<div class="rating_icon_vision"></div><span class="avg_rate" value="$slot.rating_avg_video"></span>
|
||||
</div>
|
||||
<div class="rating_stars">
|
||||
<div class="rating_icon_sound"></div><span class="avg_rate" value="$slot.rating_avg_audio"></span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<!--#else#-->
|
||||
<td></td>
|
||||
<!--#end if#-->
|
||||
<!--#end if#-->
|
||||
|
||||
<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">
|
||||
@@ -69,7 +86,7 @@
|
||||
</td>
|
||||
|
||||
<td class="eta nowrap">
|
||||
<!--#if not $paused and $slot.status not in ("Paused", "Checking")#-->
|
||||
<!--#if (not $paused and $slot.status not in ("Paused", "Checking")) or $slot.priority == 'Force'#-->
|
||||
<span title="$slot.eta">$slot.timeleft $T('Plush-left')</span>
|
||||
<!--#else#-->
|
||||
$T('post-'+$slot.status)
|
||||
|
||||
@@ -8,7 +8,7 @@ jQuery(function($){
|
||||
// ***************************************************************
|
||||
// Plush defaults
|
||||
|
||||
refreshRate: $.cookie('plushRefreshRate') ? $.cookie('plushRefreshRate') : 30, // refresh rate in seconds
|
||||
refreshRate: $.cookie('plushRefreshRate') ? $.cookie('plushRefreshRate') : 4, // refresh rate in seconds
|
||||
containerWidth: $.cookie('plushContainerWidth') ? $.cookie('plushContainerWidth') : '100%', // width of all elements on page
|
||||
queuePerPage: $.cookie('plushQueuePerPage') ? $.cookie('plushQueuePerPage') : 5, // pagination - nzbs per page
|
||||
histPerPage: $.cookie('plushHistPerPage') ? $.cookie('plushHistPerPage') : 5, // pagination - nzbs per page
|
||||
@@ -16,7 +16,7 @@ jQuery(function($){
|
||||
confirmDeleteHistory: $.cookie('plushConfirmDeleteHistory') == 0 ? false : true, // confirm history nzb removal
|
||||
blockRefresh: $.cookie('plushBlockRefresh') == 0 ? false : true, // prevent refreshing when hovering queue
|
||||
failedOnly: $.cookie('plushFailedOnly') == 1 ? 1 : 0, // prevent refreshing when hovering queue
|
||||
multiOps: $.cookie('plushMultiOps') == 1 ? true : false, // is multi-operations menu visible in queue
|
||||
multiOps: $.cookie('plushMultiOps') == 0 ? false : true, // is multi-operations menu visible in queue
|
||||
noTopMenu: $.cookie('plushNoTopMenu') == 1 ? false : true, // is top menu visible
|
||||
multiOpsChecks: null,
|
||||
|
||||
@@ -169,33 +169,33 @@ jQuery(function($){
|
||||
// Refresh rate
|
||||
$("#refreshRate-option").val($.plush.refreshRate).change( function() {
|
||||
$.plush.refreshRate = $("#refreshRate-option").val();
|
||||
$.cookie('plushRefreshRate', $.plush.refreshRate, { expires: 365, path: '/' });
|
||||
$.cookie('plushRefreshRate', $.plush.refreshRate, { expires: 365 });
|
||||
$.plush.Refresh();
|
||||
});
|
||||
|
||||
// Container width
|
||||
$("#containerWidth-option").val($.plush.containerWidth).change( function() {
|
||||
$.plush.containerWidth = $("#containerWidth-option").val();
|
||||
$.cookie('plushContainerWidth', $.plush.containerWidth, { expires: 365, path: '/' });
|
||||
$.cookie('plushContainerWidth', $.plush.containerWidth, { expires: 365 });
|
||||
$('#master-width').css('width',$.plush.containerWidth);
|
||||
}).trigger('change');
|
||||
|
||||
// Confirm Queue Deletions toggle
|
||||
$("#confirmDeleteQueue").prop('checked', $.plush.confirmDeleteQueue ).change( function() {
|
||||
$.plush.confirmDeleteQueue = $("#confirmDeleteQueue").prop('checked');
|
||||
$.cookie('plushConfirmDeleteQueue', $.plush.confirmDeleteQueue ? 1 : 0, { expires: 365, path: '/' });
|
||||
$.cookie('plushConfirmDeleteQueue', $.plush.confirmDeleteQueue ? 1 : 0, { expires: 365 });
|
||||
});
|
||||
|
||||
// Confirm History Deletions toggle
|
||||
$("#confirmDeleteHistory").prop('checked', $.plush.confirmDeleteHistory ).change( function() {
|
||||
$.plush.confirmDeleteHistory = $("#confirmDeleteHistory").prop('checked');
|
||||
$.cookie('plushConfirmDeleteHistory', $.plush.confirmDeleteHistory ? 1 : 0, { expires: 365, path: '/' });
|
||||
$.cookie('plushConfirmDeleteHistory', $.plush.confirmDeleteHistory ? 1 : 0, { expires: 365 });
|
||||
});
|
||||
|
||||
// Block Refreshes on Hover toggle
|
||||
$("#blockRefresh").prop('checked', $.plush.blockRefresh ).change( function() {
|
||||
$.plush.blockRefresh = $("#blockRefresh").prop('checked');
|
||||
$.cookie('plushBlockRefresh', $.plush.blockRefresh ? 1 : 0, { expires: 365, path: '/' });
|
||||
$.cookie('plushBlockRefresh', $.plush.blockRefresh ? 1 : 0, { expires: 365 });
|
||||
});
|
||||
|
||||
// Sabnzbd restart
|
||||
@@ -329,6 +329,17 @@ jQuery(function($){
|
||||
});
|
||||
});
|
||||
|
||||
// Resume Post Processing
|
||||
$('#resume_pp').click(function() {
|
||||
$.ajax({
|
||||
headers: {"Cache-Control": "no-cache"},
|
||||
type: "POST",
|
||||
url: "tapi",
|
||||
data: {mode:'resume_pp', apikey: $.plush.apikey},
|
||||
success: $.plush.RefreshQueue
|
||||
});
|
||||
});
|
||||
|
||||
$('#multiops_toggle').click(function(){
|
||||
if( $('#multiops_bar').is(':visible') ) { // hide
|
||||
$('#multiops_bar').hide();
|
||||
@@ -341,7 +352,7 @@ jQuery(function($){
|
||||
$.plush.multiOpsChecks = new Array();
|
||||
$('<input type="checkbox" class="multiops" />').appendTo('#queue tr td.nzb_status_col');
|
||||
}
|
||||
$.cookie('plushMultiOps', $.plush.multiOps ? 1 : 0, { expires: 365, path: '/' });
|
||||
$.cookie('plushMultiOps', $.plush.multiOps ? 1 : 0, { expires: 365 });
|
||||
});
|
||||
if ($.plush.multiOps)
|
||||
$('#multiops_toggle').trigger('click');
|
||||
@@ -354,7 +365,7 @@ jQuery(function($){
|
||||
$('#topmenu_bar').show();
|
||||
$.plush.noTopMenu = false;
|
||||
}
|
||||
$.cookie('plushNoTopMenu', $.plush.noTopMenu ? 1 : 0, { expires: 365, path: '/' });
|
||||
$.cookie('plushNoTopMenu', $.plush.noTopMenu ? 1 : 0, { expires: 365 });
|
||||
});
|
||||
if ($.plush.noTopMenu)
|
||||
$('#topmenu_toggle').trigger('click');
|
||||
@@ -510,7 +521,7 @@ jQuery(function($){
|
||||
$("#queue-pagination-perpage").change(function(event){
|
||||
$.plush.queuecurpage = Math.floor($.plush.queuecurpage * $.plush.queuePerPage / $(event.target).val() );
|
||||
$.plush.queuePerPage = $(event.target).val();
|
||||
$.cookie('plushQueuePerPage', $.plush.queuePerPage, { expires: 365, path: '/' });
|
||||
$.cookie('plushQueuePerPage', $.plush.queuePerPage, { expires: 365 });
|
||||
$.plush.queueforcerepagination = true;
|
||||
$.plush.RefreshQueue();
|
||||
});
|
||||
@@ -739,9 +750,9 @@ $.plush.queueprevslots = $.plush.queuenoofslots; // for the next refresh
|
||||
});
|
||||
var last1, last2;
|
||||
$("#multiops_select_range").click(function(){
|
||||
if (last1 && last2 && last1 < last2)
|
||||
if (last1 >= 0 && last2 >= 0 && last1 < last2)
|
||||
$("INPUT[type='checkbox']","#queueTable").slice(last1,last2).prop('checked', true).trigger('change');
|
||||
else if (last1 && last2)
|
||||
else if (last1 >= 0 && last2 >= 0)
|
||||
$("INPUT[type='checkbox']","#queueTable").slice(last2,last1).prop('checked', true).trigger('change');
|
||||
});
|
||||
$("#multiops_select_invert").click(function(){
|
||||
@@ -754,7 +765,7 @@ $.plush.queueprevslots = $.plush.queuenoofslots; // for the next refresh
|
||||
});
|
||||
$("#queue").delegate('.multiops','change',function(event) {
|
||||
// range event interaction
|
||||
if (last1) last2 = last1;
|
||||
if (last1 >= 0) last2 = last1;
|
||||
last1 = $(event.target).parent()[0].rowIndex ? $(event.target).parent()[0].rowIndex : $(event.target).parent().parent()[0].rowIndex;
|
||||
|
||||
// checkbox state persistence
|
||||
@@ -937,7 +948,7 @@ $("a","#multiops_inputs").click(function(e){
|
||||
$("#history-pagination-perpage").change(function(event){
|
||||
$.plush.histcurpage = Math.floor($.plush.histcurpage * $.plush.histPerPage / $(event.target).val() );
|
||||
$.plush.histPerPage = $(event.target).val();
|
||||
$.cookie('plushHistPerPage', $.plush.histPerPage, { expires: 365, path: '/' });
|
||||
$.cookie('plushHistPerPage', $.plush.histPerPage, { expires: 365 });
|
||||
$.plush.histforcerepagination = true;
|
||||
if ($.plush.histPerPage=="1")
|
||||
$("#history-pagination").html(''); // pagination rebuild not triggered on blank history (disabled)
|
||||
@@ -1022,7 +1033,7 @@ $("a","#multiops_inputs").click(function(e){
|
||||
// show all / show failed
|
||||
$('#failed_only').change(function(){
|
||||
$.plush.failedOnly = $("#failed_only").val();
|
||||
$.cookie('plushFailedOnly', $.plush.failedOnly, { expires: 365, path: '/' });
|
||||
$.cookie('plushFailedOnly', $.plush.failedOnly, { expires: 365 });
|
||||
$.plush.RefreshHistory();
|
||||
}).val($.plush.failedOnly);
|
||||
|
||||
@@ -1036,6 +1047,12 @@ $("a","#multiops_inputs").click(function(e){
|
||||
title:function(){return $(this).text();},
|
||||
innerWidth:"80%", innerHeight:"300px", initialWidth:"80%", initialHeight:"300px", speed:0, opacity:0.7 });
|
||||
|
||||
// modal for reporting issues
|
||||
$("#historyTable .modal-report").colorbox({ inline:true,
|
||||
href: function(){return "#report-"+$(this).parent().parent().parent().attr('id');},
|
||||
title:function(){return $(this).text();},
|
||||
innerWidth:"250px", innerHeight:"110px", initialWidth:"250px", initialHeight:"110px", speed:0, opacity:0.7 });
|
||||
|
||||
// Build pagination only when needed
|
||||
if ($.plush.histPerPage=="1") // disabled history
|
||||
$("#history-pagination").html(''); // remove pages if history empty
|
||||
@@ -1062,6 +1079,55 @@ $.plush.histprevslots = $.plush.histnoofslots; // for the next refresh
|
||||
|
||||
}); // end livequery
|
||||
|
||||
$('.user_combo').livequery('change', function(){
|
||||
var nzo_id = $(this).parent().parent().parent().parent().attr('id');
|
||||
var videoAudio = $(this).hasClass('video') ? 'video' : 'audio';
|
||||
$.ajax({
|
||||
headers: {"Cache-Control": "no-cache"},
|
||||
type: "POST",
|
||||
url: "tapi",
|
||||
data: {mode:'queue', name:'rating', value: nzo_id, type: videoAudio, setting: $(this).val(), apikey: $.plush.apikey},
|
||||
success: $.plush.RefreshHistory
|
||||
});
|
||||
});
|
||||
|
||||
$('.user_vote').livequery('click', function(){
|
||||
var nzo_id = $(this).parent().parent().parent().attr('id');
|
||||
var upDown = $(this).hasClass('up') ? 'up' : 'down';
|
||||
$.ajax({
|
||||
headers: {"Cache-Control": "no-cache"},
|
||||
type: "POST",
|
||||
url: "tapi",
|
||||
data: {mode:'queue', name:'rating', value: nzo_id, type: 'vote', setting: upDown, apikey: $.plush.apikey},
|
||||
success: $.plush.RefreshHistory
|
||||
});
|
||||
});
|
||||
|
||||
$('#history .show_flags').live('click', function(){
|
||||
$('#flag_modal_job').val( $(this).parent().parent().parent().attr('id') );
|
||||
$.colorbox({ inline:true, href:"#flag_modal", title:$(this).text(),
|
||||
innerWidth:"500px", innerHeight:"185px", initialWidth:"500px", initialHeight:"185px", speed:0, opacity:0.7
|
||||
});
|
||||
return false;
|
||||
});
|
||||
$('#flag_modal input:submit').click(function(){
|
||||
var nzo_id = $('#flag_modal_job').val();
|
||||
var flag = $('input[name=rating_flag]:checked', '#flag_modal').val();
|
||||
var expired_host = $('input[name=expired_host]', '#flag_modal').val();
|
||||
var other = $('input[name=other]', '#flag_modal').val();
|
||||
var comment = $('input[name=comment]', '#flag_modal').val();
|
||||
var _detail = (flag == 'comment') ? comment : ((flag == 'other') ? other : expired_host);
|
||||
$.colorbox.close();
|
||||
$.plush.modalOpen=false;
|
||||
$.ajax({
|
||||
headers: {"Cache-Control": "no-cache"},
|
||||
type: "POST",
|
||||
url: "tapi",
|
||||
data: {mode:'queue', name:'rating', value: nzo_id, type: 'flag', setting: flag, detail: _detail, apikey: $.plush.apikey},
|
||||
success: $.plush.RefreshHistory
|
||||
});
|
||||
});
|
||||
|
||||
}, // end $.plush.InitHistory()
|
||||
|
||||
|
||||
@@ -1121,6 +1187,8 @@ $.plush.histprevslots = $.plush.histnoofslots; // for the next refresh
|
||||
|
||||
$('.left_stats .initial-loading').hide();
|
||||
$('#queue').html(result); // Replace queue contents with queue.tmpl
|
||||
$('#queue .avg_rate').rateit({readonly: true, resetable: false, step: 0.5});
|
||||
$('#queue .avg_rate').each(function() { $(this).rateit('value', $(this).attr('value') / 2); });
|
||||
|
||||
if ($.plush.multiOps) // add checkboxes
|
||||
$('<input type="checkbox" class="multiops" />').appendTo('#queue tr td.nzb_status_col');
|
||||
@@ -1176,6 +1244,11 @@ $.plush.histprevslots = $.plush.histnoofslots; // for the next refresh
|
||||
}
|
||||
$('.left_stats .initial-loading').hide();
|
||||
$('#history').html(result); // Replace history contents with history.tmpl
|
||||
$('#history .avg_rate').rateit({readonly: true, resetable: false, step: 0.5});
|
||||
$('#history .avg_rate').each(function() { $(this).rateit('value', $(this).attr('value') / 2); });
|
||||
$('#history .user_combo option').filter(function() {
|
||||
return $(this).attr('value') == $(this).parent().parent().find('input.user_combo').attr('value');
|
||||
}).attr('selected', true);
|
||||
$('#history-pagination span').removeClass('loading'); // Remove spinner graphic from pagination
|
||||
}
|
||||
});
|
||||
@@ -1242,12 +1315,16 @@ $.plush.histprevslots = $.plush.histnoofslots; // for the next refresh
|
||||
SetQueueETAStats : function(speed,kbpersec,timeleft,eta) {
|
||||
|
||||
// ETA/speed stats at top of queue
|
||||
if (kbpersec < 1 && $.plush.paused)
|
||||
if (kbpersec < 100 && $.plush.paused) {
|
||||
$('#stats_eta').html('—');
|
||||
else
|
||||
$('#stats_speed').html('—');
|
||||
$('#time-left').attr('title','—'); // Tooltip on "time left"
|
||||
}
|
||||
else {
|
||||
$('#stats_eta').html(timeleft);
|
||||
$('#stats_speed').html(speed+"B/s");
|
||||
$('#time-left').attr('title',eta); // Tooltip on "time left"
|
||||
$('#stats_speed').html(speed+"B/s");
|
||||
$('#time-left').attr('title',eta); // Tooltip on "time left"
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
|
||||
@@ -401,12 +401,12 @@ body {
|
||||
.sprite_hv_download{ background-position: 0 -167px; }
|
||||
.sprite_hv_error{ background-position: 0 -193px; }
|
||||
.sprite_hv_filejoin{ background-position: 0 -219px; }
|
||||
.sprite_hv_repair{ background-position: 0 -245px; }
|
||||
.sprite_hv_unpack{ background-position: 0 -245px; }
|
||||
.sprite_hv_report{ background-position: 0 -271px; }
|
||||
.sprite_hv_script{ background-position: 0 -297px; }
|
||||
.sprite_hv_star{ background-position: 0 -323px; }
|
||||
.sprite_hv_stats{ background-position: 0 -349px; }
|
||||
.sprite_hv_unpack{ background-position: 0 -375px; }
|
||||
.sprite_hv_repair{ background-position: 0 -375px; }
|
||||
.sprite_progress_done{ background-position: 0 -401px; } /* queue.tmpl */
|
||||
.sprite_progressbar_bg{ background-position: 0 -430px; }
|
||||
.sprite_q_menu_pausefor{ background-position: 0 -459px; }
|
||||
@@ -1073,7 +1073,81 @@ tr:hover .history_added { color: black; }
|
||||
|
||||
.pointer { cursor: pointer; }
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Ratings
|
||||
|
||||
------------------------------------------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------------------- */
|
||||
.rating_stars_block_r {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.rating_stars_block_c {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.rating_vote_block {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.rating_stars {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.rating_flag {
|
||||
margin: 4px 10px 0px 85px;
|
||||
}
|
||||
|
||||
.rating_flag_radio {
|
||||
margin: 5px 15px 5px 5px;
|
||||
}
|
||||
|
||||
.rating_modal_extra {
|
||||
float: right;
|
||||
width: 330px
|
||||
}
|
||||
|
||||
.rating_modal_expired {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.rating_modal_noopt {
|
||||
color: red;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.rating_icon_vision {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
display: inline-block;
|
||||
margin-right: 5px;
|
||||
background: url('images/vision16.png') no-repeat top center;
|
||||
}
|
||||
|
||||
.rating_icon_sound {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
display: inline-block;
|
||||
margin-right: 5px;
|
||||
background: url('images/sound16.png') no-repeat top center;
|
||||
}
|
||||
|
||||
.rating_icon_thumbup {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
background: url('images/thumbup20.png') no-repeat top center;
|
||||
}
|
||||
|
||||
.rating_icon_thumbdown {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
background: url('images/thumbdown20.png') no-repeat top center;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
After Width: | Height: | Size: 319 B |
|
After Width: | Height: | Size: 286 B |
|
After Width: | Height: | Size: 347 B |
|
After Width: | Height: | Size: 341 B |
BIN
interfaces/Plush/templates/static/stylesheets/rateit/delete.gif
Normal file
|
After Width: | Height: | Size: 752 B |
@@ -0,0 +1,98 @@
|
||||
.rateit {
|
||||
display: -moz-inline-box;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-o-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-touch-callout: none;
|
||||
}
|
||||
|
||||
.rateit .rateit-range
|
||||
{
|
||||
position: relative;
|
||||
display: -moz-inline-box;
|
||||
display: inline-block;
|
||||
background: url(star.gif);
|
||||
height: 16px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.rateit .rateit-range * {
|
||||
display:block;
|
||||
}
|
||||
|
||||
/* for IE 6 */
|
||||
* html .rateit, * html .rateit .rateit-range
|
||||
{
|
||||
display: inline;
|
||||
}
|
||||
|
||||
/* for IE 7 */
|
||||
* + html .rateit, * + html .rateit .rateit-range
|
||||
{
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.rateit .rateit-hover, .rateit .rateit-selected
|
||||
{
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
.rateit .rateit-hover-rtl, .rateit .rateit-selected-rtl
|
||||
{
|
||||
left: auto;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
.rateit .rateit-hover
|
||||
{
|
||||
background: url(star.gif) left -32px;
|
||||
}
|
||||
|
||||
.rateit .rateit-hover-rtl
|
||||
{
|
||||
background-position: right -32px;
|
||||
}
|
||||
|
||||
.rateit .rateit-selected
|
||||
{
|
||||
background: url(star.gif) left -48px;
|
||||
}
|
||||
|
||||
.rateit .rateit-selected-rtl
|
||||
{
|
||||
background-position: right -48px;
|
||||
}
|
||||
|
||||
.rateit .rateit-preset
|
||||
{
|
||||
background: url(star.gif) left -16px;
|
||||
}
|
||||
|
||||
.rateit .rateit-preset-rtl
|
||||
{
|
||||
background: url(star.gif) left -16px;
|
||||
}
|
||||
|
||||
.rateit button.rateit-reset
|
||||
{
|
||||
background: url(delete.gif) 0 0;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
display: -moz-inline-box;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
outline: none;
|
||||
border:none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.rateit button.rateit-reset:hover, .rateit button.rateit-reset:focus
|
||||
{
|
||||
background-position: 0 -16px;
|
||||
}
|
||||
BIN
interfaces/Plush/templates/static/stylesheets/rateit/star.gif
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
@@ -1,69 +1,4 @@
|
||||
<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/>
|
||||
<br/>
|
||||
<div class="EntryBlock">
|
||||
|
||||
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('accountInfo')</legend>
|
||||
<hr />
|
||||
<label class="label">$T('opt-username_newzbin'):</label>
|
||||
<input type="text" name="username_newzbin" value="$username_newzbin">
|
||||
<span class="tips">$T('explain-username_newzbin')</span>
|
||||
<br class="clear" />
|
||||
|
||||
|
||||
<label class="label">$T('opt-password_newzbin'):</label>
|
||||
<input type="password" name="password_newzbin" value="$password_newzbin">
|
||||
<span class="tips">$T('explain-password_newzbin')</span>
|
||||
<br class="clear" />
|
||||
</fieldset>
|
||||
|
||||
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('newzbinBookmarks')</legend>
|
||||
<hr />
|
||||
|
||||
<label><span class="label">$T('newzbinBookmarks'):</span>
|
||||
<input class="radio" type="checkbox" name="newzbin_bookmarks" value="1" <!--#if $newzbin_bookmarks > 0 then "checked=1" else ""#--> />
|
||||
<span class="tips">$T('explain-newzbin_bookmarks')</span></label>
|
||||
<br class="clear" />
|
||||
|
||||
<label><span class="label">$T('opt-newzbin_unbookmark'):</span>
|
||||
<input class="radio" type="checkbox" name="newzbin_unbookmark" value="1" <!--#if $newzbin_unbookmark > 0 then "checked=1" else ""#--> />
|
||||
<span class="tips">$T('explain-newzbin_unbookmark')</span></label>
|
||||
<br class="clear" />
|
||||
|
||||
<label class="label">$T('opt-bookmark_rate'):</label>
|
||||
<input type="text" name="bookmark_rate" value="$bookmark_rate">
|
||||
<span class="tips">$T('explain-bookmark_rate')</span>
|
||||
<br class="clear" />
|
||||
</fieldset>
|
||||
|
||||
<a class="config" onClick="getBookmarks();">$T('link-getBookmarks')</a>
|
||||
<!--#if $bookmarks_list#-->
|
||||
<a class="config" onClick="lr('config/indexers/hideBookmarks');">$T('link-HideBM')</a>
|
||||
<!--#else#-->
|
||||
<a class="config" onClick="lr('config/indexers/showBookmarks');">$T('link-ShowBM')</a>
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if $bookmarks_list#-->
|
||||
<fieldset class="EntryFieldSet">
|
||||
<legend>$T('processedBM')</legend>
|
||||
<hr />
|
||||
<!--#for $msgid in $bookmarks_list#-->
|
||||
<a href="https://$newzbin_url/browse/post/$msgid/" target="_blank">$msgid</a>
|
||||
<!--#end for#-->
|
||||
<br class="clear" />
|
||||
</fieldset>
|
||||
<!--#end if#-->
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<br/><hr/>
|
||||
<a href="${helpuri}Configure+Indexers-0-7" id="help" target="_blank">$T('menu-help')</a>
|
||||
<h3>NzbMatrix</h3><br/>
|
||||
|
||||
$T('explain-nzbmatrix')<br/>
|
||||
|
||||
@@ -1129,11 +1129,13 @@ function loadingJSON(){
|
||||
<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/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>
|
||||
<!--#if 0#-->
|
||||
<li><a class="config" href="$prefix/config/indexers/" onclick="lr('config/indexers/', '', 0, 0);">$T('cmenu-newzbin')</a></li>
|
||||
<!--#end if#-->
|
||||
<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>
|
||||
@@ -1152,9 +1154,6 @@ function loadingJSON(){
|
||||
<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>
|
||||
<!--#end if#-->
|
||||
<!--#if $have_quota#-->
|
||||
<li><a onclick="resetQuota()">$T('link-resetQuota')</a></li>
|
||||
<!--#end if#-->
|
||||
@@ -1183,7 +1182,7 @@ function loadingJSON(){
|
||||
<div id="RightContainer" class="left-border">
|
||||
<div id="addNew" class="centerLinks" style="overflow: hidden; display: none;">
|
||||
<form action="addID" method="get">
|
||||
<input type="text" style="width:218px;" name="id" value="$T('enterURL')<!--#if $varExists('newzbinDetails') then $T('enterID') else '' #-->" onfocus="clearForm(this, 'Enter URL<!--#if $varExists('newzbinDetails') then " or Report ID" else "" #-->')" onblur="setForm(this, 'Enter URL<!--#if $varExists('newzbinDetails') then " or Report ID" else "" #-->')">
|
||||
<input type="text" style="width:218px;" name="id" value="$T('enterURL')" onfocus="clearForm(this, 'Enter URL<!--#if $varExists('newzbinDetails') then " or Report ID" else "" #-->')" onblur="setForm(this, 'Enter URL<!--#if $varExists('newzbinDetails') then " or Report ID" else "" #-->')">
|
||||
<!--#if $cat_list#-->
|
||||
<select name="cat" >
|
||||
<optgroup label="$T('category')">
|
||||
|
||||
@@ -3,7 +3,10 @@
|
||||
<h3>$T('nzoDetails')</h3>
|
||||
<form id="nzbEditForm" class="cmxform">
|
||||
<label class="label">$T('nzoName'):</label>
|
||||
<input type="text" name="name" style="width:400px" size="80" value="$slot.filename">
|
||||
<input type="text" name="name" style="width:400px" size="80" value="$slot.filename_clean">
|
||||
<br class="clear" />
|
||||
<label class="label">$T('srv-password'):</label>
|
||||
<input type="text" name="password" style="width:200px" size="100" value="$slot.password">
|
||||
<br class="clear" />
|
||||
<label class="label">$T('pp'):</label>
|
||||
<select name="pp">
|
||||
@@ -19,6 +22,7 @@
|
||||
<select name="priority">
|
||||
<optgroup label="$T('priority')">
|
||||
<option value="-100" <!--#if $slot.priority == "-100" then "selected" else ""#-->>$T('default')</option>
|
||||
<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>
|
||||
|
||||
@@ -24,15 +24,15 @@ border-top: 1px dotted #222;
|
||||
}
|
||||
|
||||
#progressBar {
|
||||
background-color: #fff;
|
||||
border: 1px solid #000;
|
||||
background-color: #fff;
|
||||
border: 1px solid #000;
|
||||
}
|
||||
#progressBartop {
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
#percentageBar {
|
||||
background-color: #4B4545;
|
||||
background-color: #4B4545;
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ table{border-spacing:0;}
|
||||
|
||||
|
||||
|
||||
input, select {
|
||||
input, select, option {
|
||||
background-color:#232323;
|
||||
border-color:#3a3a3a;
|
||||
color:white;
|
||||
@@ -110,4 +110,4 @@ span.unselected {
|
||||
color: white;
|
||||
background-color:#333;
|
||||
border: 1px solid #555;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>$T('wizard-quickstart')</title>
|
||||
<link rel="stylesheet" type="text/css" href="static/style.css"/>
|
||||
<link rel="shortcut icon" href="static/images/favicon.ico" />
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
<!--#include $webdir + "/inc_top.tmpl"#-->
|
||||
|
||||
<script type="text/javascript" src="static/javascript/jquery.js"></script>
|
||||
<script type="text/javascript" src="static/javascript/restart.js"></script>
|
||||
<form action="./four" method="post" autocomplete="off">
|
||||
<p>$T('wizard-index-explain')</p>
|
||||
<div id="serverDetails">
|
||||
<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">
|
||||
<div class="indented bigger">
|
||||
<h3>Indexer</h3>
|
||||
<div>$T('explain-rating_enable')</div>
|
||||
<div>$T('wizard-create-account')<a href="https://www.oznzb.com/register" target="_blank">https://www.oznzb.com/register</a>.</div>
|
||||
<br class="clear" />
|
||||
<label class="label">$T('srv-password'):</label><input type="password" size="20" value="$newzbin_pass" name="newzbin_pass">
|
||||
<input type="checkbox" name="rating_enable" id="rating_enable" value="1" <!--#if $rating_enable == 1 then 'checked="checked"' else ''#-->> <label for="rating_enable">$T('opt-rating_enable')</label><br />
|
||||
<br class="clear" />
|
||||
<input type="checkbox" name="newzbin_bookmarks" id="newzbin_bookmarks" value="1" <!--#if $newzbin_bookmarks == 1 then 'checked="checked"' else ''#-->> <label for="newzbin_bookmarks">$T('wizard-index-bookmark')</label><br />
|
||||
|
||||
|
||||
<h3><a href="http://nzbmatrix.com" target="_blank">NZBMatrix.com</a> ($T('wizard-optional'))</h3>
|
||||
<label class="label">$T('srv-username'):</label><input type="text" size="20" value="$matrix_user" name="matrix_user">
|
||||
<div>
|
||||
<label class="label">$T('opt-rating_api_key')</label><input type="text" size="35" value="$rating_api_key" name="rating_api_key" id="rating_api_key">
|
||||
<div class="tips">$T('tip-rating_api_key')</div>
|
||||
</div>
|
||||
<br class="clear" />
|
||||
<label class="label">$T('opt-apikey'):</label><input type="text" size="20" value="$matrix_apikey" name="matrix_apikey">
|
||||
</div></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<hr /><br/>
|
||||
<div class="full-width">
|
||||
<table class="full-width">
|
||||
@@ -35,5 +35,4 @@
|
||||
</table>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!--#include $webdir + "/inc_bottom.tmpl"#-->
|
||||
|
||||
30
licenses/License-OrderedDict.txt
Normal file
@@ -0,0 +1,30 @@
|
||||
The Backport of OrderedDict() is coming from ActiveState's Python recipe website.
|
||||
It has been written by Raymond Hettinger.
|
||||
|
||||
|
||||
Home of the module:
|
||||
http://code.activestate.com/recipes/576693-ordered-dictionary-for-py24/
|
||||
|
||||
It is covered by the MIT License.
|
||||
===================
|
||||
(c) 2009 Raymond Hettinger
|
||||
|
||||
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.
|
||||
|
||||
38
make_dmg.py
@@ -20,6 +20,15 @@
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
import platform
|
||||
|
||||
OSX_MAV = [int(n) for n in platform.mac_ver()[0].split('.')] >= [10, 9, 0]
|
||||
|
||||
# Check if signing is possible
|
||||
authority = os.environ.get('SIGNING_AUTH')
|
||||
if authority and not OSX_MAV:
|
||||
print 'Signing should be done on OSX Mavericks (10.9.x) or higher'
|
||||
exit(1)
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print 'Usage: %s <release>' % os.path.split(sys.argv[0])[1]
|
||||
@@ -33,15 +42,20 @@ fileOSr = prod + '-osx-src.tar.gz'
|
||||
fileImg = prod + '.sparseimage'
|
||||
builds = ('sl', 'lion', 'ml')
|
||||
build_folders = (
|
||||
'OS X 10.5 and 10.6 (Leopards)',
|
||||
'OS X 10.7 (Lion)',
|
||||
'OS X 10.8 (Mountain Lion)'
|
||||
'Snow Leopard',
|
||||
'Lion',
|
||||
'.'
|
||||
)
|
||||
|
||||
# Check presense of all builds
|
||||
sharepath = os.environ.get('SHARE')
|
||||
if not (sharepath and os.path.exists(sharepath)):
|
||||
print 'Build share not defined or not found. Path expected in env variable SHARE'
|
||||
exit(1)
|
||||
|
||||
build_paths = []
|
||||
for build in builds:
|
||||
path = os.path.join(os.environ['HOME'], 'project/osx/%s-%s.cpio' % (prod, build))
|
||||
path = os.path.join(sharepath,'%s-%s.cpio' % (prod, build))
|
||||
if os.path.exists(path):
|
||||
build_paths.append(path)
|
||||
else:
|
||||
@@ -64,15 +78,13 @@ m = re.search(r'/dev/(\w+)\s+', data)
|
||||
volume = 'SABnzbd-' + str(release)
|
||||
os.system('diskutil rename %s %s' % (m.group(1), volume))
|
||||
|
||||
authority = os.environ.get('SIGNING_AUTH')
|
||||
|
||||
# Unpack build into image and sign if possible
|
||||
# Unpack build into image and sign if possible and not already done and not SnowLeopard
|
||||
for build in xrange(len(builds)):
|
||||
vol_path = '/Volumes/%s/%s/' % (volume, build_folders[build])
|
||||
os.system('ditto -x -z "%s" "%s"' % (build_paths[build], vol_path))
|
||||
if authority:
|
||||
app_name = '%s-%s' % (volume, builds[build])
|
||||
os.system('codesign -f -i "%s" -s "%s" "%s/SABnzbd.app"' % (app_name, authority, vol_path))
|
||||
if authority and builds[build] != 'sl':
|
||||
if not os.path.exists(os.path.join(vol_path, 'SABnzbd.app/Contents/_CodeSignature')):
|
||||
os.system('codesign --deep -f -i "org.sabnzbd.SABnzbd" -s "%s" "%s/SABnzbd.app"' % (authority, vol_path))
|
||||
|
||||
|
||||
# Put README.rtf in root
|
||||
@@ -100,4 +112,8 @@ print 'Make image internet-enabled'
|
||||
os.system("hdiutil internet-enable %s" % fileDmg)
|
||||
|
||||
print 'Copy GZ file'
|
||||
os.system('cp ~/project/osx/%s .' % fileOSr)
|
||||
os.system('cp "%s" .' % os.path.join(sharepath, fileOSr))
|
||||
|
||||
if not authority:
|
||||
print "Images are not signed!"
|
||||
print
|
||||
|
||||
|
Before Width: | Height: | Size: 388 B |
BIN
osx/resources/sab_clicked.tiff
Normal file
|
Before Width: | Height: | Size: 902 B |
BIN
osx/resources/sab_idle.tiff
Normal file
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
osx/resources/sab_pause.tiff
Normal file
BIN
osx/unrar/unrar
46
package.py
@@ -382,7 +382,7 @@ if target == 'app':
|
||||
DATA_FILES = ['interfaces', 'locale', 'email', ('', glob.glob("osx/resources/*"))]
|
||||
|
||||
NZBFILE = dict(
|
||||
CFBundleTypeExtensions = [ "nzb","zip","rar" ],
|
||||
CFBundleTypeExtensions = [ "nzb" ],
|
||||
CFBundleTypeIconFile = 'nzbfile.icns',
|
||||
CFBundleTypeMIMETypes = [ "text/nzb" ],
|
||||
CFBundleTypeName = 'NZB File',
|
||||
@@ -416,7 +416,15 @@ if target == 'app':
|
||||
os.system("mv dist/SABnzbd.app dist/SABnzbd.app.temp")
|
||||
os.system("ditto --arch i386 --arch ppc dist/SABnzbd.app.temp dist/SABnzbd.app/")
|
||||
os.system("rm -rf dist/SABnzbd.app.temp")
|
||||
|
||||
|
||||
# Create a symlink for Mavericks compatibility
|
||||
if not OSX_SL:
|
||||
cdir = os.getcwd()
|
||||
os.chdir('dist/SABnzbd.app/Contents/Frameworks/Python.framework/Versions')
|
||||
if os.path.exists('2.7') and not os.path.exists('Current'):
|
||||
os.system('ln -s 2.7 Current')
|
||||
os.chdir(cdir)
|
||||
|
||||
# copy unrar & par2 binary
|
||||
os.system("mkdir dist/SABnzbd.app/Contents/Resources/osx>/dev/null")
|
||||
os.system("mkdir dist/SABnzbd.app/Contents/Resources/osx/par2>/dev/null")
|
||||
@@ -435,11 +443,11 @@ if target == 'app':
|
||||
py_ver = '%s.%s' % (sys.version_info[0], sys.version_info[1])
|
||||
os.system("find dist/SABnzbd.app/Contents/Resources/lib/python%s/Cheetah -name '*.py' | xargs rm" % py_ver)
|
||||
os.system("find dist/SABnzbd.app/Contents/Resources/lib/python%s/xml -name '*.py' | xargs rm" % py_ver)
|
||||
os.system('rm dist/SABnzbd.app/Contents/Resources/site.py')
|
||||
|
||||
os.system('rm dist/SABnzbd.app/Contents/Resources/site.py 2>/dev/null')
|
||||
|
||||
# Add the SabNotifier app
|
||||
if OSX_ML and os.path.exists('/project/sabnotifier/SABnzbd.app'):
|
||||
os.system("cp -pR /project/sabnotifier/SABnzbd.app dist/SABnzbd.app/Contents/Resources/")
|
||||
if OSX_ML and os.path.exists(os.path.join(os.environ['HOME'], 'sabnotifier/SABnzbd.app')):
|
||||
os.system("cp -pR $HOME/sabnotifier/SABnzbd.app dist/SABnzbd.app/Contents/Resources/")
|
||||
|
||||
# Add License files
|
||||
os.mkdir("dist/SABnzbd.app/Contents/Resources/licenses/")
|
||||
@@ -448,19 +456,25 @@ if target == 'app':
|
||||
|
||||
os.system("sleep 5")
|
||||
|
||||
# Archive result to share
|
||||
dest_path = '/Volumes/VMware Shared Folders/osx'
|
||||
if not os.path.exists(dest_path):
|
||||
dest_path = '$HOME/project/osx'
|
||||
cpio_path = os.path.join(dest_path, prod) + '-' + postfix + '.cpio'
|
||||
print 'Create CPIO file %s' % cpio_path
|
||||
delete_files(cpio_path)
|
||||
os.system('ditto -c -z dist/ "%s"' % cpio_path)
|
||||
# Sign if possible
|
||||
authority = os.environ.get('SIGNING_AUTH')
|
||||
if authority:
|
||||
os.system('codesign --deep -f -i "org.sabnzbd.SABnzbd" -s "%s" "dist/SABnzbd.app"' % authority)
|
||||
|
||||
# Archive result to share, if present
|
||||
dest_path = os.environ.get('SHARE')
|
||||
if dest_path and os.path.exists(dest_path):
|
||||
cpio_path = os.path.join(dest_path, prod) + '-' + postfix + '.cpio'
|
||||
print 'Create CPIO file %s' % cpio_path
|
||||
delete_files(cpio_path)
|
||||
os.system('ditto -c -z dist/ "%s"' % cpio_path)
|
||||
else:
|
||||
print 'No SHARE variable set, build result not copied'
|
||||
|
||||
if OSX_ML:
|
||||
print 'Create src %s' % fileOSr
|
||||
delete_files(fileOSr)
|
||||
os.system('tar -czf %s --exclude ".git*" --exclude "sab*.zip" --exclude "SAB*.tar.gz" --exclude "*.cmd" --exclude "*.pyc" '
|
||||
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' % os.path.join(dest_path, fileOSr) )
|
||||
|
||||
@@ -611,7 +625,7 @@ else:
|
||||
os.mkdir(root)
|
||||
|
||||
# Set data files
|
||||
data_files.extend(['po/', 'cherrypy/', 'gntp/'])
|
||||
data_files.extend(['po/', 'cherrypy/', 'gntp/', 'solaris/'])
|
||||
options['data_files'] = PairList(data_files)
|
||||
options['data_files'].append(('tools', ['tools/make_mo.py', 'tools/msgfmt.py']))
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# SABnzbd Translation Template file EMAIL
|
||||
# Copyright (C) 2012 by the SABnzbd Team
|
||||
# Copyright (C) 2011-2012 by the SABnzbd Team
|
||||
# team@sabnzbd.org
|
||||
#
|
||||
msgid ""
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2012-08-03 17:24+0000\n"
|
||||
"Last-Translator: shypike <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: 2012-08-04 05:38+0000\n"
|
||||
"X-Generator: Launchpad (build 15742)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"PO-Revision-Date: 2011-06-26 10:50+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2012-12-28 10:58+0000\n"
|
||||
"Last-Translator: Thomas Lucke (Lucky) <Unknown>\n"
|
||||
"Language-Team: German <de@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-04-29 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 15149)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
@@ -189,3 +189,24 @@ msgid ""
|
||||
"\n"
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"## Translation by Thomas Lucke (Lucky)\n"
|
||||
"##\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 konnte eine NZB-Datei nicht herunterladen\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"\n"
|
||||
"Hallo,\n"
|
||||
"\n"
|
||||
"SABnzbd konnte die NZB-Datei von $url nicht herrunterladen.\n"
|
||||
"Die Fehlermeldung war: $msg\n"
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2012-04-03 09:00+0000\n"
|
||||
"Last-Translator: shypike <Unknown>\n"
|
||||
"Language-Team: Spanish <es@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-04-29 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 15149)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
|
||||
212
po/email/fi.po
Normal file
@@ -0,0 +1,212 @@
|
||||
# Finnish 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\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2013-02-19 15:28+0000\n"
|
||||
"Last-Translator: Matti Ylönen <Unknown>\n"
|
||||
"Language-Team: Finnish <fi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
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"
|
||||
"## Oletus sähköpostipohja SABnzbd:lle\n"
|
||||
"## Tämä on Cheetah pohja\n"
|
||||
"## Dokumentaatio: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Rivinvaihdot ja välilyönnit ovat merkitseviä!\n"
|
||||
"##\n"
|
||||
"## Nämä ovat otsaketiedot. Rivien ensimmäisiä sanoja ei saa vaihtaa!\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd on <!--#if $status then \"valmistunut\" else "
|
||||
"\"epäonnistunut\" #--> työssä $name\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Tämän jälkeen tulee viestin runko, ensimmäinen rivinvaihto on "
|
||||
"pakollinen!\n"
|
||||
"\n"
|
||||
"Hei,\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"SABnzbd on ladannut \"$name\" <!--#if $msgid==\"\" then \"\" else \"(newzbin "
|
||||
"#\" + $msgid + \")\"#-->\n"
|
||||
"<!--#else#-->\n"
|
||||
"SABnzbd on epäonnistunut \"$name\" <!--#if $msgid==\"\" then \"\" else "
|
||||
"\"(newzbin #\" + $msgid + \")\"#--> latauksessa\n"
|
||||
"<!--#end if#-->\n"
|
||||
"Valmistui $end_time\n"
|
||||
"Ladattu $size\n"
|
||||
"\n"
|
||||
"Työn lopputulos:\n"
|
||||
"<!--#for $stage in $stages #-->\n"
|
||||
"Tila $stage <!--#slurp#-->\n"
|
||||
"<!--#for $result in $stages[$stage]#-->\n"
|
||||
" $result <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"<!--#if $script!=\"\" #-->\n"
|
||||
"Käyttäjän skriptin tuloste \"$script\" (Exit code = $script_ret):\n"
|
||||
"$script_output\n"
|
||||
"<!--#end if#-->\n"
|
||||
"<!--#if $status #-->\n"
|
||||
"Nauti!\n"
|
||||
"<!--#else#-->\n"
|
||||
"Pahoittelut!\n"
|
||||
"<!--#end if#-->\n"
|
||||
|
||||
#: email/rss.tmpl:1
|
||||
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 sähköpostipohja SABnzbd:lle\n"
|
||||
"## Tämä on Cheetah pohja\n"
|
||||
"## Dokumentaatio: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Rivinvaihdot ja välilyönnit ovat merkitseviä!\n"
|
||||
"##\n"
|
||||
"## Nämä ovat otsaketiedot. Rivien ensimmäisiä sanoja ei saa vaihtaa!\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd on lisännyt $amount työtä jonoon\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Tämän jälkeen tulee viestin runko, ensimmäinen rivinvaihto on "
|
||||
"pakollinen!\n"
|
||||
"\n"
|
||||
"Hei,\n"
|
||||
"\n"
|
||||
"SABnzbd on lisännyt $amount työtä jonoon.\n"
|
||||
"Ne ovat RSS syötteestä \"$feed\".\n"
|
||||
"<!--#for $job in $jobs#-->\n"
|
||||
" $job <!--#slurp#-->\n"
|
||||
"<!--#end for#-->\n"
|
||||
"\n"
|
||||
"Heippa\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"
|
||||
"## Virheellisen URL-noudon sähköpostin pohja SABnzbd ohjelmalle\n"
|
||||
"## Tämä on Cheetah pohja\n"
|
||||
"## Dokumentaatio: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Rivinvaihdot ja välilyönnit ovat merkitseviä!\n"
|
||||
"##\n"
|
||||
"## Tässä on sähköpostin otsikkotiedot\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd ei voinut hakea NZB tiedostoa\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## Tämän jälkeen tulee viestin sisältö, tyhjä rivi on pakollinen!\n"
|
||||
"\n"
|
||||
"Hei,\n"
|
||||
"\n"
|
||||
"SABnzbd ei voinut hakea NZB tiedostoa osoitteesta $url.\n"
|
||||
"Virheviesti: $msg\n"
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2012-03-18 07:02+0000\n"
|
||||
"Last-Translator: Fox Ace <Unknown>\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: 2012-04-29 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 15149)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"PO-Revision-Date: 2011-06-26 10:50+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2013-12-10 20:12+0000\n"
|
||||
"Last-Translator: shypike <Unknown>\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: 2012-04-29 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 15149)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
@@ -190,3 +190,25 @@ msgid ""
|
||||
"\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 ikke klarte å hente en NZB fil\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 klarte ikke å hente NZB fra $url.\n"
|
||||
"Feilmeldingen var: $msg\n"
|
||||
"\n"
|
||||
"Hade\n"
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"PO-Revision-Date: 2012-03-09 19:11+0000\n"
|
||||
"Last-Translator: shypike <Unknown>\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2013-11-03 22:34+0000\n"
|
||||
"Last-Translator: markheloking <markheloking@live.nl>\n"
|
||||
"Language-Team: Dutch <nl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-04-29 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 15149)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
@@ -138,20 +138,20 @@ msgid ""
|
||||
"Bye\n"
|
||||
msgstr ""
|
||||
"##\n"
|
||||
"## RSS Email template for SABnzbd\n"
|
||||
"## This a Cheetah template\n"
|
||||
"## Documentation: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"## RSS Email sjabloon voor SABnzbd\n"
|
||||
"## Dit is een Cheetah sjabloon\n"
|
||||
"## Documentatie: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"## Lege regels en spaties zijn belangrijk!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"## Dit zijn de email koppen\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
"Subject: SABnzbd heeft $amount opdrachten aan de wachtrij toegevoegd\n"
|
||||
"X-priority: 5\n"
|
||||
"X-MS-priority: 5\n"
|
||||
"## After this comes the body, the empty line is required!\n"
|
||||
"## Hierna komt de inhoud, de lege regel is benodigd!\n"
|
||||
"\n"
|
||||
"Hallo,\n"
|
||||
"\n"
|
||||
@@ -187,13 +187,13 @@ msgid ""
|
||||
"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"
|
||||
"## Ongeldige URL Ophaal Email sjabloon voor SABnzbd\n"
|
||||
"## Dit is een Cheetah sjabloon\n"
|
||||
"## Documentatie: http://sabnzbd.wikidot.com/email-templates\n"
|
||||
"##\n"
|
||||
"## Newlines and whitespace are significant!\n"
|
||||
"## Lege regels en spaties zijn belangrijk!\n"
|
||||
"##\n"
|
||||
"## These are the email headers\n"
|
||||
"## Dit zijn de email koppen\n"
|
||||
"To: $to\n"
|
||||
"From: $from\n"
|
||||
"Date: $date\n"
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2012-05-02 09:57+0000\n"
|
||||
"Last-Translator: Tomasz 'Zen' Napierala <tomasz@napierala.org>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-03 05:55+0000\n"
|
||||
"X-Generator: Launchpad (build 15185)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2012-03-10 04:16+0000\n"
|
||||
"Last-Translator: lrrosa <Unknown>\n"
|
||||
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-04-29 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 15149)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2012-04-16 03:32+0000\n"
|
||||
"Last-Translator: nicusor <Unknown>\n"
|
||||
"Language-Team: Romanian <ro@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-04-29 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 15149)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
|
||||
@@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-04-28 12:01+0000\n"
|
||||
"POT-Creation-Date: 2013-12-10 20:31+0000\n"
|
||||
"PO-Revision-Date: 2012-05-15 19:28+0000\n"
|
||||
"Last-Translator: Andreas Lindberg <andypandyswe@gmail.com>\n"
|
||||
"Language-Team: Swedish <sv@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-16 05:28+0000\n"
|
||||
"X-Generator: Launchpad (build 15247)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-11 06:16+0000\n"
|
||||
"X-Generator: Launchpad (build 16869)\n"
|
||||
|
||||
#: email/email.tmpl:1
|
||||
msgid ""
|
||||
|
||||
3831
po/main/SABnzbd.pot
2025
po/main/da.po
2034
po/main/de.po
2030
po/main/es.po
4536
po/main/fi.po
Normal file
2034
po/main/fr.po
2438
po/main/nb.po
2033
po/main/nl.po
2019
po/main/pl.px
2023
po/main/pt_BR.po
2033
po/main/ro.px
2105
po/main/sv.po
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-08-14 18:42+0000\n"
|
||||
"PO-Revision-Date: 2012-05-03 03:22+0000\n"
|
||||
"Last-Translator: Rene <Unknown>\n"
|
||||
"PO-Revision-Date: 2012-12-28 11:02+0000\n"
|
||||
"Last-Translator: Steffen Thomsen <urskov@gmail.com>\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: 2012-08-15 05:11+0000\n"
|
||||
"X-Generator: Launchpad (build 15801)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-29 05:12+0000\n"
|
||||
"X-Generator: Launchpad (build 16378)\n"
|
||||
|
||||
#: NSIS_Installer.nsi:425
|
||||
msgid "Go to the SABnzbd Wiki"
|
||||
@@ -27,11 +27,11 @@ msgstr "Vis udgivelsesbemærkninger"
|
||||
|
||||
#: NSIS_Installer.nsi:429
|
||||
msgid "Support the project, Donate!"
|
||||
msgstr "Støtte projektet, donere!"
|
||||
msgstr "Støt projektet, donér!"
|
||||
|
||||
#: NSIS_Installer.nsi:431
|
||||
msgid "Please close \"SABnzbd.exe\" first"
|
||||
msgstr "Luk 'SABnzbd.exe' først"
|
||||
msgstr "Luk venligst \"SABnzbd.exe\" først"
|
||||
|
||||
#: NSIS_Installer.nsi:433
|
||||
msgid ""
|
||||
@@ -52,7 +52,7 @@ msgstr "Kør ved opstart"
|
||||
|
||||
#: NSIS_Installer.nsi:439
|
||||
msgid "Desktop Icon"
|
||||
msgstr "Skrivebords ikon"
|
||||
msgstr "Skrivebordsikon"
|
||||
|
||||
#: NSIS_Installer.nsi:441
|
||||
msgid "NZB File association"
|
||||
@@ -64,19 +64,19 @@ msgstr "Slet program"
|
||||
|
||||
#: NSIS_Installer.nsi:445
|
||||
msgid "Delete Settings"
|
||||
msgstr "Slet instillinger"
|
||||
msgstr "Slet indstillinger"
|
||||
|
||||
#: NSIS_Installer.nsi:447
|
||||
msgid ""
|
||||
"This system requires the Microsoft runtime library VC90 to be installed "
|
||||
"first. Do you want to do that now?"
|
||||
msgstr ""
|
||||
"Dette system kræver, at Microsoft runtime biblioteket VC90, der skal "
|
||||
"installeres først. Ønsker du at gøre det nu?"
|
||||
"Dette system kræver, at Microsoft runtime biblioteket VC90 skal installeres "
|
||||
"først. Ønsker du at gøre det nu?"
|
||||
|
||||
#: NSIS_Installer.nsi:449
|
||||
msgid "Downloading Microsoft runtime installer..."
|
||||
msgstr "Downloading Microsoft runtime installer..."
|
||||
msgstr "Downloader Microsoft runtime installationsfil..."
|
||||
|
||||
#: NSIS_Installer.nsi:451
|
||||
msgid "Download error, retry?"
|
||||
@@ -91,12 +91,13 @@ msgid ""
|
||||
"You cannot overwrite an existing installation. \\n\\nClick `OK` to remove "
|
||||
"the previous version or `Cancel` to cancel this upgrade."
|
||||
msgstr ""
|
||||
"Du kan ikke overskrive en eksisterende installation. Klik `OK` for at fjerne "
|
||||
"den tidligere version eller `Annuller` for at annullere denne opgradering."
|
||||
"Du kan ikke overskrive en eksisterende installation. \\n\\nKlik `OK` for at "
|
||||
"fjerne den tidligere version eller `Annuller` for at annullere denne "
|
||||
"opgradering."
|
||||
|
||||
#: NSIS_Installer.nsi:457
|
||||
msgid "Your settings and data will be preserved."
|
||||
msgstr "Dine indstillinger og data vil blive opbevaret."
|
||||
msgstr "Dine indstillinger og data vil blive bevaret."
|
||||
|
||||
#~ msgid "Start SABnzbd (hidden)"
|
||||
#~ msgstr "Start SABnzbd"
|
||||
|
||||
116
po/nsis/fi.po
Normal file
@@ -0,0 +1,116 @@
|
||||
# Finnish 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\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-08-14 18:42+0000\n"
|
||||
"PO-Revision-Date: 2013-02-19 15:24+0000\n"
|
||||
"Last-Translator: Matti Ylönen <Unknown>\n"
|
||||
"Language-Team: Finnish <fi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2013-02-20 05:14+0000\n"
|
||||
"X-Generator: Launchpad (build 16491)\n"
|
||||
|
||||
#: NSIS_Installer.nsi:425
|
||||
msgid "Go to the SABnzbd Wiki"
|
||||
msgstr "Siirry SABnzbd wikiin"
|
||||
|
||||
#: NSIS_Installer.nsi:427
|
||||
msgid "Show Release Notes"
|
||||
msgstr "Näytä julkaisutiedot"
|
||||
|
||||
#: NSIS_Installer.nsi:429
|
||||
msgid "Support the project, Donate!"
|
||||
msgstr "Tue projektia, lahjoita!"
|
||||
|
||||
#: NSIS_Installer.nsi:431
|
||||
msgid "Please close \"SABnzbd.exe\" first"
|
||||
msgstr "Ole hyvä ja sulje \"SABnzbd.exe\" ensin"
|
||||
|
||||
#: NSIS_Installer.nsi:433
|
||||
msgid ""
|
||||
" >>>> WARNING <<<<\\r\\n\\r\\nPlease, first check the "
|
||||
"release notes or go to http://wiki.sabnzbd.org/introducing-0-7-0 !"
|
||||
msgstr ""
|
||||
" >>>> VAROITUS <<<<\\r\\n\\r\\nOle hyvä ja tarkista "
|
||||
"julkaisutiedot tai käy osoitteessa http://wiki.sabnzbd.org/introducing-0-7-0 "
|
||||
"!"
|
||||
|
||||
#: NSIS_Installer.nsi:435
|
||||
msgid "This will uninstall SABnzbd from your system"
|
||||
msgstr "Tämä poistaa SABnzbd:n tietokoneestasi"
|
||||
|
||||
#: NSIS_Installer.nsi:437
|
||||
msgid "Run at startup"
|
||||
msgstr "Suorita käynnistyksen yhteydessä"
|
||||
|
||||
#: NSIS_Installer.nsi:439
|
||||
msgid "Desktop Icon"
|
||||
msgstr "Työpöydän kuvake"
|
||||
|
||||
#: NSIS_Installer.nsi:441
|
||||
msgid "NZB File association"
|
||||
msgstr "NZB tiedostosidos"
|
||||
|
||||
#: NSIS_Installer.nsi:443
|
||||
msgid "Delete Program"
|
||||
msgstr "Poista sovellus"
|
||||
|
||||
#: NSIS_Installer.nsi:445
|
||||
msgid "Delete Settings"
|
||||
msgstr "Poista asetukset"
|
||||
|
||||
#: NSIS_Installer.nsi:447
|
||||
msgid ""
|
||||
"This system requires the Microsoft runtime library VC90 to be installed "
|
||||
"first. Do you want to do that now?"
|
||||
msgstr ""
|
||||
"Tämä järjestelmä vaatii, että Microsoft runtime kirjasto VC90 täytyy asentaa "
|
||||
"ensin. Haluatko asentaa sen nyt?"
|
||||
|
||||
#: NSIS_Installer.nsi:449
|
||||
msgid "Downloading Microsoft runtime installer..."
|
||||
msgstr "Ladataan Microsoft runtime asennusta..."
|
||||
|
||||
#: NSIS_Installer.nsi:451
|
||||
msgid "Download error, retry?"
|
||||
msgstr "Latausvirhe, yritä uudelleen?"
|
||||
|
||||
#: NSIS_Installer.nsi:453
|
||||
msgid "Cannot install without runtime library, retry?"
|
||||
msgstr "Ei voida asentaa ilman runtime kirjastoa, yritä uudelleen?"
|
||||
|
||||
#: NSIS_Installer.nsi:455
|
||||
msgid ""
|
||||
"You cannot overwrite an existing installation. \\n\\nClick `OK` to remove "
|
||||
"the previous version or `Cancel` to cancel this upgrade."
|
||||
msgstr ""
|
||||
"Et voi asentaa tätä vanhan asennuksen päälle. \\n\\nPaina `OK` poistaaksesi "
|
||||
"edellisen version tai paina `Peruuta` peruuttaaksesi tämän päivityksen."
|
||||
|
||||
#: NSIS_Installer.nsi:457
|
||||
msgid "Your settings and data will be preserved."
|
||||
msgstr "Asetuksiasi ja tietojasi ei poisteta."
|
||||
|
||||
#~ msgid ""
|
||||
#~ " >>>> WARNING <<<<\\r\\n\\r\\nPlease, first check the "
|
||||
#~ "release notes or go to http://wiki.sabnzbd.org/introducing-0-6-0 !"
|
||||
#~ msgstr ""
|
||||
#~ " >>>> VAROITUS <<<<\\r\\n\\r\\nOle hyvä ja tarkista "
|
||||
#~ "julkaisutiedot tai mene osoitteeseen http://wiki.sabnzbd.org/introducing-0-6-"
|
||||
#~ "0 !"
|
||||
|
||||
#~ msgid "Start SABnzbd (hidden)"
|
||||
#~ msgstr "Aloita SABnzbd (piilotettuna)"
|
||||
|
||||
#~ msgid "Delete Cache"
|
||||
#~ msgstr "Poista välimuisti"
|
||||
|
||||
#~ msgid "Delete Logs"
|
||||
#~ msgstr "Poista lokit"
|
||||
@@ -8,85 +8,93 @@ msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-08-14 18:42+0000\n"
|
||||
"PO-Revision-Date: 2011-06-26 10:50+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2013-12-04 12:09+0000\n"
|
||||
"Last-Translator: Daniel Sebastian <trinitytest@hotmail.com>\n"
|
||||
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-15 05:11+0000\n"
|
||||
"X-Generator: Launchpad (build 15801)\n"
|
||||
"X-Launchpad-Export-Date: 2013-12-05 05:57+0000\n"
|
||||
"X-Generator: Launchpad (build 16863)\n"
|
||||
|
||||
#: NSIS_Installer.nsi:425
|
||||
#: NSIS_Installer.nsi:416
|
||||
msgid "Go to the SABnzbd Wiki"
|
||||
msgstr ""
|
||||
msgstr "Gå til SABnzbd Wiki"
|
||||
|
||||
#: NSIS_Installer.nsi:427
|
||||
#: NSIS_Installer.nsi:418
|
||||
msgid "Show Release Notes"
|
||||
msgstr ""
|
||||
msgstr "Vis versjonsmerknader"
|
||||
|
||||
#: NSIS_Installer.nsi:429
|
||||
#: NSIS_Installer.nsi:420
|
||||
msgid "Support the project, Donate!"
|
||||
msgstr ""
|
||||
msgstr "Støtt prosjektet, donèr!"
|
||||
|
||||
#: NSIS_Installer.nsi:431
|
||||
#: NSIS_Installer.nsi:422
|
||||
msgid "Please close \"SABnzbd.exe\" first"
|
||||
msgstr ""
|
||||
msgstr "Vennligst lukk \"SABnzbd.exe\" først"
|
||||
|
||||
#: NSIS_Installer.nsi:433
|
||||
#: NSIS_Installer.nsi:424
|
||||
msgid ""
|
||||
" >>>> WARNING <<<<\\r\\n\\r\\nPlease, first check the "
|
||||
"release notes or go to http://wiki.sabnzbd.org/introducing-0-7-0 !"
|
||||
msgstr ""
|
||||
" >>>> ADVARSEL <<<<\\r\\n\\r\\nVennligst sjekk "
|
||||
"versjonsmerknadene først, eller gå til http://wiki.sabnzbd.org/introducing-0-"
|
||||
"7-0 !"
|
||||
|
||||
#: NSIS_Installer.nsi:435
|
||||
#: NSIS_Installer.nsi:426
|
||||
msgid "This will uninstall SABnzbd from your system"
|
||||
msgstr ""
|
||||
msgstr "Dette vil avinstallere SABnzbd fra ditt system"
|
||||
|
||||
#: NSIS_Installer.nsi:437
|
||||
#: NSIS_Installer.nsi:428
|
||||
msgid "Run at startup"
|
||||
msgstr ""
|
||||
msgstr "Kjør ved oppstart"
|
||||
|
||||
#: NSIS_Installer.nsi:439
|
||||
#: NSIS_Installer.nsi:430
|
||||
msgid "Desktop Icon"
|
||||
msgstr ""
|
||||
msgstr "Skrivebordsikon"
|
||||
|
||||
#: NSIS_Installer.nsi:441
|
||||
#: NSIS_Installer.nsi:432
|
||||
msgid "NZB File association"
|
||||
msgstr ""
|
||||
msgstr "NZB-filassosiering"
|
||||
|
||||
#: NSIS_Installer.nsi:443
|
||||
#: NSIS_Installer.nsi:434
|
||||
msgid "Delete Program"
|
||||
msgstr ""
|
||||
msgstr "Fjern program"
|
||||
|
||||
#: NSIS_Installer.nsi:445
|
||||
#: NSIS_Installer.nsi:436
|
||||
msgid "Delete Settings"
|
||||
msgstr ""
|
||||
msgstr "Slett innstillinger"
|
||||
|
||||
#: NSIS_Installer.nsi:447
|
||||
#: NSIS_Installer.nsi:438
|
||||
msgid ""
|
||||
"This system requires the Microsoft runtime library VC90 to be installed "
|
||||
"first. Do you want to do that now?"
|
||||
msgstr ""
|
||||
"Dette sytemet krever at Microsoft runtime library VC90 er installert først. "
|
||||
"Ønsker du å gjøre dette nå?"
|
||||
|
||||
#: NSIS_Installer.nsi:449
|
||||
#: NSIS_Installer.nsi:440
|
||||
msgid "Downloading Microsoft runtime installer..."
|
||||
msgstr ""
|
||||
msgstr "Laster ned Microsoft runtime installer..."
|
||||
|
||||
#: NSIS_Installer.nsi:451
|
||||
#: NSIS_Installer.nsi:442
|
||||
msgid "Download error, retry?"
|
||||
msgstr ""
|
||||
msgstr "Nedlasting feilet, prøve på nytt?"
|
||||
|
||||
#: NSIS_Installer.nsi:453
|
||||
#: NSIS_Installer.nsi:444
|
||||
msgid "Cannot install without runtime library, retry?"
|
||||
msgstr ""
|
||||
msgstr "Kan ikke installere uten runtime library, prøve på nytt?"
|
||||
|
||||
#: NSIS_Installer.nsi:455
|
||||
#: NSIS_Installer.nsi:446
|
||||
msgid ""
|
||||
"You cannot overwrite an existing installation. \\n\\nClick `OK` to remove "
|
||||
"the previous version or `Cancel` to cancel this upgrade."
|
||||
msgstr ""
|
||||
"Du kan ikke overskrive en eksisterende installasjon. \\n\\nTrykk 'OK' for å "
|
||||
"fjerne tidligere installasjon, eller 'Avbryt' for å avbryte denne "
|
||||
"oppgraderingen."
|
||||
|
||||
#: NSIS_Installer.nsi:457
|
||||
#: NSIS_Installer.nsi:448
|
||||
msgid "Your settings and data will be preserved."
|
||||
msgstr ""
|
||||
msgstr "Dine innstillinger og data vil bli tatt vare på."
|
||||
|
||||
@@ -8,32 +8,32 @@ msgstr ""
|
||||
"Project-Id-Version: sabnzbd\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-08-14 18:42+0000\n"
|
||||
"PO-Revision-Date: 2012-05-01 18:56+0000\n"
|
||||
"Last-Translator: shypike <Unknown>\n"
|
||||
"PO-Revision-Date: 2013-11-03 22:38+0000\n"
|
||||
"Last-Translator: markheloking <markheloking@live.nl>\n"
|
||||
"Language-Team: Dutch <nl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-08-15 05:11+0000\n"
|
||||
"X-Generator: Launchpad (build 15801)\n"
|
||||
"X-Launchpad-Export-Date: 2013-11-04 05:55+0000\n"
|
||||
"X-Generator: Launchpad (build 16820)\n"
|
||||
|
||||
#: NSIS_Installer.nsi:425
|
||||
#: NSIS_Installer.nsi:416
|
||||
msgid "Go to the SABnzbd Wiki"
|
||||
msgstr "Ga naar de SABnzbd Wiki"
|
||||
|
||||
#: NSIS_Installer.nsi:427
|
||||
#: NSIS_Installer.nsi:418
|
||||
msgid "Show Release Notes"
|
||||
msgstr "Toon vrijgave bericht"
|
||||
|
||||
#: NSIS_Installer.nsi:429
|
||||
#: NSIS_Installer.nsi:420
|
||||
msgid "Support the project, Donate!"
|
||||
msgstr "Steun het project, Doneer!"
|
||||
|
||||
#: NSIS_Installer.nsi:431
|
||||
#: NSIS_Installer.nsi:422
|
||||
msgid "Please close \"SABnzbd.exe\" first"
|
||||
msgstr "Sluit \"SABnzbd.exe\" eerst af"
|
||||
|
||||
#: NSIS_Installer.nsi:433
|
||||
#: NSIS_Installer.nsi:424
|
||||
msgid ""
|
||||
" >>>> WARNING <<<<\\r\\n\\r\\nPlease, first check the "
|
||||
"release notes or go to http://wiki.sabnzbd.org/introducing-0-7-0 !"
|
||||
@@ -41,31 +41,31 @@ msgstr ""
|
||||
" >>>> WAARSCHUWING <<<<\\\\r\\\\n\\\\r\\\\nLees eerst het "
|
||||
"vrijgave bericht of ga naar http://wiki.sabnzbd.org/introducing-0-7-0 !"
|
||||
|
||||
#: NSIS_Installer.nsi:435
|
||||
#: NSIS_Installer.nsi:426
|
||||
msgid "This will uninstall SABnzbd from your system"
|
||||
msgstr "Dit verwijdert SABnzbd van je systeem"
|
||||
|
||||
#: NSIS_Installer.nsi:437
|
||||
#: NSIS_Installer.nsi:428
|
||||
msgid "Run at startup"
|
||||
msgstr "Opstarten bij systeem start"
|
||||
|
||||
#: NSIS_Installer.nsi:439
|
||||
#: NSIS_Installer.nsi:430
|
||||
msgid "Desktop Icon"
|
||||
msgstr "Pictogram op bureaublad"
|
||||
msgstr "Bureaubladpictogram"
|
||||
|
||||
#: NSIS_Installer.nsi:441
|
||||
#: NSIS_Installer.nsi:432
|
||||
msgid "NZB File association"
|
||||
msgstr "NZB bestanden koppelen aan SABnzbd"
|
||||
|
||||
#: NSIS_Installer.nsi:443
|
||||
#: NSIS_Installer.nsi:434
|
||||
msgid "Delete Program"
|
||||
msgstr "Verwijder programma"
|
||||
msgstr "Programma verwijderen"
|
||||
|
||||
#: NSIS_Installer.nsi:445
|
||||
#: NSIS_Installer.nsi:436
|
||||
msgid "Delete Settings"
|
||||
msgstr "Verwijder instellingen"
|
||||
|
||||
#: NSIS_Installer.nsi:447
|
||||
#: NSIS_Installer.nsi:438
|
||||
msgid ""
|
||||
"This system requires the Microsoft runtime library VC90 to be installed "
|
||||
"first. Do you want to do that now?"
|
||||
@@ -73,19 +73,19 @@ msgstr ""
|
||||
"Op dit systeem moeten eerst de Microsoft runtime bibliotheek VC90 "
|
||||
"geïnstalleerd worden. Wilt u dat nu doen?"
|
||||
|
||||
#: NSIS_Installer.nsi:449
|
||||
#: NSIS_Installer.nsi:440
|
||||
msgid "Downloading Microsoft runtime installer..."
|
||||
msgstr "Downloaden van de Microsoft bibliotheek"
|
||||
|
||||
#: NSIS_Installer.nsi:451
|
||||
#: NSIS_Installer.nsi:442
|
||||
msgid "Download error, retry?"
|
||||
msgstr "Download mislukt, opnieuw?"
|
||||
msgstr "Download mislukt, opnieuw proberen?"
|
||||
|
||||
#: NSIS_Installer.nsi:453
|
||||
#: NSIS_Installer.nsi:444
|
||||
msgid "Cannot install without runtime library, retry?"
|
||||
msgstr "Installeren heeft geen zin zonder de bibliotheek, opnieuw?"
|
||||
msgstr "Installeren heeft geen zin zonder de bibliotheek, opnieuw proberen?"
|
||||
|
||||
#: NSIS_Installer.nsi:455
|
||||
#: NSIS_Installer.nsi:446
|
||||
msgid ""
|
||||
"You cannot overwrite an existing installation. \\n\\nClick `OK` to remove "
|
||||
"the previous version or `Cancel` to cancel this upgrade."
|
||||
@@ -93,7 +93,7 @@ msgstr ""
|
||||
"U kunt geen bestaande installatie overschrijven.\\n\\nKlik op `OK` om de "
|
||||
"vorige versie te verwijderen of op `Annuleren` om te stoppen."
|
||||
|
||||
#: NSIS_Installer.nsi:457
|
||||
#: NSIS_Installer.nsi:448
|
||||
msgid "Your settings and data will be preserved."
|
||||
msgstr "Je instellingen en bestanden blijven behouden."
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ import gzip
|
||||
import subprocess
|
||||
import time
|
||||
import cherrypy
|
||||
import sys
|
||||
from threading import RLock, Lock, Condition, Thread
|
||||
try:
|
||||
import sleepless
|
||||
@@ -75,6 +76,7 @@ from sabnzbd.postproc import PostProcessor
|
||||
from sabnzbd.downloader import Downloader
|
||||
from sabnzbd.assembler import Assembler
|
||||
from sabnzbd.newzbin import Bookmarks, MSGIDGrabber
|
||||
from sabnzbd.rating import Rating
|
||||
import sabnzbd.misc as misc
|
||||
import sabnzbd.powersup as powersup
|
||||
from sabnzbd.dirscanner import DirScanner, ProcessArchiveFile, ProcessSingleFile
|
||||
@@ -220,6 +222,13 @@ def initialize(pause_downloader = False, clean_up = False, evalSched=False, repa
|
||||
# New admin folder
|
||||
misc.remove_all(cfg.admin_dir.get_path(), '*.sab')
|
||||
|
||||
### Optionally wait for "incomplete" to become online
|
||||
if cfg.wait_for_dfolder():
|
||||
wait_for_download_folder()
|
||||
else:
|
||||
cfg.download_dir.set(cfg.download_dir(), create=True)
|
||||
cfg.download_dir.set_create(True)
|
||||
|
||||
### Set access rights for "incomplete" base folder
|
||||
misc.set_permissions(cfg.download_dir.get_path(), recursive=False)
|
||||
|
||||
@@ -302,15 +311,18 @@ def initialize(pause_downloader = False, clean_up = False, evalSched=False, repa
|
||||
PostProcessor()
|
||||
|
||||
NzbQueue()
|
||||
NzbQueue.do.read_queue(repair)
|
||||
|
||||
Assembler()
|
||||
|
||||
NzbQueue.do.read_queue(repair)
|
||||
|
||||
Downloader(pause_downloader or paused)
|
||||
|
||||
DirScanner()
|
||||
|
||||
MSGIDGrabber()
|
||||
|
||||
Rating()
|
||||
|
||||
URLGrabber()
|
||||
|
||||
@@ -346,6 +358,8 @@ def start():
|
||||
|
||||
MSGIDGrabber.do.start()
|
||||
|
||||
Rating.do.start()
|
||||
|
||||
logging.debug('Starting urlgrabber')
|
||||
URLGrabber.do.start()
|
||||
|
||||
@@ -376,6 +390,13 @@ def halt():
|
||||
except:
|
||||
pass
|
||||
|
||||
logging.debug('Stopping rating')
|
||||
Rating.do.stop()
|
||||
try:
|
||||
Rating.do.join()
|
||||
except:
|
||||
pass
|
||||
|
||||
logging.debug('Stopping dirscanner')
|
||||
DirScanner.do.stop()
|
||||
try:
|
||||
@@ -501,6 +522,7 @@ def save_state(flag=False):
|
||||
BPSMeter.do.save()
|
||||
rss.save()
|
||||
Bookmarks.do.save()
|
||||
Rating.do.save()
|
||||
DirScanner.do.save()
|
||||
PostProcessor.do.save()
|
||||
#if flag:
|
||||
@@ -616,7 +638,7 @@ def add_nzbfile(nzbfile, pp=None, script=None, cat=None, priority=NORMAL_PRIORIT
|
||||
logging.info("Traceback: ", exc_info = True)
|
||||
|
||||
if ext.lower() in ('.zip', '.rar'):
|
||||
return ProcessArchiveFile(filename, path, pp, script, cat, priority=priority)
|
||||
return ProcessArchiveFile(filename, path, pp, script, cat, priority=priority, nzbname=nzbname)
|
||||
else:
|
||||
return ProcessSingleFile(filename, path, pp, script, cat, priority=priority, nzbname=nzbname, keep=keep, reuse=reuse)
|
||||
|
||||
@@ -938,7 +960,8 @@ def load_admin(_id, remove=False, do_pickle=True):
|
||||
if remove:
|
||||
os.remove(path)
|
||||
except:
|
||||
logging.error(Ta('Loading %s failed'), path)
|
||||
excepterror = str(sys.exc_info()[0])
|
||||
logging.error(Ta('Loading %s failed with error %s'), path, excepterror)
|
||||
logging.info("Traceback: ", exc_info = True)
|
||||
return None
|
||||
|
||||
@@ -1029,6 +1052,9 @@ def check_all_tasks():
|
||||
if not MSGIDGrabber.do.isAlive():
|
||||
logging.info('Restarting crashed newzbin')
|
||||
MSGIDGrabber.do.__init__()
|
||||
if not Rating.do.isAlive():
|
||||
logging.info('Restarting crashed rating')
|
||||
Rating.do.__init__()
|
||||
if not sabnzbd.scheduler.sched_check():
|
||||
logging.info('Restarting crashed scheduler')
|
||||
sabnzbd.scheduler.init()
|
||||
@@ -1037,15 +1063,21 @@ def check_all_tasks():
|
||||
# Check one-shot pause
|
||||
sabnzbd.scheduler.pause_check()
|
||||
|
||||
# Check (and terminate) idle jobs
|
||||
sabnzbd.nzbqueue.NzbQueue.do.stop_idle_jobs()
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def pid_file(pid_path=None, port=0):
|
||||
def pid_file(pid_path=None, pid_file= None, port=0):
|
||||
""" Create or remove pid file
|
||||
"""
|
||||
global DIR_PID
|
||||
if not sabnzbd.WIN32 and pid_path and pid_path.startswith('/'):
|
||||
DIR_PID = os.path.join(pid_path, 'sabnzbd-%s.pid' % port)
|
||||
if not sabnzbd.WIN32:
|
||||
if pid_path and pid_path.startswith('/'):
|
||||
DIR_PID = os.path.join(pid_path, 'sabnzbd-%s.pid' % port)
|
||||
elif pid_file and pid_file.startswith('/'):
|
||||
DIR_PID = pid_file
|
||||
|
||||
if DIR_PID:
|
||||
try:
|
||||
@@ -1071,6 +1103,13 @@ def check_incomplete_vs_complete():
|
||||
cfg.download_dir.set('incomplete')
|
||||
|
||||
|
||||
def wait_for_download_folder():
|
||||
""" Wait for download folder to become available """
|
||||
while not cfg.download_dir.test_path():
|
||||
logging.debug('Waiting for "incomplete" folder')
|
||||
time.sleep(2.0)
|
||||
|
||||
|
||||
# Required wrapper because nzbstuff.py cannot import downloader.py
|
||||
def active_primaries():
|
||||
return sabnzbd.downloader.Downloader.do.active_primaries()
|
||||
|
||||
110
sabnzbd/api.py
@@ -52,12 +52,13 @@ from sabnzbd.utils.json import JsonWriter
|
||||
from sabnzbd.utils.pathbrowser import folders_at_path
|
||||
from sabnzbd.misc import loadavg, to_units, diskfree, disktotal, get_ext, \
|
||||
get_filename, int_conv, globber, time_format, remove_all, \
|
||||
starts_with_path
|
||||
starts_with_path, cat_convert
|
||||
from sabnzbd.encoding import xml_name, unicoder, special_fixer, platform_encode, html_escape
|
||||
from sabnzbd.postproc import PostProcessor
|
||||
from sabnzbd.articlecache import ArticleCache
|
||||
from sabnzbd.utils.servertests import test_nntp_server_dict
|
||||
from sabnzbd.newzbin import Bookmarks
|
||||
from sabnzbd.rating import Rating
|
||||
from sabnzbd.bpsmeter import BPSMeter
|
||||
from sabnzbd.database import build_history_info, unpack_history_info, get_history_handle
|
||||
import sabnzbd.growler
|
||||
@@ -177,10 +178,11 @@ def _api_queue_delete_nzf(output, value, kwargs):
|
||||
|
||||
|
||||
def _api_queue_rename(output, value, kwargs):
|
||||
""" API: accepts output, value(=old name), value2(=new name) """
|
||||
""" API: accepts output, value(=old name), value2(=new name), value3(=password) """
|
||||
value2 = kwargs.get('value2')
|
||||
value3 = kwargs.get('value3')
|
||||
if value and value2:
|
||||
NzbQueue.do.change_name(value, special_fixer(value2))
|
||||
NzbQueue.do.change_name(value, special_fixer(value2), special_fixer(value3))
|
||||
return report(output)
|
||||
else:
|
||||
return report(output, _MSG_NO_VALUE2)
|
||||
@@ -269,6 +271,24 @@ def _api_queue_default(output, value, kwargs):
|
||||
else:
|
||||
return report(output, _MSG_NOT_IMPLEMENTED)
|
||||
|
||||
def _api_queue_rating(output, value, kwargs):
|
||||
""" API: accepts output, value(=nzo_id), type, setting, detail """
|
||||
vote_map = {'up': Rating.VOTE_UP, 'down': Rating.VOTE_DOWN}
|
||||
flag_map = {'spam': Rating.FLAG_SPAM, 'encrypted': Rating.FLAG_ENCRYPTED, 'expired': Rating.FLAG_EXPIRED, 'other': Rating.FLAG_OTHER, 'comment': Rating.FLAG_COMMENT}
|
||||
type = kwargs.get('type')
|
||||
setting = kwargs.get('setting')
|
||||
if value:
|
||||
try:
|
||||
video = setting if type == 'video' and setting != "-" else None
|
||||
audio = setting if type == 'audio' and setting != "-" else None
|
||||
vote = vote_map[setting] if type == 'vote' else None
|
||||
flag = flag_map[setting] if type == 'flag' else None
|
||||
Rating.do.update_user_rating(value, video, audio, vote, flag, kwargs.get('detail'))
|
||||
return report(output)
|
||||
except:
|
||||
return report(output, _MSG_BAD_SERVER_PARMS)
|
||||
else:
|
||||
return report(output, _MSG_NO_VALUE)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
def _api_options(name, output, kwargs):
|
||||
@@ -293,9 +313,11 @@ def _api_addfile(name, output, kwargs):
|
||||
#Side effect of next line is that attribute .value is created
|
||||
#which is needed to make add_nzbfile() work
|
||||
size = name.length
|
||||
else:
|
||||
elif hasattr(name, 'value'):
|
||||
size = len(name.value)
|
||||
if name is not None and name.filename and size:
|
||||
else:
|
||||
size = 0
|
||||
if name is not None and size and name.filename:
|
||||
cat = kwargs.get('cat')
|
||||
xcat = kwargs.get('xcat')
|
||||
if not cat and xcat:
|
||||
@@ -344,7 +366,7 @@ def _api_addlocalfile(name, output, kwargs):
|
||||
|
||||
if get_ext(name) in ('.zip', '.rar'):
|
||||
res = sabnzbd.dirscanner.ProcessArchiveFile(\
|
||||
fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True)
|
||||
fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True, nzbname=nzbname)
|
||||
elif get_ext(name) in ('.nzb', '.gz'):
|
||||
res = sabnzbd.dirscanner.ProcessSingleFile(\
|
||||
fn, name, pp=pp, script=script, cat=cat, priority=priority, keep=True, nzbname=nzbname)
|
||||
@@ -630,6 +652,18 @@ def _api_watched_now(name, output, kwargs):
|
||||
return report(output)
|
||||
|
||||
|
||||
def _api_resume_pp(name, output, kwargs):
|
||||
""" API: accepts output """
|
||||
PostProcessor.do.paused = False
|
||||
return report(output)
|
||||
|
||||
|
||||
def _api_pause_pp(name, output, kwargs):
|
||||
""" API: accepts output """
|
||||
PostProcessor.do.paused = True
|
||||
return report(output)
|
||||
|
||||
|
||||
def _api_rss_now(name, output, kwargs):
|
||||
""" API: accepts output """
|
||||
# Run RSS scan async, because it can take a long time
|
||||
@@ -648,7 +682,8 @@ def _api_test_email(name, output, kwargs):
|
||||
pack['unpack'] = ['action 1', 'action 2']
|
||||
res = sabnzbd.emailer.endjob('I had a d\xe8ja vu', 123, 'unknown', True,
|
||||
os.path.normpath(os.path.join(cfg.complete_dir.get_path(), '/unknown/I had a d\xe8ja vu')),
|
||||
123*MEBI, pack, 'my_script', 'Line 1\nLine 2\nLine 3\nd\xe8ja vu\n', 0)
|
||||
123*MEBI, None, pack, 'my_script', 'Line 1\nLine 2\nLine 3\nd\xe8ja vu\n', 0,
|
||||
test=kwargs)
|
||||
if res == 'Email succeeded':
|
||||
res = None
|
||||
return report(output, error=res)
|
||||
@@ -656,7 +691,7 @@ def _api_test_email(name, output, kwargs):
|
||||
def _api_test_notif(name, output, kwargs):
|
||||
""" API: send a test notification, return result """
|
||||
logging.info("Sending test notification")
|
||||
res = sabnzbd.growler.send_notification('SABnzbd', T('Test Notification'), 'other', wait=True)
|
||||
res = sabnzbd.growler.send_notification('SABnzbd', T('Test Notification'), 'other', wait=True, test=kwargs)
|
||||
return report(output, error=res)
|
||||
|
||||
def _api_undefined(name, output, kwargs):
|
||||
@@ -755,8 +790,22 @@ def _api_config_undefined(output, kwargs):
|
||||
return report(output, _MSG_NOT_IMPLEMENTED)
|
||||
|
||||
|
||||
def _api_server_stats(name, output, kwargs):
|
||||
""" API: accepts output """
|
||||
sum_t, sum_m, sum_w, sum_d = BPSMeter.do.get_sums()
|
||||
stats = {'total': sum_t, 'month': sum_m, 'week': sum_w, 'day': sum_d}
|
||||
|
||||
stats['servers'] = {}
|
||||
for svr in config.get_servers():
|
||||
t, m, w, d = BPSMeter.do.amounts(svr)
|
||||
stats['servers'][svr] = {'total': t or 0, 'month': m or 0, 'week': w or 0, 'day': d or 0}
|
||||
|
||||
return report(output, keyword='', data=stats)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
_api_table = {
|
||||
'server_stats' : _api_server_stats,
|
||||
'get_config' : _api_get_config,
|
||||
'set_config' : _api_set_config,
|
||||
'del_config' : _api_del_config,
|
||||
@@ -793,6 +842,8 @@ _api_table = {
|
||||
'rescan' : _api_rescan,
|
||||
'eval_sort' : _api_eval_sort,
|
||||
'watched_now' : _api_watched_now,
|
||||
'resume_pp' : _api_resume_pp,
|
||||
'pause_pp' : _api_pause_pp,
|
||||
'rss_now' : _api_rss_now,
|
||||
'browse' : _api_browse,
|
||||
'reset_quota' : _api_reset_quota,
|
||||
@@ -809,7 +860,8 @@ _api_queue_table = {
|
||||
'pause' : _api_queue_pause,
|
||||
'resume' : _api_queue_resume,
|
||||
'priority' : _api_queue_priority,
|
||||
'sort' : _api_queue_sort
|
||||
'sort' : _api_queue_sort,
|
||||
'rating' : _api_queue_rating
|
||||
}
|
||||
|
||||
_api_config_table = {
|
||||
@@ -1034,6 +1086,7 @@ def build_queue(web_dir=None, root=None, verbose=False, prim=True, webdir='', ve
|
||||
info['script_list'] = list_scripts()
|
||||
info['cat_list'] = list_cats(output is None)
|
||||
|
||||
info['rating_enable'] = bool(cfg.rating_enable())
|
||||
|
||||
n = 0
|
||||
found_active = False
|
||||
@@ -1105,7 +1158,7 @@ def build_queue(web_dir=None, root=None, verbose=False, prim=True, webdir='', ve
|
||||
slot['mbdone_fmt'] = locale.format('%d', int(mb-mbleft), True)
|
||||
slot['size'] = format_bytes(bytes)
|
||||
slot['sizeleft'] = format_bytes(bytesleft)
|
||||
if not Downloader.do.paused and status != 'Paused' and status != 'Fetching' and not found_active:
|
||||
if not Downloader.do.paused and status not in (Status.PAUSED, Status.FETCHING) and not found_active:
|
||||
if status == Status.CHECKING:
|
||||
slot['status'] = Status.CHECKING
|
||||
else:
|
||||
@@ -1129,7 +1182,8 @@ def build_queue(web_dir=None, root=None, verbose=False, prim=True, webdir='', ve
|
||||
slot['percentage'] = "%s" % (int(((mb-mbleft) / mb) * 100))
|
||||
slot['missing'] = missing
|
||||
|
||||
if status in (Status.PAUSED, Status.CHECKING):
|
||||
if (Downloader.do.paused or Downloader.do.postproc or status not in (Status.DOWNLOADING, Status.QUEUED)) \
|
||||
and priority != TOP_PRIORITY:
|
||||
slot['timeleft'] = '0:00:00'
|
||||
slot['eta'] = 'unknown'
|
||||
else:
|
||||
@@ -1202,8 +1256,13 @@ def build_queue(web_dir=None, root=None, verbose=False, prim=True, webdir='', ve
|
||||
slot['finished'] = finished
|
||||
slot['active'] = active
|
||||
slot['queued'] = queued
|
||||
|
||||
|
||||
|
||||
rating = Rating.do.get_rating_by_nzo(nzo_id)
|
||||
slot['has_rating'] = rating is not None
|
||||
if rating:
|
||||
slot['rating_avg_video'] = rating.avg_video
|
||||
slot['rating_avg_audio'] = rating.avg_audio
|
||||
|
||||
if (start <= n and n < start + limit) or not limit:
|
||||
slotinfo.append(slot)
|
||||
n += 1
|
||||
@@ -1404,6 +1463,7 @@ def rss_qstatus():
|
||||
bytes = pnfo[PNFO_BYTES_FIELD] / MEBI
|
||||
mbleft = (bytesleft / MEBI)
|
||||
mb = (bytes / MEBI)
|
||||
nzo_id = pnfo[PNFO_NZO_ID_FIELD]
|
||||
|
||||
|
||||
if mb == mbleft:
|
||||
@@ -1421,6 +1481,8 @@ def rss_qstatus():
|
||||
else:
|
||||
item.link = "http://%s:%s/sabnzbd/history" % ( \
|
||||
cfg.cherryhost(), cfg.cherryport() )
|
||||
item.guid = nzo_id
|
||||
|
||||
status_line = []
|
||||
status_line.append('<tr>')
|
||||
#Total MB/MB left
|
||||
@@ -1542,7 +1604,8 @@ def build_header(prim, webdir=''):
|
||||
if not color:
|
||||
color = ''
|
||||
|
||||
header = { 'T': Ttemplate, 'Tspec': Tspec, 'Tx' : Ttemplate, 'version':sabnzbd.__version__, 'paused': Downloader.do.paused,
|
||||
header = { 'T': Ttemplate, 'Tspec': Tspec, 'Tx' : Ttemplate, 'version':sabnzbd.__version__,
|
||||
'paused': Downloader.do.paused or Downloader.do.postproc,
|
||||
'pause_int': scheduler.pause_int(), 'paused_all': sabnzbd.PAUSED_ALL,
|
||||
'uptime':uptime, 'color_scheme':color }
|
||||
speed_limit = Downloader.do.get_limit()
|
||||
@@ -1591,15 +1654,16 @@ def build_header(prim, webdir=''):
|
||||
header['quota'] = to_units(BPSMeter.do.quota)
|
||||
header['have_quota'] = bool(BPSMeter.do.quota > 0.0)
|
||||
header['left_quota'] = to_units(BPSMeter.do.left)
|
||||
header['pp_pause_event'] = sabnzbd.scheduler.pp_pause_event()
|
||||
|
||||
status = ''
|
||||
if Downloader.do.paused:
|
||||
if Downloader.do.paused or Downloader.do.postproc:
|
||||
status = Status.PAUSED
|
||||
elif bytespersec > 0:
|
||||
status = Status.DOWNLOADING
|
||||
else:
|
||||
status = 'Idle'
|
||||
header['status'] = "%s" % status
|
||||
header['status'] = status
|
||||
|
||||
anfo = ArticleCache.do.cache_info()
|
||||
|
||||
@@ -1746,6 +1810,20 @@ def build_history(start=None, limit=None, verbose=False, verbose_list=None, sear
|
||||
if item['retry']:
|
||||
retry_folders.append(path)
|
||||
|
||||
if Rating.do:
|
||||
rating = Rating.do.get_rating_by_nzo(item['nzo_id'])
|
||||
else:
|
||||
rating = None
|
||||
item['has_rating'] = rating is not None
|
||||
if rating:
|
||||
item['rating_avg_video'] = rating.avg_video
|
||||
item['rating_avg_audio'] = rating.avg_audio
|
||||
item['rating_avg_vote_up'] = rating.avg_vote_up
|
||||
item['rating_avg_vote_down'] = rating.avg_vote_down
|
||||
item['rating_user_video'] = rating.user_video
|
||||
item['rating_user_audio'] = rating.user_audio
|
||||
item['rating_user_vote'] = rating.user_vote
|
||||
|
||||
total_items += full_queue_size
|
||||
fetched_items = len(items)
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ import threading
|
||||
|
||||
import sabnzbd
|
||||
from sabnzbd.decorators import synchronized
|
||||
from sabnzbd.constants import GIGI
|
||||
|
||||
|
||||
ARTICLE_LOCK = threading.Lock()
|
||||
@@ -31,6 +32,7 @@ class ArticleCache(object):
|
||||
do = None
|
||||
|
||||
def __init__(self):
|
||||
self.__cache_limit_org = 0
|
||||
self.__cache_limit = 0
|
||||
self.__cache_size = 0
|
||||
|
||||
@@ -40,12 +42,16 @@ class ArticleCache(object):
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def cache_info(self):
|
||||
return (len(self.__article_list), self.__cache_size, self.__cache_limit)
|
||||
return (len(self.__article_list), self.__cache_size, self.__cache_limit_org)
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
def new_limit(self, limit):
|
||||
""" Called when cache limit changes """
|
||||
self.__cache_limit = limit
|
||||
self.__cache_limit_org = limit
|
||||
if limit < 0:
|
||||
self.__cache_limit = GIGI
|
||||
else:
|
||||
self.__cache_limit = min(limit, GIGI)
|
||||
|
||||
|
||||
@synchronized(ARTICLE_LOCK)
|
||||
|
||||
@@ -24,6 +24,7 @@ import Queue
|
||||
import binascii
|
||||
import logging
|
||||
import struct
|
||||
import re
|
||||
from threading import Thread
|
||||
from time import sleep
|
||||
try:
|
||||
@@ -43,13 +44,14 @@ from sabnzbd.postproc import PostProcessor
|
||||
import sabnzbd.downloader
|
||||
from sabnzbd.utils.rarfile import RarFile, is_rarfile
|
||||
from sabnzbd.encoding import latin1, unicoder, is_utf8
|
||||
from sabnzbd.rating import Rating
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
class Assembler(Thread):
|
||||
do = None # Link to the instance of this method
|
||||
|
||||
def __init__ (self, queue = None):
|
||||
def __init__(self, queue=None):
|
||||
Thread.__init__(self)
|
||||
|
||||
if queue:
|
||||
@@ -100,7 +102,7 @@ class Assembler(Thread):
|
||||
# Pause without saving
|
||||
sabnzbd.downloader.Downloader.do.pause(save=False)
|
||||
except:
|
||||
logging.error('Fatal error in Assembler', exc_info = True)
|
||||
logging.error('Fatal error in Assembler', exc_info=True)
|
||||
break
|
||||
|
||||
nzf.remove_admin()
|
||||
@@ -112,8 +114,39 @@ class Assembler(Thread):
|
||||
logging.debug('Got md5pack for set %s', setname)
|
||||
|
||||
if check_encrypted_rar(nzo, filepath):
|
||||
logging.warning(Ta('WARNING: Paused job "%s" because of encrypted RAR file'), latin1(nzo.final_name))
|
||||
if cfg.pause_on_pwrar() == 1:
|
||||
logging.warning(Ta('WARNING: Paused job "%s" because of encrypted RAR file'), latin1(nzo.final_name))
|
||||
nzo.pause()
|
||||
else:
|
||||
logging.warning(Ta('WARNING: Aborted job "%s" because of encrypted RAR file'), latin1(nzo.final_name))
|
||||
nzo.fail_msg = T('Aborted, encryption detected')
|
||||
import sabnzbd.nzbqueue
|
||||
sabnzbd.nzbqueue.NzbQueue.do.end_job(nzo)
|
||||
|
||||
unwanted = rar_contains_unwanted_file(filepath)
|
||||
if unwanted:
|
||||
logging.warning(Ta('WARNING: In "%s" unwanted extension in RAR file. Unwanted file is %s '), latin1(nzo.final_name), unwanted)
|
||||
logging.debug(Ta('Unwanted extension is in rar file %s'), filepath)
|
||||
if cfg.action_on_unwanted_extensions() == 1 and nzo.unwanted_ext == 0:
|
||||
logging.debug('Unwanted extension ... pausing')
|
||||
nzo.unwanted_ext = 1
|
||||
nzo.pause()
|
||||
if cfg.action_on_unwanted_extensions() == 2:
|
||||
logging.debug('Unwanted extension ... aborting')
|
||||
nzo.fail_msg = T('Aborted, unwanted extension detected')
|
||||
import sabnzbd.nzbqueue
|
||||
sabnzbd.nzbqueue.NzbQueue.do.end_job(nzo)
|
||||
|
||||
filter, reason = nzo_filtered_by_rating(nzo)
|
||||
if filter == 1:
|
||||
logging.warning(Ta('WARNING: Paused job "%s" because of rating (%s)'), latin1(nzo.final_name), reason)
|
||||
nzo.pause()
|
||||
elif filter == 2:
|
||||
logging.warning(Ta('WARNING: Aborted job "%s" because of rating (%s)'), latin1(nzo.final_name), reason)
|
||||
nzo.fail_msg = T('Aborted, rating filter matched (%s)') % reason
|
||||
import sabnzbd.nzbqueue
|
||||
sabnzbd.nzbqueue.NzbQueue.do.end_job(nzo)
|
||||
|
||||
nzf.completed = True
|
||||
else:
|
||||
sabnzbd.nzbqueue.NzbQueue.do.remove(nzo.nzo_id, add_to_history=False, cleanup=False)
|
||||
@@ -122,7 +155,7 @@ class Assembler(Thread):
|
||||
|
||||
def _assemble(nzf, path, dupe):
|
||||
if os.path.exists(path):
|
||||
unique_path = get_unique_path(path, create_dir = False)
|
||||
unique_path = get_unique_filename(path)
|
||||
if dupe:
|
||||
path = unique_path
|
||||
else:
|
||||
@@ -139,7 +172,7 @@ def _assemble(nzf, path, dupe):
|
||||
decodetable = nzf.decodetable
|
||||
|
||||
for articlenum in decodetable:
|
||||
sleep(0.01)
|
||||
sleep(0.001)
|
||||
article = decodetable[articlenum]
|
||||
|
||||
data = ArticleCache.do.load_article(article)
|
||||
@@ -233,7 +266,7 @@ def GetMD5Hashes(fname, force=False):
|
||||
table = {}
|
||||
except:
|
||||
logging.debug('QuickCheck parser crashed in file %s', fname)
|
||||
logging.info('Traceback: ', exc_info = True)
|
||||
logging.info('Traceback: ', exc_info=True)
|
||||
table = {}
|
||||
|
||||
f.close()
|
||||
@@ -281,12 +314,19 @@ def ParseFilePacket(f, header):
|
||||
return nothing
|
||||
|
||||
|
||||
RE_SUBS = re.compile(r'\W+sub|subs|subpack|subtitle|subtitles(?![a-z])', re.I)
|
||||
def is_cloaked(path, names):
|
||||
""" Return True if this is likely to be a cloaked encrypted post """
|
||||
fname = unicoder(os.path.split(path)[1]).lower()
|
||||
fname = os.path.splitext(fname)[0]
|
||||
for name in names:
|
||||
name = unicoder(name.lower())
|
||||
if fname == name or 'password' in name:
|
||||
name = os.path.split(name.lower())[1]
|
||||
name, ext = os.path.splitext(unicoder(name))
|
||||
if ext == u'.rar' and fname.startswith(name) and (len(fname) - len(name)) < 8 and len(names) < 3 and not RE_SUBS.search(fname):
|
||||
logging.debug('File %s is probably encrypted due to RAR with same name inside this RAR', fname)
|
||||
return True
|
||||
elif 'password' in name:
|
||||
logging.debug('RAR %s is probably encrypted: "password" in filename %s', fname, name)
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -294,11 +334,11 @@ def is_cloaked(path, names):
|
||||
def check_encrypted_rar(nzo, filepath):
|
||||
""" Check if file is rar and is encrypted """
|
||||
encrypted = False
|
||||
if not nzo.password and cfg.pause_on_pwrar() and is_rarfile(filepath):
|
||||
if not nzo.password and not nzo.meta.get('password') and cfg.pause_on_pwrar() and is_rarfile(filepath):
|
||||
try:
|
||||
zf = RarFile(filepath, all_names=True)
|
||||
encrypted = zf.encrypted or is_cloaked(filepath, zf.namelist())
|
||||
if encrypted and int(nzo.encrypted) < 2:
|
||||
if encrypted and int(nzo.encrypted) < 2 and not nzo.reuse:
|
||||
nzo.encrypted = 1
|
||||
else:
|
||||
encrypted = False
|
||||
@@ -308,3 +348,62 @@ def check_encrypted_rar(nzo, filepath):
|
||||
logging.debug('RAR file %s cannot be inspected', filepath)
|
||||
return encrypted
|
||||
|
||||
|
||||
def rar_contains_unwanted_file(filepath):
|
||||
# checks for unwanted extensions in the rar file 'filepath'
|
||||
# ... unwanted extensions are defined in global variable cfg.unwanted_extensions()
|
||||
# returns False if no unwanted extensions are found in the rar file
|
||||
# returns name of file if unwanted extension is found in the rar file
|
||||
unwanted = None
|
||||
if is_rarfile(filepath):
|
||||
#logging.debug('rar file to check: %s',filepath)
|
||||
#logging.debug('unwanted extensions are: %s', cfg.unwanted_extensions())
|
||||
try:
|
||||
zf = RarFile(filepath, all_names=True)
|
||||
#logging.debug('files in rar file: %s', zf.namelist())
|
||||
for somefile in zf.namelist() :
|
||||
logging.debug('file in rar file: %s', somefile)
|
||||
if os.path.splitext(somefile)[1].replace('.', '').lower() in cfg.unwanted_extensions():
|
||||
logging.debug('Unwanted file %s', somefile)
|
||||
unwanted = somefile
|
||||
zf.close()
|
||||
except:
|
||||
logging.debug('RAR file %s cannot be inspected.', filepath)
|
||||
return unwanted
|
||||
|
||||
def nzo_filtered_by_rating(nzo):
|
||||
if Rating.do and cfg.rating_enable() and cfg.rating_filter_enable() and (nzo.rating_filtered < 2):
|
||||
rating = Rating.do.get_rating_by_nzo(nzo.nzo_id)
|
||||
if rating is not None:
|
||||
nzo.rating_filtered = 1
|
||||
reason = rating_filtered(rating, nzo.filename.lower(), True)
|
||||
if reason is not None: return (2, reason)
|
||||
reason = rating_filtered(rating, nzo.filename.lower(), False)
|
||||
if reason is not None: return (1, reason)
|
||||
return (0, "")
|
||||
|
||||
def rating_filtered(rating, filename, abort):
|
||||
def check_keyword(keyword):
|
||||
clean_keyword = keyword.strip().lower()
|
||||
return (len(clean_keyword) > 0) and (clean_keyword in filename)
|
||||
audio = cfg.rating_filter_abort_audio() if abort else cfg.rating_filter_pause_audio()
|
||||
video = cfg.rating_filter_abort_video() if abort else cfg.rating_filter_pause_video()
|
||||
spam = cfg.rating_filter_abort_spam() if abort else cfg.rating_filter_pause_spam()
|
||||
spam_confirm = cfg.rating_filter_abort_spam_confirm() if abort else cfg.rating_filter_pause_spam_confirm()
|
||||
encrypted = cfg.rating_filter_abort_encrypted() if abort else cfg.rating_filter_pause_encrypted()
|
||||
encrypted_confirm = cfg.rating_filter_abort_encrypted_confirm() if abort else cfg.rating_filter_pause_encrypted_confirm()
|
||||
downvoted = cfg.rating_filter_abort_downvoted() if abort else cfg.rating_filter_pause_downvoted()
|
||||
keywords = cfg.rating_filter_abort_keywords() if abort else cfg.rating_filter_pause_keywords()
|
||||
if (video > 0) and (rating.avg_video > 0) and (rating.avg_video <= video):
|
||||
return T('video')
|
||||
if (audio > 0) and (rating.avg_audio > 0) and (rating.avg_audio <= audio):
|
||||
return T('audio')
|
||||
if (spam and ((rating.avg_spam_cnt > 0) or rating.avg_encrypted_confirm)) or (spam_confirm and rating.avg_spam_confirm):
|
||||
return T('spam')
|
||||
if (encrypted and ((rating.avg_encrypted_cnt > 0) or rating.avg_encrypted_confirm)) or (encrypted_confirm and rating.avg_encrypted_confirm):
|
||||
return T('passworded')
|
||||
if downvoted and (rating.avg_vote_up < rating.avg_vote_down):
|
||||
return T('downvoted')
|
||||
if any(check_keyword(k) for k in keywords.split(',')):
|
||||
return T('keywords')
|
||||
return None
|
||||
|
||||
@@ -398,10 +398,20 @@ class BPSMeter(object):
|
||||
return None, 0, 0
|
||||
|
||||
|
||||
def midnight(self):
|
||||
""" Midnight action: dummy update for all servers """
|
||||
for server in self.day_total:
|
||||
self.update(server)
|
||||
|
||||
|
||||
def quota_handler():
|
||||
""" To be called from scheduler """
|
||||
logging.debug('Checking quota')
|
||||
BPSMeter.do.reset_quota()
|
||||
|
||||
|
||||
def midnight_action():
|
||||
if BPSMeter.do:
|
||||
BPSMeter.do.midnight()
|
||||
|
||||
BPSMeter()
|
||||
|
||||