preferences, some fixes, dependency changes

This commit is contained in:
Laptop
2024-11-20 23:08:50 +02:00
parent 95c98dff10
commit fe16c25c3e
14 changed files with 469 additions and 156 deletions

View File

@@ -0,0 +1,76 @@
package templates
import "github.com/maid-zone/soundcloak/lib/cfg"
templ checkbox(name string, checked bool) {
if checked {
<input name={ name } type="checkbox" autocomplete="off" checked/>
} else {
<input name={ name } type="checkbox" autocomplete="off"/>
}
}
type option struct {
value string
desc string
disabled bool
}
// i 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>
}
}
}
</select>
}
templ Preferences(prefs cfg.Preferences) {
<h1>Preferences</h1>
<form method="post">
if cfg.ProxyImages {
<label>
Proxy images:
@checkbox("ProxyImages", *prefs.ProxyImages)
</label>
<br/>
}
<label>
Player:
@sel("Player", []option{
{"restream", "Restream Player", !cfg.Restream},
{"hls", "HLS Player (more stable, requires JS)", false},
{"none", "None", false},
}, *prefs.Player)
</label>
<br/>
if *prefs.Player == "hls" {
<h1>Player-specific preferences</h1>
if cfg.ProxyStreams {
<label>
Proxy song streams:
@checkbox("ProxyStreams", *prefs.ProxyStreams)
</label>
<br/>
}
<label>
Fully preload track:
@checkbox("FullyPreloadTrack", *prefs.FullyPreloadTrack)
</label>
<br/>
}
<input type="submit" value="Update" class="btn" style="margin-top: 1rem;"/>
<br>
<br>
<p>These preferences get saved in a cookie.</p>
</form>
}

View File

@@ -8,31 +8,39 @@ import (
"strings"
)
templ TrackHeader(t sc.Track) {
templ TrackHeader(prefs cfg.Preferences, t sc.Track) {
<meta name="og:site_name" content={ t.Author.Username + " ~ soundcloak" }/>
<meta name="og:title" content={ t.Title }/>
<meta name="og:description" content={ t.FormatDescription() }/>
<meta name="og:image" content={ t.Artwork }/>
<link rel="icon" type="image/x-icon" href={ t.Artwork }/>
if !cfg.Restream {
if *prefs.Player == cfg.HLSPlayer {
<script src="/js/hls.js/hls.light.js"></script>
}
}
templ TrackPlayer(track sc.Track, stream string, displayErr string) {
templ TrackPlayer(prefs cfg.Preferences, track sc.Track, stream string, displayErr string) {
if *prefs.Player == cfg.NonePlayer {
{{ return }}
}
if displayErr == "" {
if cfg.Restream {
if cfg.Restream && *prefs.Player == cfg.RestreamPlayer {
<audio src={ "/_/restream/" + track.Author.Permalink + "/" + track.Permalink } controls></audio>
} else if stream != "" {
<audio id="track" src={ stream } controls></audio>
if cfg.FullyPreloadTrack {
if *prefs.FullyPreloadTrack {
<script async src="/player_preload.js"></script>
} else {
<script async src="/player.js"></script>
}
<noscript>
<br/>
JavaScript is disabled! Audio playback may not work without it enabled.
JavaScript is disabled! Audio playback may not work without it enabled.
if cfg.Restream {
<br>
<a href="/_/preferences">You can enable Restream player in the preferences. It works without JavaScript.</a>
}
</noscript>
}
} else {
@@ -60,12 +68,12 @@ templ TrackItem(track *sc.Track, showUsername bool) {
}
}
templ Track(t sc.Track, stream string, displayErr string) {
templ Track(prefs cfg.Preferences, t sc.Track, stream string, displayErr string) {
if t.Artwork != "" {
<img src={ t.Artwork } width="300px"/>
}
<h1>{ t.Title }</h1>
@TrackPlayer(t, stream, displayErr)
@TrackPlayer(prefs, t, stream, displayErr)
if t.Genre != "" {
<p class="tag">{ t.Genre }</p>
} else {
@@ -96,7 +104,7 @@ templ Track(t sc.Track, stream string, displayErr string) {
}
}
templ TrackEmbed(t sc.Track, stream string, displayErr string) {
templ TrackEmbed(prefs cfg.Preferences, t sc.Track, stream string, displayErr string) {
<!DOCTYPE html>
<html lang="en">
<head>
@@ -104,7 +112,7 @@ templ TrackEmbed(t sc.Track, stream string, displayErr string) {
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="/global.css"/>
<title>soundcloak</title>
if !cfg.Restream {
if *prefs.Player == cfg.HLSPlayer {
<script src="/js/hls.js/hls.light.js"></script>
}
</head>
@@ -113,7 +121,7 @@ templ TrackEmbed(t sc.Track, stream string, displayErr string) {
<img src={ t.Artwork } width="300px"/>
}
<h1>{ t.Title }</h1>
@TrackPlayer(t, stream, displayErr)
@TrackPlayer(prefs, t, stream, displayErr)
@UserItem(&t.Author)
</body>
</html>