diff --git a/src/main.rs b/src/main.rs index 17d556c..ebc1957 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,6 +25,8 @@ struct Cli{ cookie_env:Option<String>, #[arg(long)] cookie_file:Option<std::path::PathBuf>, + #[arg(long)] + start_version:Option<u64>, //decompile options #[arg(long)] @@ -134,6 +136,7 @@ async fn main()->AResult<()>{ match cli.command{ Commands::DownloadHistory=>download_history(DownloadHistoryConfig{ + start_version:cli.start_version.unwrap_or(0), output_folder:cli.output.unwrap(), cookie:cookie.unwrap(), asset_id:cli.asset_id.unwrap(), @@ -348,6 +351,7 @@ async fn download_asset_version(client:&reqwest::Client,cookie:&str,asset_id_str } struct DownloadHistoryConfig{ + start_version:u64, output_folder:std::path::PathBuf, cookie:String, asset_id:AssetID, @@ -364,8 +368,13 @@ async fn download_history(config:DownloadHistoryConfig)->AResult<()>{ let mut join_handles=Vec::new(); loop{ let mut page=download_page(&client,config.cookie.as_str(),config.asset_id,cursor).await?; + let mut cancel_paging=false; for asset_version in &page.data{ let version_number=asset_version.assetVersionNumber; + if version_number<config.start_version{ + cancel_paging=true; + continue;//don't trust roblox returned order + } let client=client.clone(); let cookie=config.cookie.clone(); let asset_id_str=asset_id_string.clone(); @@ -386,7 +395,7 @@ async fn download_history(config:DownloadHistoryConfig)->AResult<()>{ })); } asset_list.append(&mut page.data); - if page.nextPageCursor.is_none(){ + if page.nextPageCursor.is_none()||cancel_paging{ break; } cursor=page.nextPageCursor;