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