Files
DankMaterialShell/core/internal/plugins/feedback.go
T
bbedward f482642880 sysupdate: check only on demand, run at low priority, fix the settings page
scrollbar: interface style toggle and no scrollbars in the dash
dash: never allow scrollbars
cc: widget sheet cards, header close button and content-sized dialogs
2026-09-29 16:30:04 -04:00

54 lines
1.2 KiB
Go

package plugins
import (
"encoding/json"
"net/http"
"time"
"github.com/AvengeMedia/DankMaterialShell/core/internal/site"
)
const feedbackURL = site.API + "/plugins"
type Feedback struct {
Upvotes int
Status []string
IssueURL string
Similar []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"`
Similar []string `json:"similar"`
} `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, Similar: p.Similar}
}
return feedback
}