/** * @param {string} text * @param {'success'|'error'|'warning'} type */ function printStatus(text, type) { if (type === 'success') { console.log(kleur.inverse.bold.green(' DONE ') + ' ' + text); } else if (type === 'error') { console.error(kleur.inverse.bold.red(' FAIL ') + ' ' + kleur.red(text)); } else { console.error(kleur.inverse.bold.yellow(' WARN ') + ' ' + kleur.yellow(text)); } }
const save_asset = async ({asset_url, asset_name, asset_id, asset_size, chapter_path, lecture_index}) => { const asset_name_with_path = path.join(chapter_path, asset_name); const downloading_asset_name_with_path = asset_size < 100000 ? asset_name_with_path : path.join(chapter_path, `${lecture_index} downloading asset ${asset_id}`); await stream_download( asset_url, downloading_asset_name_with_path ).catch(error => { throw error; }); if (asset_size > 100000 || !asset_size) { fs.rename(downloading_asset_name_with_path, asset_name_with_path, error => { if (error) { handle_error({error, message: `Unable to rename asset ${yellow(asset_name)}`}); } }); } console.log(`\n ${gray(inverse(' Asset '))} ${asset_name} ${green_bg('Done')}`); }
// Download files with link from Udemy const download_asset_file = async ({chapter_path, lecture_index, asset}) => { const asset_name = safe_name(`${lecture_index} ${asset['filename']}`); const asset_name_with_path = path.join(chapter_path, asset_name); const asset_url = asset['url_set']['File'][0]['file']; const asset_id = asset['id']; const asset_size = asset['file_size']; if (path_exists(asset_name_with_path)) { return console.log(`\n ${gray(inverse(' Asset '))} ${asset_name} ${yellow('(already downloaded)')}`); } await save_asset({ asset_url, asset_name, asset_id, asset_size, chapter_path, lecture_index }).catch(error => { process.stderr.write(`\n ${gray(inverse(' Asset '))} ${asset_name}`); throw error; }); }
const find_draft_course = async (headers, course_id) => { try { await get_request(`${draft_course_search_url}${course_id}`, headers); const get_draft_course_name_url = `https://${sub_domain}.udemy.com/api-2.0/courses/${course_id}?fields[course]=gift_url`; const response = await get_request(get_draft_course_name_url, headers); const course_path = create_course_folder( extract_course_name(JSON.parse(response['body'])['gift_url']).course_name_in_url ); download_course_contents(course_id, headers, course_path); } catch (error) { if (error['statusCode'] === 403) { console.log(` ${red(inverse(' Fail '))}\n\n`); if (commander.username && commander.password) { const auth_headers = await login_with_username_password(commander.username, commander.password); return find_owned_course(extract_course_name(commander.args[0]), auth_headers); } handle_error({error, message: 'You do not owned this course'}); } else if (error['code'] === 'ENOTFOUND') { handle_error({error, message: 'Unable to connect to Udemy server'}); } handle_error({error}); } }
} catch (error) { if (error['statusCode'] === 403) { console.log(` ${red(inverse(' Fail '))}\n\n`);