59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"regexp"
|
|
"os"
|
|
)
|
|
|
|
func main() {
|
|
providerUrl := os.Getenv("IPTV_URL")
|
|
|
|
userHome, err := GetCurrentUserHomeDir()
|
|
if err != nil {
|
|
panic("failed to findout user home.")
|
|
}
|
|
filePath := fmt.Sprintf("%s/.local/iptv/channels.m3u", userHome)
|
|
|
|
searchPattern := flag.String("s", "", "channel search pattern")
|
|
updateChannels := flag.Bool("d", false, "update channel file")
|
|
|
|
flag.Parse()
|
|
|
|
if *updateChannels {
|
|
fmt.Println("updating channels...")
|
|
err := download(providerUrl, filePath)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
channels, err := parseChannels(filePath)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
regexPattern := regexp.MustCompile(fmt.Sprintf("(?i)%s", *searchPattern))
|
|
searchResults := make([]Channel, 0)
|
|
|
|
for _, channel := range channels {
|
|
if regexPattern.MatchString(channel.Name) {
|
|
searchResults = append(searchResults, channel)
|
|
}
|
|
}
|
|
|
|
for i, channel := range searchResults {
|
|
fmt.Println(i, "->", channel.Name)
|
|
}
|
|
|
|
var channelNumber int
|
|
fmt.Print("Channel Number: ")
|
|
_, err = fmt.Scanf("%d", &channelNumber)
|
|
|
|
fmt.Printf("Selected Channel: %s\n", searchResults[channelNumber].Name)
|
|
copyToClipboard(searchResults[channelNumber].Url)
|
|
}
|