From ee6dfca55f4d1007f7527d25b76147fb5f4b8f20 Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Mon, 19 Jan 2026 21:55:50 +0100 Subject: [PATCH] more refact --- lib/fetcher.gitea.go | 7 ++--- lib/runner.go | 65 +++++++++++++++++++++++++++---------------- lib/sender.discord.go | 2 -- 3 files changed, 44 insertions(+), 30 deletions(-) diff --git a/lib/fetcher.gitea.go b/lib/fetcher.gitea.go index 64f4c46..0e3cc2b 100644 --- a/lib/fetcher.gitea.go +++ b/lib/fetcher.gitea.go @@ -9,9 +9,9 @@ import ( type GiteaFetcher struct { BaseURL string - Token string - Repos []string - Cache *Cache + Token string + Repos []string + Cache *Cache } func (f GiteaFetcher) Fetch() []string { @@ -35,7 +35,6 @@ func (f GiteaFetcher) Fetch() []string { HTMLURL string `json:"html_url"` } if err := getJSON(req, &r); err != nil { - fmt.Printf("Error fetching Gitea repo %s: %v\n", repo, err) continue } diff --git a/lib/runner.go b/lib/runner.go index 3d3d54c..ea0a80e 100644 --- a/lib/runner.go +++ b/lib/runner.go @@ -1,7 +1,6 @@ package lib import ( - "fmt" "log" "os" "strconv" @@ -11,17 +10,13 @@ import ( "github.com/joho/godotenv" ) -func Runner() { - if err := godotenv.Load(); err != nil { - log.Println("Warning: .env file not found, using environment variables") - } - +func getConfig() Config { intervalMinutes, err := strconv.Atoi(os.Getenv("INTERVAL_MINUTES")) if err != nil { intervalMinutes = 5 } - config := Config{ + return Config{ WikiBaseURL: os.Getenv("WIKI_BASE_URL"), WikiToken: os.Getenv("WIKI_TOKEN"), RedmineBaseURL: os.Getenv("REDMINE_BASE_URL"), @@ -32,32 +27,54 @@ func Runner() { Webhook: os.Getenv("DISCORD_WEBHOOK"), Interval: time.Duration(intervalMinutes) * time.Minute, } +} - cache := Cache{} - cache.Load() - discord := DiscordSender{Config: config} - +func getFetchers(config Config, cache *Cache) []Fetcher { var fetchers []Fetcher + fetchers = append(fetchers, &GiteaFetcher{ BaseURL: config.GiteaBaseURL, - Token: config.GiteaToken, - Repos: config.GiteaRepos, - Cache: &cache, + Token: config.GiteaToken, + Repos: config.GiteaRepos, + Cache: cache, }) - fetchers = append(fetchers, &WikiFetcher{Config: config, Cache: &cache}) - fetchers = append(fetchers, &RedmineFetcher{Config: config, Cache: &cache}) + fetchers = append(fetchers, &WikiFetcher{Config: config, Cache: cache}) + fetchers = append(fetchers, &RedmineFetcher{Config: config, Cache: cache}) + return fetchers +} + +func getCache() Cache { + cache := Cache{} + cache.Load() + return cache +} + +func getDiscordSender(config Config) DiscordSender { + return DiscordSender{Config: config} +} + +func Runner() { + if err := godotenv.Load(); err != nil { + log.Println("Warning: .env file not found, using environment variables") + } + config := getConfig() + cache := getCache() + discord_sender := getDiscordSender(config) + fetchers := getFetchers(config, &cache) + messages := []string{} for { - fmt.Println("Update") + log.Println("Run updater...") - for _, f := range fetchers { - if msg := f.Fetch(); len(msg) > 0 { - for _, m := range msg { - fmt.Println("Sending:", m) - discord.Send(m) - } - } + for _, fetcher := range fetchers { + fetcher_messages := fetcher.Fetch() + messages = append(messages, fetcher_messages...) + } + + for _, message := range messages { + log.Println("Send message: ", message) + discord_sender.Send(message) } cache.Save() diff --git a/lib/sender.discord.go b/lib/sender.discord.go index 85c1c82..c742684 100644 --- a/lib/sender.discord.go +++ b/lib/sender.discord.go @@ -3,7 +3,6 @@ package lib import ( "bytes" "encoding/json" - "fmt" "net/http" ) @@ -12,7 +11,6 @@ type DiscordSender struct { } func (d DiscordSender) Send(msg string) { - fmt.Printf("Send to Discord: %s\n", msg) b, _ := json.Marshal(map[string]string{"content": msg}) http.Post(d.Config.Webhook, "application/json", bytes.NewBuffer(b)) }