Giter VIP home page Giter VIP logo

linkedin-learning-courses-downloader's Introduction

forthebadge forthebadge ko-fi

LinkedIn Learning Courses Downloader

Download LinkedIn Learning courses in the video quality you like.

Features

  • Simple and easy to use GUI for Windows
  • Download in the video quality you like (720p, 540p or 360p)
  • Download Exercise files and subtitles automatically
  • Download multiple courses at a time
  • Automatically import LinkedIn Learning login token from Chrome, Firefox or Microsoft Edge
  • Automatically detect the enterpriseProfileHash or the x-li-identity header so all organization and library accounts should work

Downloader Screenshot

Easy install

Just go to the releases section, download the version that suits your platform and make sure you follow the requirements.

Requirements

Windows : At least .Net Framework 4.7.2. It already comes pre-installed with Windows 10 April 2018 Update (Version 1803) and later.

How to use

  • Windows

Just run the Setup file. A shortcut will be added to your desktop and start menu

  • Linux

Open a terminal in the directory of the LinkedIn Learning Courses Downloader program then type :

  chmod 777 ./Linkedin Learning Courses Downloader

and to run the program type:

  ./Linkedin Learning Courses Downloader

Getting the LinkedIn Learning login token cookie

You can now extract the token from your browser's default profile if you are logged into LinkedIn by pressing Extract Token. If it didn't work for you, manually get the token as follows (Make sure you are logged into LinkedIn Learning first):

  • Firefox
  1. Press Shift+F9 on your keyboard OR right click anywhere on the LinkedIn Learning website , choose "Inspect Element" and click storage.
  2. Look for the word "li_at" in the column "Name". Copy the value and paste it in the program.

LinkedIn Firefox Token Tutorial GIF

  • Google Chrome
  1. Right click anywhere on the page and click inspect element OR press F12 on your keyboard
  2. Click on the 2 arrows in the top right corner beside the word performance then click Application
  3. Double click on the word "Cookies" then click on https://www.linkedin.com
  4. Look for the word "li_at" in the column "Name". Copy the value and paste it in the program.

LinkedIn Chrome Token Tutorial

How to build and run this code on your pc

You don't need to do that if you just want to run the app but if you want to build your own version here is how:

  1. Open visual studio and click on file then Clone Repository.
  2. For repository location type https://github.com/ahmedayman4a/Linkedin-Learning-Courses-Downloader.git.
  3. Click Clone.
  4. The code should be on your pc now. To edit the code, open the Linkedin-Learning-Courses-Downloader.sln file.
  5. In order to run LLCD.DownloaderGUI you need to have Update.exe file inside the bin folder.
  6. You can find this file under the LLCD.DownloaderGUI folder. Just copy and paste it in the bin folder.

Contributions

I accept any contribution to the codebase whether it is a small bugfix or an exciting new feature as long as it works and fits the scope of the app. Just create a pull request and I will look into it as soon as I can.

Buy me a coffee?

You can buy me a coffee using PayPal(Kofi) or Cryptocurrency.

Any Questions? Issues? Recommendations?

Just create an issue and I will reply as soon as I can.

Acknowledgments

linkedin-learning-courses-downloader's People

Contributors

ahmedayman4a avatar sucrose0413 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

linkedin-learning-courses-downloader's Issues

Feature Request - Time delay between video downloads

Great program, been waiting for this.

1 small feature I would like to request is a time delay option between each video download. I've heard the some training sites detect lots of downloads/multiple connections and ban/suspend users if detected (as they assume a ripper is being used). I read Pluralsight is one of them and you need to pause the rippers for about 15 min per download to be sure you are not detected.

An even better option would be a (delay of x minutes) + (random time x seconds/minutes) so the time between each download is more randomized too.

I know most people prefer to download as fast possible, but I'd prefer the ability to do it slower and more stealthy :)

Again, great work.

Add ability to download a complete "Learning Path" by providing the path URL

