forked from StrafesNET/asset-tool
versions not correctly updated
This commit is contained in:
parent
15e8c8208f
commit
35657d4d51
20
src/main.rs
20
src/main.rs
@ -367,6 +367,7 @@ struct DownloadHistoryConfig{
|
||||
}
|
||||
|
||||
async fn download_history(mut config:DownloadHistoryConfig)->AResult<()>{
|
||||
let mut asset_list_contents=std::collections::HashSet::new();
|
||||
let mut asset_list:Vec<AssetVersion>=Vec::new();
|
||||
if config.end_version.is_none()&&config.continue_from_versions{
|
||||
//load prexisting versions list
|
||||
@ -380,16 +381,15 @@ async fn download_history(mut config:DownloadHistoryConfig)->AResult<()>{
|
||||
}
|
||||
}
|
||||
//write down which versions are contained
|
||||
let mut reference_hashmap=std::collections::HashSet::new();
|
||||
for asset_version in &asset_list{
|
||||
reference_hashmap.insert(asset_version.assetVersionNumber);
|
||||
asset_list_contents.insert(asset_version.assetVersionNumber);
|
||||
}
|
||||
//find the highest number
|
||||
match asset_list.iter().map(|asset_version|asset_version.assetVersionNumber).max(){
|
||||
Some(max)=>{
|
||||
//count down contiguously until a number is missing
|
||||
for i in (1..=max).rev(){
|
||||
if !reference_hashmap.contains(&i){
|
||||
if !asset_list_contents.contains(&i){
|
||||
//that is end_version
|
||||
config.end_version=Some(i);
|
||||
break;
|
||||
@ -402,9 +402,6 @@ async fn download_history(mut config:DownloadHistoryConfig)->AResult<()>{
|
||||
},
|
||||
None=>Err(anyhow::Error::msg("Cannot continue from versions.json - there are no previous versions"))?,
|
||||
}
|
||||
//clear the asset list, I can't tell if roblox provides a way to start on a specific page
|
||||
//so it just starts from the beginning every time
|
||||
asset_list.clear();
|
||||
}
|
||||
let client=reqwest::Client::new();
|
||||
|
||||
@ -422,18 +419,25 @@ async fn download_history(mut config:DownloadHistoryConfig)->AResult<()>{
|
||||
let asset_id_str=asset_id_string.clone();
|
||||
let output_folder=config.output_folder.clone();
|
||||
let data=&page.data;
|
||||
let asset_list_contents=&asset_list_contents;
|
||||
let join_set=&mut join_set;
|
||||
let error_catcher=||async move{
|
||||
let mut cancel_paging=false;
|
||||
for asset_version in data{
|
||||
let version_number=asset_version.assetVersionNumber;
|
||||
//skip assets beyond specified end_version
|
||||
if config.end_version.is_some_and(|v|v<version_number){
|
||||
continue;
|
||||
}
|
||||
//skip assets lower than start_version and cancel paging asset versions
|
||||
if version_number<config.start_version{
|
||||
cancel_paging=true;
|
||||
continue;//don't trust roblox returned order
|
||||
}
|
||||
//skip previously downloaded assets
|
||||
if asset_list_contents.contains(&version_number){
|
||||
continue;
|
||||
}
|
||||
while CONCURRENT_REQUESTS<=join_set.len(){
|
||||
join_set.join_next().await.unwrap()??;
|
||||
}
|
||||
@ -468,7 +472,9 @@ async fn download_history(mut config:DownloadHistoryConfig)->AResult<()>{
|
||||
};
|
||||
if page.nextPageCursor.is_none()||cancel_paging{
|
||||
for asset_version in page.data.into_iter(){
|
||||
if config.start_version<=asset_version.assetVersionNumber{
|
||||
if !(asset_list_contents.contains(&asset_version.assetVersionNumber)
|
||||
||config.end_version.is_some_and(|v|v<asset_version.assetVersionNumber)
|
||||
||asset_version.assetVersionNumber<config.start_version){
|
||||
asset_list.push(asset_version);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user