mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-06-24 12:05:21 -04:00
50 lines
1.1 KiB
Go
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
|
|
}
|