asset location commands
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
81
src/main.rs
81
src/main.rs
@@ -24,6 +24,8 @@ enum Commands{
|
||||
DownloadHistory(DownloadHistorySubcommand),
|
||||
Download(DownloadSubcommand),
|
||||
DownloadVersion(DownloadVersionSubcommand),
|
||||
DownloadLocation(DownloadLocationSubcommand),
|
||||
DownloadVersionLocation(DownloadVersionLocationSubcommand),
|
||||
DownloadVersionV2(DownloadVersionSubcommand),
|
||||
DownloadDecompile(DownloadDecompileSubcommand),
|
||||
DownloadCreationsJson(DownloadCreationsJsonSubcommand),
|
||||
@@ -104,6 +106,32 @@ struct DownloadVersionSubcommand{
|
||||
#[arg(long)]
|
||||
asset_version:Option<u64>,
|
||||
}
|
||||
/// Get download urls for a list of assets by id.
|
||||
#[derive(Args)]
|
||||
struct DownloadLocationSubcommand{
|
||||
#[arg(long,group="api_key",required=true)]
|
||||
api_key_literal:Option<String>,
|
||||
#[arg(long,group="api_key",required=true)]
|
||||
api_key_envvar:Option<String>,
|
||||
#[arg(long,group="api_key",required=true)]
|
||||
api_key_file:Option<PathBuf>,
|
||||
#[arg(required=true)]
|
||||
asset_ids:Vec<AssetID>,
|
||||
}
|
||||
/// Get a download url for a single asset by id, optionally specifying the version to download.
|
||||
#[derive(Args)]
|
||||
struct DownloadVersionLocationSubcommand{
|
||||
#[arg(long,group="api_key",required=true)]
|
||||
api_key_literal:Option<String>,
|
||||
#[arg(long,group="api_key",required=true)]
|
||||
api_key_envvar:Option<String>,
|
||||
#[arg(long,group="api_key",required=true)]
|
||||
api_key_file:Option<PathBuf>,
|
||||
#[arg(long)]
|
||||
asset_id:AssetID,
|
||||
#[arg(long)]
|
||||
asset_version:Option<u64>,
|
||||
}
|
||||
/// Download the list of asset ids (not the assets themselves) created by a group or user. The output is written to `output_folder/versions.json`
|
||||
#[derive(Args)]
|
||||
struct DownloadCreationsJsonSubcommand{
|
||||
@@ -489,6 +517,27 @@ async fn main()->AResult<()>{
|
||||
},
|
||||
).await
|
||||
},
|
||||
Commands::DownloadLocation(subcommand)=>{
|
||||
download_list_locations(
|
||||
api_key_from_args(
|
||||
subcommand.api_key_literal,
|
||||
subcommand.api_key_envvar,
|
||||
subcommand.api_key_file,
|
||||
).await?,
|
||||
&subcommand.asset_ids
|
||||
).await
|
||||
},
|
||||
Commands::DownloadVersionLocation(subcommand)=>{
|
||||
download_location(
|
||||
api_key_from_args(
|
||||
subcommand.api_key_literal,
|
||||
subcommand.api_key_envvar,
|
||||
subcommand.api_key_file,
|
||||
).await?,
|
||||
subcommand.asset_id,
|
||||
subcommand.asset_version,
|
||||
).await
|
||||
},
|
||||
Commands::DownloadVersionV2(subcommand)=>{
|
||||
let output_folder=subcommand.output_folder.unwrap_or_else(||std::env::current_dir().unwrap());
|
||||
download_version_v2(
|
||||
@@ -1039,6 +1088,38 @@ async fn download_list(cookie:Cookie,asset_id_file_map:AssetIDFileMap)->AResult<
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn download_list_locations(api_key:ApiKey,asset_id_file_map:&[u64])->AResult<()>{
|
||||
let context=CloudContext::new(api_key);
|
||||
futures::stream::iter(asset_id_file_map)
|
||||
.map(|&asset_id|
|
||||
context.get_asset_location(rbx_asset::cloud::GetAssetLatestRequest{asset_id})
|
||||
)
|
||||
.buffer_unordered(CONCURRENT_REQUESTS)
|
||||
.for_each(|result|async{
|
||||
match result{
|
||||
Ok(asset_location_info)=>match asset_location_info.location{
|
||||
Some(location)=>println!("{}",location.location()),
|
||||
None=>println!("This asset is private!"),
|
||||
},
|
||||
Err(e)=>eprintln!("dl error: {}",e),
|
||||
}
|
||||
}).await;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn download_location(api_key:ApiKey,asset_id:AssetID,version:Option<u64>)->AResult<()>{
|
||||
let context=CloudContext::new(api_key);
|
||||
let asset_location_info=match version{
|
||||
Some(version)=>context.get_asset_version_location(rbx_asset::cloud::GetAssetVersionRequest{asset_id,version}).await?,
|
||||
None=>context.get_asset_location(rbx_asset::cloud::GetAssetLatestRequest{asset_id}).await?,
|
||||
};
|
||||
match asset_location_info.location{
|
||||
Some(location)=>println!("{}",location.location()),
|
||||
None=>println!("This asset is private!"),
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn get_creations_pages(context:&CookieContext,owner:rbx_asset::cookie::Owner)->AResult<Vec<CreationsItem>>{
|
||||
let mut config=rbx_asset::cookie::CreationsPageRequest{
|
||||
owner,
|
||||
|
||||
Reference in New Issue
Block a user