F-Droid desktop client
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
2.7 KiB

// Copyright (c) 2015, Daniel Martí <mvdan@mvdan.cc>
// Copyright (c) 2025, Thomas Dickson <modscrat+git@gmail.com>
// See LICENSE for licensing information
package main
import (
"fmt"
"strings"
)
var cmdRepo = &Command{
UsageLine: "repo",
Short: "Manage repositories",
Long: `
List, add, remove, enable or disable repositories.
When a repository is added, it is enabled by default.
List repositories:
$ fdroidcl repo
Modify repositories:
$ fdroidcl repo add <NAME> <URL>
$ fdroidcl repo remove <NAME>
$ fdroidcl repo enable <NAME>
$ fdroidcl repo disable <NAME>
`[1:],
}
func init() {
cmdRepo.Run = runRepo
}
func runRepo(args []string) error {
if len(args) == 0 {
// list repositories
for i, value := range config.Repos {
fmt.Printf("Name: %s\n", value.ID)
fmt.Printf("URL: %s\n", value.URL)
var enabled string
if value.Enabled {
enabled = "yes"
} else {
enabled = "no"
}
fmt.Printf("Enabled: %s\n", enabled)
if i != len(config.Repos)-1 {
fmt.Println()
}
}
return nil
}
if args[0] == "add" {
if len(args) != 3 {
return fmt.Errorf("wrong amount of arguments")
}
return addRepo(args[1], args[2])
} else if args[0] == "remove" {
if len(args) != 2 {
return fmt.Errorf("wrong amount of arguments")
}
return removeRepo(args[1])
} else if args[0] == "enable" {
if len(args) != 2 {
return fmt.Errorf("wrong amount of arguments")
}
return enableRepo(args[1])
} else if args[0] == "disable" {
if len(args) != 2 {
return fmt.Errorf("wrong amount of arguments")
}
return disableRepo(args[1])
} else {
return fmt.Errorf("wrong usage")
}
}
func repoIndex(name string) int {
index := -1
for i, value := range config.Repos {
if value.ID == name {
index = i
break
}
}
return index
}
func addRepo(name, url string) error {
if repoIndex(name) != -1 {
return fmt.Errorf("a repo with the same name \"%s\" exists already", name)
}
url = strings.Split(url, "?")[0]
config.Repos = append(config.Repos, repo{ID: name, URL: url, Enabled: true})
return writeConfig(&config)
}
func removeRepo(name string) error {
index := repoIndex(name)
if index == -1 {
return fmt.Errorf("a repo with the name \"%s\" could not be found", name)
}
config.Repos = append(config.Repos[:index], config.Repos[index+1:]...)
return writeConfig(&config)
}
func enableRepo(name string) error {
index := repoIndex(name)
if index == -1 {
return fmt.Errorf("a repo with the name \"%s\" could not be found", name)
}
config.Repos[index].Enabled = true
return writeConfig(&config)
}
func disableRepo(name string) error {
index := repoIndex(name)
if index == -1 {
return fmt.Errorf("a repo with the name \"%s\" could not be found", name)
}
config.Repos[index].Enabled = false
return writeConfig(&config)
}