Is your feature request related to a problem? Please describe.
So I've been trying to download a complete path but had no success, you can guess the tedious task of finding each course's URL putting it inside a session of the downloader in terminal, opening a new session and enter another course.
Describe the solution you'd like
I would suggest creating a feature that enables the user to extract a whole learning path simply by putting in the path's URL, the software itself, recursively finds all course urls, adds a number to each course and makes it an ordered list of folders, and puts all these folders inside a main folder named by the learning path.

https://www.linkedin.com/learning/paths/becoming-a-six-sigma-black-belt

├─── Six Sigma Black Belt Learning Path
│   ├───01 - Course 01
│   ├───02 - Course 02

Bulk download from command line

It doesn't seem that the command line version has had bulk or multiple course downloads implemented. This means this functionality won't work for Linux or macOS users. I have tried putting multiple courses both as command-line arguments and when prompted by the command line tool.

only introductio file downloaded

**only introduction file downloaded **
when i used v1.2 , and try to download a course , its download but just introduction file without the entire course

Operating System
[e.g. Windows 10]

Log File
Upload the latest log file present at %localappdata%\Linkedin-Learning-Courses-Downloader\app-1.1.0\logs here.

Failed to download learning path

I'm sending you the log file text here below. Checkout what's the issue!


2021-09-19 06:23:09.867 -07:00 [INF] Setting key value for icon in registry 2021-09-19 06:23:10.408 -07:00 [INF] Current exe path : C:/Users/username/AppData/Local/Linkedin-Learning-Courses-Downloader/app-1.1.0/Linkedin-Learning-Courses-Downloader.exe 2021-09-19 06:23:10.409 -07:00 [INF] Key value for icon is set successfully 2021-09-19 06:23:10.410 -07:00 [INF] Restoring config file 2021-09-19 06:23:10.410 -07:00 [INF] No config file to restore is found 2021-09-19 06:23:14.259 -07:00 [INF] No Config is found 2021-09-19 06:23:17.996 -07:00 [INF] Checking for updates... 2021-09-19 06:23:19.983 -07:00 [INF] No updates detected. 2021-09-19 06:37:29.607 -07:00 [INF] Validating Input 2021-09-19 06:37:30.722 -07:00 [INF] Input Valid 2021-09-19 06:37:35.163 -07:00 [ERR] Course Extraction Failedhttps://www.linkedin.com/learning/paths/become-an-ethical-hacker System.ArgumentNullException: Value cannot be null. Parameter name: source at System.Linq.Enumerable.SelectMany[TSource,TResult](IEnumerable1 source, Func2 selector) at LLCD.CourseExtractor.Extractor.d__14.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.MainForm.d__8.MoveNext() 2021-09-19 06:55:08.287 -07:00 [INF] Validating Input 2021-09-19 06:55:09.219 -07:00 [INF] Input Valid 2021-09-19 08:53:55.770 -07:00 [INF] Validating Input 2021-09-19 08:53:56.977 -07:00 [INF] Input Valid 2021-09-19 09:42:09.772 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 09:42:09.818 -07:00 [INF] Running Action on Error 2021-09-19 09:42:09.818 -07:00 [ERR] Trying again 1 2021-09-19 09:42:09.834 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 09:42:09.834 -07:00 [INF] Running Action on Error 2021-09-19 09:42:09.834 -07:00 [ERR] Trying again 2 2021-09-19 09:42:09.834 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 09:42:09.850 -07:00 [INF] Running Action on Error 2021-09-19 09:42:09.850 -07:00 [ERR] Trying again 3 2021-09-19 09:42:09.850 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 09:42:09.850 -07:00 [INF] Running Action on Error 2021-09-19 09:42:09.850 -07:00 [ERR] Trying again 4 2021-09-19 09:42:09.850 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 09:42:09.850 -07:00 [INF] Running Action on Error 2021-09-19 09:42:09.850 -07:00 [ERR] Trying again 5 2021-09-19 09:42:09.850 -07:00 [FTL] Error occured 5 times without being resolved 2021-09-19 09:42:09.850 -07:00 [INF] Running action on fatal 2021-09-19 10:53:42.680 -07:00 [INF] Validating Input 2021-09-19 10:53:43.829 -07:00 [INF] Input Valid 2021-09-19 11:32:12.426 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 11:32:12.426 -07:00 [INF] Running Action on Error 2021-09-19 11:32:12.426 -07:00 [ERR] Trying again 1 2021-09-19 11:32:12.426 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 11:32:12.426 -07:00 [INF] Running Action on Error 2021-09-19 11:32:12.426 -07:00 [ERR] Trying again 2 2021-09-19 11:32:12.426 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 11:32:12.426 -07:00 [INF] Running Action on Error 2021-09-19 11:32:12.426 -07:00 [ERR] Trying again 3 2021-09-19 11:32:12.426 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 11:32:12.426 -07:00 [INF] Running Action on Error 2021-09-19 11:32:12.426 -07:00 [ERR] Trying again 4 2021-09-19 11:32:12.426 -07:00 [ERR] Failed to download video with title Example 1: Large organization, thousands of suppliers of different sizes System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext() --- End of inner exception stack trace --- at LLCD.CourseExtractor.Retry.d__3.MoveNext() ---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\user_name\OneDrive - SSJ Enterprises\LinkedIn Learning\Security and Forensics\Learning Supply Chain Cybersecurity[3] 2. What Does Cybersecurity Look Like across Different Supply Chains[1] Example 1 Large organization, thousands of suppliers of different sizes.srt'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost) at System.IO.StreamWriter..ctor(String path, Boolean append) at LLCD.DownloaderGUI.DownloaderForm.d__19.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass15_2.<b__1>d.MoveNext()<--- 2021-09-19 11:32:12.426 -07:00 [INF] Running Action on Error 2021-09-19 11:32:12.426 -07:00 [ERR] Trying again 5 2021-09-19 11:32:12.426 -07:00 [FTL] Error occured 5 times without being resolved 2021-09-19 11:32:12.426 -07:00 [INF] Running action on fatal


