5 Commits

4 changed files with 27 additions and 18 deletions

View File

@@ -1,6 +1,6 @@
# IPTV Checker (iptvc) # IPTV Checker (iptvc)
![Последний релиз](https://img.shields.io/gitea/v/release/IPTV/iptvc?gitea_url=https%3A%2F%2Fgit.axenov.dev&display_name=release&color=green&cacheSeconds=600) [![Последний релиз](https://img.shields.io/gitea/v/release/IPTV/iptvc?gitea_url=https%3A%2F%2Fgit.axenov.dev&display_name=release&color=green&cacheSeconds=600)](https://git.axenov.dev/IPTV/iptvc/releases/latest)
Консольная программа для проверки IPTV-плейлистов в формате m3u или m3u8. Консольная программа для проверки IPTV-плейлистов в формате m3u или m3u8.

View File

@@ -13,7 +13,7 @@ import (
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
) )
const VERSION = "1.0.0" const VERSION = "1.0.1"
// Arguments описывает аргументы командной строки // Arguments описывает аргументы командной строки
type Arguments struct { type Arguments struct {

View File

@@ -146,6 +146,7 @@ func CheckPlaylists(lists []playlist.Playlist) (int, int) {
if err != nil { if err != nil {
log.Printf("Cannot read playlist [%s]: %s\n", pls.Url, err) log.Printf("Cannot read playlist [%s]: %s\n", pls.Url, err)
offlineCount++ offlineCount++
cachePlaylist(pls)
continue continue
} }
@@ -156,28 +157,30 @@ func CheckPlaylists(lists []playlist.Playlist) (int, int) {
log.Printf("Parsed, checking channels (%d)...\n", len(pls.Channels)) log.Printf("Parsed, checking channels (%d)...\n", len(pls.Channels))
pls = CheckChannels(pls) pls = CheckChannels(pls)
lists[idx] = pls lists[idx] = pls
cachePlaylist(pls)
if app.Config.Cache.IsActive {
jsonBytes, err := json.Marshal(pls)
if err != nil {
log.Printf("Error while saving playlist to cache: %s", err)
}
ttl := time.Duration(app.Config.Cache.Ttl) * time.Second
written := app.Cache.Set(ctx, pls.Code, string(jsonBytes), ttl)
if written.Err() != nil {
log.Printf("Error while saving playlist to cache: %s", err)
}
log.Println("Cached sucessfully")
}
} }
return onlineCount, offlineCount return onlineCount, offlineCount
} }
func cachePlaylist(pls playlist.Playlist) {
if app.Config.Cache.IsActive {
jsonBytes, err := json.Marshal(pls)
if err != nil {
log.Printf("Error while saving playlist to cache: %s", err)
}
ttl := time.Duration(app.Config.Cache.Ttl) * time.Second
written := app.Cache.Set(ctx, pls.Code, string(jsonBytes), ttl)
if written.Err() != nil {
log.Printf("Error while saving playlist to cache: %s", err)
}
log.Println("Cached sucessfully")
}
}
// CheckChannels проверяет каналы и возвращает их же с результатами проверки // CheckChannels проверяет каналы и возвращает их же с результатами проверки
func CheckChannels(pls playlist.Playlist) playlist.Playlist { func CheckChannels(pls playlist.Playlist) playlist.Playlist {
type errorData struct { type errorData struct {

View File

@@ -12,6 +12,7 @@ import (
"os" "os"
"regexp" "regexp"
"strings" "strings"
"time"
) )
// Group - структура для хранения информации о группе каналов // Group - структура для хранения информации о группе каналов
@@ -123,6 +124,8 @@ func parseName(line string) string {
func (pls *Playlist) Download() error { func (pls *Playlist) Download() error {
content, err := utils.Fetch(pls.Url) content, err := utils.Fetch(pls.Url)
if err != nil { if err != nil {
pls.Content = err.Error()
pls.CheckedAt = time.Now().Unix()
return err return err
} }
@@ -134,6 +137,8 @@ func (pls *Playlist) Download() error {
func (pls *Playlist) ReadFromFs() error { func (pls *Playlist) ReadFromFs() error {
content, err := os.ReadFile(pls.Url) content, err := os.ReadFile(pls.Url)
if err != nil { if err != nil {
pls.Content = err.Error()
pls.CheckedAt = time.Now().Unix()
return err return err
} }
@@ -144,6 +149,7 @@ func (pls *Playlist) ReadFromFs() error {
// Parse разбирает плейлист // Parse разбирает плейлист
func (pls *Playlist) Parse() Playlist { func (pls *Playlist) Parse() Playlist {
isChannel := false isChannel := false
pls.Attributes = make(map[string]string)
pls.Channels = make(map[string]Channel) pls.Channels = make(map[string]Channel)
pls.Groups = make(map[string]Group) pls.Groups = make(map[string]Group)