forked from StrafesNET/map-tool
implement upload
This commit is contained in:
parent
7bbb9ca24f
commit
4c485e76e4
72
src/main.rs
72
src/main.rs
@ -1,5 +1,3 @@
|
||||
use std::unimplemented;
|
||||
|
||||
use clap::{Args, Parser, Subcommand};
|
||||
|
||||
mod error;
|
||||
@ -143,6 +141,38 @@ fn check_source_illegal_keywords(source:&String)->bool{
|
||||
source.find("getfenv").is_some()||source.find("require").is_some()
|
||||
}
|
||||
|
||||
fn find_first_child_class<'a>(dom:&'a rbx_dom_weak::WeakDom,instance:&'a rbx_dom_weak::Instance,name:&'a str,class:&'a str) -> Option<&'a rbx_dom_weak::Instance> {
|
||||
for &referent in instance.children() {
|
||||
if let Some(c) = dom.get_by_ref(referent) {
|
||||
if c.name==name&&class_is_a(c.class.as_str(),class) {
|
||||
return Some(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
fn get_mapinfo(dom:&rbx_dom_weak::WeakDom) -> BoxResult<(String,String,String)>{
|
||||
let workspace_children=dom.root().children();
|
||||
if workspace_children.len()!=1{
|
||||
return Err(Error::new("there can only be one model"));
|
||||
}
|
||||
if let Some(model_instance) = dom.get_by_ref(workspace_children[0]) {
|
||||
if let (Some(creator),Some(displayname))=(find_first_child_class(dom, model_instance, "Creator", "StringValue"),find_first_child_class(dom, model_instance, "DisplayName", "StringValue")){
|
||||
if let (
|
||||
Some(rbx_dom_weak::types::Variant::String(creator_string)),
|
||||
Some(rbx_dom_weak::types::Variant::String(displayname_string))
|
||||
)=(
|
||||
creator.properties.get("Value"),
|
||||
displayname.properties.get("Value")
|
||||
){
|
||||
return Ok((model_instance.name.clone(),creator_string.clone(),displayname_string.clone()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return Err(Error::new("no stuff in map"));
|
||||
}
|
||||
|
||||
fn download(map_list: Vec<u64>) -> BoxResult<()>{
|
||||
let header=format!("Cookie: .ROBLOSECURITY={}",std::env::var("RBXCOOKIE")?);
|
||||
let shared_args=&[
|
||||
@ -315,16 +345,40 @@ fn replace() -> BoxResult<()>{
|
||||
}
|
||||
fn upload() -> BoxResult<()>{
|
||||
//interactive prompt per upload:
|
||||
for entry in std::fs::read_dir("maps/passed")? {
|
||||
let file_thing=entry?;
|
||||
let input = std::io::BufReader::new(std::fs::File::open(file_thing.path())?);
|
||||
|
||||
let dom = rbx_binary::from_reader(input)?;
|
||||
let (modelname,creator,displayname) = get_mapinfo(&dom)?;
|
||||
|
||||
//Creator: [auto fill creator]
|
||||
//DisplayName: [auto fill DisplayName]
|
||||
//id: ["New" for blank because of my double enter key]
|
||||
// std::process::Command::new("rbxcompiler")
|
||||
// .arg("--compile=false")
|
||||
// .arg("--group=6980477")
|
||||
// .arg("--asset=5692139100")
|
||||
// .arg("--input=map.rbxm")
|
||||
// .spawn()?;
|
||||
unimplemented!()
|
||||
print!("Model name: {}\nCreator: {}\nDisplayName: {}\nAsset Id: ",modelname,creator,displayname);
|
||||
std::io::Write::flush(&mut std::io::stdout())?;
|
||||
let asset_id;
|
||||
loop{
|
||||
let mut asset_id_string = String::new();
|
||||
std::io::stdin().read_line(&mut asset_id_string)?;
|
||||
asset_id_string.pop();//drop newline
|
||||
if let Ok(parsed_asset_id)=asset_id_string.parse::<u64>(){
|
||||
asset_id=parsed_asset_id;
|
||||
break;
|
||||
}else{
|
||||
print!("Asset Id: ");
|
||||
std::io::Write::flush(&mut std::io::stdout())?;
|
||||
}
|
||||
}
|
||||
|
||||
std::process::Command::new("../rbxcompiler-linux-amd64")
|
||||
.arg("--compile=false")
|
||||
.arg("--group=6980477")
|
||||
.arg(format!("--asset={}",asset_id))
|
||||
.arg(format!("--input={}",file_thing.path().into_os_string().into_string().unwrap()))
|
||||
.spawn()?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
enum Interactive{
|
||||
|
Loading…
Reference in New Issue
Block a user