You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
3.6 KiB

package main
import (
"context"
"fmt"
"os"
//"strconv"
"github.com/jackc/pgx/v5"
)
var conn *pgx.Conn
func main() {
var err error
urlExample := "postgres://bot:3h0SXx6Ykx1D@toolbox.cfsystems.io:5432/iptvsportlist"
//conn, err = pgx.Connect(context.Background(), os.Getenv("DATABASE_URL"))
conn, err = pgx.Connect(context.Background(), urlExample)
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to connection to database: %v\n", err)
os.Exit(1)
}
if len(os.Args) == 1 {
printHelp()
os.Exit(0)
}
switch os.Args[1] {
case "tug":
printTug()
case "help":
printHelp()
case "guide":
userTerm := "" // Default value
if len(os.Args) >= 3 {
userTerm = os.Args[2]
}
err = guideTerm(userTerm)
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to list events: %v\n", err)
os.Exit(1)
}
case "whatson":
userTerm := "" // Default value
if len(os.Args) >= 3 {
userTerm = os.Args[2]
}
err = whatsonTerm(userTerm)
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to list events: %v\n", err)
os.Exit(1)
}
case "upcoming":
userTerm := "" // Default value
if len(os.Args) >= 3 {
userTerm = os.Args[2]
}
err = upcomingTerm(userTerm)
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to list events: %v\n", err)
os.Exit(1)
}
default:
fmt.Fprintln(os.Stderr, "Invalid command")
printHelp()
os.Exit(1)
}
}
func printTug() {
fmt.Print(`chaturbate integration coming soon
`)
}
func guideTerm(userTerm string) error {
rows, err := conn.Query(context.Background(), "SELECT league, event, time_utc, string_agg(channel_name, ', ') AS channels FROM vw_gc04_epg_join_view vgejv WHERE (old_event = 'No') AND (sport = $1 OR event LIKE '%' || $1 || '%' OR league = $1) GROUP BY 1, 2, 3 ORDER BY league, time_utc ASC;", userTerm)
if err != nil {
return err
}
defer rows.Close()
for rows.Next() {
var league string
var event string
var timeUtc string
var channels string
err := rows.Scan(&league, &event, &timeUtc, &channels)
if err != nil {
return err
}
fmt.Printf("%s | %s | %s UTC | %s |\n", league, event, timeUtc, channels)
}
return rows.Err()
}
func whatsonTerm(userTerm string) error {
rows, err := conn.Query(context.Background(), "SELECT league, event, time_utc, string_agg(channel_name, ', ') AS channels FROM vw_gc04_epg_join_view vgejv WHERE (old_event = 'No' AND on_air = 'Yes') AND (sport = $1 OR event LIKE '%' || $1 || '%' OR league = $1) GROUP BY 1, 2, 3 ORDER BY league, time_utc ASC;", userTerm)
if err != nil {
return err
}
defer rows.Close()
for rows.Next() {
var league string
var event string
var timeUtc string
var channels string
err := rows.Scan(&league, &event, &timeUtc, &channels)
if err != nil {
return err
}
fmt.Printf("%s | %s | %s UTC | %s |\n", league, event, timeUtc, channels)
}
return rows.Err()
}
func upcomingTerm(userTerm string) error {
rows, err := conn.Query(context.Background(), "SELECT league, event, time_utc, string_agg(channel_name, ', ') AS channels FROM vw_gc04_epg_join_view vgejv WHERE (old_event = 'No' AND upcoming = 'Yes') AND (sport = $1 OR event LIKE '%' || $1 || '%' OR league = $1) GROUP BY 1, 2, 3 ORDER BY league, time_utc ASC;", userTerm)
if err != nil {
return err
}
defer rows.Close()
for rows.Next() {
var league string
var event string
var timeUtc string
var channels string
err := rows.Scan(&league, &event, &timeUtc, &channels)
if err != nil {
return err
}
fmt.Printf("%s | %s | %s UTC | %s |\n", league, event, timeUtc, channels)
}
return rows.Err()
}
func printHelp() {
fmt.Print(`
Usage:
sport whatson
sport guide
sport upcoming
`)
}