module main import ( http os json ) const ( //url = 'http://localhost:8089' url = 'https://vpm.best' ) struct Mod { id int name string url string nr_downloads int } fn main() { if os.args.len <= 1 { println('usage: vget module [module] [module] [...]') return } home := os.home_dir() home_vmodules := '${home}.vmodules' if !os.dir_exists( home_vmodules ) { println('Creating $home_vmodules/ ...') os.mkdir(home_vmodules) } os.chdir(home_vmodules) mut errors := 0 names := os.args.slice(1, os.args.len) for name in names { modurl := url + '/jsmod/$name' r := http.get(modurl) or { panic(err) } if r.status_code == 404 { println('Skipping module "$name", since $url reported that "$name" does not exist.') errors++ continue } if r.status_code != 200 { println('Skipping module "$name", since $url responded with $r.status_code http status code. Please try again later.') errors++ continue } s := r.text mod := json.decode(Mod, s) or { errors++ println('Skipping module "$name", since its information is not in json format.') continue } if( '' == mod.url || '' == mod.name ){ errors++ // a possible 404 error, which means a missing module? println('Skipping module "$name", since it is missing name or url information.') continue } final_module_path := '$home_vmodules/' + mod.name.replace('.', '/') println('Installing module "$name" from $mod.url to $final_module_path ...') _ = os.exec('git clone --depth=1 $mod.url $final_module_path') or { errors++ println('Could not install module "$name" to "$final_module_path" .') println('Error details: $err') continue } } if errors > 0 { exit(1) } }