🎉 Initial commit
This commit is contained in:
commit
323c25338f
162
main.v
Normal file
162
main.v
Normal file
@ -0,0 +1,162 @@
|
||||
import os
|
||||
import net.http
|
||||
import json
|
||||
import cli
|
||||
|
||||
const mpr_url = 'https://mpr.makedeb.org/'
|
||||
|
||||
fn main() {
|
||||
mut app := cli.Command{
|
||||
name: 'ayy'
|
||||
description: 'A simple MPR helper'
|
||||
commands: [
|
||||
cli.Command{
|
||||
name: 'install'
|
||||
usage: '[package name]'
|
||||
description: 'Install packages'
|
||||
execute: install
|
||||
},
|
||||
cli.Command{
|
||||
name: 'search'
|
||||
usage: '[package name]'
|
||||
description: 'Search for packages'
|
||||
execute: search
|
||||
required_args: 1
|
||||
},
|
||||
]
|
||||
}
|
||||
app.setup()
|
||||
app.parse(os.args)
|
||||
}
|
||||
|
||||
fn get_pkg_data(pkg_name string) Rpc_resp {
|
||||
// resp := http.get('$mpr_url/rpc?v=5&type=info&arg[]=$pkg_name') or {
|
||||
// println(err)
|
||||
// exit(1)
|
||||
// }
|
||||
|
||||
resp := http.get('https://vps.anotherfoxguy.com/dl/sw.json') or {
|
||||
println(err)
|
||||
exit(1)
|
||||
}
|
||||
|
||||
data := json.decode(Rpc_resp, resp.text) or {
|
||||
println('Failed to parse data: $err')
|
||||
exit(1)
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
fn install(cmd cli.Command) ? {
|
||||
mut deps := map[string]Dependency{}
|
||||
for pkg_name in cmd.args {
|
||||
data := get_pkg_data(pkg_name)
|
||||
|
||||
if data.resultcount != 1 {
|
||||
println('Package $pkg_name not found on MPR')
|
||||
exit(1)
|
||||
}
|
||||
|
||||
pkg := data.results[0]
|
||||
|
||||
collect_deps(pkg.depends, mut deps)
|
||||
collect_deps(pkg.make_depends, mut deps)
|
||||
|
||||
for _, dat in deps {
|
||||
match dat.source {
|
||||
.apt { install_apt_package(dat.name) }
|
||||
.mpr { install_mpr_package(dat.name) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn install_mpr_package(package string) {
|
||||
exe := os.execute('apt install -y $package')
|
||||
if apt_search.exit_code != 0 {
|
||||
println('Warn: $package not found on MPR or apt!!')
|
||||
exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
fn install_apt_package(package string) {
|
||||
exe := os.execute('apt install -y $package')
|
||||
if apt_search.exit_code != 0 {
|
||||
println('Warn: $package not found on MPR or apt!!')
|
||||
exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
fn collect_deps(deps []string, mut result map[string]Dependency) {
|
||||
for dep in deps {
|
||||
if dep in result {
|
||||
return
|
||||
}
|
||||
ddata := get_pkg_data(dep)
|
||||
if ddata.resultcount == 1 {
|
||||
result[dep] = Dependency{dep, Source.mpr}
|
||||
} else {
|
||||
apt_search := os.execute('apt-cache show $dep')
|
||||
if apt_search.exit_code != 0 {
|
||||
println('Warn: $dep not found on MPR or apt!!')
|
||||
return
|
||||
}
|
||||
println('aaaaa $apt_search')
|
||||
result[dep] = Dependency{dep, Source.apt}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn search(cmd cli.Command) ? {
|
||||
pkg := cmd.args[0]
|
||||
resp := http.get('$mpr_url/rpc?v=5&type=search&arg=$pkg') or {
|
||||
println(err)
|
||||
exit(1)
|
||||
}
|
||||
data := json.decode(Rpc_resp, resp.text) ?
|
||||
println('Packages found $data.resultcount')
|
||||
for res in data.results {
|
||||
println('\t Name: $res.name')
|
||||
println('\t Description: $res.description')
|
||||
}
|
||||
}
|
||||
|
||||
enum Source {
|
||||
mpr
|
||||
apt
|
||||
}
|
||||
|
||||
struct Dependency {
|
||||
name string
|
||||
source Source
|
||||
}
|
||||
|
||||
struct Rpc_resp {
|
||||
resultcount int
|
||||
results []Package
|
||||
version int
|
||||
}
|
||||
|
||||
struct Package {
|
||||
conflicts []string [json: Conflicts]
|
||||
depends []string [json: Depends]
|
||||
make_depends []string [json: MakeDepends]
|
||||
description string [json: Description]
|
||||
first_submitted int [json: FirstSubmitted]
|
||||
id int [json: ID]
|
||||
keywords []string [json: Keywords]
|
||||
lastmodified int [json: LastModified]
|
||||
license []string [json: License]
|
||||
maintainer string [json: Maintainer]
|
||||
name string [json: Name]
|
||||
num_votes int [json: NumVotes]
|
||||
out_of_date string [json: OutOfDate]
|
||||
package_base string [json: PackageBase]
|
||||
package_base_id int [json: PackageBaseID]
|
||||
popularity int [json: Popularity]
|
||||
provides []string [json: Provides]
|
||||
replaces []string [json: Replaces]
|
||||
url string [json: URL]
|
||||
url_path string [json: URLPath]
|
||||
version string [json: Version]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user