From 1cd099375520e3969c78f3746fce376e4517dbad Mon Sep 17 00:00:00 2001 From: Dmitry Rubtsov Date: Mon, 7 Jul 2025 23:23:52 +0600 Subject: [PATCH] fix tracks processing when tags are empty --- config.go | 6 ------ config_test.go | 6 +----- provider.go | 51 +++++++++++++++++++++++++++++--------------------- 3 files changed, 31 insertions(+), 32 deletions(-) diff --git a/config.go b/config.go index 011a807..45334af 100644 --- a/config.go +++ b/config.go @@ -94,12 +94,6 @@ func LoadConfig(path string) (*Config, error) { } func (c *Config) compileFilterRegexps() error { - if len(c.Filters) == 0 { - c.Filters = []*Filter{ - {Value: ".*", Type: "name"}, - } - } - for i, filter := range c.Filters { re, err := regexp.Compile(filter.Value) if err != nil { diff --git a/config_test.go b/config_test.go index 936c8a9..131ddfd 100644 --- a/config_test.go +++ b/config_test.go @@ -98,14 +98,10 @@ maxStreams: 10 assert.Equal(t, "iptvserver:8080", config.ServerAddress) assert.True(t, config.UseFFMPEG) assert.Equal(t, 10, config.MaxStreams) - assert.Len(t, config.Filters, 1) - assert.Equal(t, ".*", config.Filters[0].Value) - assert.Equal(t, "name", config.Filters[0].Type) - assert.NotNil(t, config.Filters[0].GetRegexp()) + assert.Len(t, config.Filters, 0) assert.Equal(t, 2*time.Hour, config.RefreshInterval) }) - // Test with invalid regular expression t.Run("Invalid Regular Expression", func(t *testing.T) { content := []byte(` diff --git a/provider.go b/provider.go index 6a3f53a..1851c7f 100644 --- a/provider.go +++ b/provider.go @@ -54,6 +54,11 @@ func (pl *playlistLoader) OnPlaylistStart() { } func (pl *playlistLoader) OnTrack(track *Track) { + if len(pl.filters) == 0 { + pl.processTrack(track, 0) + return + } + for i, filter := range pl.filters { var field string switch filter.Type { @@ -73,31 +78,35 @@ func (pl *playlistLoader) OnTrack(track *Track) { } if filter.regexp.Match([]byte(val)) { - name := track.Name + pl.processTrack(track, i) + } + } +} - if len(track.Tags["tvg-id"]) == 0 { - log.WithField("track", track).Warn("missing tvg-id") - } +func (pl *playlistLoader) processTrack(track *Track, priority int) { + name := track.Name - if existingPriority, exists := pl.priorities[name]; !exists || i < existingPriority { - idx := pl.findIndexWithID(track) - if idx != -1 { - if strings.Contains(track.Name, "HD") { - delete(pl.priorities, pl.tracks[idx].Name) - pl.tracks[idx] = *track - } else { - continue - } - } else { - if !exists { - pl.tracks = append(pl.tracks, *track) - } - } - pl.priorities[name] = i - } else if exists { - log.WithField("track", track).Warn("duplicate name") + if len(track.Tags["tvg-id"]) == 0 { + log.WithField("track", track).Debug("missing tvg-id") + } + + if existingPriority, exists := pl.priorities[name]; !exists || priority < existingPriority { + idx := pl.findIndexWithID(track) + if idx != -1 { + if strings.Contains(track.Name, "HD") { + delete(pl.priorities, pl.tracks[idx].Name) + pl.tracks[idx] = *track + } else { + return + } + } else { + if !exists { + pl.tracks = append(pl.tracks, *track) } } + pl.priorities[name] = priority + } else { + log.WithField("track", track).Warn("duplicate name") } }