52 lines
855 B
Go
52 lines
855 B
Go
package lib
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
type RedmineResponse struct {
|
|
Issues []struct {
|
|
ID int
|
|
UpdatedOn string
|
|
Subject string
|
|
}
|
|
}
|
|
|
|
type RedmineFetcher struct {
|
|
BaseURL string
|
|
Key string
|
|
Cache *Cache
|
|
}
|
|
|
|
func (f RedmineFetcher) Fetch() []Entry {
|
|
req := FetcherRequest{
|
|
BaseURL: f.BaseURL,
|
|
Path: "/issues.json?limit=1&sort=updated_on:desc",
|
|
Method: http.MethodGet,
|
|
Headers: map[string]string{
|
|
"X-Redmine-API-Key": f.Key,
|
|
},
|
|
}
|
|
|
|
var r RedmineResponse
|
|
|
|
if err := req.Run(&r); err != nil {
|
|
return []Entry{}
|
|
}
|
|
|
|
if len(r.Issues) == 0 {
|
|
return []Entry{}
|
|
}
|
|
|
|
i := r.Issues[0]
|
|
if f.Cache.TryUpdate("redmine", i.UpdatedOn) {
|
|
url := fmt.Sprintf("%s/issues/%d", f.BaseURL, i.ID)
|
|
return []Entry{{
|
|
Title: fmt.Sprintf("🎫 [Redmine] - #%d %s", i.ID, i.Subject),
|
|
URL: url,
|
|
}}
|
|
}
|
|
return []Entry{}
|
|
}
|