Video quality resolutions: 540p instead of 720p

Good morning !

Thanks for the programme:
Clear description and instructions ;)

Even though “video quality” is set to high (720p) the program still downloads (did I say “randomly”) 540p quality videos files… for example using this following link:
advanced-drum-recording-session-with-josh-freese
…results are a mix of 540p and 720p, though all 540p still have their corresponding 720p versions available; I can even download them from the “Internet Download Manager” button through its browser extension.

Any ideas about this issue ?
Thanks :)

Downloading course for organizational users

I'm using LinkedIn Learning from my Sunnyvale Public Library Card and although the app is able to extract the token but unable to download the course citing wrong login credentials.

I understand as the application checks the login page at URL; "linkedin.com/learning" but for organizations, it comes under

Login > Sign in with your library card > "Textbox to enter the library ID" > Username : Password

Can you please add this feature as it would be really helpful for people like us to learn while being offline?

Thanks!

proxy setting

Is your feature request related to a problem? Please describe.
when it's necessary using proxy to connect internet

Describe the solution you'd like
just add it in UI

Describe alternatives you've considered
or seting proxy in config

Additional context
nothing

Standard command line interface (CLI)

Is your feature request related to a problem? Please describe.

  • This would solve #21 and similar issues and also allow for additional automation

Describe the solution you'd like

  • Replace TUI with a standard command line interface 1

Describe alternatives you've considered

  • TUI could be hidden under --interactive option and/or be the default when no argument is given

Additional context

  • UI mockup:
    user@machine ~ $ llcd --help
    Usage: llcd --token TOKEN [OPTIONS] URL
    Download LinkedIn Learning courses in the video quality you like.
    URL is url of a course.
    
    If no argument is given, app will run in interactive mode by default.
    
      -h, --help        Print this help text and exit
      -t, --token       Linkedin learning security token or a file containing it.
                        It should appear as 'li_at' if you are logged into
                        linkedin learning.
      -o, --output-dir  Where do you want to download your course to? (ex:D:\MyCourses)
                        Default is current directory
      --interactive     Run the app in interactive mode (TUI). Default when
                        no argument is given
      --quality NUMBER  Quality to be downloaded with fallback to lower resolution
                        if not available. Defaults to max. available resolution.
                        Valid options: '1' for 360p, '2' for 540p, '3' for 720p
      --no-subtitles    Do not download subtitle files for videos
      --no-excercises   Do not download excercise files
    
    Exit status:
     0  if OK,
     1  if minor problems (e.g., cannot access subdirectory),
     2  if serious trouble (e.g., cannot access command-line
                  argument).
    
    Made by ahmedayman4a: <https://github.com/Ahmed-Soli/linkedin-course-downloader>
    user@machine ~ $
    user@machine ~ $ llcd -t <token> -o D:\MyCourses --quality 3 --no-subtitles --no-excercises <course-url>
    Extracting Course Data. This might take some time...
    .
    .
    .
    Course downloaded successfully :)
    user@machine ~ $
    

