feat: download using range params

This commit is contained in:
ThetaDev 2022-08-18 22:57:49 +02:00
parent 3efe08088c
commit 3c05929e89
12 changed files with 1724 additions and 62 deletions

View file

@ -1,5 +1,9 @@
use std::collections::BTreeMap;
use fancy_regex::Regex;
use rand::Rng;
use anyhow::Result;
use url::Url;
const CONTENT_PLAYBACK_NONCE_ALPHABET: &[u8; 64] =
b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
@ -15,7 +19,7 @@ where
}
/// Generates a random string with given length and byte charset.
pub fn random_string(charset: &[u8], length: usize) -> String {
fn random_string(charset: &[u8], length: usize) -> String {
let mut result = String::with_capacity(length);
let mut rng = rand::thread_rng();
@ -34,6 +38,15 @@ pub fn generate_content_playback_nonce() -> String {
random_string(CONTENT_PLAYBACK_NONCE_ALPHABET, 16)
}
pub fn generate_t_parameter() -> String {
random_string(CONTENT_PLAYBACK_NONCE_ALPHABET, 12)
pub fn url_to_params(url: &str) -> Result<(String, BTreeMap<String, String>)> {
let parsed_url = Url::parse(url)?;
let url_params: BTreeMap<String, String> = parsed_url
.query_pairs()
.map(|(k, v)| (k.to_string(), v.to_string()))
.collect();
let mut url_base = parsed_url.clone();
url_base.set_query(None);
Ok((url_base.to_string(), url_params))
}