1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-06-24 03:55:23 -04:00
Files
DankMaterialShell/core/internal/plugins/feedback.go
T

50 lines
1.1 KiB
Go

package plugins
import (
"encoding/json"
"net/http"
"time"
)
const feedbackURL = "https://api.danklinux.com/plugins"
type Feedback struct {
Upvotes int
Status []string
IssueURL string
}
// FetchFeedback retrieves community upvotes and moderator status from the directory API.
// Best-effort: any failure returns a nil map.
func FetchFeedback() map[string]Feedback {
client := &http.Client{Timeout: 5 * time.Second}
resp, err := client.Get(feedbackURL)
if err != nil {
return nil
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return nil
}
var payload struct {
Plugins []struct {
ID string `json:"id"`
Upvotes int `json:"upvotes"`
Status []string `json:"status"`
IssueURL string `json:"issueUrl"`
} `json:"plugins"`
}
if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil {
return nil
}
feedback := make(map[string]Feedback, len(payload.Plugins))
for _, p := range payload.Plugins {
feedback[p.ID] = Feedback{Upvotes: p.Upvotes, Status: p.Status, IssueURL: p.IssueURL}
}
return feedback
}