Browse Source

Merge branch '2.3.x'

tags/2.3.8
Safihre 6 years ago
parent
commit
6b11013c1a
  1. 10
      .lgtm.yml
  2. 12
      .travis.yml
  3. 2
      ABOUT.txt
  4. 2
      INSTALL.txt
  5. 4
      PKG-INFO
  6. 24
      README.mkd
  7. 6
      appveyor.yml
  8. 8
      interfaces/Config/templates/config_notify.tmpl
  9. 12
      interfaces/Glitter/templates/include_overlays.tmpl
  10. BIN
      osx/unrar/unrar
  11. 12
      po/email/he.po
  12. 42
      po/main/da.po
  13. 14
      po/main/he.po
  14. 3
      sabnzbd/downloader.py
  15. 2
      sabnzbd/interface.py
  16. 29
      sabnzbd/misc.py
  17. 1
      sabnzbd/skintext.py
  18. 21
      sabnzbd/sorting.py
  19. 17
      sabnzbd/utils/servertests.py
  20. 4
      sabnzbd/version.py
  21. 2
      snap/snapcraft.yaml
  22. 6
      tests/test_functional.py
  23. BIN
      win/7zip/7za.exe
  24. 2
      win/7zip/license.txt
  25. 9
      win/par2/multipar/README_MultiPar.txt
  26. BIN
      win/par2/multipar/par2j.exe
  27. BIN
      win/par2/multipar/par2j64.exe
  28. BIN
      win/unrar/UnRAR.exe
  29. BIN
      win/unrar/x64/UnRAR.exe

10
.lgtm.yml

@ -0,0 +1,10 @@
path_classifiers:
oldinterfaces:
- interfaces/smpl
- interfaces/Plush
library:
- cherrypy
- gntp
- six
- "*knockout*"
- "**/*min*"

12
.travis.yml

