From f494200e7483b8a88943debe5ed06b955bfbfe26 Mon Sep 17 00:00:00 2001 From: tfreder1ck Date: Fri, 13 Dec 2024 18:08:11 -0500 Subject: [PATCH 1/5] Initial Sorting Logic --- slides/boxing.go | 2 +- slides/brazil_campeonato_soccer.go | 2 +- slides/copa_america_soccer.go | 2 +- slides/epl_soccer.go | 2 +- slides/ipl_cricket.go | 2 +- slides/la_liga_soccer.go | 6 ++++-- slides/mens_french_open_tennis.go | 2 +- slides/mens_wimbledon_tennis.go | 2 +- slides/mlb_baseball.go | 2 +- slides/mls_soccer.go | 2 +- slides/mma.go | 2 +- slides/nba_basketball.go | 2 +- slides/ncaa_baseball.go | 2 +- slides/ncaa_basketball.go | 2 +- slides/ncaa_football.go | 2 +- slides/nfl_football.go | 2 +- slides/nhl_hockey.go | 2 +- slides/nrl_rugby.go | 2 +- slides/team_formatter.go | 21 +++++++++++++++++++ slides/team_table.go | 31 ++++++++++++++++++++++++++--- slides/uefa_championship_soccer.go | 2 +- slides/uefa_soccer.go | 2 +- slides/womens_french_open_tennis.go | 2 +- slides/womens_wimbledon_tennis.go | 2 +- 24 files changed, 74 insertions(+), 26 deletions(-) diff --git a/slides/boxing.go b/slides/boxing.go index ef80a4d..349cac0 100644 --- a/slides/boxing.go +++ b/slides/boxing.go @@ -16,7 +16,7 @@ import ( // Boxing creates a slide for boxing odds. func Boxing(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread|Money|Total\n") + builder.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread|Money –|Total\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/brazil_campeonato_soccer.go b/slides/brazil_campeonato_soccer.go index a5dc5ba..c4e1f85 100644 --- a/slides/brazil_campeonato_soccer.go +++ b/slides/brazil_campeonato_soccer.go @@ -14,7 +14,7 @@ import ( func BrazilCampeonato(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/copa_america_soccer.go b/slides/copa_america_soccer.go index 3302046..d1e7c56 100644 --- a/slides/copa_america_soccer.go +++ b/slides/copa_america_soccer.go @@ -14,7 +14,7 @@ import ( func CopaAmericaSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/epl_soccer.go b/slides/epl_soccer.go index f33bace..9cb34d3 100644 --- a/slides/epl_soccer.go +++ b/slides/epl_soccer.go @@ -14,7 +14,7 @@ import ( func EPLSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/ipl_cricket.go b/slides/ipl_cricket.go index 76307d1..1205c4c 100644 --- a/slides/ipl_cricket.go +++ b/slides/ipl_cricket.go @@ -15,7 +15,7 @@ import ( // IPLCricket creates a slide for IPL cricket odds. func IPLCricket(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/la_liga_soccer.go b/slides/la_liga_soccer.go index 0b9af1f..57fcf84 100644 --- a/slides/la_liga_soccer.go +++ b/slides/la_liga_soccer.go @@ -15,9 +15,11 @@ import ( // LaLigaSoccer creates a slide for La Liga soccer odds. func LaLigaSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") - for _, game := range games { + eventsSorted := sortEvents(games, "money", "desc") + + for _, game := range eventsSorted { builder.WriteString(FormatTeamEvent(game)) } diff --git a/slides/mens_french_open_tennis.go b/slides/mens_french_open_tennis.go index 8ceedd7..98cf49f 100644 --- a/slides/mens_french_open_tennis.go +++ b/slides/mens_french_open_tennis.go @@ -15,7 +15,7 @@ import ( // FrenchOpenTennis creates a slide for tennis odds. func MensFrenchOpenTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Players|Bookmaker|Spread|Money|Total\n") + builder.WriteString("Commencement Date|Location|Players|Bookmaker|Spread|Money –|Total\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/mens_wimbledon_tennis.go b/slides/mens_wimbledon_tennis.go index 9a1691d..1b78b07 100644 --- a/slides/mens_wimbledon_tennis.go +++ b/slides/mens_wimbledon_tennis.go @@ -14,7 +14,7 @@ import ( func MensWimbledonTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/mlb_baseball.go b/slides/mlb_baseball.go index 1d8bd7a..ada07ea 100644 --- a/slides/mlb_baseball.go +++ b/slides/mlb_baseball.go @@ -15,7 +15,7 @@ import ( // MLBBaseball creates a slide for baseball odds. func MLBBaseball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/mls_soccer.go b/slides/mls_soccer.go index 1f99e9d..29636b1 100644 --- a/slides/mls_soccer.go +++ b/slides/mls_soccer.go @@ -15,7 +15,7 @@ import ( // MLSSoccer creates a slide for soccer odds. func MLSSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/mma.go b/slides/mma.go index d244643..5916374 100644 --- a/slides/mma.go +++ b/slides/mma.go @@ -15,7 +15,7 @@ import ( // Mma creates a slide for MMA odds. func Mma(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/nba_basketball.go b/slides/nba_basketball.go index 53f9845..fee6a6a 100644 --- a/slides/nba_basketball.go +++ b/slides/nba_basketball.go @@ -15,7 +15,7 @@ import ( // NBABasketball creates a slide for basketball odds. func NBABasketball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/ncaa_baseball.go b/slides/ncaa_baseball.go index 5c4756c..bee5274 100644 --- a/slides/ncaa_baseball.go +++ b/slides/ncaa_baseball.go @@ -15,7 +15,7 @@ import ( // NcaaBaseball creates a slide for baseball odds. func NCAABaseball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/ncaa_basketball.go b/slides/ncaa_basketball.go index eb92d67..07b9e5d 100644 --- a/slides/ncaa_basketball.go +++ b/slides/ncaa_basketball.go @@ -15,7 +15,7 @@ import ( // NcaaBasketball creates a slide for basketball odds. func NCAABasketball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/ncaa_football.go b/slides/ncaa_football.go index ffd9f86..d3ede28 100644 --- a/slides/ncaa_football.go +++ b/slides/ncaa_football.go @@ -14,7 +14,7 @@ import ( func NCAAFootball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/nfl_football.go b/slides/nfl_football.go index 2d1baed..e16eb4f 100644 --- a/slides/nfl_football.go +++ b/slides/nfl_football.go @@ -15,7 +15,7 @@ import ( // FootballSlide creates a slide for football odds. func NFLfootball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/nhl_hockey.go b/slides/nhl_hockey.go index ea9f93b..463b23b 100644 --- a/slides/nhl_hockey.go +++ b/slides/nhl_hockey.go @@ -14,7 +14,7 @@ import ( func NHLHockey(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/nrl_rugby.go b/slides/nrl_rugby.go index aed643e..03ed86a 100644 --- a/slides/nrl_rugby.go +++ b/slides/nrl_rugby.go @@ -14,7 +14,7 @@ import ( func NRLRugby(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/team_formatter.go b/slides/team_formatter.go index 5005332..b7f58ab 100644 --- a/slides/team_formatter.go +++ b/slides/team_formatter.go @@ -6,6 +6,8 @@ package slides import ( "fmt" + "math" + "sort" "strings" "time" @@ -169,3 +171,22 @@ func getColors(sport string, homeTeam string, awayTeam string) (models.TeamColor } return homeColors, awayColors } + +func sortEvents(events []models.Event, field string, orderBy string) []models.Event { + sort.Slice(events, func(i, j int) bool { + teamOddsI := ExtractTeamOdds(events[i]) + teamOddsJ := ExtractTeamOdds(events[j]) + comparison := false + switch field { + case "money": + switch orderBy { + case "asc": + comparison = math.Abs((teamOddsI.HomeOdds.Moneyline.Price - teamOddsI.AwayOdds.Moneyline.Price)) < math.Abs((teamOddsJ.HomeOdds.Moneyline.Price - teamOddsJ.AwayOdds.Moneyline.Price)) + case "desc": + comparison = math.Abs((teamOddsI.HomeOdds.Moneyline.Price - teamOddsI.AwayOdds.Moneyline.Price)) > math.Abs((teamOddsJ.HomeOdds.Moneyline.Price - teamOddsJ.AwayOdds.Moneyline.Price)) + } + } + return comparison + }) + return events +} diff --git a/slides/team_table.go b/slides/team_table.go index bb7e593..ac0ed99 100644 --- a/slides/team_table.go +++ b/slides/team_table.go @@ -48,6 +48,10 @@ func CreateH2HTable(sportName string, tableData string) *tview.Table { align := tview.AlignCenter selectable := true + if row%3 == 0 { // Make every third row unselectable + selectable = false + } + if row == 0 { bgColor = tcell.NewRGBColor(57, 255, 20) textColor = tcell.ColorBlack @@ -58,9 +62,6 @@ func CreateH2HTable(sportName string, tableData string) *tview.Table { if column == 0 && row == 0 { bgColor = tcell.NewRGBColor(0, 255, 255) } - if row%3 == 0 { // Make every third row unselectable - selectable = false - } tableCell := tview.NewTableCell(cellText). SetTextColor(textColor). @@ -71,6 +72,30 @@ func CreateH2HTable(sportName string, tableData string) *tview.Table { SetSelectedStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). Background(tcell.NewRGBColor(0, 255, 255))) + if cellText == "Money –" { + tableCell. + SetClickedFunc(func() bool { + cellSelected := table.GetCell(row, column) + if cellSelected.Text == "Money –" { + cellSelected. + SetText("Money ▲"). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(255, 0, 0))) + } else if cellSelected.Text == "Money ▲" { + cellSelected. + SetText("Money ▼"). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(0, 255, 0))) + } else { + cellSelected. + SetText("Money –"). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(0, 255, 255))) + } + return true + }) + } + table.SetCell(row, column, tableCell) } } diff --git a/slides/uefa_championship_soccer.go b/slides/uefa_championship_soccer.go index 6ae0b4c..2054914 100644 --- a/slides/uefa_championship_soccer.go +++ b/slides/uefa_championship_soccer.go @@ -14,7 +14,7 @@ import ( func UEFAChampionshipSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/uefa_soccer.go b/slides/uefa_soccer.go index 5a3e207..5f37eca 100644 --- a/slides/uefa_soccer.go +++ b/slides/uefa_soccer.go @@ -14,7 +14,7 @@ import ( func UEFASoccerLeague(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/womens_french_open_tennis.go b/slides/womens_french_open_tennis.go index 618de1d..fbf0de2 100644 --- a/slides/womens_french_open_tennis.go +++ b/slides/womens_french_open_tennis.go @@ -15,7 +15,7 @@ import ( // WomensFrenchOpenTennis creates a slide for tennis odds. func WomensFrenchOpenTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Players|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Players|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/womens_wimbledon_tennis.go b/slides/womens_wimbledon_tennis.go index c4533a5..41d3cd1 100644 --- a/slides/womens_wimbledon_tennis.go +++ b/slides/womens_wimbledon_tennis.go @@ -14,7 +14,7 @@ import ( func WomensWimbledonTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } From 3725d5338c42930568f3898483bb079fa03c41cf Mon Sep 17 00:00:00 2001 From: tfreder1ck Date: Fri, 13 Dec 2024 22:13:18 -0500 Subject: [PATCH 2/5] Additional fields / store beginning --- models/store.go | 27 +++++++++++++++ slides/boxing.go | 2 +- slides/brazil_campeonato_soccer.go | 2 +- slides/copa_america_soccer.go | 2 +- slides/epl_soccer.go | 2 +- slides/ipl_cricket.go | 2 +- slides/la_liga_soccer.go | 7 ++-- slides/mens_french_open_tennis.go | 2 +- slides/mens_wimbledon_tennis.go | 2 +- slides/mlb_baseball.go | 2 +- slides/mls_soccer.go | 2 +- slides/mma.go | 2 +- slides/nba_basketball.go | 2 +- slides/ncaa_baseball.go | 2 +- slides/ncaa_basketball.go | 2 +- slides/ncaa_football.go | 2 +- slides/nfl_football.go | 2 +- slides/nhl_hockey.go | 2 +- slides/nrl_rugby.go | 2 +- slides/team_formatter.go | 14 ++++++++ slides/team_table.go | 54 +++++++++++++++++++++++++++-- slides/uefa_championship_soccer.go | 2 +- slides/uefa_soccer.go | 2 +- slides/womens_french_open_tennis.go | 2 +- slides/womens_wimbledon_tennis.go | 2 +- ui/ui.go | 2 ++ 26 files changed, 119 insertions(+), 27 deletions(-) create mode 100644 models/store.go diff --git a/models/store.go b/models/store.go new file mode 100644 index 0000000..f10f1a4 --- /dev/null +++ b/models/store.go @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2024 dos-2 + * All rights reserved. + */ +package models + +var loadedEvents = make(map[string][]Event) + +func AddLoadedEvent(key string, value []Event) { + tempMap := loadedEvents + tempMap[key] = value + loadedEvents = tempMap +} + +func GetLoadedEvents(key string) []Event { + return loadedEvents[key] +} + +var currentPage = "" + +func SetCurrentPage(page string) { + currentPage = page +} + +func GetCurrentPage() string { + return currentPage +} diff --git a/slides/boxing.go b/slides/boxing.go index 349cac0..f2eb03a 100644 --- a/slides/boxing.go +++ b/slides/boxing.go @@ -16,7 +16,7 @@ import ( // Boxing creates a slide for boxing odds. func Boxing(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread|Money –|Total\n") + builder.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/brazil_campeonato_soccer.go b/slides/brazil_campeonato_soccer.go index c4e1f85..f1011a0 100644 --- a/slides/brazil_campeonato_soccer.go +++ b/slides/brazil_campeonato_soccer.go @@ -14,7 +14,7 @@ import ( func BrazilCampeonato(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/copa_america_soccer.go b/slides/copa_america_soccer.go index d1e7c56..aa8e498 100644 --- a/slides/copa_america_soccer.go +++ b/slides/copa_america_soccer.go @@ -14,7 +14,7 @@ import ( func CopaAmericaSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/epl_soccer.go b/slides/epl_soccer.go index 9cb34d3..22d36f0 100644 --- a/slides/epl_soccer.go +++ b/slides/epl_soccer.go @@ -14,7 +14,7 @@ import ( func EPLSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/ipl_cricket.go b/slides/ipl_cricket.go index 1205c4c..9359bb0 100644 --- a/slides/ipl_cricket.go +++ b/slides/ipl_cricket.go @@ -15,7 +15,7 @@ import ( // IPLCricket creates a slide for IPL cricket odds. func IPLCricket(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/la_liga_soccer.go b/slides/la_liga_soccer.go index 57fcf84..0640b38 100644 --- a/slides/la_liga_soccer.go +++ b/slides/la_liga_soccer.go @@ -15,11 +15,10 @@ import ( // LaLigaSoccer creates a slide for La Liga soccer odds. func LaLigaSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + models.AddLoadedEvent("La Liga", games) - eventsSorted := sortEvents(games, "money", "desc") - - for _, game := range eventsSorted { + for _, game := range games { builder.WriteString(FormatTeamEvent(game)) } diff --git a/slides/mens_french_open_tennis.go b/slides/mens_french_open_tennis.go index 98cf49f..a59880d 100644 --- a/slides/mens_french_open_tennis.go +++ b/slides/mens_french_open_tennis.go @@ -15,7 +15,7 @@ import ( // FrenchOpenTennis creates a slide for tennis odds. func MensFrenchOpenTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Players|Bookmaker|Spread|Money –|Total\n") + builder.WriteString("Commencement Date|Location|Players|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/mens_wimbledon_tennis.go b/slides/mens_wimbledon_tennis.go index 1b78b07..bc36292 100644 --- a/slides/mens_wimbledon_tennis.go +++ b/slides/mens_wimbledon_tennis.go @@ -14,7 +14,7 @@ import ( func MensWimbledonTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/mlb_baseball.go b/slides/mlb_baseball.go index ada07ea..52c155c 100644 --- a/slides/mlb_baseball.go +++ b/slides/mlb_baseball.go @@ -15,7 +15,7 @@ import ( // MLBBaseball creates a slide for baseball odds. func MLBBaseball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/mls_soccer.go b/slides/mls_soccer.go index 29636b1..05ac275 100644 --- a/slides/mls_soccer.go +++ b/slides/mls_soccer.go @@ -15,7 +15,7 @@ import ( // MLSSoccer creates a slide for soccer odds. func MLSSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/mma.go b/slides/mma.go index 5916374..0183121 100644 --- a/slides/mma.go +++ b/slides/mma.go @@ -15,7 +15,7 @@ import ( // Mma creates a slide for MMA odds. func Mma(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/nba_basketball.go b/slides/nba_basketball.go index fee6a6a..46cb9d4 100644 --- a/slides/nba_basketball.go +++ b/slides/nba_basketball.go @@ -15,7 +15,7 @@ import ( // NBABasketball creates a slide for basketball odds. func NBABasketball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/ncaa_baseball.go b/slides/ncaa_baseball.go index bee5274..1352319 100644 --- a/slides/ncaa_baseball.go +++ b/slides/ncaa_baseball.go @@ -15,7 +15,7 @@ import ( // NcaaBaseball creates a slide for baseball odds. func NCAABaseball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/ncaa_basketball.go b/slides/ncaa_basketball.go index 07b9e5d..7d7a431 100644 --- a/slides/ncaa_basketball.go +++ b/slides/ncaa_basketball.go @@ -15,7 +15,7 @@ import ( // NcaaBasketball creates a slide for basketball odds. func NCAABasketball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) diff --git a/slides/ncaa_football.go b/slides/ncaa_football.go index d3ede28..67ce36a 100644 --- a/slides/ncaa_football.go +++ b/slides/ncaa_football.go @@ -14,7 +14,7 @@ import ( func NCAAFootball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/nfl_football.go b/slides/nfl_football.go index e16eb4f..4682ec6 100644 --- a/slides/nfl_football.go +++ b/slides/nfl_football.go @@ -15,7 +15,7 @@ import ( // FootballSlide creates a slide for football odds. func NFLfootball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/nhl_hockey.go b/slides/nhl_hockey.go index 463b23b..e8cf2a3 100644 --- a/slides/nhl_hockey.go +++ b/slides/nhl_hockey.go @@ -14,7 +14,7 @@ import ( func NHLHockey(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/nrl_rugby.go b/slides/nrl_rugby.go index 03ed86a..ab07e18 100644 --- a/slides/nrl_rugby.go +++ b/slides/nrl_rugby.go @@ -14,7 +14,7 @@ import ( func NRLRugby(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/team_formatter.go b/slides/team_formatter.go index b7f58ab..adbb35e 100644 --- a/slides/team_formatter.go +++ b/slides/team_formatter.go @@ -185,6 +185,20 @@ func sortEvents(events []models.Event, field string, orderBy string) []models.Ev case "desc": comparison = math.Abs((teamOddsI.HomeOdds.Moneyline.Price - teamOddsI.AwayOdds.Moneyline.Price)) > math.Abs((teamOddsJ.HomeOdds.Moneyline.Price - teamOddsJ.AwayOdds.Moneyline.Price)) } + case "spread": + switch orderBy { + case "asc": + comparison = math.Abs((teamOddsI.HomeOdds.Spread.Price - teamOddsI.AwayOdds.Spread.Price)) < math.Abs((teamOddsJ.HomeOdds.Spread.Price - teamOddsJ.AwayOdds.Spread.Price)) + case "desc": + comparison = math.Abs((teamOddsI.HomeOdds.Spread.Price - teamOddsI.AwayOdds.Spread.Price)) > math.Abs((teamOddsJ.HomeOdds.Spread.Price - teamOddsJ.AwayOdds.Spread.Price)) + } + case "total": + switch orderBy { + case "asc": + comparison = math.Abs((teamOddsI.HomeOdds.Totals.OverPrice - teamOddsI.AwayOdds.Totals.UnderPrice)) < math.Abs((teamOddsJ.HomeOdds.Totals.OverPrice - teamOddsJ.AwayOdds.Totals.UnderPrice)) + case "desc": + comparison = math.Abs((teamOddsI.HomeOdds.Totals.OverPrice - teamOddsI.AwayOdds.Totals.UnderPrice)) > math.Abs((teamOddsJ.HomeOdds.Totals.OverPrice - teamOddsJ.AwayOdds.Totals.UnderPrice)) + } } return comparison }) diff --git a/slides/team_table.go b/slides/team_table.go index ac0ed99..26cf19b 100644 --- a/slides/team_table.go +++ b/slides/team_table.go @@ -90,10 +90,60 @@ func CreateH2HTable(sportName string, tableData string) *tview.Table { cellSelected. SetText("Money –"). SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(0, 255, 255))) + Background(tcell.NewRGBColor(255, 255, 0))) } return true - }) + }). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(255, 255, 0))) + } else if cellText == "Spread –" { + tableCell. + SetClickedFunc(func() bool { + cellSelected := table.GetCell(row, column) + if cellSelected.Text == "Spread –" { + cellSelected. + SetText("Spread ▲"). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(255, 0, 0))) + } else if cellSelected.Text == "Spread ▲" { + cellSelected. + SetText("Spread ▼"). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(0, 255, 0))) + } else { + cellSelected. + SetText("Spread –"). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(255, 255, 0))) + } + return true + }). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(255, 255, 0))) + } else if cellText == "Total –" { + tableCell. + SetClickedFunc(func() bool { + cellSelected := table.GetCell(row, column) + if cellSelected.Text == "Total –" { + cellSelected. + SetText("Total ▲"). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(255, 0, 0))) + } else if cellSelected.Text == "Total ▲" { + cellSelected. + SetText("Total ▼"). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(0, 255, 0))) + } else { + cellSelected. + SetText("Total –"). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(255, 255, 0))) + } + return true + }). + SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). + Background(tcell.NewRGBColor(255, 255, 0))) } table.SetCell(row, column, tableCell) diff --git a/slides/uefa_championship_soccer.go b/slides/uefa_championship_soccer.go index 2054914..39201a2 100644 --- a/slides/uefa_championship_soccer.go +++ b/slides/uefa_championship_soccer.go @@ -14,7 +14,7 @@ import ( func UEFAChampionshipSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/uefa_soccer.go b/slides/uefa_soccer.go index 5f37eca..990f84d 100644 --- a/slides/uefa_soccer.go +++ b/slides/uefa_soccer.go @@ -14,7 +14,7 @@ import ( func UEFASoccerLeague(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/womens_french_open_tennis.go b/slides/womens_french_open_tennis.go index fbf0de2..a93bb29 100644 --- a/slides/womens_french_open_tennis.go +++ b/slides/womens_french_open_tennis.go @@ -15,7 +15,7 @@ import ( // WomensFrenchOpenTennis creates a slide for tennis odds. func WomensFrenchOpenTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Players|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Players|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/slides/womens_wimbledon_tennis.go b/slides/womens_wimbledon_tennis.go index 41d3cd1..3da5460 100644 --- a/slides/womens_wimbledon_tennis.go +++ b/slides/womens_wimbledon_tennis.go @@ -14,7 +14,7 @@ import ( func WomensWimbledonTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread|Money –|Total\n") + tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } diff --git a/ui/ui.go b/ui/ui.go index 703c4a7..ccc6142 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -75,11 +75,13 @@ func createNavigationFunctions(info *tview.TextView, slides []slides.Slide) (fun slide, _ := strconv.Atoi(info.GetHighlights()[0]) slide = (slide - 1 + len(slides)) % len(slides) info.Highlight(strconv.Itoa(slide)).ScrollToHighlight() + models.SetCurrentPage(slides[slide].Name) } nextSlide := func() { slide, _ := strconv.Atoi(info.GetHighlights()[0]) slide = (slide + 1) % len(slides) info.Highlight(strconv.Itoa(slide)).ScrollToHighlight() + models.SetCurrentPage(slides[slide].Name) } return previousSlide, nextSlide } From 924ab13e498d675388db57054dadeb72018d8e12 Mon Sep 17 00:00:00 2001 From: tfreder1ck Date: Sun, 15 Dec 2024 17:12:09 -0500 Subject: [PATCH 3/5] Update function signatures, add debugging --- .gitignore | 3 ++ main.go | 11 +++++++ models/store.go | 10 ++++++ slides/boxing.go | 2 +- slides/brazil_campeonato_soccer.go | 2 +- slides/copa_america_soccer.go | 2 +- slides/cover.go | 7 ++--- slides/epl_soccer.go | 2 +- slides/ipl_cricket.go | 2 +- slides/la_liga_soccer.go | 5 +-- slides/masters_golf.go | 2 +- slides/mens_french_open_tennis.go | 2 +- slides/mens_wimbledon_tennis.go | 2 +- slides/mlb_baseball.go | 2 +- slides/mls_soccer.go | 2 +- slides/mma.go | 2 +- slides/nba_basketball.go | 2 +- slides/ncaa_baseball.go | 2 +- slides/ncaa_basketball.go | 2 +- slides/ncaa_football.go | 2 +- slides/nfl_football.go | 2 +- slides/nhl_hockey.go | 2 +- slides/nrl_rugby.go | 2 +- slides/pga_golf.go | 2 +- slides/slides.go | 2 +- slides/team_table.go | 4 +++ slides/uefa_championship_soccer.go | 2 +- slides/uefa_soccer.go | 2 +- slides/womens_french_open_tennis.go | 2 +- slides/womens_wimbledon_tennis.go | 2 +- ui/ui.go | 49 +++++++++++++++++++++++++---- 31 files changed, 100 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index c454249..a5fd170 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,6 @@ go.work .env *.DS_Store + +#logs +output.txt \ No newline at end of file diff --git a/main.go b/main.go index 96ef1f8..756d610 100644 --- a/main.go +++ b/main.go @@ -6,12 +6,23 @@ package main import ( "log" + "os" + "github.com/dos-2/oddshub/models" "github.com/dos-2/oddshub/ui" ) func main() { + if len(os.Args) > 1 { + for _, arg := range os.Args[1:] { + switch arg { + case "debug": + models.SetDebug(true) + } + } + } + if err := ui.RunApp(); err != nil { log.Fatalf("Failed to run application: %v", err) } diff --git a/models/store.go b/models/store.go index f10f1a4..36b6f44 100644 --- a/models/store.go +++ b/models/store.go @@ -25,3 +25,13 @@ func SetCurrentPage(page string) { func GetCurrentPage() string { return currentPage } + +var debug = false + +func SetDebug(option bool) { + debug = option +} + +func GetDebug() bool { + return debug +} diff --git a/slides/boxing.go b/slides/boxing.go index f2eb03a..62a05c8 100644 --- a/slides/boxing.go +++ b/slides/boxing.go @@ -14,7 +14,7 @@ import ( ) // Boxing creates a slide for boxing odds. -func Boxing(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func Boxing(games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder builder.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/brazil_campeonato_soccer.go b/slides/brazil_campeonato_soccer.go index f1011a0..a06469a 100644 --- a/slides/brazil_campeonato_soccer.go +++ b/slides/brazil_campeonato_soccer.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func BrazilCampeonato(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func BrazilCampeonato(games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/copa_america_soccer.go b/slides/copa_america_soccer.go index aa8e498..b85e82e 100644 --- a/slides/copa_america_soccer.go +++ b/slides/copa_america_soccer.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func CopaAmericaSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func CopaAmericaSoccer(games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/cover.go b/slides/cover.go index 454a88a..659a6b4 100644 --- a/slides/cover.go +++ b/slides/cover.go @@ -33,7 +33,7 @@ const ( ) // Cover returns the cover page. -func Cover(games []models.Event, nextSlide func()) (title string, header string, content tview.Primitive) { +func Cover(games []models.Event) (title string, header string, content tview.Primitive) { // What's the size of the logo? lines := strings.Split(logo, "\n") logoWidth := 0 @@ -44,10 +44,7 @@ func Cover(games []models.Event, nextSlide func()) (title string, header string, } } logoBox := tview.NewTextView(). - SetTextColor(tcell.NewRGBColor(57, 255, 20)). - SetDoneFunc(func(key tcell.Key) { - nextSlide() - }) + SetTextColor(tcell.NewRGBColor(57, 255, 20)) fmt.Fprint(logoBox, logo) // Create a frame for the subtitle and navigation infos. diff --git a/slides/epl_soccer.go b/slides/epl_soccer.go index 22d36f0..8da4aaf 100644 --- a/slides/epl_soccer.go +++ b/slides/epl_soccer.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func EPLSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func EPLSoccer(games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/ipl_cricket.go b/slides/ipl_cricket.go index 9359bb0..81ec64b 100644 --- a/slides/ipl_cricket.go +++ b/slides/ipl_cricket.go @@ -13,7 +13,7 @@ import ( ) // IPLCricket creates a slide for IPL cricket odds. -func IPLCricket(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func IPLCricket(games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/la_liga_soccer.go b/slides/la_liga_soccer.go index 0640b38..b78a119 100644 --- a/slides/la_liga_soccer.go +++ b/slides/la_liga_soccer.go @@ -8,15 +8,16 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // LaLigaSoccer creates a slide for La Liga soccer odds. -func LaLigaSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func LaLigaSoccer(games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") - models.AddLoadedEvent("La Liga", games) + models.AddLoadedEvent(string(sports.Soccer_spain_la_liga), games) for _, game := range games { builder.WriteString(FormatTeamEvent(game)) diff --git a/slides/masters_golf.go b/slides/masters_golf.go index 861fdd1..272efbb 100644 --- a/slides/masters_golf.go +++ b/slides/masters_golf.go @@ -13,7 +13,7 @@ import ( ) // MastersGolf creates a slide for golf odds. -func MastersGolf(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func MastersGolf(games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder builder.WriteString("Commencement Date|Teams|Players|Bookmaker|Outrights||\n") diff --git a/slides/mens_french_open_tennis.go b/slides/mens_french_open_tennis.go index a59880d..658121f 100644 --- a/slides/mens_french_open_tennis.go +++ b/slides/mens_french_open_tennis.go @@ -13,7 +13,7 @@ import ( ) // FrenchOpenTennis creates a slide for tennis odds. -func MensFrenchOpenTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func MensFrenchOpenTennis(games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder builder.WriteString("Commencement Date|Location|Players|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/mens_wimbledon_tennis.go b/slides/mens_wimbledon_tennis.go index bc36292..0b85276 100644 --- a/slides/mens_wimbledon_tennis.go +++ b/slides/mens_wimbledon_tennis.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func MensWimbledonTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func MensWimbledonTennis(games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/mlb_baseball.go b/slides/mlb_baseball.go index 52c155c..c6f9c50 100644 --- a/slides/mlb_baseball.go +++ b/slides/mlb_baseball.go @@ -13,7 +13,7 @@ import ( ) // MLBBaseball creates a slide for baseball odds. -func MLBBaseball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func MLBBaseball(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/mls_soccer.go b/slides/mls_soccer.go index 05ac275..ed9c9c6 100644 --- a/slides/mls_soccer.go +++ b/slides/mls_soccer.go @@ -13,7 +13,7 @@ import ( ) // MLSSoccer creates a slide for soccer odds. -func MLSSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func MLSSoccer(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/mma.go b/slides/mma.go index 0183121..0cdeeda 100644 --- a/slides/mma.go +++ b/slides/mma.go @@ -13,7 +13,7 @@ import ( ) // Mma creates a slide for MMA odds. -func Mma(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func Mma(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/nba_basketball.go b/slides/nba_basketball.go index 46cb9d4..fb4e806 100644 --- a/slides/nba_basketball.go +++ b/slides/nba_basketball.go @@ -13,7 +13,7 @@ import ( ) // NBABasketball creates a slide for basketball odds. -func NBABasketball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func NBABasketball(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/ncaa_baseball.go b/slides/ncaa_baseball.go index 1352319..e365fbf 100644 --- a/slides/ncaa_baseball.go +++ b/slides/ncaa_baseball.go @@ -13,7 +13,7 @@ import ( ) // NcaaBaseball creates a slide for baseball odds. -func NCAABaseball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func NCAABaseball(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/ncaa_basketball.go b/slides/ncaa_basketball.go index 7d7a431..dc1756f 100644 --- a/slides/ncaa_basketball.go +++ b/slides/ncaa_basketball.go @@ -13,7 +13,7 @@ import ( ) // NcaaBasketball creates a slide for basketball odds. -func NCAABasketball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func NCAABasketball(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") diff --git a/slides/ncaa_football.go b/slides/ncaa_football.go index 67ce36a..ff5a6eb 100644 --- a/slides/ncaa_football.go +++ b/slides/ncaa_football.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func NCAAFootball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func NCAAFootball(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { diff --git a/slides/nfl_football.go b/slides/nfl_football.go index 4682ec6..30d62a2 100644 --- a/slides/nfl_football.go +++ b/slides/nfl_football.go @@ -13,7 +13,7 @@ import ( ) // FootballSlide creates a slide for football odds. -func NFLfootball(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func NFLfootball(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { diff --git a/slides/nhl_hockey.go b/slides/nhl_hockey.go index e8cf2a3..cdf4f76 100644 --- a/slides/nhl_hockey.go +++ b/slides/nhl_hockey.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func NHLHockey(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func NHLHockey(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { diff --git a/slides/nrl_rugby.go b/slides/nrl_rugby.go index ab07e18..88f3db7 100644 --- a/slides/nrl_rugby.go +++ b/slides/nrl_rugby.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func NRLRugby(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func NRLRugby(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { diff --git a/slides/pga_golf.go b/slides/pga_golf.go index acda801..9c094ee 100644 --- a/slides/pga_golf.go +++ b/slides/pga_golf.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func PGAGolf(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func PGAGolf(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Teams|Players|Bookmaker|Outrights||\n") if len(games) > 0 { diff --git a/slides/slides.go b/slides/slides.go index e546f68..8ec6133 100644 --- a/slides/slides.go +++ b/slides/slides.go @@ -14,7 +14,7 @@ import ( // Slide is a struct representing a slide in the presentation. type Slide struct { Name string // Name of the slide - Content func(games []models.Event, nextSlide func()) (title string, header string, content tview.Primitive) + Content func(games []models.Event) (title string, header string, content tview.Primitive) } // GetSlides returns a slice of slides for the presentation. diff --git a/slides/team_table.go b/slides/team_table.go index 26cf19b..1ca497c 100644 --- a/slides/team_table.go +++ b/slides/team_table.go @@ -5,8 +5,10 @@ package slides import ( + "fmt" "strings" + "github.com/dos-2/oddshub/models" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" ) @@ -76,6 +78,8 @@ func CreateH2HTable(sportName string, tableData string) *tview.Table { tableCell. SetClickedFunc(func() bool { cellSelected := table.GetCell(row, column) + fmt.Println(models.GetCurrentPage()) + fmt.Println(models.GetLoadedEvents("soccer_spain_la_liga")) if cellSelected.Text == "Money –" { cellSelected. SetText("Money ▲"). diff --git a/slides/uefa_championship_soccer.go b/slides/uefa_championship_soccer.go index 39201a2..7e8bb62 100644 --- a/slides/uefa_championship_soccer.go +++ b/slides/uefa_championship_soccer.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func UEFAChampionshipSoccer(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func UEFAChampionshipSoccer(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { diff --git a/slides/uefa_soccer.go b/slides/uefa_soccer.go index 990f84d..b230109 100644 --- a/slides/uefa_soccer.go +++ b/slides/uefa_soccer.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func UEFASoccerLeague(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func UEFASoccerLeague(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { diff --git a/slides/womens_french_open_tennis.go b/slides/womens_french_open_tennis.go index a93bb29..1a62ec0 100644 --- a/slides/womens_french_open_tennis.go +++ b/slides/womens_french_open_tennis.go @@ -13,7 +13,7 @@ import ( ) // WomensFrenchOpenTennis creates a slide for tennis odds. -func WomensFrenchOpenTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func WomensFrenchOpenTennis(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Players|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { diff --git a/slides/womens_wimbledon_tennis.go b/slides/womens_wimbledon_tennis.go index 3da5460..a1d7238 100644 --- a/slides/womens_wimbledon_tennis.go +++ b/slides/womens_wimbledon_tennis.go @@ -12,7 +12,7 @@ import ( "github.com/rivo/tview" ) -func WomensWimbledonTennis(games []models.Event, nextSlide func()) (string, string, tview.Primitive) { +func WomensWimbledonTennis(games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") for _, game := range games { diff --git a/ui/ui.go b/ui/ui.go index ccc6142..aedcda8 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -41,11 +41,11 @@ func RunApp() error { pages := tview.NewPages() // Info text view - info := createInfoTextView(pages) + info := createInfoTextView(pages, presentationSlides) // Create navigation functions previousSlide, nextSlide := createNavigationFunctions(info, presentationSlides) // Create pages for all slides - setupSlides(events, pages, info, presentationSlides, nextSlide) + setupSlides(events, pages, info, presentationSlides) // Create the main layout. layout := tview.NewFlex(). SetDirection(tview.FlexRow). @@ -56,7 +56,7 @@ func RunApp() error { return app.SetRoot(layout, true).EnableMouse(true).EnablePaste(true).Run() } -func createInfoTextView(pages *tview.Pages) *tview.TextView { +func createInfoTextView(pages *tview.Pages, slides []slides.Slide) *tview.TextView { info := tview.NewTextView(). SetDynamicColors(true). SetRegions(true). @@ -65,6 +65,18 @@ func createInfoTextView(pages *tview.Pages) *tview.TextView { if len(added) == 0 { return } + + pageIndex, _ := strconv.Atoi(added[0]) + pageName := slides[pageIndex].Name + + // Log + if models.GetDebug() { + fmt.Println("Jump To Slide") + fmt.Printf(`[%s] %s/%d: %s`, time.Now(), added[0], pages.GetPageCount()-1, pageName) + fmt.Println() + } + + models.SetCurrentPage(pageName) pages.SwitchToPage(added[0]) }) return info @@ -74,26 +86,43 @@ func createNavigationFunctions(info *tview.TextView, slides []slides.Slide) (fun previousSlide := func() { slide, _ := strconv.Atoi(info.GetHighlights()[0]) slide = (slide - 1 + len(slides)) % len(slides) + + // Log + if models.GetDebug() { + fmt.Println("Previous Slide") + fmt.Printf(`[%s] %d/%d: %s`, time.Now(), slide, len(slides), slides[slide].Name) + fmt.Println() + } + info.Highlight(strconv.Itoa(slide)).ScrollToHighlight() models.SetCurrentPage(slides[slide].Name) } nextSlide := func() { slide, _ := strconv.Atoi(info.GetHighlights()[0]) slide = (slide + 1) % len(slides) + + // Log + if models.GetDebug() { + fmt.Println("Next Slide") + fmt.Printf(`[%s] %d/%d: %s`, time.Now(), slide, len(slides), slides[slide].Name) + fmt.Println() + } + info.Highlight(strconv.Itoa(slide)).ScrollToHighlight() models.SetCurrentPage(slides[slide].Name) } return previousSlide, nextSlide } -func setupSlides(events map[string][]models.Event, pages *tview.Pages, info *tview.TextView, slides []slides.Slide, nextSlide func()) { +func setupSlides(events map[string][]models.Event, pages *tview.Pages, info *tview.TextView, slides []slides.Slide) { + fmt.Println("Setup Slides") for index, slide := range slides { eventList, exists := events[slide.Name] if !exists || index == 0 { eventList = []models.Event{} } - title, _, primitive := slide.Content(eventList, nextSlide) + title, _, primitive := slide.Content(eventList) var content tview.Primitive content = tview.NewFlex(). SetDirection(tview.FlexRow). @@ -102,8 +131,16 @@ func setupSlides(events map[string][]models.Event, pages *tview.Pages, info *tvi content = primitive } pages.AddPage(strconv.Itoa(index), content, true, index == 0) - fmt.Fprintf(info, `["%d"][#00FFFF]%s[white][""] `, index, title) + + // Log + if models.GetDebug() { + fmt.Printf(`[%s] %d: %s - %s`, time.Now().String(), index, title, slide.Name) + fmt.Println() + fmt.Fprintf(info, `["%d"][#00FFFF]%s[white][""] `, index, title) + } } + fmt.Println("End Setup") + fmt.Println() info.Highlight("0") } From 0e3ce7e9000ffa6ddf824c54b2e337284a114029 Mon Sep 17 00:00:00 2001 From: tfreder1ck Date: Sun, 15 Dec 2024 23:05:31 -0500 Subject: [PATCH 4/5] Finish Sorting for H2H --- models/store.go | 27 +++++ slides/boxing.go | 9 +- slides/brazil_campeonato_soccer.go | 9 +- slides/copa_america_soccer.go | 9 +- slides/cover.go | 2 +- slides/epl_soccer.go | 9 +- slides/ipl_cricket.go | 9 +- slides/la_liga_soccer.go | 14 +-- slides/masters_golf.go | 14 +-- slides/mens_french_open_tennis.go | 9 +- slides/mens_wimbledon_tennis.go | 9 +- slides/mlb_baseball.go | 9 +- slides/mls_soccer.go | 9 +- slides/mma.go | 9 +- slides/nba_basketball.go | 9 +- slides/ncaa_baseball.go | 9 +- slides/ncaa_basketball.go | 9 +- slides/ncaa_football.go | 10 +- slides/nfl_football.go | 10 +- slides/nhl_hockey.go | 10 +- slides/nrl_rugby.go | 10 +- slides/pga_golf.go | 10 +- slides/player_table.go | 9 +- slides/slides.go | 12 +- slides/team_formatter.go | 10 +- slides/team_table.go | 167 ++++++++++++++++------------ slides/uefa_championship_soccer.go | 10 +- slides/uefa_soccer.go | 10 +- slides/womens_french_open_tennis.go | 10 +- slides/womens_wimbledon_tennis.go | 10 +- ui/ui.go | 7 +- 31 files changed, 306 insertions(+), 163 deletions(-) diff --git a/models/store.go b/models/store.go index 36b6f44..77c9246 100644 --- a/models/store.go +++ b/models/store.go @@ -4,6 +4,11 @@ */ package models +import ( + "fmt" + "time" +) + var loadedEvents = make(map[string][]Event) func AddLoadedEvent(key string, value []Event) { @@ -26,6 +31,16 @@ func GetCurrentPage() string { return currentPage } +var currentPageIndex = "" + +func SetCurrentPageIndex(index string) { + currentPageIndex = index +} + +func GetCurrentPageIndex() string { + return currentPageIndex +} + var debug = false func SetDebug(option bool) { @@ -35,3 +50,15 @@ func SetDebug(option bool) { func GetDebug() bool { return debug } + +func LoadEvent(sport string, games []Event) { + debug := GetDebug() + + if len(GetLoadedEvents(sport)) == 0 { + if debug { + fmt.Printf("[%s] Add loaded events for %s", time.Now(), sport) + fmt.Println() + } + AddLoadedEvent(sport, games) + } +} diff --git a/slides/boxing.go b/slides/boxing.go index 62a05c8..c470475 100644 --- a/slides/boxing.go +++ b/slides/boxing.go @@ -9,18 +9,21 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // Boxing creates a slide for boxing odds. -func Boxing(games []models.Event) (string, string, tview.Primitive) { +func Boxing(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Ranking|Players|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Boxing), games) for _, game := range games { builder.WriteString(FormatTeamEvent(game)) } - return "Boxing", GetHeader(models.Boxing), CreateH2HTable("Boxing", builder.String()) + return "Boxing", GetHeader(models.Boxing), CreateH2HTable(pages, "Boxing", headerString, games) } diff --git a/slides/brazil_campeonato_soccer.go b/slides/brazil_campeonato_soccer.go index a06469a..4a31ac6 100644 --- a/slides/brazil_campeonato_soccer.go +++ b/slides/brazil_campeonato_soccer.go @@ -8,17 +8,20 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func BrazilCampeonato(games []models.Event) (string, string, tview.Primitive) { +func BrazilCampeonato(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Soccer_brazil_campeonato), games) for _, game := range games { builder.WriteString(FormatTeamEvent(game)) } - return "Brazil Campeonato", GetHeader(models.Soccer_brazil_campeonato), CreateH2HTable(string(models.Soccer_brazil_campeonato), builder.String()) + return "Brazil Campeonato", GetHeader(models.Soccer_brazil_campeonato), CreateH2HTable(pages, string(models.Soccer_brazil_campeonato), headerString, games) } diff --git a/slides/copa_america_soccer.go b/slides/copa_america_soccer.go index b85e82e..0f6c00e 100644 --- a/slides/copa_america_soccer.go +++ b/slides/copa_america_soccer.go @@ -8,17 +8,20 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func CopaAmericaSoccer(games []models.Event) (string, string, tview.Primitive) { +func CopaAmericaSoccer(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Soccer_conmebol_copa_america), games) for _, game := range games { builder.WriteString(FormatTeamEvent(game)) } - return "Copa America", GetHeader(models.Soccer_conmebol_copa_america), CreateH2HTable(string(models.Soccer_conmebol_copa_america), builder.String()) + return "Copa America", GetHeader(models.Soccer_conmebol_copa_america), CreateH2HTable(pages, string(models.Soccer_conmebol_copa_america), headerString, games) } diff --git a/slides/cover.go b/slides/cover.go index 659a6b4..66a3caa 100644 --- a/slides/cover.go +++ b/slides/cover.go @@ -33,7 +33,7 @@ const ( ) // Cover returns the cover page. -func Cover(games []models.Event) (title string, header string, content tview.Primitive) { +func Cover(pages *tview.Pages, games []models.Event) (title string, header string, content tview.Primitive) { // What's the size of the logo? lines := strings.Split(logo, "\n") logoWidth := 0 diff --git a/slides/epl_soccer.go b/slides/epl_soccer.go index 8da4aaf..85fe185 100644 --- a/slides/epl_soccer.go +++ b/slides/epl_soccer.go @@ -8,17 +8,20 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func EPLSoccer(games []models.Event) (string, string, tview.Primitive) { +func EPLSoccer(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Soccer_epl), games) for _, game := range games { builder.WriteString(FormatTeamEvent(game)) } - return "EPL Soccer", GetHeader(models.Soccer_epl), CreateH2HTable(string(models.Soccer_epl), builder.String()) + return "EPL Soccer", GetHeader(models.Soccer_epl), CreateH2HTable(pages, string(models.Soccer_epl), headerString, games) } diff --git a/slides/ipl_cricket.go b/slides/ipl_cricket.go index 81ec64b..2804ba0 100644 --- a/slides/ipl_cricket.go +++ b/slides/ipl_cricket.go @@ -8,18 +8,21 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // IPLCricket creates a slide for IPL cricket odds. -func IPLCricket(games []models.Event) (string, string, tview.Primitive) { +func IPLCricket(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Cricket_ipl), games) for _, game := range games { builder.WriteString(FormatTeamEvent(game)) } - return "IPL", GetHeader(models.Cricket_ipl), CreateH2HTable(string(models.Cricket_ipl), builder.String()) + return "IPL", GetHeader(models.Cricket_ipl), CreateH2HTable(pages, string(models.Cricket_ipl), headerString, games) } diff --git a/slides/la_liga_soccer.go b/slides/la_liga_soccer.go index b78a119..12879c0 100644 --- a/slides/la_liga_soccer.go +++ b/slides/la_liga_soccer.go @@ -5,8 +5,6 @@ package slides import ( - "strings" - "github.com/dos-2/oddshub/models" "github.com/dos-2/oddshub/sports" @@ -14,14 +12,10 @@ import ( ) // LaLigaSoccer creates a slide for La Liga soccer odds. -func LaLigaSoccer(games []models.Event) (string, string, tview.Primitive) { - var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") - models.AddLoadedEvent(string(sports.Soccer_spain_la_liga), games) +func LaLigaSoccer(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" - for _, game := range games { - builder.WriteString(FormatTeamEvent(game)) - } + models.LoadEvent(string(sports.Soccer_spain_la_liga), games) - return "La Liga", GetHeader(models.Soccer_spain_la_liga), CreateH2HTable(string(models.Soccer_spain_la_liga), builder.String()) + return "La Liga", GetHeader(models.Soccer_spain_la_liga), CreateH2HTable(pages, string(models.Soccer_spain_la_liga), headerString, games) } diff --git a/slides/masters_golf.go b/slides/masters_golf.go index 272efbb..f63ee34 100644 --- a/slides/masters_golf.go +++ b/slides/masters_golf.go @@ -5,21 +5,17 @@ package slides import ( - "strings" - "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // MastersGolf creates a slide for golf odds. -func MastersGolf(games []models.Event) (string, string, tview.Primitive) { - var builder strings.Builder - builder.WriteString("Commencement Date|Teams|Players|Bookmaker|Outrights||\n") +func MastersGolf(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { + headerString := "Commencement Date|Teams|Players|Bookmaker|Outrights||\n" - if len(games) > 0 { - builder.WriteString(FormatTournamentEvent(games[0])) - } + models.LoadEvent(string(sports.Golf_masters_tournament_winner), games) - return "Masters", GetHeader(models.Golf_masters_tournament_winner), CreateRoundRobinTable(string(models.Golf_masters_tournament_winner), builder.String()) + return "Masters", GetHeader(models.Golf_masters_tournament_winner), CreateRoundRobinTable(string(models.Golf_masters_tournament_winner), headerString, games) } diff --git a/slides/mens_french_open_tennis.go b/slides/mens_french_open_tennis.go index 658121f..b4de9af 100644 --- a/slides/mens_french_open_tennis.go +++ b/slides/mens_french_open_tennis.go @@ -8,18 +8,21 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // FrenchOpenTennis creates a slide for tennis odds. -func MensFrenchOpenTennis(games []models.Event) (string, string, tview.Primitive) { +func MensFrenchOpenTennis(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Players|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Players|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Tennis_atp_french_open), games) for _, game := range games { builder.WriteString(FormatTeamEvent(game)) } - return "Mens French Open", GetHeader(models.Tennis_atp_french_open), CreateH2HTable("Mens French Open Tennis", builder.String()) + return "Mens French Open", GetHeader(models.Tennis_atp_french_open), CreateH2HTable(pages, "Mens French Open Tennis", headerString, games) } diff --git a/slides/mens_wimbledon_tennis.go b/slides/mens_wimbledon_tennis.go index 0b85276..b871bb2 100644 --- a/slides/mens_wimbledon_tennis.go +++ b/slides/mens_wimbledon_tennis.go @@ -8,17 +8,20 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func MensWimbledonTennis(games []models.Event) (string, string, tview.Primitive) { +func MensWimbledonTennis(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var builder strings.Builder - builder.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Tennis_atp_wimbledon), games) for _, game := range games { builder.WriteString(FormatTeamEvent(game)) } - return "Wimbledon", GetHeader(models.Tennis_atp_wimbledon), CreateH2HTable(string(models.Tennis_atp_wimbledon), builder.String()) + return "Wimbledon", GetHeader(models.Tennis_atp_wimbledon), CreateH2HTable(pages, string(models.Tennis_atp_wimbledon), headerString, games) } diff --git a/slides/mlb_baseball.go b/slides/mlb_baseball.go index c6f9c50..c5b8acc 100644 --- a/slides/mlb_baseball.go +++ b/slides/mlb_baseball.go @@ -8,18 +8,21 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // MLBBaseball creates a slide for baseball odds. -func MLBBaseball(games []models.Event) (string, string, tview.Primitive) { +func MLBBaseball(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Baseball_mlb), games) for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "MLB", GetHeader(models.Baseball_mlb), CreateH2HTable("MLB Baseball", tableData.String()) + return "MLB", GetHeader(models.Baseball_mlb), CreateH2HTable(pages, "MLB Baseball", headerString, games) } diff --git a/slides/mls_soccer.go b/slides/mls_soccer.go index ed9c9c6..5477252 100644 --- a/slides/mls_soccer.go +++ b/slides/mls_soccer.go @@ -8,18 +8,21 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // MLSSoccer creates a slide for soccer odds. -func MLSSoccer(games []models.Event) (string, string, tview.Primitive) { +func MLSSoccer(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Soccer_usa_mls), games) for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "MLS", GetHeader(models.Soccer_usa_mls), CreateH2HTable("MLS Soccer", tableData.String()) + return "MLS", GetHeader(models.Soccer_usa_mls), CreateH2HTable(pages, "MLS Soccer", headerString, games) } diff --git a/slides/mma.go b/slides/mma.go index 0cdeeda..fd71a7d 100644 --- a/slides/mma.go +++ b/slides/mma.go @@ -8,18 +8,21 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // Mma creates a slide for MMA odds. -func Mma(games []models.Event) (string, string, tview.Primitive) { +func Mma(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Ranking|Players|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Ranking|Players|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Mma_mixed_martial_arts), games) for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "MMA", GetHeader(models.Mma_mixed_martial_arts), CreateH2HTable("MMA", tableData.String()) + return "MMA", GetHeader(models.Mma_mixed_martial_arts), CreateH2HTable(pages, "MMA", headerString, games) } diff --git a/slides/nba_basketball.go b/slides/nba_basketball.go index fb4e806..a05dd1c 100644 --- a/slides/nba_basketball.go +++ b/slides/nba_basketball.go @@ -8,18 +8,21 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // NBABasketball creates a slide for basketball odds. -func NBABasketball(games []models.Event) (string, string, tview.Primitive) { +func NBABasketball(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Basketball_nba), games) for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "NBA", GetHeader(models.Basketball_nba), CreateH2HTable("NBA Basketball", tableData.String()) + return "NBA", GetHeader(models.Basketball_nba), CreateH2HTable(pages, "NBA Basketball", headerString, games) } diff --git a/slides/ncaa_baseball.go b/slides/ncaa_baseball.go index e365fbf..7e7ddc6 100644 --- a/slides/ncaa_baseball.go +++ b/slides/ncaa_baseball.go @@ -8,18 +8,21 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // NcaaBaseball creates a slide for baseball odds. -func NCAABaseball(games []models.Event) (string, string, tview.Primitive) { +func NCAABaseball(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Baseball_ncaa), games) for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "NCAA Baseball", GetHeader(models.Baseball_ncaa), CreateH2HTable("NCAA Baseball", tableData.String()) + return "NCAA Baseball", GetHeader(models.Baseball_ncaa), CreateH2HTable(pages, "NCAA Baseball", headerString, games) } diff --git a/slides/ncaa_basketball.go b/slides/ncaa_basketball.go index dc1756f..d2d6e67 100644 --- a/slides/ncaa_basketball.go +++ b/slides/ncaa_basketball.go @@ -8,18 +8,21 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // NcaaBasketball creates a slide for basketball odds. -func NCAABasketball(games []models.Event) (string, string, tview.Primitive) { +func NCAABasketball(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Basketball_ncaa), games) for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "NCAA Basketball", GetHeader(models.Basketball_ncaa), CreateH2HTable("NCAA Basketball", tableData.String()) + return "NCAA Basketball", GetHeader(models.Basketball_ncaa), CreateH2HTable(pages, "NCAA Basketball", headerString, games) } diff --git a/slides/ncaa_football.go b/slides/ncaa_football.go index ff5a6eb..066e868 100644 --- a/slides/ncaa_football.go +++ b/slides/ncaa_football.go @@ -8,15 +8,19 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func NCAAFootball(games []models.Event) (string, string, tview.Primitive) { +func NCAAFootball(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Americanfootball_ncaaf), games) + for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "NCAA Football", GetHeader(models.Americanfootball_ncaaf), CreateH2HTable("NCAA Football", tableData.String()) + return "NCAA Football", GetHeader(models.Americanfootball_ncaaf), CreateH2HTable(pages, "NCAA Football", headerString, games) } diff --git a/slides/nfl_football.go b/slides/nfl_football.go index 30d62a2..7b1284f 100644 --- a/slides/nfl_football.go +++ b/slides/nfl_football.go @@ -8,16 +8,20 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // FootballSlide creates a slide for football odds. -func NFLfootball(games []models.Event) (string, string, tview.Primitive) { +func NFLfootball(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Americanfootball_nfl), games) + for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "NFL", GetHeader(models.Americanfootball_nfl), CreateH2HTable("NFL Football", tableData.String()) + return "NFL", GetHeader(models.Americanfootball_nfl), CreateH2HTable(pages, "NFL Football", headerString, games) } diff --git a/slides/nhl_hockey.go b/slides/nhl_hockey.go index cdf4f76..84fdf55 100644 --- a/slides/nhl_hockey.go +++ b/slides/nhl_hockey.go @@ -8,15 +8,19 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func NHLHockey(games []models.Event) (string, string, tview.Primitive) { +func NHLHockey(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Icehockey_nhl), games) + for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "NHL", GetHeader(models.Icehockey_nhl), CreateH2HTable("NHL Hockey", tableData.String()) + return "NHL", GetHeader(models.Icehockey_nhl), CreateH2HTable(pages, "NHL Hockey", headerString, games) } diff --git a/slides/nrl_rugby.go b/slides/nrl_rugby.go index 88f3db7..770ddf3 100644 --- a/slides/nrl_rugby.go +++ b/slides/nrl_rugby.go @@ -8,15 +8,19 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func NRLRugby(games []models.Event) (string, string, tview.Primitive) { +func NRLRugby(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Rugbyleague_nrl), games) + for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "NRL", GetHeader(models.Rugby_irl), CreateH2HTable(string(models.Rugby_irl), tableData.String()) + return "NRL", GetHeader(models.Rugby_irl), CreateH2HTable(pages, string(models.Rugby_irl), headerString, games) } diff --git a/slides/pga_golf.go b/slides/pga_golf.go index 9c094ee..2770814 100644 --- a/slides/pga_golf.go +++ b/slides/pga_golf.go @@ -8,15 +8,19 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func PGAGolf(games []models.Event) (string, string, tview.Primitive) { +func PGAGolf(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Teams|Players|Bookmaker|Outrights||\n") + headerString := "Commencement Date|Teams|Players|Bookmaker|Outrights||\n" + + models.LoadEvent(string(sports.Golf_pga_championship_winner), games) + if len(games) > 0 { tableData.WriteString(FormatTournamentEvent(games[0])) } - return "PGA", GetHeader(models.Golf_pga_tournament_winner), CreateRoundRobinTable(string(models.Golf_pga_tournament_winner), tableData.String()) + return "PGA", GetHeader(models.Golf_pga_tournament_winner), CreateRoundRobinTable(string(models.Golf_pga_tournament_winner), headerString, games) } diff --git a/slides/player_table.go b/slides/player_table.go index 209d0c1..6763ea3 100644 --- a/slides/player_table.go +++ b/slides/player_table.go @@ -7,11 +7,18 @@ package slides import ( "strings" + "github.com/dos-2/oddshub/models" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" ) -func CreateRoundRobinTable(sportName string, tableData string) *tview.Table { +func CreateRoundRobinTable(sportName string, tableData string, games []models.Event) *tview.Table { + var builder strings.Builder + + if len(games) > 0 { + builder.WriteString(FormatTournamentEvent(games[0])) + } + // Set up event listeners for mouse events table := tview.NewTable(). SetFixed(1, 1). diff --git a/slides/slides.go b/slides/slides.go index 8ec6133..eb9c729 100644 --- a/slides/slides.go +++ b/slides/slides.go @@ -14,7 +14,7 @@ import ( // Slide is a struct representing a slide in the presentation. type Slide struct { Name string // Name of the slide - Content func(games []models.Event) (title string, header string, content tview.Primitive) + Content func(pages *tview.Pages, games []models.Event) (title string, header string, content tview.Primitive) } // GetSlides returns a slice of slides for the presentation. @@ -69,3 +69,13 @@ func GetAllSlidesMap() map[string]Slide { } return slidesMap } + +func GetSlide(name string) Slide { + slides := GetSlides() + for _, slide := range slides { + if slide.Name == name { + return slide + } + } + return slides[0] +} diff --git a/slides/team_formatter.go b/slides/team_formatter.go index adbb35e..03fffc0 100644 --- a/slides/team_formatter.go +++ b/slides/team_formatter.go @@ -173,9 +173,11 @@ func getColors(sport string, homeTeam string, awayTeam string) (models.TeamColor } func sortEvents(events []models.Event, field string, orderBy string) []models.Event { - sort.Slice(events, func(i, j int) bool { - teamOddsI := ExtractTeamOdds(events[i]) - teamOddsJ := ExtractTeamOdds(events[j]) + eventsCopy := make([]models.Event, len(events)) + copy(eventsCopy, events) + sort.Slice(eventsCopy, func(i, j int) bool { + teamOddsI := ExtractTeamOdds(eventsCopy[i]) + teamOddsJ := ExtractTeamOdds(eventsCopy[j]) comparison := false switch field { case "money": @@ -202,5 +204,5 @@ func sortEvents(events []models.Event, field string, orderBy string) []models.Ev } return comparison }) - return events + return eventsCopy } diff --git a/slides/team_table.go b/slides/team_table.go index 1ca497c..3d25112 100644 --- a/slides/team_table.go +++ b/slides/team_table.go @@ -7,6 +7,7 @@ package slides import ( "fmt" "strings" + "time" "github.com/dos-2/oddshub/models" "github.com/gdamore/tcell/v2" @@ -34,7 +35,94 @@ func parseColorTag(text string) (string, tcell.Color, tcell.Color) { return text, textColor, bgColor } -func CreateH2HTable(sportName string, tableData string) *tview.Table { +func GetBackground(cellText string) tcell.Color { + if strings.Contains(cellText, "▲") { + return tcell.NewRGBColor(255, 0, 0) + } else if strings.Contains(cellText, "▼") { + return tcell.NewRGBColor(0, 255, 0) + } else if strings.Contains(cellText, "–") { + return tcell.NewRGBColor(255, 255, 0) + } + return tcell.NewRGBColor(255, 255, 255) +} + +func GetClickFunction(pages *tview.Pages, table *tview.Table, row int, column int, cellText string, cellField string, tableHeader string) func() bool { + return func() bool { + debug := models.GetDebug() + cellSelected := table.GetCell(row, column) + currentPage := models.GetCurrentPage() + sortedEvents := models.GetLoadedEvents(currentPage) + newTableHeader := "" + + switch cellText { + case "Money": + if strings.Contains(tableHeader, "Money –") { + newTableHeader = strings.Replace(tableHeader, "Money –", "Money ▲", 1) + } else if strings.Contains(tableHeader, "Money ▲") { + newTableHeader = strings.Replace(tableHeader, "Money ▲", "Money ▼", 1) + } else if strings.Contains(tableHeader, "Money ▼") { + newTableHeader = strings.Replace(tableHeader, "Money ▼", "Money –", 1) + } + case "Spread": + if strings.Contains(tableHeader, "Spread –") { + newTableHeader = strings.Replace(tableHeader, "Spread –", "Spread ▲", 1) + } else if strings.Contains(tableHeader, "Spread ▲") { + newTableHeader = strings.Replace(tableHeader, "Spread ▲", "Spread ▼", 1) + } else if strings.Contains(tableHeader, "Spread ▼") { + newTableHeader = strings.Replace(tableHeader, "Spread ▼", "Spread –", 1) + } + case "Total": + if strings.Contains(tableHeader, "Total –") { + newTableHeader = strings.Replace(tableHeader, "Total –", "Total ▲", 1) + } else if strings.Contains(tableHeader, "Total ▲") { + newTableHeader = strings.Replace(tableHeader, "Total ▲", "Total ▼", 1) + } else if strings.Contains(tableHeader, "Total ▼") { + newTableHeader = strings.Replace(tableHeader, "Total ▼", "Total –", 1) + } + } + + if cellSelected.Text == cellText+" –" { + if debug { + fmt.Printf("[%s] Sort %s by asc", time.Now(), cellText) + fmt.Println() + fmt.Printf("[%s] Length of events loaded to be sorted: %d", time.Now(), len(sortedEvents)) + fmt.Println() + } + sortedEvents = sortEvents(sortedEvents, cellField, "asc") + } else if cellSelected.Text == cellText+" ▲" { + if debug { + fmt.Printf("[%s] Sort %s by desc", time.Now(), cellText) + fmt.Println() + fmt.Printf("[%s] Length of events loaded to be sorted: %d", time.Now(), len(sortedEvents)) + fmt.Println() + } + sortedEvents = sortEvents(sortedEvents, cellField, "desc") + } else { + if debug { + fmt.Printf("[%s] Sort %s by none", time.Now(), cellText) + fmt.Println() + fmt.Printf("[%s] Length of events loaded to be sorted: %d", time.Now(), len(sortedEvents)) + fmt.Println() + } + } + table := CreateH2HTable(pages, currentPage, newTableHeader, sortedEvents) + content := tview.NewFlex(). + SetDirection(tview.FlexRow). + AddItem(table, 0, 1, true) + pages.AddAndSwitchToPage(models.GetCurrentPageIndex(), content, true) + return true + } +} + +func CreateH2HTable(pages *tview.Pages, sportName string, tableHeader string, games []models.Event) *tview.Table { + var builder strings.Builder + builder.WriteString(tableHeader) + for _, game := range games { + builder.WriteString(FormatTeamEvent(game)) + } + + tableData := builder.String() + // Set up event listeners for mouse events table := tview.NewTable(). SetFixed(1, 1). @@ -74,80 +162,21 @@ func CreateH2HTable(sportName string, tableData string) *tview.Table { SetSelectedStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). Background(tcell.NewRGBColor(0, 255, 255))) - if cellText == "Money –" { + if strings.Contains(cellText, "Money") { tableCell. - SetClickedFunc(func() bool { - cellSelected := table.GetCell(row, column) - fmt.Println(models.GetCurrentPage()) - fmt.Println(models.GetLoadedEvents("soccer_spain_la_liga")) - if cellSelected.Text == "Money –" { - cellSelected. - SetText("Money ▲"). - SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(255, 0, 0))) - } else if cellSelected.Text == "Money ▲" { - cellSelected. - SetText("Money ▼"). - SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(0, 255, 0))) - } else { - cellSelected. - SetText("Money –"). - SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(255, 255, 0))) - } - return true - }). + SetClickedFunc(GetClickFunction(pages, table, row, column, "Money", "money", tableHeader)). SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(255, 255, 0))) - } else if cellText == "Spread –" { + Background(GetBackground(cellText))) + } else if strings.Contains(cellText, "Spread") { tableCell. - SetClickedFunc(func() bool { - cellSelected := table.GetCell(row, column) - if cellSelected.Text == "Spread –" { - cellSelected. - SetText("Spread ▲"). - SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(255, 0, 0))) - } else if cellSelected.Text == "Spread ▲" { - cellSelected. - SetText("Spread ▼"). - SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(0, 255, 0))) - } else { - cellSelected. - SetText("Spread –"). - SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(255, 255, 0))) - } - return true - }). + SetClickedFunc(GetClickFunction(pages, table, row, column, "Spread", "spread", tableHeader)). SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(255, 255, 0))) - } else if cellText == "Total –" { + Background((GetBackground(cellText)))) + } else if strings.Contains(cellText, "Total") { tableCell. - SetClickedFunc(func() bool { - cellSelected := table.GetCell(row, column) - if cellSelected.Text == "Total –" { - cellSelected. - SetText("Total ▲"). - SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(255, 0, 0))) - } else if cellSelected.Text == "Total ▲" { - cellSelected. - SetText("Total ▼"). - SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(0, 255, 0))) - } else { - cellSelected. - SetText("Total –"). - SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(255, 255, 0))) - } - return true - }). + SetClickedFunc(GetClickFunction(pages, table, row, column, "Total", "total", tableHeader)). SetStyle(tcell.StyleDefault.Foreground(tcell.ColorBlack). - Background(tcell.NewRGBColor(255, 255, 0))) + Background((GetBackground(cellText)))) } table.SetCell(row, column, tableCell) diff --git a/slides/uefa_championship_soccer.go b/slides/uefa_championship_soccer.go index 7e8bb62..994e0b4 100644 --- a/slides/uefa_championship_soccer.go +++ b/slides/uefa_championship_soccer.go @@ -8,15 +8,19 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func UEFAChampionshipSoccer(games []models.Event) (string, string, tview.Primitive) { +func UEFAChampionshipSoccer(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Soccer_uefa_european_championship), games) + for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "UEFA Euro", GetHeader(models.Soccer_uefa_european_champion), CreateH2HTable(string(models.Soccer_uefa_european_champion), tableData.String()) + return "UEFA Euro", GetHeader(models.Soccer_uefa_european_champion), CreateH2HTable(pages, string(models.Soccer_uefa_european_champion), headerString, games) } diff --git a/slides/uefa_soccer.go b/slides/uefa_soccer.go index b230109..12fb75b 100644 --- a/slides/uefa_soccer.go +++ b/slides/uefa_soccer.go @@ -8,15 +8,19 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func UEFASoccerLeague(games []models.Event) (string, string, tview.Primitive) { +func UEFASoccerLeague(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Soccer_uefa_europa_league), games) + for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "UEFA", GetHeader(models.Soccer_uefa_europa_league), CreateH2HTable(string(models.Soccer_uefa_europa_league), tableData.String()) + return "UEFA", GetHeader(models.Soccer_uefa_europa_league), CreateH2HTable(pages, string(models.Soccer_uefa_europa_league), headerString, games) } diff --git a/slides/womens_french_open_tennis.go b/slides/womens_french_open_tennis.go index 1a62ec0..02f8c90 100644 --- a/slides/womens_french_open_tennis.go +++ b/slides/womens_french_open_tennis.go @@ -8,16 +8,20 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) // WomensFrenchOpenTennis creates a slide for tennis odds. -func WomensFrenchOpenTennis(games []models.Event) (string, string, tview.Primitive) { +func WomensFrenchOpenTennis(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Players|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Players|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Tennis_wta_french_open), games) + for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "Womens French Open", GetHeader(models.Tennis_wta_french_open), CreateH2HTable("Womens French Open Tennis", tableData.String()) + return "Womens French Open", GetHeader(models.Tennis_wta_french_open), CreateH2HTable(pages, "Womens French Open Tennis", headerString, games) } diff --git a/slides/womens_wimbledon_tennis.go b/slides/womens_wimbledon_tennis.go index a1d7238..a53e23d 100644 --- a/slides/womens_wimbledon_tennis.go +++ b/slides/womens_wimbledon_tennis.go @@ -8,15 +8,19 @@ import ( "strings" "github.com/dos-2/oddshub/models" + "github.com/dos-2/oddshub/sports" "github.com/rivo/tview" ) -func WomensWimbledonTennis(games []models.Event) (string, string, tview.Primitive) { +func WomensWimbledonTennis(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { var tableData strings.Builder - tableData.WriteString("Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n") + headerString := "Commencement Date|Location|Teams|Bookmaker|Spread –|Money –|Total –\n" + + models.LoadEvent(string(sports.Tennis_wta_wimbledon), games) + for _, game := range games { tableData.WriteString(FormatTeamEvent(game)) } - return "Womens Wimbledon", GetHeader(models.Tennis_wta_wimbledon), CreateH2HTable(string(models.Tennis_wta_wimbledon), tableData.String()) + return "Womens Wimbledon", GetHeader(models.Tennis_wta_wimbledon), CreateH2HTable(pages, string(models.Tennis_wta_wimbledon), headerString, games) } diff --git a/ui/ui.go b/ui/ui.go index aedcda8..06edf5b 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -77,6 +77,7 @@ func createInfoTextView(pages *tview.Pages, slides []slides.Slide) *tview.TextVi } models.SetCurrentPage(pageName) + models.SetCurrentPageIndex(added[0]) pages.SwitchToPage(added[0]) }) return info @@ -96,6 +97,7 @@ func createNavigationFunctions(info *tview.TextView, slides []slides.Slide) (fun info.Highlight(strconv.Itoa(slide)).ScrollToHighlight() models.SetCurrentPage(slides[slide].Name) + models.SetCurrentPageIndex(string(slide)) } nextSlide := func() { slide, _ := strconv.Atoi(info.GetHighlights()[0]) @@ -110,6 +112,7 @@ func createNavigationFunctions(info *tview.TextView, slides []slides.Slide) (fun info.Highlight(strconv.Itoa(slide)).ScrollToHighlight() models.SetCurrentPage(slides[slide].Name) + models.SetCurrentPageIndex(string(slide)) } return previousSlide, nextSlide } @@ -122,7 +125,7 @@ func setupSlides(events map[string][]models.Event, pages *tview.Pages, info *tvi eventList = []models.Event{} } - title, _, primitive := slide.Content(eventList) + title, _, primitive := slide.Content(pages, eventList) var content tview.Primitive content = tview.NewFlex(). SetDirection(tview.FlexRow). @@ -136,8 +139,8 @@ func setupSlides(events map[string][]models.Event, pages *tview.Pages, info *tvi if models.GetDebug() { fmt.Printf(`[%s] %d: %s - %s`, time.Now().String(), index, title, slide.Name) fmt.Println() - fmt.Fprintf(info, `["%d"][#00FFFF]%s[white][""] `, index, title) } + fmt.Fprintf(info, `["%d"][#00FFFF]%s[white][""] `, index, title) } fmt.Println("End Setup") fmt.Println() From d524f0ec8be7c12b0d5cbf8f8c13d4198106595a Mon Sep 17 00:00:00 2001 From: tfreder1ck Date: Sun, 15 Dec 2024 23:28:16 -0500 Subject: [PATCH 5/5] Fix Round Robin Table --- slides/pga_golf.go | 6 ------ slides/player_table.go | 6 +++++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/slides/pga_golf.go b/slides/pga_golf.go index 2770814..9cf1b7a 100644 --- a/slides/pga_golf.go +++ b/slides/pga_golf.go @@ -5,8 +5,6 @@ package slides import ( - "strings" - "github.com/dos-2/oddshub/models" "github.com/dos-2/oddshub/sports" @@ -14,13 +12,9 @@ import ( ) func PGAGolf(pages *tview.Pages, games []models.Event) (string, string, tview.Primitive) { - var tableData strings.Builder headerString := "Commencement Date|Teams|Players|Bookmaker|Outrights||\n" models.LoadEvent(string(sports.Golf_pga_championship_winner), games) - if len(games) > 0 { - tableData.WriteString(FormatTournamentEvent(games[0])) - } return "PGA", GetHeader(models.Golf_pga_tournament_winner), CreateRoundRobinTable(string(models.Golf_pga_tournament_winner), headerString, games) } diff --git a/slides/player_table.go b/slides/player_table.go index 6763ea3..ccdb488 100644 --- a/slides/player_table.go +++ b/slides/player_table.go @@ -12,9 +12,11 @@ import ( "github.com/rivo/tview" ) -func CreateRoundRobinTable(sportName string, tableData string, games []models.Event) *tview.Table { +func CreateRoundRobinTable(sportName string, tableHeader string, games []models.Event) *tview.Table { var builder strings.Builder + builder.WriteString(tableHeader) + if len(games) > 0 { builder.WriteString(FormatTournamentEvent(games[0])) } @@ -27,6 +29,8 @@ func CreateRoundRobinTable(sportName string, tableData string, games []models.Ev // Set up the table cells + tableData := builder.String() + rows := strings.Split(tableData, "\n") for row := 0; row < len(rows)-1; row++ { line := rows[row]