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}