Compare commits
4 Commits
b689f3e799
...
v1.0.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
c2ff027223
|
|||
|
13723a2dc5
|
|||
|
2412b570be
|
|||
|
303ccdd02b
|
@@ -1,8 +1,5 @@
|
|||||||
APP_DEBUG=false
|
APP_DEBUG=false
|
||||||
|
|
||||||
HTTP_HOST=0.0.0.0
|
|
||||||
HTTP_PORT=8031
|
|
||||||
|
|
||||||
CACHE_ENABLED=false
|
CACHE_ENABLED=false
|
||||||
CACHE_HOST=localhost
|
CACHE_HOST=localhost
|
||||||
CACHE_PORT=6379
|
CACHE_PORT=6379
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
"github.com/redis/go-redis/v9"
|
"github.com/redis/go-redis/v9"
|
||||||
)
|
)
|
||||||
|
|
||||||
const VERSION = "0.2.0"
|
const VERSION = "1.0.1"
|
||||||
|
|
||||||
// Arguments описывает аргументы командной строки
|
// Arguments описывает аргументы командной строки
|
||||||
type Arguments struct {
|
type Arguments struct {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import (
|
|||||||
type Config struct {
|
type Config struct {
|
||||||
DebugMode bool
|
DebugMode bool
|
||||||
Cache CacheConfig
|
Cache CacheConfig
|
||||||
Http HttpConfig
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CacheConfig описывает конфигурацию подключения к keydb
|
// CacheConfig описывает конфигурацию подключения к keydb
|
||||||
@@ -31,12 +30,6 @@ type CacheConfig struct {
|
|||||||
IsActive bool
|
IsActive bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// HttpConfig описывает конфигурацию веб-сервера
|
|
||||||
type HttpConfig struct {
|
|
||||||
Host string
|
|
||||||
Port uint
|
|
||||||
}
|
|
||||||
|
|
||||||
// Init инициализирует объект конфигурации из переменных окружения
|
// Init инициализирует объект конфигурации из переменных окружения
|
||||||
func Init() *Config {
|
func Init() *Config {
|
||||||
_ = godotenv.Load(".env")
|
_ = godotenv.Load(".env")
|
||||||
@@ -51,10 +44,6 @@ func Init() *Config {
|
|||||||
Db: readEnvInteger("CACHE_DB", 0),
|
Db: readEnvInteger("CACHE_DB", 0),
|
||||||
Ttl: readEnvInteger("CACHE_TTL", 1800),
|
Ttl: readEnvInteger("CACHE_TTL", 1800),
|
||||||
},
|
},
|
||||||
Http: HttpConfig{
|
|
||||||
Host: readEnv("HTTP_HOST", "0.0.0.0"),
|
|
||||||
Port: readEnvInteger("HTTP_PORT", 1380),
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ 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()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,6 +135,7 @@ 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()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,6 +146,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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user