+ Replaced mp4decrypt with shaka-packager
+ Fix logger not correctly setting level from arguments
+ switched all os.system to subprocess.Popen
+ extra verbosity, external commands will now print their output to make debugging much MUCH easier
+ Fixed a problem with shaka-packager failing on files with a comma
+ adds the feature from the `id-as-course-name` branch to use the course id as the output directory name instead of the course name. this is useful to reduce the path length
+ Updated readme to reflect recent code changes
+ Use proper exit code of 1 on errors
+ Added error handling for subscription based course info extraction failure
+ Slightly more verbose login failure message
+ Updates to README to improve clarification among other things
+ New requirements: `beautifulsoup4` and `lxml`
+ Added support for downloading courses included in subscription plans
+ Updated README to reflect changes
+ made all variables global so we don't have to keep passing them to methods
+ renamed ``concurrent_downloads`` to ``concurrent_connections``
+ added ``use_mkv`` option
+ fixed bug where keyfile was required to just use help command
+ updated ``README.md`` to reflect code changes
+ HLS streams are now downloaded with yt-dlp
- Removed FFMPEG download class
+ Added a new argument ``-cd``,``--concurrent-downloads`` to specify the max number of segments downloading at a time (default is 10)
+ Updated README to reflect code changes
- Removed the old ``dashdownloader_multisegment.py`` file
- Removed the ``downloader.py`` file
+ Added missing requirement to ``requirements.txt``
+ Added sanitization class
+ Updated ``vtt_to_srt.py`` to use path.join for better cross-platform support
+ Updated README to reflect code changes
- Removed the quality restriction since there are some wacky non-standard qualities and I can't possibly predict and list them all :P
+ Changed the way fallback qualities are selected so it selects the closest quality to the requested one (ex. you want 576 but the closest are 480 and 720, 576 will be selected since its the closer to 576)
+ Switched to sessions
+ Program no longer quits if decryption key isn't found, we continue downloading segments, unencrypted video, and assets
+ Program will quit before starting downloads if the keyfile doesn't exist
+ Added an argument to keep vtt caption files ``--keep-vtt``
+ Properly handle large courses (code credit to r0oth3x49) (Fixes#18)
+ Updated parsing for course data (modified from code by r0oth3x49)
This update should be considered as unstable, it will probably have problems. If you find an issue, please create a GitHub issue.
+ Updated cleanup function to remove the entire temporary lecture folder instead of just leaving behind tons of empty folders
+ Fixed typo in mux function
+ Segment count is now properly calculated from segment timeline
+ Manifest is now parsed from the URL instead of being downloaded, this should be better for downloading multiple courses at once.
+ Fixed a bug where audio content_type would try to find a max quality
+ New Downloader: Threaded Downloader uses multiple threads to download files, this should improve download speeds greatly. By default, the threaded downloader is not used, you can use the threaded downloader by passing ``--use-threaded-downloader``. By default, it only uses 10 threads, you can set a custom number of threads with the ``--threads`` option
+ You can now pass the course url to the -c argument instead of the course id
+ Fixed function doc tags
+ Added experimental support for business accounts (the program should auto detect the subdomain from the course url and use it for all requests, you shouldn't need to edit the file)
- Removed the useless creation time metadata from ffmpeg
+ Updated arguments, ``course_url`` is now a required argument
- ``course_url`` will no longer be pulled from the .env file, you can still use the .env for bearer tokens
+ Courses are now downloaded into folders titled by the course name instead of the course id
+ Updated README to reflect updates
+ Fixed a bug where external url files would be appended to each time a the downloader is restarted on a course
+ Add ability to skip downloading lecture videos
+ You can now specify the Bearer token and course id as an argument to the program (see advanced usage)
+ Updated Advanced Usage section of readme