mirror of
https://git.maid.zone/stuff/soundcloak.git
synced 2026-03-22 08:38:11 +05:00
Autoplay tracks in playlists; increase caching time; some fixes
This commit is contained in:
@@ -13,7 +13,7 @@ templ FeaturedTracks(p *sc.Paginated[*sc.Track]) {
|
||||
<p>no more tracks</p>
|
||||
} else {
|
||||
for _, track := range p.Collection {
|
||||
@TrackItem(track, true)
|
||||
@TrackItem(track, true, "")
|
||||
}
|
||||
if p.Next != "" {
|
||||
<a class="btn" href={ templ.URL("/_/featured?pagination=" + url.QueryEscape(strings.Split(p.Next, "/all-music")[1])) } rel="noreferrer">more tracks</a>
|
||||
|
||||
@@ -16,8 +16,12 @@ templ PlaylistHeader(p sc.Playlist) {
|
||||
<link rel="icon" type="image/x-icon" href={ p.Artwork }/>
|
||||
}
|
||||
|
||||
func playlist(t sc.Track, p sc.Playlist) string {
|
||||
return t.Href() + "?playlist=" + p.Href()[1:]
|
||||
}
|
||||
|
||||
templ PlaylistItem(playlist *sc.Playlist, showUsername bool) {
|
||||
<a class="listing" href={ templ.URL("/" + playlist.Author.Permalink + "/sets/" + playlist.Permalink) }>
|
||||
<a class="listing" href={ templ.URL(playlist.Href()) }>
|
||||
if playlist.Artwork != "" {
|
||||
<img src={ playlist.Artwork }/>
|
||||
} else {
|
||||
@@ -40,7 +44,7 @@ templ Playlist(prefs cfg.Preferences, p sc.Playlist) {
|
||||
<h1>{ p.Title }</h1>
|
||||
@UserItem(&p.Author)
|
||||
<div style="display: flex;">
|
||||
<a class="btn" href={ templ.URL("https://soundcloud.com/" + p.Author.Permalink + "/sets/" + p.Permalink) }>view on soundcloud</a>
|
||||
<a class="btn" href={ templ.URL("https://soundcloud.com" + p.Href()) }>view on soundcloud</a>
|
||||
</div>
|
||||
<br/>
|
||||
@Description(prefs, p.Description, nil)
|
||||
@@ -49,7 +53,11 @@ templ Playlist(prefs cfg.Preferences, p sc.Playlist) {
|
||||
<br/>
|
||||
<div>
|
||||
for _, track := range p.Tracks {
|
||||
@TrackItem(&track, true)
|
||||
if *prefs.AutoplayNextTrack {
|
||||
@TrackItem(&track, true, playlist(track, p))
|
||||
} else {
|
||||
@TrackItem(&track, true, "")
|
||||
}
|
||||
}
|
||||
</div>
|
||||
if len(p.MissingTracks) != 0 {
|
||||
|
||||
@@ -17,17 +17,14 @@ type option struct {
|
||||
}
|
||||
|
||||
// i hate this
|
||||
// ^ outdated, i no longer hate this
|
||||
templ sel(name string, options []option, selected string) {
|
||||
<select name={ name } autocomplete="off">
|
||||
for _, opt := range options {
|
||||
if opt.value == selected {
|
||||
<option value={ opt.value } selected>{ opt.desc }</option>
|
||||
} else {
|
||||
if opt.disabled {
|
||||
<option value={ opt.value } disabled>{ opt.desc }</option>
|
||||
} else {
|
||||
<option value={ opt.value }>{ opt.desc }</option>
|
||||
}
|
||||
<option value={ opt.value } disabled?={ opt.disabled }>{ opt.desc }</option>
|
||||
}
|
||||
}
|
||||
</select>
|
||||
@@ -71,6 +68,11 @@ templ Preferences(prefs cfg.Preferences) {
|
||||
@checkbox("FullyPreloadTrack", *prefs.FullyPreloadTrack)
|
||||
</label>
|
||||
<br/>
|
||||
<label>
|
||||
Autoplay next track in playlists:
|
||||
@checkbox("AutoplayNextTrack", *prefs.AutoplayNextTrack)
|
||||
</label>
|
||||
<br/>
|
||||
}
|
||||
<input type="submit" value="Update" class="btn" style="margin-top: 1rem;"/>
|
||||
<br/>
|
||||
|
||||
@@ -19,15 +19,23 @@ templ TrackHeader(prefs cfg.Preferences, t sc.Track) {
|
||||
}
|
||||
}
|
||||
|
||||
templ TrackPlayer(prefs cfg.Preferences, track sc.Track, stream string, displayErr string) {
|
||||
func next(t *sc.Track, p *sc.Playlist) string {
|
||||
return t.Href() + "?autoplay=true&playlist=" + p.Href()[1:]
|
||||
}
|
||||
|
||||
templ TrackPlayer(prefs cfg.Preferences, track sc.Track, stream string, displayErr string, autoplay bool, nextTrack *sc.Track, playlist *sc.Playlist, volume string) {
|
||||
if *prefs.Player == cfg.NonePlayer {
|
||||
{{ return }}
|
||||
}
|
||||
if displayErr == "" {
|
||||
if cfg.Restream && *prefs.Player == cfg.RestreamPlayer {
|
||||
<audio src={ "/_/restream/" + track.Author.Permalink + "/" + track.Permalink } controls></audio>
|
||||
<audio src={ "/_/restream" + track.Href() } controls autoplay?={ autoplay }></audio>
|
||||
} else if stream != "" {
|
||||
<audio id="track" src={ stream } controls></audio>
|
||||
if nextTrack != nil {
|
||||
<audio id="track" src={ stream } controls autoplay?={ autoplay } data-next={next(nextTrack, playlist)} volume={volume}></audio>
|
||||
} else {
|
||||
<audio id="track" src={ stream } controls autoplay?={ autoplay }></audio>
|
||||
}
|
||||
if *prefs.FullyPreloadTrack {
|
||||
<script async src="/player_preload.js"></script>
|
||||
} else {
|
||||
@@ -49,9 +57,12 @@ templ TrackPlayer(prefs cfg.Preferences, track sc.Track, stream string, displayE
|
||||
}
|
||||
}
|
||||
|
||||
templ TrackItem(track *sc.Track, showUsername bool) {
|
||||
templ TrackItem(track *sc.Track, showUsername bool, overrideHref string) {
|
||||
if track.Title != "" {
|
||||
<a class="listing" href={ templ.URL("/" + track.Author.Permalink + "/" + track.Permalink) }>
|
||||
{{ if overrideHref == "" {
|
||||
overrideHref = track.Href()
|
||||
} }}
|
||||
<a class="listing" href={ templ.URL(overrideHref) }>
|
||||
if track.Artwork != "" {
|
||||
<img src={ track.Artwork }/>
|
||||
} else {
|
||||
@@ -67,24 +78,36 @@ templ TrackItem(track *sc.Track, showUsername bool) {
|
||||
}
|
||||
}
|
||||
|
||||
templ Track(prefs cfg.Preferences, t sc.Track, stream string, displayErr string) {
|
||||
templ Track(prefs cfg.Preferences, t sc.Track, stream string, displayErr string, autoplay bool, playlist *sc.Playlist, nextTrack *sc.Track, volume string) {
|
||||
if t.Artwork != "" {
|
||||
<img src={ t.Artwork } width="300px"/>
|
||||
}
|
||||
<h1>{ t.Title }</h1>
|
||||
@TrackPlayer(prefs, t, stream, displayErr)
|
||||
@TrackPlayer(prefs, t, stream, displayErr, autoplay, nextTrack, playlist, volume)
|
||||
if t.Genre != "" {
|
||||
<p class="tag">{ t.Genre }</p>
|
||||
} else {
|
||||
<br/>
|
||||
<br/>
|
||||
}
|
||||
if playlist != nil {
|
||||
<details style="margin-bottom: 1rem;">
|
||||
<summary>Playback info</summary>
|
||||
|
||||
<h2>In playlist:</h2>
|
||||
@PlaylistItem(playlist, true)
|
||||
|
||||
<h2>Next track:</h2>
|
||||
@TrackItem(nextTrack, true, next(nextTrack, playlist) + "&volume=" + volume)
|
||||
|
||||
<a href={templ.URL(t.Href())} class="link">Stop playlist playback</a>
|
||||
</details>
|
||||
}
|
||||
@UserItem(&t.Author)
|
||||
//<div class="btns">
|
||||
<div style="display: flex; gap: 1rem">
|
||||
<a class="btn" href={ templ.URL("https://soundcloud.com/" + t.Author.Permalink + "/" + t.Permalink) }>view on soundcloud</a>
|
||||
<a class="btn" href={ templ.URL("https://soundcloud.com" + t.Href()) }>view on soundcloud</a>
|
||||
if cfg.Restream {
|
||||
<a class="btn" href={ templ.URL("/_/restream/" + t.Author.Permalink + "/" + t.Permalink + "?metadata=true") } download={ t.Author.Username + " - " + t.Title + ".mp3" }>download</a>
|
||||
<a class="btn" href={ templ.URL("/_/restream" + t.Href() + "?metadata=true") } download={ t.Author.Username + " - " + t.Title + ".mp3" }>download</a>
|
||||
}
|
||||
</div>
|
||||
<br/>
|
||||
@@ -119,7 +142,7 @@ templ TrackEmbed(prefs cfg.Preferences, t sc.Track, stream string, displayErr st
|
||||
<img src={ t.Artwork } width="300px"/>
|
||||
}
|
||||
<h1>{ t.Title }</h1>
|
||||
@TrackPlayer(prefs, t, stream, displayErr)
|
||||
@TrackPlayer(prefs, t, stream, displayErr, false, nil, nil, "")
|
||||
@UserItem(&t.Author)
|
||||
</body>
|
||||
</html>
|
||||
@@ -133,7 +156,7 @@ templ SearchTracks(p *sc.Paginated[*sc.Track]) {
|
||||
<p>no more results</p>
|
||||
} else {
|
||||
for _, track := range p.Collection {
|
||||
@TrackItem(track, true)
|
||||
@TrackItem(track, true, "")
|
||||
}
|
||||
if p.Next != "" && len(p.Collection) != int(p.Total) {
|
||||
<a class="btn" href={ templ.URL("?type=tracks&pagination=" + url.QueryEscape(strings.Split(p.Next, "/tracks")[1])) } rel="noreferrer">more tracks</a>
|
||||
|
||||
@@ -105,7 +105,7 @@ templ User(prefs cfg.Preferences, u sc.User, p *sc.Paginated[*sc.Track]) {
|
||||
if len(p.Collection) != 0 {
|
||||
<div>
|
||||
for _, track := range p.Collection {
|
||||
@TrackItem(track, false)
|
||||
@TrackItem(track, false, "")
|
||||
}
|
||||
</div>
|
||||
if p.Next != "" && len(p.Collection) != int(u.Tracks) {
|
||||
@@ -160,7 +160,7 @@ templ UserReposts(prefs cfg.Preferences, u sc.User, p *sc.Paginated[*sc.Repost])
|
||||
<div>
|
||||
for _, repost := range p.Collection {
|
||||
if repost.Type == sc.TrackRepost && repost.Track != nil {
|
||||
@TrackItem(repost.Track, true)
|
||||
@TrackItem(repost.Track, true, "")
|
||||
} else if repost.Type == sc.PlaylistRepost && repost.Playlist != nil {
|
||||
@PlaylistItem(repost.Playlist, true)
|
||||
}
|
||||
@@ -182,7 +182,7 @@ templ UserLikes(prefs cfg.Preferences, u sc.User, p *sc.Paginated[*sc.Like]) {
|
||||
<div>
|
||||
for _, like := range p.Collection {
|
||||
if like.Track != nil {
|
||||
@TrackItem(like.Track, true)
|
||||
@TrackItem(like.Track, true, "")
|
||||
} else if like.Playlist != nil {
|
||||
@PlaylistItem(like.Playlist, true)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user