GithubHelp home page GithubHelp logo

nzbget / nzbget Goto Github PK

View Code? Open in Web Editor NEW
1.2K 48.0 197.0 9.46 MB

Efficient Usenet Downloader

Home Page: https://nzbget.net

License: GNU General Public License v2.0

C++ 62.17% C 0.84% Shell 1.74% Objective-C 12.69% Python 2.44% JavaScript 11.58% HTML 4.54% CSS 1.50% Batchfile 0.56% NSIS 0.26% Makefile 0.56% M4 1.08% Rich Text Format 0.06%
nzbget usenet

nzbget's Introduction

NZBGet

License Build Status Code Quality: Cpp Code Quality: JavaScript Total Alerts

Total downloads Downloads (latest release)

NZBGet is a binary downloader, which downloads files from Usenet based on information given in nzb-files.

NZBGet is written in C++ and is known for its performance and efficiency.

NZBGet can run on almost any device - classic PC, NAS, media player, SAT-receiver, WLAN-router, etc. The download area provides precompiled binaries for Windows, macOS, Linux (compatible with many CPUs and platform variants), FreeBSD and Android. For other platforms the program can be compiled from sources.

nzbget's People

Contributors

berncarney avatar bket avatar capntrips avatar caronc avatar disconnect3d avatar exiva avatar fedux avatar fjeldsoe avatar frebib avatar gktrk avatar guaguasi avatar hatemzidi avatar heksesang avatar hugbug avatar jackdandy avatar lucasheld avatar luisflores3 avatar nckx avatar parnic avatar pfidr34 avatar sanderjo avatar sbraz avatar schnusch avatar sinic avatar stefaang avatar teonar avatar thorli avatar war59312 avatar x0nic avatar xcorail avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nzbget's Issues

Naming for testing builds

Testing builds had svn revision number in their names, for example 15.0-testing-r1283, where r1283 is the revision number. GIt being a distributed VCS doesn't have such revision numbers.

However we still need something to distinguish the testing releases. At best the naming scheme should remain unchanged in order to provide compatibility with existing installations. This is necessary because the built-in update routine relies on existing naming scheme.

Version names for testing releases are automatically generated during make process. That's coded in Makefile.am.

Error with very large files inside nzb

Usually nzbs contain many small rar-files with size 50-200 MB.
If however an nzb contains files of very large size (many GB) that may cause NZBGet to crash or print an error "Could not create file ..." (depending on compiler and platform) when option DirectWrite is active.

Offload post-processing to another computer / server running NZBget?

I have NZBget running on some older hardware. Downloads work fine but unrar / unpack takes a bit of time. PAR repair can take extremely long, over 30 minutes, depending on how many files need to be repaired.

I have a faster computer on the same local network. Cat 5e speeds should be enough to transfer PARs and RARs between the two quickly, for processing and sending back to the slower PC to write the finished file locally.

Some users use NZBget on very slow hardware, like the Raspberry Pi. It would greatly improve speeds for those users.

Does this exist yet? Could it exist in the future?

Spin locks causing hanging

Problem

A problem on Drobo NAS was reported. The program was sometimes hanging during par-repair when multithreading par-repair was active (option ParThreads).
After investigation it was found the program was hanging in the system function pthread_spin_lock.

The spin locks are alternative to mutexes and can provide performance gain in certain situations. In NZBGet spin locks are used only in two cases:

  • during par-repair if multicore par-repair is active - to synchronize repair threads;
  • if option AccurateRate is active - to synchronize download threads.