Footnotes

  1. https://en.wikipedia.org/wiki/Command-line_interface#Anatomy_of_a_shell_CLI

Large exercise videos downloads fail

When downloading a course with an exercise file over 2 GB, the download fails and the program generates error, "A fatal error occurred while downloading the course. Check the logs for more info". The course is downloaded, and a file is downloaded, but not the complete exercise file. For example, the course: https://www.linkedin.com/learning/premiere-pro-cc-2019-essential-training-the-basics-2/welcome-3?autoAdvance=true&autoSkip=false&autoplay=true&resume=true&u=107515114

[BUG] Video Name too long

Describe the bug
If the video title is too long, it will not save the video and stop downloading at that video. Here is the course that I tried to download https://www.linkedin.com/learning/comptia-security-plus-sy0-601-cert-prep-4-identity-and-access-management-design-and-implementation/identification-authentication-authorization-and-accounting?autoplay=true&contextUrn=urn%3Ali%3AlyndaLearningPath%3A57bdd64992015ae4c0cb990e&resume=false&u=93946321. It will stop at 1.1 Identification, authentication, authorization, and accounting

Operating System
Windows 10

Log File
2022-07-01 21:29:07.500 -04:00 [INF] Restoring config file
2022-07-01 21:29:07.549 -04:00 [INF] No config file to restore is found
2022-07-01 21:29:08.139 -04:00 [INF] Acquired data from config
2022-07-01 21:29:08.527 -04:00 [INF] Checking for updates...
2022-07-01 21:29:08.940 -04:00 [INF] No updates detected.
2022-07-01 21:29:17.246 -04:00 [INF] Validating Input
2022-07-01 21:29:18.782 -04:00 [INF] Input Valid
2022-07-01 21:29:35.026 -04:00 [ERR] Failed to download video with title Identification, authentication, authorization, and accounting
System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()
--- End of inner exception stack trace ---
at LLCD.CourseExtractor.Retry.d__3.MoveNext()
---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()<---

2022-07-01 21:29:35.040 -04:00 [INF] Running Action on Error
2022-07-01 21:29:35.044 -04:00 [ERR] Trying again 1
2022-07-01 21:29:35.046 -04:00 [ERR] Failed to download video with title Identification, authentication, authorization, and accounting
System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()
--- End of inner exception stack trace ---
at LLCD.CourseExtractor.Retry.d__3.MoveNext()
---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()<---

2022-07-01 21:29:35.047 -04:00 [INF] Running Action on Error
2022-07-01 21:29:35.047 -04:00 [ERR] Trying again 2
2022-07-01 21:29:35.047 -04:00 [ERR] Failed to download video with title Identification, authentication, authorization, and accounting
System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()
--- End of inner exception stack trace ---
at LLCD.CourseExtractor.Retry.d__3.MoveNext()
---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()<---

2022-07-01 21:29:35.047 -04:00 [INF] Running Action on Error
2022-07-01 21:29:35.047 -04:00 [ERR] Trying again 3
2022-07-01 21:29:35.047 -04:00 [ERR] Failed to download video with title Identification, authentication, authorization, and accounting
System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()
--- End of inner exception stack trace ---
at LLCD.CourseExtractor.Retry.d__3.MoveNext()
---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()<---

