82 lines
1.4 KiB
Go
82 lines
1.4 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/csv"
|
||
|
"log"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
func getReleases(p project) (project, error) {
|
||
|
var err error
|
||
|
switch p.Forge {
|
||
|
case "github", "gitea", "forgejo":
|
||
|
p, err = getRSSReleases(p)
|
||
|
// case "gitlab":
|
||
|
// // TODO: maybe use GitLab's API?
|
||
|
default:
|
||
|
p, err = getGitReleases(p)
|
||
|
}
|
||
|
return p, err
|
||
|
}
|
||
|
|
||
|
func track(name, url, forge, release string) {
|
||
|
projectExists := false
|
||
|
for i := range m.Projects {
|
||
|
if m.Projects[i].URL == url {
|
||
|
projectExists = true
|
||
|
m.Projects[i].Running = release
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if !projectExists {
|
||
|
m.Projects = append(m.Projects, project{
|
||
|
URL: url,
|
||
|
Name: name,
|
||
|
Forge: forge,
|
||
|
Running: release,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
manualRefresh <- struct{}{}
|
||
|
|
||
|
writeCSV()
|
||
|
}
|
||
|
|
||
|
func untrack(url string) {
|
||
|
for i := range m.Projects {
|
||
|
if m.Projects[i].URL == url {
|
||
|
m.Projects = append(m.Projects[:i], m.Projects[i+1:]...)
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
manualRefresh <- struct{}{}
|
||
|
|
||
|
writeCSV()
|
||
|
err := removeRepo(url)
|
||
|
if err != nil {
|
||
|
log.Println(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func writeCSV() {
|
||
|
file, err := os.OpenFile("projects.csv", os.O_RDWR|os.O_CREATE, 0o600)
|
||
|
if err != nil {
|
||
|
log.Fatalln(err)
|
||
|
}
|
||
|
defer file.Close()
|
||
|
|
||
|
writer := csv.NewWriter(file)
|
||
|
|
||
|
if err := writer.Write([]string{"url", "name", "forge", "running"}); err != nil {
|
||
|
log.Fatalln(err)
|
||
|
}
|
||
|
for _, project := range m.Projects {
|
||
|
if err := writer.Write([]string{project.URL, project.Name, project.Forge, project.Running}); err != nil {
|
||
|
log.Fatalln(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
writer.Flush()
|
||
|
}
|