@ -4,15 +4,15 @@ matrix:
- os: linux
language: python
env:
- secure: X5MY2HAtCxBI84IySY/XroFsFy2RIVhfsX+P1y3WXfvwBHYKCgrPV6BgwCg93ttkPmMS/IslP5Vp4F1OGqC9AZdxtxfHKpIPlIVxIHj6Lf6xwynmbGDQXjy73K13gjznK2mkGA0jcsp4Q5POS4ZKVkd6aOXnc8l8xS08+ztAvfxCC3tsMj2oMLEPP92j6zqb/1x2aX5+gVyVzrKgQQVKIk6R6jTxhIiOMPzj4+VMLXK8NEZqjV6RPwUjSoKHqJiV5URyf6/+2Ojmem3ilnpktn7xIJ/ZO1UNnZCrElOGZtmbryZFMctJvEAIQCOSdzsq/MACk0gocnOL3JQfDF5sYPOjJmc6sZI9PL78oFhwKaLkWEx565u8kdkLTMvv4A02HAmPzV1rKE1CTlEhsy0djU8mueCr9Ep1WyLJdY/igbyhR+dOd8fVo9Y1tY2o+ZisCsO5+PRfzhypK9xukqmWDJSXIWSuExUU/becXJ4IaTmlYJ+ArhKvkL90GmckH/zt9ZPIgr9Lq0OFva9uVHX+sbbsQZZ48lAmgiiiX335dONj8MxO8cDKsUT9FWQ8PzeJ8g8PErv5pmVVVODoOdKZg2Oo4jUsZG2yV8uUt9j87I2DPou4WiJ7wcTzQCPdzlaA5hdixPMyVUF/yCL+eKdJQFaKy3eaKwCxnAVp3WA2WdA=
- secure: gzvbgg+rdM/TfPOlXGE/JOW8VEfIJxwUnzt2bH07nj/PbREXQXrImC1SreMtwQX+gvd7bjIBZU/sgNSgRYcWKaSim4uNtAbinkcKQeP+V844ZY2Fabq/xpLluSP61vJLQ+hOLbnvilxmuI0E1Divahxo5qZJlwzCdk5u2txJRT/2LKGDT1lpGgIyDj9u0/ViAcpaAyfFR2Zd6ydHKbx+eFBE21LkyH/+GJmRiO0+qLIuCa2knmOJYjwBxRcPiAEDpbrRUbYDiNyzPqEVxJfCbsGYlo/QN/SnV6kTqM1WoFzvi4d1pDxDGRFLQj+KigihF6uY4eLC1e6yVQrDy0tyWKt6E+1tc8fH5dRS7AYtWMzURn/7Ebd72AiNIYaeAL8ZPqI7vw3ovFTqBS0h8Mg2uUZ503ytUvfwKyU9MgIkzXwmGuE37MCd0bRJ/blPS2DT+IMbrbEP90K5VrDrN/AGiYHR1TZ9GKUZd6xHibulEh2nNFMMQEga8nE2CWaJ3uJrCN7ud+4OJ0zCZFF7JiJTbOGApHg/aGWD/bYfg9sIh7up4PcxVs6RFxbf+M1aB8GO2A9aEZFow+djYVxiqf6esmzrnlsTfz16f8Txmez3BRftjVULre03a3Rt7WRxwYLveNlJos1nMw3G0CnruCe+wJbHEK4tEiqIXqB8UemT4zw=
- secure: f5QGjZESH4khjLOO1Ntgtiol4ZvwcqHLIV1sdK162dVkNT6UKOTRQflj2UmRXzwiRzWtVX/Ri0zT0j+SUJy2+aqJY/gxvisdTIWzRQ3w/CJPGgCizSkTQEWJ2V/n7DUAJ4xerme36zYi21S3d8VEWVDzU/duLu3yhlN5x0wMCY+dDPSDTFubmptGeCmyxqBqGVd7gD3PaiK7fDBB/eAXbW3QxLLQfxLHmPsx8vzPhDTQiLFtY43jfnVGEBdUbxSMXbq2NRB5eXH3bBkW8u/5y9uoyuF45CQn8f3UB6F84L+/n9M2ryCGeSJOFuZqSUHXvRF2acON40jx3t4PVocEzYguPwewoiFxfFHjRWmiI4WljiN30taK0pgstmzLTedozK+NdZ0M8vD7MCyK0yegPQolzFRngWW5Y8NY1XwlBT9W2lqGmrFge+dB86wOArMcRlY62PTOJ9Zqspbe/6mBT4Tq4O2OsXxGX/x60W/NJynva9WAz2SLEi5Pjs6r1a3tyXssw4/8KVhWl92WfpOnWrZrnZlsxOTmcS2OhLB0FQikTv9T/i3CZNcCI4PELkExeIwh4JW1MY0iGeLDHcAUKryJGrRZj1x32Nt1uUPTPBi8l8EzNyNOUvbHYTdpBr5r2JW1orvT55OhvKauc3wB7ogj673iYsqx5jeazHhgJMs=
- secure: iMXx74c2eUhDPJrukvAFxCFNWYDk8JB2alQ89Hc3T1ckXfDS37vgUplTze1aGo+AefUkDSFmTreFk9hVJvd4SQTHz4wS+qp7HQJFWECjR16jZwobIbukNPNU1JamozZoOa2igoVIJ8/tVIdIpfcsGfzj9WogwUlpChWHIiI8SM/Fc0WK+M9rDPKBpgjEN2yom73jbC2ETxuQ/HMdMNnNS9S1vS7MY+2W69+xi5Kl9hP0HUBIG/JtVXu1a4SO5NgqL5aW4cgKtgg0IjpedBRMcC0rpyEz+lDtl2jXYR+mXQEO8uNZOwzV7SLrq/ROGwW+DMtfiiySKxmuYoL/JOm4kcLyEup51dgnTQc1RdEcaYfk0twDry67prnQ/sXAQphzjl0StrTpLfzWUsCvgXRp7+XWhX9ElHN4KelOcAc7YeTSXoPY6bENk8LSy1woJ2HbH5TkSvtVJ6xrmssV3bEMp7aGx7qv1D/uvyAEMulB79WwdLyoDxmG9eIgXfp3nICko4p9kisrzK0hVCGDRCHSYgTnDBGTMJU/SlRRNUepmXHXQUrqWyTWvy2HTMUTjuYBaaNcUqZvyHyyaDq0MNBotwDCmes5o8fZu456lB/B26LwUu7cOSbCw19ePlGBNnbjA9NmNoQGOo66era3NEVJLYv+H91PAPQyWpzOt0X53Gk=
- secure: Cryq31K8wxt+q212/q7IHlLf4flH4riaiHssxR0/VfGACtMp3jOAVZ5RAOvX03LPYp+BuX2KAHFXDHeGHGzYmESkpzPCToZ3GpaOwP3ymc3RNeU6bd98yEQyQtM/wtY4uxPUWdwz5Uw5kkeynxw3y/QFsYceipB3u3oCvfB9n8SqWShjWpBFyFhSKS/SJjUqgNcAaA0pTP8l/crquZNhkug/J8Nlc/nC0H6ZSJKGu8UhkhZ0VSEY8dofZZkGG6YCIIEAqGasQqkra6x/D0uECfQnnDrTqekvklUG31/zy+awQXl+0NjLTIKyl2rHp5AUpSTlbPO2mDYdbWEWcRYmNsEEiGfvy3R9kGGbNijB5b57jvgsJapH8DkGRWseISdCBWqLH7C/OafNuMGzQ4s3UCN1aazqqN/IAJplVjSWiKA76Nbh385x88E8RaH7Gnvx1ZK88Lgf7Bz8Ar/O1dMviyP8WbM/vQQkVMdOk89y5O6G8ZwHFoj/v8w383irWMN2iU0Mf7GKW91ughpKrrKbXCmkT1bR9+tNYpKWU1O+1jgnGk65149GNC0K+9exWt0TK3pNSUa7b2nVzxeAqdCJjCoKBi2pLiRxYVI50V80M2p5Xw+5iiSiOhTLzFLT3YRi2VBjjBFa8BHJHBS9Pua4DaFc1w06XNej6K8rRV5We0s=
- secure: O/8jVULQmqOLHkvIW21IsVuL7/B+3MhgRFaT4wltxk/x7TarEsQyahXdStsQ+I53mMRbSfsArdCHXwgIm13wROXfcEdt7iM0f2tGWUsm32q73RrjBsKzb8SRTKZNkL1dOjpgkdEHejZdVckKlg0GlpJTTowOdfi+SYinj4Hj52vrV9waHk296njKw98W5Y35lEtSH3DcAU2NHrDi7YqQvjiBzj9MviG1qpJZJ1RMxKrTXXCqjlYcxr8FwO2kGpMnkTFIDywi4OspLQ1InEGhM9MdrY9tqGVzW631nX1uRV8aNhl+bLhtRs0i3QtOisWMWO5z5SQN6pOqUWx3nnwLPJzuoL+wGMDC2tdVRmH1+cuYCwq97curNq4hv9FBs7P/RS4e22WAoW0jtLWnx/5voVes1EsQE5iW/iG0z4ih3MIk3dHN6h8HcNr83DRxOW8JKmA79IbtcVFReZJ2AXQhx6VmvdUaIi3IKpW79K89ZzEuoEEO5Eyti2LLz9rti0iVknHejGYKWDCABflGaKjnj62tpUsAB9EsPPuwBegoKRd2bVy3kJ+RWGcMc4QfzsEq39z2ftQ8XJ800ZuuQvl7nsk86Dso+Hgr/T+5xU2wU6vFbwoDCWsxdnK2LXNpf3ci5PBZFhG9zLMRk+yFyAfh8OdQr19lxclay0X6na1K8i0=
- os: osx
env:
- HOMEBREW_NO_AUTO_UPDATE=1
- secure: RI/WxBI5kTP5v0qZ6im5BwqPurzzwKIl8GSbM2dFSEiWYEbKwHTDJ3KDDsXqS8YMNaropNVgzsdpCGXYUWRNTraKVa9GZEGNJ+fQuBWK9wkJ0MDTYfL/QFSN1CDXXlg7k26VXu6PgvEFA5kyDfSpxrxXJC6yXOUeJqmebkU2fiQo7/5Vpb1WAwpYlBP6zL5lYt2lpJ85fhYEjuAeuP/9zdVIlgCB7rDCgUX7tCKKXgwbKXfcff7lOCneB00/RCmRuNp3/tohGlgrSXh4ivHx4XEQgRoiVdeR3RCKZa5tBIXANefuJ2VopBrAbSRmVBexQP1818IU/XLlwtEEpC1vulpkx+5JolWksCrx4uJkKdlH0KA4k1m88L0Q1Rmmnp9LgRgeEl5xqt5s6RR6lS63ChQYkVFgWandwlrWu7Uenne4401KbG58PzDXEGlsKhUXnYBX+SU6gwejImCMb3vszKRAge5QAQlkiruCu31W9tWpY9ezHYrbv9ckOqdFXf9qsPEnU352v/8qHFe7jT/+7RSYdUzuo/d2aQqPKfkb7sy1VLEznmbGmv1BH4rGNpxd5inlcFKsR099Hx7PWgY8MHZcnEP3PJ2kBseFzVP3WKXHDTcv8yR0w6EgQyMzSHl9Ah3WJJ7TXZQ82gcqF8LcmuKcqXcwTkffG3ww7Vzuq4M=
- secure: uXHKYgQAwnfhWKi7RKAEumMMZZTJBb878KpodRfs1fz0NffdPo5+Ak1ricNzOJ8wti8/lXycDS+YmnFs64lGUxL+zvbQlFv7QuKfN0uHfPlo6zux9Ha9pg1rSUI4zqZ9kmbtwc0I2mdy1VeWwHvnbQDXUIt6a+tTwYZL3MGdP6kNvtSXaYhbEoHExjqeHUtVhUTafvWGtwE7uN+sdvhwXQ0dWlz6HGub8qYjkKCmF9VG+OyLKjFHjLVDMQ7Jnng2l1ZOgHSh5g5m6r++NEwSzZ8wFVULdzv5eEcR9U+mHmonFKOA/ICcZGd8MhEuvz9BupfgDWFqSTb5JGxzlZ28YdtjcAudzrWQMSpP2R0ks2Ttxz9Kpgw1L75HMvj0smazHs7IEEiXf2Yr03bzeHg7CGXNqOYyEOxxrPaJekCjMlX/YGqT/iv/8pZPfew7k/iVJlvCam76WNXABjJncHJeMsCgkItYZAoRZJDc+7z8J4g4ys1Rk0V/difjjwc/pSeKbt6wDA/9cmZ7r4Cs1Yh9Pl/mw6kzWGGpejO7lmsayQN3Pw99QMcZByUHx5BR+ZtIfF7Sl+F0uDQJ0MntJcteF7z1Dam2jHlkLckb85j6YWup5ItLAj5Hz7V2YUwqFmQhfOWEAjxagNSNnB8we4YBWS4KDTBEVDm6ITTfddlYvCw=
- secure: HKaT52NUQh18kllFQTjpKC64KlDkWEz0XnIEKJffumctrJjCvoFZFNC7ip3j7Bi3yp2IeD2SMsdxrrT6YFKxx5FfSdPqpQnsY34bzdEFZQomNJg4n/tmBc350PoVQ0PvLQiVoCCfVbdS/b4makNK7A+d9KED+SEsQMAqKp2mSnGhATB9MwFaZL5S4nGnEkqW5+eeAQxJ8JRawwumOOx/xhPOoEMIfHMpyTwFI1yUh1nJhZ9k1nxHzPlM78goyIuf0MjeZfSZ2fIlNZGVruYM28i9hpO4bzPFhk51uryWv8DQZiZlpCkHl6Po7rVVf5pNqm+l9SD/t0DnhS2rJHdeFSI2lM/uZtdOxaY5fTTj83LbCGhFtuZnZRwoQ73tpda8J7Z1E5Ni9bi7vOiZQ4pEIPt4LLu0X607sPWMkqrmgalKQQS13b5oliyMpkIguvmj9822BpaNVqamIrfn0z38+0Gog8iuGlMAQnRO9tGDO4kbVLcZQTRWpSwIC3niTPjPgLq/N92XQ9xmccrFT7efwemgF65FNM5ltv8+9AmI+hsuyXfqeHaAV9wmxRAAhaqvRgnSLYa3u1CPn5fF2CDvPvPcyCEIWnyxc7dYHDpzAQDcyuSejtbnL8gpkDqEHpy23hTjgZnZD7Pk7PQ7ayA8zBumTMGZ+/GAn5Wmgce+w0M=
- secure: iMXx74c2eUhDPJrukvAFxCFNWYDk8JB2alQ89Hc3T1ckXfDS37vgUplTze1aGo+AefUkDSFmTreFk9hVJvd4SQTHz4wS+qp7HQJFWECjR16jZwobIbukNPNU1JamozZoOa2igoVIJ8/tVIdIpfcsGfzj9WogwUlpChWHIiI8SM/Fc0WK+M9rDPKBpgjEN2yom73jbC2ETxuQ/HMdMNnNS9S1vS7MY+2W69+xi5Kl9hP0HUBIG/JtVXu1a4SO5NgqL5aW4cgKtgg0IjpedBRMcC0rpyEz+lDtl2jXYR+mXQEO8uNZOwzV7SLrq/ROGwW+DMtfiiySKxmuYoL/JOm4kcLyEup51dgnTQc1RdEcaYfk0twDry67prnQ/sXAQphzjl0StrTpLfzWUsCvgXRp7+XWhX9ElHN4KelOcAc7YeTSXoPY6bENk8LSy1woJ2HbH5TkSvtVJ6xrmssV3bEMp7aGx7qv1D/uvyAEMulB79WwdLyoDxmG9eIgXfp3nICko4p9kisrzK0hVCGDRCHSYgTnDBGTMJU/SlRRNUepmXHXQUrqWyTWvy2HTMUTjuYBaaNcUqZvyHyyaDq0MNBotwDCmes5o8fZu456lB/B26LwUu7cOSbCw19ePlGBNnbjA9NmNoQGOo66era3NEVJLYv+H91PAPQyWpzOt0X53Gk=
- secure: Yc9lY76AEXwG1uf+pg1xyTDo3gg8zsIqJ6K/WwJr7zStLGU6J5Qf/iW7jFzGxTbq0Kc6/dgb4VInYwlcyhjsRE3DI5LDqKiP2dZATP07crwZnzwrhxDPdYA+s1sI9YDJN90aZZm48DbUPFR7DPZjkDqyRJMRCFstZ/fJ//kSDVJvMjEOPEixzT6k5sRW2j9sctzEzqCHhroKaz5/m1sSBWa+pJx7C4A76NQFrMZEmlnWf0qKoUERaGn4hv5I3/38KQa0wy1q43obMoltmaFrbyIV4tx9M60kSGfaQdVVgwYgxPsINZeESJk+N4JCQSUKr0biAcKamPfgIbfEN4FbCGiFzHf5w/eIyUG0yUg42NtzzMVVS4I0s/aaPGKrjDrJNZ9bj8/oQjWDHtlRx7nrREdPI2Ch/MF8e8t03tDm5unhLIa6Fk1Ic9UbgwjtUqDvAne5+kwhsh8WpyU+VnttP/LyKTi2eqtADF6kPuxKM9DbTFE/IvCE2DXDFc6OOzAWoqhnbBgPrX0L5OlQLWoL13oi+yJMnBsF4Rd3rhqpNJ2sJTukeHT9z5yhkBEXHe9PatT0hiXZ7AxHsgX292k9Ti4se3pPxETkbR3r8iOklItMu1PViQsvfRyOFu+XloqMaPO31z48LmcPOps+/DYkbRyaTqBMdmPPRJghZ9lzvno=
- secure: RsFCZq/1Q6/++mgCZB6WsnIcbBsBwHFn6nfwC+vAomxbPtHevdiC930eIn8jKDza6Vmd4LoaMklvNOBEK1QpphbZXhKZIecakZOb+KyHVanSbQwErZCuVQdEo2p8cHJfuEh3guxmkE2OjAiBnSsgHlLmGiLAUF5GW5NPDLASPXIxXbBKOIKv7sTWj6tYYfVdUs1pQVz3Z+MkhRoS2uhVBOvQ14axtAtil1WmhgEJzuHAvjW29b1Q6l2goIuqoglqwKSna437CCt6mMFt6IVQqi36/lwXw0cYCLyJq3PURGDce6FdeQlwW0YfOXwT9k6BH+HcNuYmCSAbuL5hqC994avYbpemsBKKGfBK0Q8xZe0lQpS+R1C+iF3XXnPLU8B5TtALiBcFVRd3s291mxigxYqjkXbkgwVNAgkXKze+MhvrEQgoQwwhU3SbnmrZN8U6wW58MDYzjDxPaZdE5tUI+ROkfWeMRqtQrGNSJX6AwjkCrurW1/n0DXMlsUFnq4WGWF9nk8aHVzD8Y0cetQ+tLj3HxuxNqmAquewn+Z7pL41YTHlSTZ9+nHhI0GLQem6ANWL/4xJO8nBeOUETv1nULgbMyNOVaS9yBA7b2omE+Zuf8CMRCr9ID+Eeqtx1cUSMkWRymTdZvyPFPLjQ9KASTc7aCM7Cfc0aBceOoOOxMRw=
addons:
chrome: stable