2022-07-01 21:29:35.048 -04:00 [INF] Running Action on Error
2022-07-01 21:29:35.048 -04:00 [ERR] Trying again 4
2022-07-01 21:29:35.048 -04:00 [ERR] Failed to download video with title Identification, authentication, authorization, and accounting
System.AggregateException: One or more errors occurred. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()
--- End of inner exception stack trace ---
at LLCD.CourseExtractor.Retry.d__3.MoveNext()
---> (Inner Exception #0) System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nuc\Downloads\CompTIA\CompTIA Security+ SY0-601\LinkedIn Videos\CompTIA Security+ (SY0-601) Cert Prep 4 Identity and Access Management Design and Implementation\02 - 1. Identification\01 - Identification, authentication, authorization, and accounting.srt'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append)
at LLCD.DownloaderGUI.DownloaderForm.d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LLCD.DownloaderGUI.DownloaderForm.<>c__DisplayClass16_2.<b__1>d.MoveNext()<---

2022-07-01 21:29:35.048 -04:00 [INF] Running Action on Error
2022-07-01 21:29:35.048 -04:00 [ERR] Trying again 5
2022-07-01 21:29:35.048 -04:00 [FTL] Error occured 5 times without being resolved
2022-07-01 21:29:35.048 -04:00 [INF] Running action on fatal

Banned

Not an issue or request, but

Are bans perma-ban or temporary?

incomplete download

I am very happy to use your work to download the courses. It was working fine for some days then later on it started showing the download is complete skipping many videos and courses. I tried to redownload and redo the process but it continues. I hope you see to this issue and come up with a solution that works.

Also, I was thinking if you could add the author name with the courses then it'll be an addon benefit for all of your users.

Thanks alot.

*Can you help me understand the "enterpriseprofilehash". Because I'm curious about it and it's working.

Some feature requests!!

Important

  1. Allow Pause/Resume Support
  2. Allow Resume of unfinished/interrupted downloads. Right now it downloads the entire
    course from the beginning.
  3. Don't use [] Brackets in numbers. Video players doesn't play videos chronologically.
    Just name it normally like: 01 Introduction.mp4 instead of [1] Introduction.mp4

Wishful request

  1. Allow only subtitle download (without video)
  2. Automatically download thumbnail of the course.
    Not very important, would be very nice.

[BUG] Versions 1.1 and 1.2 Crashing on Cookie Import from Chrome

Describe the bug
I'll just detail the issue with 1.1.0 for the moment. The same thing appears to be hapening with 2.0. The app crashes on importing cookies from Chrome. I don't have a problem importing from Firefox with 1.1.0.

OS
Windows 10 Pro 64 (19041.1415)

Log File
2022-01-24 13:09:55.822 +10:00 [INF] Setting key value for icon in registry
2022-01-24 13:09:55.848 +10:00 [INF] Current exe path : C:/Users/Dave/AppData/Local/Linkedin-Learning-Courses-Downloader/app-1.1.0/Linkedin-Learning-Courses-Downloader.exe
2022-01-24 13:09:55.848 +10:00 [INF] Key value for icon is set successfully
2022-01-24 13:09:55.849 +10:00 [INF] Restoring config file
2022-01-24 13:09:55.849 +10:00 [INF] No config file to restore is found
2022-01-24 13:09:55.998 +10:00 [INF] No Config is found
2022-01-24 13:09:56.414 +10:00 [INF] Checking for updates...
2022-01-24 13:09:58.016 +10:00 [INF] No updates detected.
2022-01-24 13:10:30.596 +10:00 [INF] Validating Input
2022-01-24 13:10:31.697 +10:00 [INF] Input Valid
2022-01-24 13:18:50.669 +10:00 [ERR] Unknown error occured
code = Error (1), message = System.Data.SQLite.SQLiteException (0x800007BF): SQL logic error
no such table: cookies
at System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain)
at System.Data.SQLite.SQLiteCommand.BuildNextCommand()
at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)
at System.Data.SQLite.SQLiteDataReader.NextResult()
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteReader()
at LLCD.CourseExtractor.CookiesExtractor.ReadChromiumCookies(String profilePath)
at LLCD.CourseExtractor.CookiesExtractor.ReadChromeCookies()
at LLCD.CourseExtractor.Extractor.ExtractToken(Browser browser)
at LLCD.DownloaderGUI.MainForm.btnExtractToken_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at LLCD.DownloaderGUI.Program.Main()

