mirror of
https://codeberg.org/hyperreal/go-torrent-helper
synced 2024-11-01 16:53:09 +01:00
164 lines
3.3 KiB
Go
164 lines
3.3 KiB
Go
package command
|
|
|
|
import (
|
|
"errors"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"codeberg.org/hyperreal/go-torrent-helper/almalinux"
|
|
"codeberg.org/hyperreal/go-torrent-helper/debian"
|
|
"codeberg.org/hyperreal/go-torrent-helper/fedora"
|
|
"codeberg.org/hyperreal/go-torrent-helper/nixos"
|
|
"codeberg.org/hyperreal/go-torrent-helper/parrot"
|
|
"codeberg.org/hyperreal/go-torrent-helper/qubes"
|
|
"codeberg.org/hyperreal/go-torrent-helper/rocky"
|
|
"github.com/hekmon/transmissionrpc"
|
|
)
|
|
|
|
type Distro interface {
|
|
AddNewTorrents(client *transmissionrpc.Client) error
|
|
RemoveOldTorrents(client *transmissionrpc.Client) error
|
|
}
|
|
|
|
func NewAddCmd() *AddCmd {
|
|
addCmd := &AddCmd{
|
|
fs: flag.NewFlagSet("add", flag.ExitOnError),
|
|
}
|
|
|
|
addCmd.fs.StringVar(&addCmd.distro, "distro", "", "Distro to add torrents for")
|
|
addCmd.fs.StringVar(&addCmd.relver, "relver", "", "Release version to add")
|
|
|
|
return addCmd
|
|
}
|
|
|
|
func NewRemoveCmd() *RemoveCmd {
|
|
removeCmd := &RemoveCmd{
|
|
fs: flag.NewFlagSet("remove", flag.ExitOnError),
|
|
}
|
|
|
|
removeCmd.fs.StringVar(&removeCmd.distro, "distro", "", "Distro to remove torrents for")
|
|
removeCmd.fs.StringVar(&removeCmd.relver, "relver", "", "Release version to remove")
|
|
|
|
return removeCmd
|
|
}
|
|
|
|
type AddCmd struct {
|
|
fs *flag.FlagSet
|
|
|
|
distro string
|
|
relver string
|
|
}
|
|
|
|
type RemoveCmd struct {
|
|
fs *flag.FlagSet
|
|
|
|
distro string
|
|
relver string
|
|
}
|
|
|
|
func (a *AddCmd) Name() string {
|
|
return a.fs.Name()
|
|
}
|
|
|
|
func (r *RemoveCmd) Name() string {
|
|
return r.fs.Name()
|
|
}
|
|
|
|
func (a *AddCmd) Init(args []string) error {
|
|
return a.fs.Parse(args)
|
|
}
|
|
|
|
func (r *RemoveCmd) Init(args []string) error {
|
|
return r.fs.Parse(args)
|
|
}
|
|
|
|
func (a *AddCmd) Run(d Distro) error {
|
|
client, err := transmissionrpc.New(os.Getenv("TRANSMISSION_RPC_URL"), "", "", nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := d.AddNewTorrents(client); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *RemoveCmd) Run(d Distro) error {
|
|
client, err := transmissionrpc.New(os.Getenv("TRANSMISSION_RPC_URL"), "", "", nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := d.RemoveOldTorrents(client); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type Runner interface {
|
|
Init([]string) error
|
|
Run(d Distro) error
|
|
Name() string
|
|
}
|
|
|
|
func Root(args []string) error {
|
|
if len(args) < 1 {
|
|
return errors.New("You must pass a sub-command")
|
|
}
|
|
|
|
cmds := []Runner{
|
|
NewAddCmd(),
|
|
NewRemoveCmd(),
|
|
}
|
|
|
|
subcmd := os.Args[1]
|
|
|
|
for _, cmd := range cmds {
|
|
if cmd.Name() == subcmd {
|
|
cmd.Init(os.Args[2:])
|
|
|
|
distro := os.Args[3]
|
|
relver := os.Args[5]
|
|
|
|
switch distro {
|
|
case "almalinux":
|
|
a := &almalinux.AlmaLinux{NameSubstr: "AlmaLinux", Relver: relver}
|
|
return cmd.Run(a)
|
|
|
|
case "debian":
|
|
d := &debian.Debian{NameSubstr: "debian", Relver: relver}
|
|
return cmd.Run(d)
|
|
|
|
case "fedora":
|
|
f := &fedora.Fedora{NameSubstr: "Fedora", Relver: relver}
|
|
return cmd.Run(f)
|
|
|
|
case "nixos":
|
|
n := &nixos.Nixos{NameSubstr: "nixos"}
|
|
return cmd.Run(n)
|
|
|
|
case "parrot":
|
|
p := &parrot.Parrot{NameSubstr: "Parrot", Relver: relver}
|
|
return cmd.Run(p)
|
|
|
|
case "qubes":
|
|
q := &qubes.Qubes{NameSubstr: "Qubes", Relver: relver}
|
|
return cmd.Run(q)
|
|
|
|
case "rocky":
|
|
r := &rocky.Rocky{NameSubstr: "Rocky", Relver: relver}
|
|
return cmd.Run(r)
|
|
|
|
default:
|
|
return fmt.Errorf("Unknown distro: %s", distro)
|
|
}
|
|
}
|
|
}
|
|
|
|
return fmt.Errorf("Unknown subcommand: %s", subcmd)
|
|
}
|