From 47cd3d4bcb78de66859e63ef85890dfe774f2e8e Mon Sep 17 00:00:00 2001 From: Gabe Cook Date: Tue, 3 Oct 2023 02:54:33 -0500 Subject: [PATCH] fix(device): Fix ad skip being blocked by API lookups Ref #27 --- internal/device/watch.go | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/internal/device/watch.go b/internal/device/watch.go index fded3fb..f5b2d11 100644 --- a/internal/device/watch.go +++ b/internal/device/watch.go @@ -181,10 +181,14 @@ func (d *Device) tick() error { } if castMedia.Media.ContentId != d.prevVideoId { - d.logger.Info("Detected video stream.", "video_id", castMedia.Media.ContentId) + if castMedia.Media.ContentId != "" { + d.logger.Info("Detected video stream.", "video_id", castMedia.Media.ContentId) + } d.prevVideoId = castMedia.Media.ContentId d.unmuteSegment() - d.querySegments(castMedia) + d.segments = nil + go d.querySegments(castMedia) + break } for i, segment := range d.segments { @@ -303,17 +307,19 @@ func (d *Device) queryVideoId(castMedia *cast.Media) { d.logger.Info("Video ID not found. Searching for video on YouTube...") d.prevArtist = currArtist d.prevTitle = currTitle - if err := util.Retry(d.ctx, 3, time.Second, func(try uint) (err error) { - castMedia.Media.ContentId, err = youtube.QueryVideoId(d.ctx, currArtist, currTitle) - if err != nil { - d.logger.Error("YouTube search failed.", "error", err.Error()) + go func() { + if err := util.Retry(d.ctx, 3, time.Second, func(try uint) (err error) { + castMedia.Media.ContentId, err = youtube.QueryVideoId(d.ctx, currArtist, currTitle) + if err != nil { + d.logger.Error("YouTube search failed.", "error", err.Error()) + } + return err + }); err != nil { + d.logger.Debug("Halting YouTube search retries.") + return } - return err - }); err != nil { - d.logger.Debug("Halting YouTube search retries.") - return - } - d.logger.Debug("YouTube search found video ID", "video_id", castMedia.Media.ContentId) + d.logger.Debug("YouTube search found video ID", "video_id", castMedia.Media.ContentId) + }() } } } @@ -378,6 +384,10 @@ func (d *Device) unmuteSegment() { } func (d *Device) querySegments(castMedia *cast.Media) { + if castMedia.Media.ContentId == "" { + return + } + if err := util.Retry(d.ctx, 10, 500*time.Millisecond, func(try uint) (err error) { d.segments, err = sponsorblock.QuerySegments(d.ctx, castMedia.Media.ContentId) return err