LOVE THIS SOFTWARE! By the way...

No update?

It's been a while since the last update? When's the new update coming?

Windows Installation Instructions Missing

Is your feature request related to a problem? Please describe.
Unable to install this tool on Windows.

Describe the solution you'd like
I need a step-by-step process to install this tool on Windows.

Describe alternatives you've considered
I did download the windows rar file and extracted it. I got Setup.wxs file inside the directory. Now, how to use that file to perform the installation? I am unable to open that file.

Additional context
Adding those steps and some screenshots will help many people use this tool. I checked with a few other folks and no one knows about the WIX file setup.

LEARNING PATH DOWNLOADER

Is your feature request related to a problem? Please describe.
There is a learning path feature in linkedIN learning, which includes set of 2 or more courses, when you do all coursef them you are certified for that post e.g " AGILE PROJECT MANAGER".

Describe the solution you'd like
CAN GET CODE FROM HERE - https://github.com/lawrensylvan/linkedin-learning-courses-downloader

Describe alternatives you've considered
Individially downloading each course or pasting links of Individial or multiple courses

Additional context
"https://www.linkedin.com/learning/paths/become-an-agile-project-manager"

image
image

Video compression

Videos are so large in size,
is there a way to make files smaller in size before downloading to save internet quota?

not working in linux