2
ABOUT.txt

@ -1,5 +1,5 @@
*******************************************
*** This is SABnzbd 2.3.7 ***
*** This is SABnzbd 2.3.8 ***
*******************************************
SABnzbd is an open-source cross-platform binary newsreader.
It simplifies the process of downloading from Usenet dramatically,

2
INSTALL.txt

@ -1,4 +1,4 @@
SABnzbd 2.3.7
SABnzbd 2.3.8
-------------------------------------------------------------------------------
0) LICENSE

4
PKG-INFO

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

24
README.mkd

@ -1,18 +1,16 @@
Release Notes - SABnzbd 2.3.7
Release Notes - SABnzbd 2.3.8
=========================================================
## Improvements and bug fixes since 2.3.6
- Hopeless jobs will be failed faster, based on the first article of
each file. If 80% of these first articles is missing, the job is aborted.
- Option "fast_fail" added to disable the new behavior.
- Added option to quickly add a verified test download
- Readout of some RSS feeds could result in a crash
- Direct Unpack could get stuck processing
- Show Details on Servers page could break graph display
- Windows: Update MultiPar to 1.3.0.3
Still looking for help with SABnzbd (Python 3) development!
https://www.reddit.com/r/usenet/comments/918nxv/
## Improvements and bug fixes since 2.3.7
- Changes to newsserver configuration could be delayed
- Filenames would not be sanitized when using "Make Windows compatible"
- Sorting could fail on root-folders
- 7z-files were not listed as supported NZB archives
- SSL cipher settings were ignored during server test
- Windows: update 7zip to 19.00
- Windows: update MultiPar to v1.3.0.4
- Windows and macOS: update Python to 2.7.16
- Windows and macOS: update UnRar to 5.70
## Upgrading from 2.2.x and older
- Finish queue

