You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.9 KiB
61 lines
1.9 KiB
package yp |
|
|
|
import ( |
|
"encoding/json" |
|
"net/http" |
|
|
|
"github.com/owncast/owncast/core/data" |
|
"github.com/owncast/owncast/models" |
|
"github.com/owncast/owncast/utils" |
|
log "github.com/sirupsen/logrus" |
|
) |
|
|
|
type ypDetailsResponse struct { |
|
LastConnectTime *utils.NullTime `json:"lastConnectTime"` |
|
Name string `json:"name"` |
|
Description string `json:"description"` |
|
StreamTitle string `json:"streamTitle,omitempty"` |
|
Logo string `json:"logo"` |
|
Tags []string `json:"tags"` |
|
Social []models.SocialHandle `json:"social"` |
|
|
|
ViewerCount int `json:"viewerCount"` |
|
OverallMaxViewerCount int `json:"overallMaxViewerCount"` |
|
SessionMaxViewerCount int `json:"sessionMaxViewerCount"` |
|
NSFW bool `json:"nsfw"` |
|
Online bool `json:"online"` |
|
} |
|
|
|
// GetYPResponse gets the status of the server for YP purposes. |
|
func GetYPResponse(w http.ResponseWriter, r *http.Request) { |
|
if !data.GetDirectoryEnabled() { |
|
w.WriteHeader(http.StatusNotFound) |
|
return |
|
} |
|
|
|
status := getStatus() |
|
|
|
streamTitle := data.GetStreamTitle() |
|
|
|
response := ypDetailsResponse{ |
|
Name: data.GetServerName(), |
|
Description: data.GetServerSummary(), |
|
StreamTitle: streamTitle, |
|
Logo: "/logo", |
|
NSFW: data.GetNSFW(), |
|
Tags: data.GetServerMetadataTags(), |
|
Online: status.Online, |
|
ViewerCount: status.ViewerCount, |
|
OverallMaxViewerCount: status.OverallMaxViewerCount, |
|
SessionMaxViewerCount: status.SessionMaxViewerCount, |
|
LastConnectTime: status.LastConnectTime, |
|
Social: data.GetSocialHandles(), |
|
} |
|
|
|
w.Header().Set("Content-Type", "application/json") |
|
|
|
err := json.NewEncoder(w).Encode(response) |
|
if err != nil { |
|
log.Errorln(err) |
|
} |
|
}
|
|
|