When trying to run it in centos7 it's aborting with this error message:
Process terminated. Couldn't find a valid ICU package installed on the system. Set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support.
at System.Environment.FailFast(System.String)
at System.Globalization.GlobalizationMode.GetGlobalizationInvariantMode()
at System.Globalization.GlobalizationMode..cctor()
at System.Globalization.CultureData.CreateCultureWithInvariantData()
at System.Globalization.CultureData.get_Invariant()
at System.Globalization.CultureInfo..cctor()
at System.Globalization.CultureInfo.get_InvariantCulture()
at Serilog.Parsing.PropertyToken..ctor(System.String, System.String, System.String, System.Nullable1<Serilog.Parsing.Alignment>, Serilog.Parsing.Destructuring, Int32) at Serilog.Parsing.MessageTemplateParser.ParsePropertyToken(Int32, System.String, Int32 ByRef) at Serilog.Parsing.MessageTemplateParser+<Tokenize>d__1.MoveNext() at System.Collections.Generic.LargeArrayBuilder1[[System.__Canon, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].AddRange(System.Collections.Generic.IEnumerable1<System.__Canon>) at System.Collections.Generic.EnumerableHelpers.ToArray[[System.__Canon, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable1<System.__Canon>)
at System.Linq.Enumerable.ToArray[System.__Canon, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]
at Serilog.Events.MessageTemplate..ctor(System.String, System.Collections.Generic.IEnumerable1<Serilog.Parsing.MessageTemplateToken>) at Serilog.Parsing.MessageTemplateParser.Parse(System.String) at Serilog.Formatting.Display.MessageTemplateTextFormatter..ctor(System.String, System.IFormatProvider) at Serilog.FileLoggerConfigurationExtensions.File(Serilog.Configuration.LoggerSinkConfiguration, System.String, Serilog.Events.LogEventLevel, System.String, System.IFormatProvider, System.Nullable1, Serilog.Core.LoggingLevelSwitch, Boolean, Boolean, System.Nullable1<System.TimeSpan>, Serilog.RollingInterval, Boolean, System.Nullable1, System.Text.Encoding, Serilog.Sinks.File.FileLifecycleHooks)
at LLCD.DownloaderTUI.Program+

d__1.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[[LLCD.DownloaderTUI.Program+d__1, Linkedin Learning Courses Downloader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]](d__1 ByRef)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[[LLCD.DownloaderTUI.Program+d__1, Linkedin Learning Courses Downloader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]](d__1 ByRef)
at LLCD.DownloaderTUI.Program.Main(System.String[])
at LLCD.DownloaderTUI.Program.(System.String[])
Aborted

what is default config format ?

I am trying to run it on my mac. But i think by default it checks for some json config right?
Can you provide the structure?

Resume and Pause Features

Please add resume and pause capabilities.
When I redownload the failed course it downloads from beginning and replaces already downloaded files.
Appreciate your great work.
Thanks a lot.

[BUG] Error: Value cannot be null. Parameter name: source.

Describe the bug
after inserting account Token and course URL from LinkedIn and pressing download, I get the following Error:
"Value cannot be Null Error -Parameter name: source "

Operating System
Windows 10

Log File
Upload the latest log file present at %localappdata%\Linkedin-Learning-Courses-Downloader\app-1.1.0\logs here.

Downloader_Bug

LinkedIn Learning page does not load (Banned)

Describe the bug
I was about to download a course (i did not buy the courses, i got plus subscription) then when i was about to copy the course link suddenly the page did not charge it went blank. i tried to refresh the page several times but it did not worked. I don't know if it's the platform error, because I've tried my account on other platforms like brave and edge. The learning page does not load, but the other platforms do. I did it with the chrome version.
I hope the learning platform has not banned me.
Windows 11

Log File
log20220316.txt

image

The setup file is nowhere

I cannot find the setup file to open it. My antivirus is not blocking it or removing it. Thank you

Subtitle downloader

Please, Can you add a way to only download subtitles?
I have old courses without subtitles, the only way to have them is to download the whole courses again!!

thanks in advance for the great tool.

Non english words in version 1.2 [BUG]

The words in the 1.2 version of the software aren't in English and the input as well. Hence the software is unusable, but the 1.1 version seems more stable and I was able to download the whole course. The software you made is fantastic Ahmed!

image

Windows Version
Windows 10 Pro 20H2

Log File

2022-05-25 12:42:23.149 +02:00 [INF] Setting key value for icon in registry
2022-05-25 12:42:23.170 +02:00 [INF] Current exe path : C:/Users/Michele Antonio/AppData/Local/Linkedin-Learning-Courses-Downloader/app-1.2.0/Linkedin-Learning-Courses-Downloader.exe
2022-05-25 12:42:23.170 +02:00 [INF] Key value for icon is set successfully
2022-05-25 12:42:23.171 +02:00 [INF] Restoring config file
2022-05-25 12:42:23.171 +02:00 [INF] No config file to restore is found
2022-05-25 12:42:23.546 +02:00 [INF] No Config is found
2022-05-25 12:42:23.942 +02:00 [INF] Checking for updates...
2022-05-25 12:42:24.586 +02:00 [INF] No updates detected.
2022-05-25 12:43:50.854 +02:00 [ERR] Cookies not found at "Default\Network\Cookies". Trying "Default\Cookies"
code = CantOpen (14), message = System.Data.SQLite.SQLiteException (0x800007FF): unable to open database file
in System.Data.SQLite.SQLite3.Open(String strFilename, String vfsName, SQLiteConnectionFlags connectionFlags, SQLiteOpenFlagsEnum openFlags, Int32 maxPoolSize, Boolean usePool)
in System.Data.SQLite.SQLiteConnection.Open()
in LLCD.CourseExtractor.CookiesExtractor.GetChromeCookiesFromDB(String dbPath, Byte[] decodedKey)
in LLCD.CourseExtractor.CookiesExtractor.ReadChromiumCookies(String profilePath)
2022-05-25 12:44:37.488 +02:00 [INF] Validating Input
2022-05-25 12:44:40.168 +02:00 [INF] Input Invalid

Application does not execute

I followed the instructions in the Read.me file but got the following message.

The application to execute does not exist: '/private/var/folders/s9/w16trxt88v56j0008k8dr4p00000gp/T/.net/Linkedin Learning Courses Downloader/1q44lyso.kpt/Linkedin Learning Courses Downloader.dll

Do I need another file?

Token Failure

Hello Ahmed,

as i was trying using your course downloader - im getting always the failure "failed to extrace a course video - the provided Token is probably invalid"

As tho im using it on windows and fully as your guide telling me im doint everything mentioned..

Do you have any ideas to that issue?

Thank you
AurastiX

Login Token

How can I get the token cookie if don't have an account?

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.