6
appveyor.yml

@ -1,10 +1,10 @@
environment:
SAB_NEWSSERVER_HOST:
secure: UNnTfVHDugC9amTucdTRyxe8RZfVBLYfI1EOTaDUjNM=
secure: 6SvOPWr5ypJeoumXJAZh90DLpk4C/5UAvzwyX7OOUr4=
SAB_NEWSSERVER_USER:
secure: npe0D4TiEzXMUVMCH3+SHA==
secure: Ty3ZG8T5vnacqIFPj5j5hg==
SAB_NEWSSERVER_PASSWORD:
secure: 28COv3RG+KAnBLxIrR1EDw==
secure: bO3XHtWTleVF9AqRV/V/nA==
install:
- pip install --upgrade -r tests/requirements.txt

8
interfaces/Config/templates/config_notify.tmpl

@ -62,11 +62,6 @@
<span class="desc">$T('explain-email_rss')</span>
</div>
<div class="field-pair">
<label class="config" for="email_dir">$T('opt-email_dir')</label>
<input type="text" name="email_dir" id="email_dir" value="$email_dir" data-initialdir="$my_home" />
<span class="desc">$T('explain-email_dir')</span>
</div>
<div class="field-pair">
<label class="config" for="email_server">$T('opt-email_server')</label>
<input type="text" name="email_server" id="email_server" value="$email_server" />
<span class="desc">$T('explain-email_server') ($T('host'):$T('srv-port'))</span>
@ -404,9 +399,6 @@
<script type="text/javascript">
\$(document).ready(function(){
// Autocomplete and filebrowser
\$('#email_dir').typeahead().fileBrowser();
// Expand on enable
\$('.col2 input[name$="enable"]').change(function() {
if(this.checked) {

12
interfaces/Glitter/templates/include_overlays.tmpl

@ -1,3 +1,5 @@
<!--#from sabnzbd.constants import VALID_ARCHIVES, VALID_NZB_FILES#-->
<!--#set $file_exts = ', '.join(VALID_NZB_FILES + VALID_ARCHIVES)#-->
<!-- Notifcation box -->
<div class="main-notification-box" style="display: none">
<div class="main-notification-box-uploading">
@ -433,7 +435,7 @@
<form data-bind="submit: addNZBFromURL" class="col-sm-6">
<fieldset>
<legend class="row-wrap-text">$T('Glitter-addFromURL')</legend>
<div class="input-group" data-tooltip="true" data-placement="bottom" title="$T('Glitter-nzbFormats')">
<div class="input-group" data-tooltip="true" data-placement="bottom" title="$file_exts">
<input type="text" name="nzbURL" class="form-control" placeholder="$T('enterURL')" />
<span class="input-group-btn">
<input type="submit" name="Add" value="$T('add')" class="btn btn-default" />
@ -444,10 +446,10 @@
<form data-bind="submit: addNZBFromFileForm" class="col-sm-6">
<fieldset>
<legend class="row-wrap-text">$T('Glitter-addFromFile')</legend>
<div class="input-group" data-tooltip="true" data-placement="bottom" title="$T('Glitter-nzbFormats')">
<div class="input-group" data-tooltip="true" data-placement="bottom" title="$file_exts">
<label class="btn btn-default btn-file">
<span class="glyphicon glyphicon-file"></span> <em>$T('Glitter-chooseFile')&hellip;</em>
<input type="file" multiple name="nzbFile" class="form-control" accept=".nzb,.rar,.zip,.gz,.bz2" data-bind="event : { change: updateBrowseLabel }" />
<input type="file" multiple name="nzbFile" class="form-control" accept="$file_exts" data-bind="event : { change: updateBrowseLabel }" />
</label>
<span class="input-group-btn">
@ -569,10 +571,10 @@
<input type="hidden" name="retry_job_id" />
<fieldset>
<legend>$T('opt-extra-NZB')</legend>
<div class="input-group input-group-addfile" data-tooltip="true" data-placement="bottom" title="$T('Glitter-nzbFormats')">
<div class="input-group input-group-addfile" data-tooltip="true" data-placement="bottom" title="$file_exts">
<label class="btn btn-default btn-file">
<span class="glyphicon glyphicon-file"></span> <em>$T('Glitter-chooseFile')&hellip;</em>
<input type="file" name="nzbFile" class="form-control" accept=".nzb,.rar,.zip,.gz,.bz2" data-bind="event : { change: updateBrowseLabel }" />
<input type="file" name="nzbFile" class="form-control" accept="$file_exts" data-bind="event : { change: updateBrowseLabel }" />
</label>
</div>
</fieldset>

BIN
osx/unrar/unrar

Binary file not shown.

12
po/email/he.po

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2018-12-24 11:01+0000\n"
"PO-Revision-Date: 2017-08-01 16:45+0000\n"
"Last-Translator: ION IL <Unknown>\n"
"PO-Revision-Date: 2019-01-21 15:26+0000\n"
"Last-Translator: Safihre <safihre@sabnzbd.org>\n"
"Language-Team: Hebrew <he@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2018-12-25 04:47+0000\n"
"X-Generator: Launchpad (build 18847)\n"
"X-Launchpad-Export-Date: 2019-01-22 04:49+0000\n"
"X-Generator: Launchpad (build 18856)\n"
#: email/email.tmpl:1
msgid ""
@ -91,9 +91,9 @@ msgstr ""
"הורדו $size\n"
"\n"
":תוצאות העבודה\n"
"<!--#for $stage ב $stages #-->\n"
"<!--#for $stage in $stages #-->\n"
"שלב $stage <!--#slurp#-->\n"
"<!--#for $result ב $stages[$stage]#-->\n"
"<!--#for $result in $stages[$stage]#-->\n"
" $result <!--#slurp#-->\n"
"<!--#end for#-->\n"
"<!--#end for#-->\n"

42
po/main/da.po

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2019-01-04 12:42+0000\n"
"PO-Revision-Date: 2018-11-28 04:21+0000\n"
"Last-Translator: scootergrisen <scootergrisen@gmail.com>\n"
"PO-Revision-Date: 2019-01-26 09:26+0000\n"
"Last-Translator: B.E. <Unknown>\n"
"Language-Team: Danish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2019-01-05 05:41+0000\n"
"X-Generator: Launchpad (build 18847)\n"
"X-Launchpad-Export-Date: 2019-01-27 05:44+0000\n"
"X-Generator: Launchpad (build 18857)\n"
"Language: da\n"
#: SABnzbd.py [Error message]
@ -889,11 +889,11 @@ msgstr "FEJL: CRC mislykkedes i \"%s\""
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, file too large for filesystem (FAT?)"
msgstr ""
msgstr "Udpakningen fejlede, da filen er for stor til filsystemet (FAT?)"
#: sabnzbd/newsunpack.py [Error message]
msgid "ERROR: File too large for filesystem (%s)"
msgstr ""
msgstr "FEJL: Fil for stor til filsystem (%s)"
#: sabnzbd/newsunpack.py
msgid "Unpacking failed, write error or disk is full?"
@ -994,6 +994,8 @@ msgstr "[%s] Bekræftelse i %s, kræver reparation"
msgid ""
"Invalid par2 files or invalid PAR2 parameters, cannot verify or repair"
msgstr ""
"Invalide par2 filer eller invalide PAR2 parametre, kan ikke bekræfte eller "
"reparere"
#: sabnzbd/newsunpack.py
msgid "Fetching %s blocks..."
@ -1029,7 +1031,7 @@ msgstr "Bekræfter"
#: sabnzbd/newsunpack.py
msgid "Checking extra files"
msgstr ""
msgstr "Tjekker ekstra filer"
#: sabnzbd/newsunpack.py # sabnzbd/skintext.py [PP status]
msgid "Checking"
@ -1837,11 +1839,11 @@ msgstr "Deaktivere kvota styring"
#: sabnzbd/skintext.py [Config->Scheduler]
msgid "Pause jobs with category"
msgstr ""
msgstr "Pause jobs med kategori"
#: sabnzbd/skintext.py [Config->Scheduler]
msgid "Resume jobs with category"
msgstr ""
msgstr "Genoptag jobs med kategori"
#: sabnzbd/skintext.py [Prowl priority] # sabnzbd/skintext.py [Three way switch for duplicates]
msgid "Off"
@ -2539,7 +2541,7 @@ msgstr "Gentagelse test"
#: sabnzbd/skintext.py
msgid "Test download"
msgstr ""
msgstr "Test overførsel"
#: sabnzbd/skintext.py
msgid ""
@ -2825,19 +2827,19 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "Keep all jobs"
msgstr ""
msgstr "Behold alle jobs"
#: sabnzbd/skintext.py
msgid "Keep maximum number of completed jobs"
msgstr ""
msgstr "Behold maximal antal af gennemførte jobs"
#: sabnzbd/skintext.py
msgid "Keep completed jobs maximum number of days"
msgstr ""
msgstr "Behold gennemførte jobs maximal antal af dage"
#: sabnzbd/skintext.py
msgid "Do not keep any completed jobs"
msgstr ""
msgstr "Behold ikke gennemførte jobs"
#: sabnzbd/skintext.py
msgid "Jobs"
@ -3179,7 +3181,7 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "Allow proper releases"
msgstr ""
msgstr "Tillad reelle udgivelser"
#: sabnzbd/skintext.py
msgid ""
@ -3197,7 +3199,7 @@ msgstr "Mislykkes job (flyt til historik)"
#: sabnzbd/skintext.py [Four way switch for duplicates]
msgid "Tag job"
msgstr ""
msgstr "Marker job"
#: sabnzbd/skintext.py [Three way switch for encrypted posts]
msgid "Abort"
@ -3251,7 +3253,7 @@ msgstr "Nogle servere levere en alternativ NZB når et download mislykkes."
#: sabnzbd/skintext.py
msgid "Use tags from indexer"
msgstr ""
msgstr "Brug mærker fra indexer"
#: sabnzbd/skintext.py
msgid ""
@ -3293,7 +3295,7 @@ msgstr "IONice parametre"
#: sabnzbd/skintext.py
msgid "External process priority"
msgstr ""
msgstr "Ekstern proces prioritet"
#: sabnzbd/skintext.py
msgid "Disconnect on Empty Queue"
@ -4099,7 +4101,7 @@ msgstr "S01E05 Episodemappe"
#: sabnzbd/skintext.py
msgid "Job Name as Filename"
msgstr ""
msgstr "Job Navn som Filnavn"
#: sabnzbd/skintext.py
msgid "Title"
@ -4171,7 +4173,7 @@ msgstr "Originalfilnavn"
#: sabnzbd/skintext.py
msgid "Original Job Name"
msgstr ""
msgstr "Oprindelig Job Navn"
#: sabnzbd/skintext.py
msgid "Lower Case"

14
po/main/he.po

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: sabnzbd\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2019-01-04 12:42+0000\n"
"PO-Revision-Date: 2019-01-05 10:03+0000\n"
"PO-Revision-Date: 2019-01-14 07:17+0000\n"
"Last-Translator: ION IL <Unknown>\n"
"Language-Team: Hebrew <he@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2019-01-06 04:48+0000\n"
"X-Generator: Launchpad (build 18847)\n"
"X-Launchpad-Export-Date: 2019-01-15 04:50+0000\n"
"X-Generator: Launchpad (build 18855)\n"
#: SABnzbd.py [Error message]
msgid "Failed to start web-interface"
@ -1129,7 +1129,7 @@ msgstr "התגלה קובץ פגום ,%s שגיאה בטעינת"
#: sabnzbd/nzbqueue.py [Error message]
msgid "Failed to restart NZB after pre-check (%s)"
msgstr "(%s) לאחר קדם-בדיקה NZB נכשל בהפעלה מחדש של"
msgstr "(%s) לאחר קדם־בדיקה NZB נכשל בהפעלה מחדש של"
#: sabnzbd/nzbqueue.py
msgid "NZB added to queue"
@ -1161,7 +1161,7 @@ msgstr "%s ריק NZB קובץ"
#: sabnzbd/nzbstuff.py
msgid "Pre-queue script marked job as failed"
msgstr "תסריט קדם-תור סומן כנכשל"
msgstr "תסריט קדם־תור סומן כנכשל"
#: sabnzbd/nzbstuff.py [Warning message]
msgid "Ignoring duplicate NZB \"%s\""
@ -3255,7 +3255,7 @@ msgstr ""
#: sabnzbd/skintext.py
msgid "Pre-queue user script"
msgstr "תסריט משתמש של קדם-תור"
msgstr "תסריט משתמש של קדם־תור"
#: sabnzbd/skintext.py
msgid "Used before an NZB enters the queue."
@ -4024,7 +4024,7 @@ msgstr "החל מסננים"
#: sabnzbd/skintext.py
msgid "Presets"
msgstr "קדם-קביעות"
msgstr "קדם־קביעות"
#: sabnzbd/skintext.py
msgid "Example"

3
sabnzbd/downloader.py

@ -903,7 +903,10 @@ class Downloader(Thread):
self.init_server(server.id, server.id)
def update_server(self, oldserver, newserver):
""" Update the server and make sure we trigger
the update in the loop to do housekeeping """
self.init_server(oldserver, newserver)
self.wakeup()
@NzbQueueLocker
def wakeup(self):

2
sabnzbd/interface.py

@ -2591,7 +2591,7 @@ def GetRssLog(feed):
LIST_EMAIL = (
'email_endjob', 'email_cats', 'email_full',
'email_server', 'email_to', 'email_from',
'email_account', 'email_pwd', 'email_dir', 'email_rss'
'email_account', 'email_pwd', 'email_rss'
)
LIST_GROWL = ('growl_enable', 'growl_cats', 'growl_server', 'growl_password',
'growl_prio_startup', 'growl_prio_download', 'growl_prio_pp', 'growl_prio_complete', 'growl_prio_failed',

29
sabnzbd/misc.py

@ -280,13 +280,10 @@ def has_win_device(p):
return False
if sabnzbd.WIN32:
# the colon should be here too, but we'll handle that separately
CH_ILLEGAL = '\/<>?*|"\t'
CH_LEGAL = '++{}!@#`+'
else:
CH_ILLEGAL = '/'
CH_LEGAL = '+'
CH_ILLEGAL = '/'
CH_LEGAL = '+'
CH_ILLEGAL_WIN = '\/<>?*|"\t:'
CH_LEGAL_WIN = '++{}!@#`+;'
def sanitize_filename(name):
@ -295,9 +292,15 @@ def sanitize_filename(name):
"""
if not name:
return name
illegal = CH_ILLEGAL
legal = CH_LEGAL
if sabnzbd.WIN32 or cfg.sanitize_safe():
# Remove all bad Windows chars too
illegal += CH_ILLEGAL_WIN
legal += CH_LEGAL_WIN
if ':' in name:
if sabnzbd.WIN32:
# Compensate for the odd way par2 on Windows substitutes a colon character
@ -306,9 +309,6 @@ def sanitize_filename(name):
# Compensate for the foolish way par2 on OSX handles a colon character
name = name[name.rfind(':') + 1:]
if sabnzbd.WIN32 or cfg.sanitize_safe():
name = replace_win_devices(name)
lst = []
for ch in name.strip():
if ch in illegal:
@ -316,6 +316,9 @@ def sanitize_filename(name):
lst.append(ch)
name = ''.join(lst)
if sabnzbd.WIN32 or cfg.sanitize_safe():
name = replace_win_devices(name)
if not name:
name = 'unknown'
@ -345,10 +348,10 @@ def sanitize_foldername(name, limit=True):
illegal = FL_ILLEGAL
legal = FL_LEGAL
if cfg.sanitize_safe():
if sabnzbd.WIN32 or cfg.sanitize_safe():
# Remove all bad Windows chars too
illegal += r'\/<>?*|":'
legal += r'++{}!@#`;'
illegal += CH_ILLEGAL_WIN
legal += CH_LEGAL_WIN
repl = cfg.replace_illegal()
lst = []

1
sabnzbd/skintext.py

@ -829,7 +829,6 @@ SKIN_TEXT = {
'Glitter-addFromFile' : TT('Upload NZB'),
'Glitter-chooseFile' : TT('Browse'),
'Glitter-addnzbFilename' : TT('Optionally specify a filename'),
'Glitter-nzbFormats' : TT('Formats: .nzb, .rar, .zip, .gz, .bz2'),
'Glitter-submit' : TT('Submit'),
'Glitter-openInfoURL' : TT('Open Informational URL'),
'Glitter-sendThanks' : TT('Submitted. Thank you!'),

21
sabnzbd/sorting.py

@ -377,7 +377,12 @@ class SeriesSorter(object):
else:
head = path
return os.path.normpath(head)
if head:
return os.path.normpath(head)
else:
# The normpath function translates "" to "."
# which results in wrong path.join later on
return head
def rename(self, files, current_path):
""" Rename for Series """
@ -626,7 +631,12 @@ class MovieSorter(object):
else:
head = path
return os.path.normpath(head)
if head:
return os.path.normpath(head)
else:
# The normpath function translates "" to "."
# which results in wrong path.join later on
return head
def rename(self, _files, current_path):
""" Rename for Generic files """
@ -848,7 +858,12 @@ class DateSorter(object):
else:
head = path
return os.path.normpath(head)
if head:
return os.path.normpath(head)
else:
# The normpath function translates "" to "."
# which results in wrong path.join later on
return head
def rename(self, files, current_path):
""" Renaming Date file """

17
sabnzbd/utils/servertests.py

@ -32,28 +32,33 @@ from sabnzbd.misc import int_conv
def test_nntp_server_dict(kwargs):
# Grab the host/port/user/pass/connections/ssl
host = kwargs.get('host', '').strip()
if not host:
return False, T('The hostname is not set.')
username = kwargs.get('username', '').strip()
password = kwargs.get('password', '').strip()
server = kwargs.get('server', '').strip()
connections = int_conv(kwargs.get('connections', 0))
if not connections:
return False, T('There are no connections set. Please set at least one connection.')
ssl = int_conv(kwargs.get('ssl', 0))
ssl_verify = int_conv(kwargs.get('ssl_verify', 1))
ssl_ciphers = kwargs.get('ssl_ciphers')
port = int_conv(kwargs.get('port', 0))
if not connections:
return False, T('There are no connections set. Please set at least one connection.')
if not port:
if ssl:
port = 563
else:
port = 119
return test_nntp_server(host, port, server, username=username,
password=password, ssl=ssl, ssl_verify=ssl_verify)
return test_nntp_server(host, port, server, username=username, password=password,
ssl=ssl, ssl_verify=ssl_verify, ssl_ciphers=ssl_ciphers)
def test_nntp_server(host, port, server=None, username=None, password=None, ssl=None, ssl_verify=1):
def test_nntp_server(host, port, server=None, username=None, password=None, ssl=None, ssl_verify=1, ssl_ciphers=None):
""" Will connect (blocking) to the nttp server and report back any errors """
timeout = 4.0
if '*' in password and not password.strip('*'):
@ -74,7 +79,7 @@ def test_nntp_server(host, port, server=None, username=None, password=None, ssl=
if not got_pass:
return False, T('Password masked in ******, please re-enter')
try:
s = Server(-1, '', host, port, timeout, 0, 0, ssl, ssl_verify, None, False, username, password)
s = Server(-1, '', host, port, timeout, 0, 0, ssl, ssl_verify, ssl_ciphers, False, username, password)
except:
return False, T('Invalid server details')

4
sabnzbd/version.py

@ -4,5 +4,5 @@
# You MUST use double quotes (so " and not ')
__version__ = "2.3.7"
__baseline__ = "7a8df5ee916455f17a2c5841f87a7641bb123859"
__version__ = "2.3.8"
__baseline__ = "83ccc0a765e8b3e1350d89fe4a02b95e17fd059e"

2
snap/snapcraft.yaml

@ -3,7 +3,7 @@ version: git
summary: SABnzbd
description: The automated Usenet download tool
confinement: strict
grade: devel
grade: stable
icon: interfaces/Config/templates/staticcfg/images/logo-small.svg
version-script: |
grep -oP '(?<=^Version: ).*' PKG-INFO

6
tests/test_functional.py

@ -121,6 +121,12 @@ class SABnzbdDownloadFlow(SABnzbdBaseTest):
if not ssl_imp.get_attribute('checked'):
ssl_imp.click()
# Lower number of connections to prevent testing errors
self.driver.find_element_by_partial_link_text("Advanced Settings").click()
pass_inp = self.driver.find_element_by_name("connections")
pass_inp.clear()
pass_inp.send_keys(2)
# Test server-check
self.driver.find_element_by_id("serverTest").click()
self.wait_for_ajax()

BIN
win/7zip/7za.exe

Binary file not shown.

2
win/7zip/license.txt

@ -3,7 +3,7 @@
License for use and distribution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (C) 1999-2018 Igor Pavlov.
Copyright (C) 1999-2019 Igor Pavlov.
7-Zip Extra files are under the GNU LGPL license.

9
win/par2/multipar/README_MultiPar.txt

@ -25,7 +25,7 @@ Be careful to use those special features.
[ System requirement ]
MultiPar requires a PC with Windows XP or later (Windows Vista, 7, 8, etc).
MultiPar requires a PC with Windows XP or later (Windows Vista, 7, 8, 10, etc).
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@ -71,10 +71,11 @@ Don't send current PAR3 files to others, who may not have the same version.
[ How to install or uninstall with installer package ]
Double click setup file ( MultiPar126_setup.exe or something like this name ),
Double click setup file ( MultiPar129_setup.exe or something like this name ),
and follow the installer dialog.
At version up, if you want to use previous setting, overwrite install is possible.
You may need to re-start OS after over write install or uninstall rarely.
Before overwrite install, you should un-check "Integrate MultiPar into Shell".
You may need to re-start OS after overwrite install or uninstall rarely.
To install under "Program Files" directory on Windows Vista/7/8,
you must start the installer with administrative privileges by selecting
"Run as administrator" on right-click menu.
@ -99,7 +100,7 @@ In either case, user made icons and association are available for the user only.
[ How to install with archive version ]
Unpack compressed file ( MultiPar126.zip or something like this name ) in a folder.
Unpack compressed file ( MultiPar129.zip or something like this name ) in a folder.
MultiPar.exe is the interface of MultiPar.
You can create short-cut icon or send-to link at Option window later.

BIN
win/par2/multipar/par2j.exe

Binary file not shown.

BIN
win/par2/multipar/par2j64.exe

Binary file not shown.

BIN
win/unrar/UnRAR.exe

Binary file not shown.

BIN
win/unrar/x64/UnRAR.exe

Binary file not shown.
Loading…
Cancel
Save