package templates import ( "git.maid.zone/stuff/soundcloak/lib/cfg" "git.maid.zone/stuff/soundcloak/lib/sc" "net/url" "strconv" "strings" ) func toExt(audio string) string { switch audio { case cfg.AudioAAC: return "m4a" case cfg.AudioOpus: return "ogg" case cfg.AudioMP3: return "mp3" } return "" } templ TrackButtons(current string, track sc.Track) {
for _, b := range [...]btn{{"related tracks", "/recommended", false, false},{"in albums", "/albums", false, false},{"in playlists", "/sets", false, false},{"track station", "/discover/sets/"+track.Station, true, false},{"view on soundcloud", "https://soundcloud.com"+track.Href(), true, true}} { { b.text } }
} templ TrackHeader(prefs cfg.Preferences, t sc.Track, needPlayer bool) { if needPlayer && *prefs.Player == cfg.HLSPlayer { } } func next(c *sc.Track, t *sc.Track, p *sc.Playlist, mode string, volume string) string { r := t.Href() if p != nil { r += "?playlist=" + p.Href()[1:] if mode != "" { r += "&mode=" + mode } r += "&" } else { r += "?" if c != nil { r += "prev=" + string(c.ID) + "&" } } r += "autoplay=true" if volume != "" { r += "&volume=" + volume } return r } templ TrackPlayer(prefs cfg.Preferences, track sc.Track, stream string, displayErr string, autoplay bool, nextTrack *sc.Track, playlist *sc.Playlist, volume string, mode string, audio string) { if *prefs.Player == cfg.NonePlayer { {{ return }} } if displayErr == "" { {{ var audioPref *string }} if cfg.Restream && *prefs.Player == cfg.RestreamPlayer { {{ audioPref = prefs.RestreamAudio }} if nextTrack != nil { } if *prefs.KeepPlayerFocus { } } else if stream != "" { {{ audioPref = prefs.HLSAudio }} if *prefs.KeepPlayerFocus { } } if track.Policy == sc.PolicySnip {

Only a 30-second snippet is available.

} if *prefs.ShowAudio {
if *audioPref == cfg.AudioBest {

Audio: best ({ audio })

} else {

Audio: { audio }

}
} } else {

{ displayErr }

} } templ TrackItem(track *sc.Track, showUsername bool, overrideHref string) { if track.Title != "" { {{ if overrideHref == "" { overrideHref = track.Href() } }}

{ track.Title }

if showUsername { { track.Author.Username } }
} } templ Track(prefs cfg.Preferences, t sc.Track, stream string, displayErr string, autoplay bool, playlist *sc.Playlist, nextTrack *sc.Track, volume string, mode string, audio string, downloadAudio *string, comments *sc.Paginated[*sc.Comment]) { if t.Artwork != "" { }

{ t.Title }

@TrackPlayer(prefs, t, stream, displayErr, autoplay, nextTrack, playlist, volume, mode, audio) if displayErr == "" && cfg.Restream {
download
} if t.Genre != "" {

{ t.Genre }

} if nextTrack != nil {
Playback info if playlist != nil {

In playlist:

@PlaylistItem(playlist, true) }

Next track:

@TrackItem(nextTrack, true, next(&t, nextTrack, playlist, mode, volume))
if playlist != nil { Stop playlist playback if mode != cfg.AutoplayRandom { Switch to random mode } else { Switch to normal mode } } else { Stop playback }
} @UserItem(&t.Author) @TrackButtons("", t) //
// view on soundcloud // if cfg.Restream { // download // } //

@Description(prefs, t.Description, nil)

{ strconv.FormatInt(t.Likes, 10) } likes

{ strconv.FormatInt(t.Played, 10) } plays

{ strconv.FormatInt(t.Reposted, 10) } reposts

Created: { t.CreatedAt }

Last modified: { t.LastModified }

if t.License != "" {

License: { t.License }

}

Policy: { t.Policy }

if t.TagList != "" {

Tags: { strings.Join(sc.TagListParser(t.TagList), ", ") }

}

Comments

if *prefs.DynamicLoadComments { if comments != nil {
@Comments(comments)
if comments.Next != "" { more comments } } else {
load comments } } else { if comments != nil {
@Comments(comments)
if comments.Next != "" { more comments } } else { load comments } } } templ Comments(comments *sc.Paginated[*sc.Comment]) { for _, c := range comments.Collection {

{ c.Body }

} } templ TrackEmbed(prefs cfg.Preferences, t sc.Track, stream string, displayErr string) { soundcloak if *prefs.Player == cfg.HLSPlayer && stream != "" { } if t.Artwork != "" { }

{ t.Title }

@TrackPlayer(prefs, t, stream, displayErr, false, nil, nil, "", "", "") @UserItem(&t.Author) } templ SearchTracks(p *sc.Paginated[*sc.Track]) { Found { strconv.FormatInt(p.Total, 10) } tracks

if len(p.Collection) == 0 && p.Total != 0 {

no more results

} else { for _, track := range p.Collection { @TrackItem(track, true, "") } if p.Next != "" && len(p.Collection) != int(p.Total) { more tracks } } } templ RelatedTracks(t sc.Track, p *sc.Paginated[*sc.Track]) { if t.Artwork != "" { }

{ t.Title }

@TrackButtons("related tracks", t)
if len(p.Collection) == 0 {

no more results

} else { for _, track := range p.Collection { @TrackItem(track, true, "") } if p.Next != "" { more tracks } } } templ TrackInAlbums(t sc.Track, p *sc.Paginated[*sc.Playlist]) { if t.Artwork != "" { }

{ t.Title }

@TrackButtons("in albums", t)
if len(p.Collection) == 0 {

no more albums

} else { for _, playlist := range p.Collection { @PlaylistItem(playlist, true) } if p.Next != "" { more albums } } } templ TrackInPlaylists(t sc.Track, p *sc.Paginated[*sc.Playlist]) { if t.Artwork != "" { }

{ t.Title }

@TrackButtons("in playlists", t)
if len(p.Collection) == 0 {

no more playlists

} else { for _, playlist := range p.Collection { @PlaylistItem(playlist, true) } if p.Next != "" { more playlists } } }