81 lines
1.7 KiB
V
81 lines
1.7 KiB
V
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)
|
|
}
|
|
}
|