Move download informations from the downloaders.py module
to the downloadmanager.py Worker class. By moving those
informations to the Worker class we don't need to add them
in each downloader separately every time a new one gets
implemented, giving us a better design overall.
Re-write DownloadManager, DownloadThread(Worker) using
a custom thread pool implementation for speed. We don't
want to create a new thread for each url when the same
thread can be re-used.
Move all status messages from dlthread (DownloadThread) to
downloaders (YoutubeDLDownloader). Now all the status updates
(status, percent, eta, etc..) come from the downloader.
Remove OutputHandler.py
Now DownloadThread talks directly on
ListCtrl using write() method.
Add DownloadObject.py
Now DownloadObject is responsible for
downloading the video and not the
DownloadThread.
Replaced DownloadThread.ProcessWrapper with
DownloadThread.DownloadThread