Spin locks can be always replaced by mutexes. Furthermore not all platforms support spin locks (for example Mac OS X doesn't and not every Linux system has them). NZBGet uses spin locks if available, otherwise it falls back to mutexes.

Steps to reproduce

Although the problem was initially reported during par-repair the easier way to reproduce is:

  • activate option AccurateRate;
  • download something.

If the system has problem with spin locks the download will soon stop.

Tasks:

  • deactivate the usage of spin locks in builds included in Linux installer;
  • investigate if spin locks provide any measurable performance gain in NZBGet;
  • if there are no any advantages - remove spin locks from the code.

Source distribution file name

Current file name for source distribution archive is like nzbget-15.0.tar.gz. The name is generated automatically by make dist.

Files uploaded to GitHub releases have src in their names, for example nzbget-15.0-src.tar.gz.

TODO: Check if the command make dist can be altered to automatically add src to file name.

Ignore nzb filename, but check contents

When generating NZBs from e.g. binsearch, they all get the same filename and NZBget ignores all but the first. Even though they have completely different contents.

NZBget should ignore the filename of the container and just check whether the contents are known. Maybe through a checksum over the whole file or the list of the articles.

Incorrect subject parsing

As reported on forum in topic bad parsing of filenames/quotes the filename extraction from subject may give wrong results for the following example nzb:

<file poster="[email protected] (yEncBin)" date="1435841477" 
subject="e6fdc3b219f4009f3afef38e15e2b90a [18/19] - &#34;e6fdc3b219f4009f3afef38e15e2b90a&#34; yEnc (65/68)">
--/---
<file poster="[email protected] (yEncBin)" date="1435841466" 
subject="ee60718a6aa77e8aa67e8f75c416c0ee [3/11] - &#34;ee60718a6aa77e8aa67e8f75c416c0ee&#34; yEnc (65/68)">

Execute extension scripts from settings page

Sometimes it may be helpful to be able to execute extension scripts from settings page. For example pp-script EMail.py could use a button "Send test email". For other scripts something like "Validate settings" or "Cleanup database" may be useful too.

  • provide a way for scripts to define which buttons to put on settings page;
  • when clicking on a button - execute the script;
  • send additional env vars to inform the script that it's running in a special context;
  • pass all (unsaved options) as if they were already saved in order for script to validate or use the (not yet saved) settings;
  • show script's output in a dedicated modal window (similar to the one used for built-in updates).
  • optional: provide a way to terminate the script if it hangs, directly from that new window;
  • extend EMail.py with button "Send test email" as an example of the new functionality;
  • update wiki with a description of the new functionality.

Download releases from GitHub

Update links on download page to get releases from GitHub. That eliminates the 5 second wait banner from SourceForge.

ARM 64 in Linux installer

Linux installer currently doesn't detect ARM 64 bit.
The architecture name is aarch64.

  • test if armhf-binary works on aarch64 system;
  • if it works - change the cpu detection to use armhf-binary;
  • if it doesn't - add extra support for target aarch64 and change the cpu detection to use new binary.

Double click handler on Windows

When clicking on nzb-files in Windows Explorer the files must be enqueued in NZBGet.

Current solution requires users to manually add a registry entry (with command nzbget.exe -A %1) and works only if NZBGet is currently running.

Autoinstaller not detecting endianness on MIPS routers

I have a TL-MR3040 router running OpenWRT (hw wiki link) that I was trying to get nzbget running on.

The autoinstaller correctly identified the arch as MIPS, but got the endianness wrong, so although it looked like it installed correctly, I was getting 'syntax error' on trying to run it. (looks like the shell was trying to run the binary as a script).

Fiddled around for a while but finding answers for any recent version is difficult (the openwrt opkg only comes with 0.8.0 circa 3 years ago, and the most recent other ipkg around is v11, but information about those is limited too), until I noticed that the supported architectures includes mipsel as well as mipseb.

Ran the installer with --arch=mipseb and everything now works swimmingly.

Not sure if this is something that can be detected by the installer or not, but maybe an extra ote in the docs would be great.

Check for Updates often fails

After migration of the web-site to GitHub the function Check for Updates often shows error message:

Check failed. Please try again later.

After a few attempts the check succeeds eventually.

  • investigate on which step the check fails;
  • if not fixable on our side as a workaround possibly implement multiple retries before reporting error.

Quickly toggle speed limit

Feature request via email:

The ability to have ‘two’ settings, or configuration snapshots for the “speed” screen.
So I can easily switch between two settings, back and forth (hopefully with just one click).
Switch between “slow” and “fast”. Maybe I want tone setting to be “none” and another to be 100 KB/s.
Or one to have two news servers, and other to have just one.

screen shot

To easily change between them by just clicking the icon:
pastedgraphic-5
And If I click on the speed instead, I get the normal modal as shown above.

After a discussion agreed upon:

  • no new options;
  • user can define "slow" config in the settings using existing options ServerX.Active and DownloadRate;
  • shift+click-on-icon toggles between "all servers active and speed-limit=none" and "servers and speed limit as in the config file".

The program starts in "slow" mode as dictated by config options. If a start in "fast" mode is preferred that could be possible to achieve via scheduler task which changes download rate or active servers. This however requires an extension of scheduler to allow tasks fired on program start instead of on a specified time. This alone would be a nice improvement for the scheduler.

Password fields should be type="password"

It's currently:

<input type="text" id="S_Server1_Password" value="" class="editsmall">

It should be:

<input type="password" id="S_Server1_Password" value="" class="editsmall">

Wait for path mount on start

If NZBGet is started on boot and the config contains network paths it's possible that NZBGet starts before the paths are mounted. That causes troubles.

Related forum topic - Auto update failed (Windows) (second page).

Proposed solution

I can think of a new option to define the paths NZBGet checks on startup. If any of the paths doesn't exist it should wait few seconds and check again. All activities should be hold until all paths became available.

#Windows:
WaitForDir=E:\Downloads;D:\
#Linux:
WaitForDir=/mnt/nas1;/mnt/nas2

And since we can refer to other options in the config it can be used like this too:

WaitForDir=${DestDir};${NzbDir}

Directories listed in WaitForDir will not be automatically created.

Improve error message for password protected archives

Problem

Password protected rar4-archives do not have a password validation record like rar5-archives. If extraction of rar4-archives fail, it's not clear whether the password is incorrect or the archive is corrupted.

In such cases NZBGet performs par-check in an attempt to repair the archive. If the par-check reports status "success, no repair necessary" NZBGet prints an unpack error:

Unpack for failed: second unpack attempt skipped due to par-check not repaired anything

It seems the message is misleading because the users don't know in details how the archives are processed and they wonder: "why the hell the unpack was skipped and why par-check didn't repair anything?"

Request

Change the message to something more understandable for normal users.

Scripting support in RSS Feeds

In response to request on forum the feature proposal:

After the rss feed is read from server and before it is processed the feed content will be saved to a temporary xml-file and a new script (new option "FeedScript") will be called. The script becomes the path to the feed file as parameter. NZBGet waits until the script terminates and then reads the xml-file and processes it

Get download URL from info-file

The update-scripts for Linux and Windows fetch updates from http://nzbget.net/download/xxx. This will not work with GitHub's Pages (if we migrate the web-site there). For flexibility the fetch-URL should be configured via info-file. The file currently holds info about version and date of the available update. Just add another field with fetch-URL and use it from the update-scripts.

  • Linux installer;
  • Windows installer.

Force disk cache flush when saving queue

The diskstate (queue, history, statistics) may become corrupted if system crashes (not nzbget crashes).

This may happen if the diskstate file were not written from system cache to disk. The disk caches can be forcibly flushed with special system functions. There is no cross-platform standard function for that but many systems have specific functions for that purpose:

Interesting articles:

Formatting in README

It'd be nice if the README displayed on the repository start page would be better formatted using Markdown.

Feedback for Readme update

Please add the following 3 commands to the documentation for Ubuntu 15.04/most linux releases to run for "./configure" with all options selected

sudo apt-get install libgnutls-dev
sudo apt-get install libncurses-dev
sudo apt-get install libxml2-dev

Clean up project root directory

There are way too many files in the project root directory, requiring GitHub visitors to scroll the front page to see readme content. Most of files are mandatory files required by autotools, for example:

  • INSTALL;
  • NEWS;
  • missing;
  • etc.

Task: try to overcome autotools requirements and to eliminate as much files as possible or move them into a subdirectory.

Documentation on GitHub wiki

Move documentation from old wiki to GitHub. Most articles may require reformatting for better looking.

Installation manuals

  • Installation on Windows;
  • Installation on Mac;
  • Installation on Linux (for supported CPUs);
  • Installation on POSIX systems (Linux general, BSD, etc.).

Compiling and distributing (advanced)

  • Build the latest development version;
  • Cross compiling;
  • Packaging.

Configuration

  • Performance tips;
  • Choosing a cipher;
  • NZBGet behind other web-server.

Usage

  • Catalog of post-processing scripts;
  • RSS and duplicate check;
  • VideoSort;
  • Command line reference.

Extend

  • Extension scripts;
  • RPC API reference;

Other

  • History (ChangeLog).

Can't deleted active URL download

If the active URL download fails the program waits few seconds to retry. In that time an attempt to delete the URL doesn't work properly. The download stops but the web-ui shows activity. With the second attempt the URL can be deleted.

Show Backup icon in History

From forum topic Show Backup icon in History:

It would be perfect if the history list could also include the backup icon that sometimes appears on the download list - this would make it very easy to find any problem items.

I would find it useful to have a quick visual reference which items are causing problems.

If the computation is too costly could you remember if the Backup icon is displayed in the Download phase and then use that in the History?

Always add to history and post-process

When adding nzbs the nzb-files are sometimes rejected on early stages and are not added to history. They are also not processed by pp-scripts. The cases are for example:

  • send nzb is invalid;
  • url could not be loaded (history entry is created but pp-scripts are not executed);
  • nzb was detected as identical by nzbget and therefore never added at all;
  • nzb was detected as dupe to a history item with success or good status and therefore never added at all;
  • nzb was detected as dupe and added to history;
  • maybe something else.

Every nzb-request must result in a history record and must be post-processed.

Verify setup authenticity during update

When installing update via built-in update routine (Windows and Linux installers) the program downloads new setup from NZBGet download area.

The downloaded file must be verified before execution.

  • develop signing mechanism with public/private keys;
  • implement verification routine in NZBGet for usage from update scripts;
  • create a build script to generate file with signatures;
  • provide hosting for file with signatures;
  • include public key into Windows setup;
  • include public key into Linux installer;
  • put link to signatures files into update info file;
  • implement verification in Windows update script;
  • implement verification in Linux update script.

unrar slow in Linux installer x86_64

It was bring to my attention, that unrar shipped with NZBGet performs too slow on Synology comparing to default unrar shipped with NAS.

After investigation it turned out the x86_64 version of unrar included within Installer was compiled in debug mode and without optimizations.

Historical releases

  • rename tags from format xx.x to vxx.xx, for example "15.0" becomes "v15.0", to follow git standard on tag naming;
  • upload release files and notes for actual stable release 15.0 and the previous releases 14.0, 14.1, 14.2;
  • put release notes for older releases;
  • upload release files for older releases.

Keep track of age of oldest article

From forum topic Keep track of age of oldest article:

Could NZBget keep track of the oldest article successfully downloaded from each server and display the number of days?

Server 1: 750d
Server 2: 2500d
Server 3: 150d

Could it be added as information on the Server settings page or perhaps as a new column on the Speed Limit screen?

We also need a way to reset this statistic.

Clean up description field in RSS feed

The description field may contain html-text as CDATA. The content of the field must be cleaned up from html-tags before processed by feed filter. Otherwise the filter may trigger on html-tags.

Adding predefined searches

How about adding a dropdown like the rss feeds just with predefined searches ?

Have a image but no idea why github doesn't want to upload it.
Something went really wrong, and we can't process that file.

Initial import from svn

  • import repository from svn;
  • delete outdated release branches;
  • create develop-branch and make it default.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.