1package main
2
3import (
4 "encoding/csv"
5 "log"
6 "os"
7)
8
9func getReleases(p project) (project, error) {
10 var err error
11 switch p.Forge {
12 case "github", "gitea", "forgejo":
13 p, err = getRSSReleases(p)
14 // case "gitlab":
15 // // TODO: maybe use GitLab's API?
16 default:
17 p, err = getGitReleases(p)
18 }
19 return p, err
20}
21
22func track(name, url, forge, release string) {
23 projectExists := false
24 for i := range m.Projects {
25 if m.Projects[i].URL == url {
26 projectExists = true
27 m.Projects[i].Running = release
28 }
29 }
30
31 if !projectExists {
32 m.Projects = append(m.Projects, project{
33 URL: url,
34 Name: name,
35 Forge: forge,
36 Running: release,
37 })
38 }
39
40 manualRefresh <- struct{}{}
41
42 writeCSV()
43}
44
45func untrack(url string) {
46 for i := range m.Projects {
47 if m.Projects[i].URL == url {
48 m.Projects = append(m.Projects[:i], m.Projects[i+1:]...)
49 break
50 }
51 }
52
53 manualRefresh <- struct{}{}
54
55 writeCSV()
56 err := removeRepo(url)
57 if err != nil {
58 log.Println(err)
59 }
60}
61
62func writeCSV() {
63 file, err := os.OpenFile("projects.csv", os.O_RDWR|os.O_CREATE, 0o600)
64 if err != nil {
65 log.Fatalln(err)
66 }
67 defer file.Close()
68
69 writer := csv.NewWriter(file)
70
71 if err := writer.Write([]string{"url", "name", "forge", "running"}); err != nil {
72 log.Fatalln(err)
73 }
74 for _, project := range m.Projects {
75 if err := writer.Write([]string{project.URL, project.Name, project.Forge, project.Running}); err != nil {
76 log.Fatalln(err)
77 }
78 }
79
80 writer.Flush()
81}