refactor: simplify codebase
This commit is contained in:
+12
-42
@@ -74,25 +74,14 @@ type ChannelPointsContext struct {
|
||||
|
||||
// Game describes the current Twitch category for a live stream.
|
||||
type Game struct {
|
||||
ID string
|
||||
Name string
|
||||
DisplayName string
|
||||
ID string
|
||||
Name string
|
||||
}
|
||||
|
||||
// StreamMetadata describes the live stream state used for watch telemetry.
|
||||
type StreamMetadata struct {
|
||||
BroadcastID string
|
||||
Title string
|
||||
Game *Game
|
||||
ViewerCount int
|
||||
Tags []Tag
|
||||
ChannelLogin string
|
||||
}
|
||||
|
||||
// Tag is one stream tag entry returned by Twitch.
|
||||
type Tag struct {
|
||||
ID string
|
||||
LocalizedName string
|
||||
BroadcastID string
|
||||
Game *Game
|
||||
}
|
||||
|
||||
// MinuteWatchedPayload is the Spade telemetry body Twitch accepts for simulated viewing.
|
||||
@@ -317,20 +306,13 @@ func (s *Service) StreamMetadata(ctx context.Context, login string) (*StreamMeta
|
||||
var data struct {
|
||||
User *struct {
|
||||
BroadcastSettings *struct {
|
||||
Title string `json:"title"`
|
||||
Game *struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
DisplayName string `json:"displayName"`
|
||||
Game *struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
} `json:"game"`
|
||||
} `json:"broadcastSettings"`
|
||||
Stream *struct {
|
||||
ID string `json:"id"`
|
||||
ViewersCount int `json:"viewersCount"`
|
||||
Tags []struct {
|
||||
ID string `json:"id"`
|
||||
LocalizedName string `json:"localizedName"`
|
||||
} `json:"tags"`
|
||||
ID string `json:"id"`
|
||||
} `json:"stream"`
|
||||
} `json:"user"`
|
||||
}
|
||||
@@ -344,25 +326,13 @@ func (s *Service) StreamMetadata(ctx context.Context, login string) (*StreamMeta
|
||||
return nil, fmt.Errorf("stream metadata missing broadcast settings for %s", login)
|
||||
}
|
||||
|
||||
metadata := &StreamMetadata{
|
||||
BroadcastID: data.User.Stream.ID,
|
||||
Title: strings.TrimSpace(data.User.BroadcastSettings.Title),
|
||||
ViewerCount: data.User.Stream.ViewersCount,
|
||||
ChannelLogin: login,
|
||||
}
|
||||
metadata := &StreamMetadata{BroadcastID: data.User.Stream.ID}
|
||||
if game := data.User.BroadcastSettings.Game; game != nil {
|
||||
metadata.Game = &Game{
|
||||
ID: game.ID,
|
||||
Name: game.Name,
|
||||
DisplayName: game.DisplayName,
|
||||
ID: game.ID,
|
||||
Name: game.Name,
|
||||
}
|
||||
}
|
||||
for _, tag := range data.User.Stream.Tags {
|
||||
metadata.Tags = append(metadata.Tags, Tag{
|
||||
ID: tag.ID,
|
||||
LocalizedName: tag.LocalizedName,
|
||||
})
|
||||
}
|
||||
if metadata.BroadcastID == "" {
|
||||
return nil, fmt.Errorf("stream metadata missing broadcast id for %s", login)
|
||||
}
|
||||
@@ -423,7 +393,7 @@ func (s *Service) TouchPlayback(ctx context.Context, login string, token *Playba
|
||||
if token == nil || token.Signature == "" || token.Value == "" {
|
||||
return errors.New("playback access token is incomplete")
|
||||
}
|
||||
masterURL := gql.HLSMasterPlaylistURL(login, token.Signature, token.Value)
|
||||
masterURL := "https://usher.ttvnw.net/api/channel/hls/" + login + ".m3u8?player=twitchweb&allow_source=true&type=any&p=1&sig=" + token.Signature + "&token=" + token.Value
|
||||
variantURL, err := s.fetchPlaylistTarget(ctx, masterURL)
|
||||
if err != nil {
|
||||
return fmt.Errorf("fetch master playlist: %w", err)
|
||||
|
||||
@@ -214,22 +214,19 @@ func TestStreamMetadata(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
client := &fakeGQL{data: map[string]string{
|
||||
"VideoPlayerStreamInfoOverlayChannel": `{"user":{"broadcastSettings":{"title":" Live title ","game":{"id":"99","name":"game-name","displayName":"Game Name"}},"stream":{"id":"broadcast","viewersCount":77,"tags":[{"id":"1","localizedName":"English"}]}}}`,
|
||||
"VideoPlayerStreamInfoOverlayChannel": `{"user":{"broadcastSettings":{"game":{"id":"99","name":"game-name"}},"stream":{"id":"broadcast"}}}`,
|
||||
}}
|
||||
service := &Service{GQL: client}
|
||||
metadata, err := service.StreamMetadata(context.Background(), "streamer")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if metadata.BroadcastID != "broadcast" || metadata.Title != "Live title" {
|
||||
if metadata.BroadcastID != "broadcast" {
|
||||
t.Fatalf("metadata = %#v", metadata)
|
||||
}
|
||||
if metadata.Game == nil || metadata.Game.Name != "game-name" {
|
||||
t.Fatalf("game = %#v", metadata.Game)
|
||||
}
|
||||
if len(metadata.Tags) != 1 || metadata.Tags[0].LocalizedName != "English" {
|
||||
t.Fatalf("tags = %#v", metadata.Tags)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFetchSpadeURL(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user