package main import ( "log" "scm.dairydemon.net/filifa/mlblive/internal/statsapi" ) type Team struct { Location string Name string } type Game struct { GamePk string HomeTeam Team AwayTeam Team HomeScore uint AwayScore uint Plays []statsapi.Play } func feedUpdate(gamePk string, ts *string) (statsapi.Play, error) { feed, err := statsapi.Feed(gamePk) if err != nil { return statsapi.Play{}, err } *ts = feed.MetaData.TimeStamp return feed.LiveData.Plays.CurrentPlay, nil } func patchUpdate(patches statsapi.DiffPatchResponse, ts *string) []statsapi.Play { var plays []statsapi.Play var err error for _, patch := range patches { var play statsapi.Play play.Patch(patch) plays = append(plays, play) *ts, err = patch.Timestamp() if err != nil { continue } } return plays } func (g *Game) Update(ts *string, updateId string) error { var plays []statsapi.Play patches, err := statsapi.DiffPatch(g.GamePk, *ts, updateId) if err != nil { log.Println("feed update") var p statsapi.Play p, err = feedUpdate(g.GamePk, ts) if err != nil { return err } plays = []statsapi.Play{p} } else { log.Println("patch update") plays = patchUpdate(patches, ts) } for _, play := range plays { i := play.AtBatIndex if i >= len(g.Plays) { g.Plays = append(g.Plays, play) } } return nil } func InitGame(feed statsapi.FeedResponse) (*Game, error) { hometeam := Team{ Location: feed.GameData.Teams.Home.LocationName, Name: feed.GameData.Teams.Home.TeamName, } awayteam := Team{ Location: feed.GameData.Teams.Away.LocationName, Name: feed.GameData.Teams.Away.TeamName, } homescore, err := feed.LiveData.Linescore.Teams.Home.Runs.Int64() if err != nil { return nil, err } awayscore, err := feed.LiveData.Linescore.Teams.Away.Runs.Int64() if err != nil { return nil, err } game := Game{ GamePk: feed.GamePk, HomeTeam: hometeam, AwayTeam: awayteam, HomeScore: uint(homescore), AwayScore: uint(awayscore), Plays: feed.LiveData.Plays.AllPlays, } return &game, nil }