diff --git a/lib/sc/track.go b/lib/sc/track.go index 9af5c90..bff295a 100644 --- a/lib/sc/track.go +++ b/lib/sc/track.go @@ -27,24 +27,31 @@ type Track struct { CreatedAt string `json:"created_at"` Description string `json:"description"` //Duration int `json:"duration"` // there are duration and full_duration fields wtf does that mean - Genre string `json:"genre"` - Kind string `json:"kind"` // should always be "track"! - LastModified string `json:"last_modified"` - License string `json:"license"` - Likes int64 `json:"likes_count"` - Permalink string `json:"permalink"` - Played int64 `json:"playback_count"` - Reposted int64 `json:"reposts_count"` - TagList string `json:"tag_list"` - Title string `json:"title"` - ID string `json:"urn"` - Media Media `json:"media"` - Authorization string `json:"track_authorization"` - Author User `json:"user"` + Genre string `json:"genre"` + Kind string `json:"kind"` // should always be "track"! + LastModified string `json:"last_modified"` + License string `json:"license"` + Likes int64 `json:"likes_count"` + Permalink string `json:"permalink"` + Played int64 `json:"playback_count"` + Reposted int64 `json:"reposts_count"` + TagList string `json:"tag_list"` + Title string `json:"title"` + ID string `json:"urn"` + Media Media `json:"media"` + Authorization string `json:"track_authorization"` + Author User `json:"user"` + Policy TrackPolicy `json:"policy"` IDint int64 `json:"id"` } +type TrackPolicy string + +const ( + PolicyBlock TrackPolicy = "BLOCK" +) + type Protocol string const ( diff --git a/main.go b/main.go index 152f3c8..851bac6 100644 --- a/main.go +++ b/main.go @@ -124,14 +124,19 @@ func main() { log.Printf("error getting %s: %s\n", u, err) return err } + displayErr := "" stream, err := track.GetStream() if err != nil { - log.Printf("error getting %s stream from %s: %s\n", track.Permalink, track.Author.Permalink, err) + log.Printf("error getting %s stream from %s: %s\n", c.Params("track"), c.Params("user"), err) + displayErr = "Failed to get track stream: " + err.Error() + if track.Policy == sc.PolicyBlock { + displayErr += "\nThis track may be blocked in the country where this instance is hosted." + } } c.Set("Content-Type", "text/html") - return templates.TrackEmbed(track, stream).Render(context.Background(), c) + return templates.TrackEmbed(track, stream, displayErr).Render(context.Background(), c) }) if cfg.ProxyImages { @@ -215,14 +220,19 @@ func main() { log.Printf("error getting %s from %s: %s\n", c.Params("track"), c.Params("user"), err) return err } + displayErr := "" stream, err := track.GetStream() if err != nil { log.Printf("error getting %s stream from %s: %s\n", c.Params("track"), c.Params("user"), err) + displayErr = "Failed to get track stream: " + err.Error() + if track.Policy == sc.PolicyBlock { + displayErr += "\nThis track may be blocked in the country where this instance is hosted." + } } c.Set("Content-Type", "text/html") - return templates.Base(track.Title+" by "+track.Author.Username, templates.Track(track, stream), templates.TrackHeader(track)).Render(context.Background(), c) + return templates.Base(track.Title+" by "+track.Author.Username, templates.Track(track, stream, displayErr), templates.TrackHeader(track)).Render(context.Background(), c) }) app.Get("/:user", func(c *fiber.Ctx) error { diff --git a/templates/track.templ b/templates/track.templ index 13b5965..42be19b 100644 --- a/templates/track.templ +++ b/templates/track.templ @@ -17,11 +17,23 @@ templ TrackHeader(t sc.Track) { } -templ TrackPlayer() { - if cfg.FullyPreloadTrack { - - } else { - +templ TrackPlayer(stream string, displayErr string) { + if stream != "" { + + if cfg.FullyPreloadTrack { + + } else { + + } + + } + if displayErr != "" { +
+

{displayErr}

+
} } @@ -43,17 +55,12 @@ templ TrackItem(track *sc.Track, showUsername bool) { } } -templ Track(t sc.Track, stream string) { +templ Track(t sc.Track, stream string, displayErr string) { if t.Artwork != "" { }

{ t.Title }

- - @TrackPlayer() - + @TrackPlayer(stream, displayErr) if t.Genre != "" {

{ t.Genre }

} else { @@ -84,7 +91,7 @@ templ Track(t sc.Track, stream string) { } } -templ TrackEmbed(t sc.Track, stream string) { +templ TrackEmbed(t sc.Track, stream string, displayErr string) { @@ -99,12 +106,7 @@ templ TrackEmbed(t sc.Track, stream string) { }

{ t.Title }

- - @TrackPlayer() - + @TrackPlayer(stream, displayErr) @UserItem(&t.Author)