mirror of
https://git.maid.zone/stuff/soundcloak.git
synced 2025-12-10 05:39:38 +05:00
[WIP] get comments on track
This commit is contained in:
@@ -82,6 +82,13 @@ type Stream struct {
|
||||
URL string `json:"url"`
|
||||
}
|
||||
|
||||
type Comment struct {
|
||||
Kind string `json:"kind"` // "comment"
|
||||
Body string `json:"body"`
|
||||
Timestamp int `json:"timestamp"`
|
||||
Author User `json:"user"`
|
||||
}
|
||||
|
||||
func (m Media) SelectCompatible(mode string, opus bool) (*Transcoding, string) {
|
||||
switch mode {
|
||||
case cfg.AudioBest:
|
||||
@@ -484,7 +491,7 @@ func RecentTracks(cid string, prefs cfg.Preferences, args string) (*Paginated[*T
|
||||
return &p, nil
|
||||
}
|
||||
|
||||
func (t *Track) GetRelated(cid string, prefs cfg.Preferences, args string) (*Paginated[*Track], error) {
|
||||
func (t Track) GetRelated(cid string, prefs cfg.Preferences, args string) (*Paginated[*Track], error) {
|
||||
p := Paginated[*Track]{
|
||||
Next: "https://" + api + "/tracks/" + string(t.ID) + "/related" + args,
|
||||
}
|
||||
@@ -502,7 +509,7 @@ func (t *Track) GetRelated(cid string, prefs cfg.Preferences, args string) (*Pag
|
||||
return &p, nil
|
||||
}
|
||||
|
||||
func (t *Track) GetPlaylists(cid string, prefs cfg.Preferences, args string) (*Paginated[*Playlist], error) {
|
||||
func (t Track) GetPlaylists(cid string, prefs cfg.Preferences, args string) (*Paginated[*Playlist], error) {
|
||||
p := Paginated[*Playlist]{
|
||||
Next: "https://" + api + "/tracks/" + string(t.ID) + "/playlists_without_albums" + args,
|
||||
}
|
||||
@@ -520,7 +527,7 @@ func (t *Track) GetPlaylists(cid string, prefs cfg.Preferences, args string) (*P
|
||||
return &p, nil
|
||||
}
|
||||
|
||||
func (t *Track) GetAlbums(cid string, prefs cfg.Preferences, args string) (*Paginated[*Playlist], error) {
|
||||
func (t Track) GetAlbums(cid string, prefs cfg.Preferences, args string) (*Paginated[*Playlist], error) {
|
||||
p := Paginated[*Playlist]{
|
||||
Next: "https://" + api + "/tracks/" + string(t.ID) + "/albums" + args,
|
||||
}
|
||||
@@ -537,3 +544,21 @@ func (t *Track) GetAlbums(cid string, prefs cfg.Preferences, args string) (*Pagi
|
||||
|
||||
return &p, nil
|
||||
}
|
||||
|
||||
func (t Track) GetComments(cid string, prefs cfg.Preferences, args string) (*Paginated[*Comment], error) {
|
||||
p := Paginated[*Comment]{
|
||||
Next: "https://" + api + "/tracks/" + string(t.ID) + "/comments" + args,
|
||||
}
|
||||
|
||||
err := p.Proceed(cid, true)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, p := range p.Collection {
|
||||
p.Author.Fix(false)
|
||||
p.Author.Postfix(prefs)
|
||||
}
|
||||
|
||||
return &p, nil
|
||||
}
|
||||
|
||||
@@ -335,7 +335,7 @@ func (u *User) GetWebProfiles(cid string) error {
|
||||
return json.Unmarshal(data, &u.WebProfiles)
|
||||
}
|
||||
|
||||
func (u *User) GetRelated(cid string, prefs cfg.Preferences) ([]*User, error) {
|
||||
func (u User) GetRelated(cid string, prefs cfg.Preferences) ([]*User, error) {
|
||||
p := Paginated[*User]{
|
||||
Next: "https://" + api + "/users/" + string(u.ID) + "/relatedartists?page_size=20",
|
||||
}
|
||||
@@ -353,7 +353,7 @@ func (u *User) GetRelated(cid string, prefs cfg.Preferences) ([]*User, error) {
|
||||
return p.Collection, nil
|
||||
}
|
||||
|
||||
func (u *User) GetTopTracks(cid string, prefs cfg.Preferences) ([]*Track, error) {
|
||||
func (u User) GetTopTracks(cid string, prefs cfg.Preferences) ([]*Track, error) {
|
||||
p := Paginated[*Track]{
|
||||
Next: "https://" + api + "/users/" + string(u.ID) + "/toptracks?limit=10",
|
||||
}
|
||||
|
||||
21
main.go
21
main.go
@@ -757,8 +757,17 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
var comments *sc.Paginated[*sc.Comment]
|
||||
if q := c.Query("pagination"); q != "" {
|
||||
comments, err = track.GetComments(cid, prefs, q)
|
||||
if err != nil {
|
||||
log.Printf("failed to get %s from %s comments: %s\n", c.Params("track"), c.Params("user"), err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
c.Set("Content-Type", "text/html")
|
||||
return templates.Base(track.Title+" by "+track.Author.Username, templates.Track(prefs, track, stream, displayErr, c.Query("autoplay") == "true", playlist, nextTrack, c.Query("volume"), mode, audio), templates.TrackHeader(prefs, track, true)).Render(c.RequestCtx(), c)
|
||||
return templates.Base(track.Title+" by "+track.Author.Username, templates.Track(prefs, track, stream, displayErr, c.Query("autoplay") == "true", playlist, nextTrack, c.Query("volume"), mode, audio, comments), templates.TrackHeader(prefs, track, true)).Render(c.RequestCtx(), c)
|
||||
})
|
||||
|
||||
app.Get("/:user", func(c fiber.Ctx) error {
|
||||
@@ -953,11 +962,11 @@ func main() {
|
||||
|___/\___| ⠛⠒⠛⠉⠉⠀⠀⠀⣴⠟⣣⡴⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
~~~~~~~~~~~~~~~~~~~~⠛⠛~~~~~~~~~~~~~~~~~~~~~~~~`
|
||||
fmt.Println(art)
|
||||
const sep = " :: "
|
||||
|
||||
keys := [...]string{"Built from", "ProxyStreams", "ProxyImages", "Restream", "GetWebProfiles", "Listening on"}
|
||||
// maps in go are unordered..
|
||||
table := map[string]string{
|
||||
"Built from": fmt.Sprintf("%s (%s)", cfg.Commit, cfg.CommitURL),
|
||||
"Built from": fmt.Sprintf("%s (%s)", cfg.Commit, cfg.Repo),
|
||||
"ProxyStreams": boolean(cfg.ProxyStreams),
|
||||
"ProxyImages": boolean(cfg.ProxyStreams),
|
||||
"Restream": boolean(cfg.Restream),
|
||||
@@ -973,11 +982,11 @@ func main() {
|
||||
longest = key
|
||||
}
|
||||
}
|
||||
longest += " :: "
|
||||
longest += sep
|
||||
|
||||
for _, key := range keys {
|
||||
for _, key := range [...]string{"Built from", "ProxyStreams", "ProxyImages", "Restream", "GetWebProfiles", "Listening on"} {
|
||||
fmt.Print(key)
|
||||
fmt.Print(strings.Repeat(" ", len(longest)-len(key)-len(" :: ")) + " :: ")
|
||||
fmt.Print(strings.Repeat(" ", len(longest)-len(key)-len(sep)) + sep)
|
||||
fmt.Println(table[key])
|
||||
}
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ templ TrackItem(track *sc.Track, showUsername bool, overrideHref string) {
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
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, comments *sc.Paginated[*sc.Comment]) {
|
||||
if t.Artwork != "" {
|
||||
<img src={ t.Artwork } width="300px"/>
|
||||
}
|
||||
@@ -197,6 +197,17 @@ templ Track(prefs cfg.Preferences, t sc.Track, stream string, displayErr string,
|
||||
if t.TagList != "" {
|
||||
<p>Tags: { strings.Join(sc.TagListParser(t.TagList), ", ") }</p>
|
||||
}
|
||||
<h1>Comments</h1>
|
||||
<div>
|
||||
if comments != nil {
|
||||
for _, c := range comments.Collection {
|
||||
<div>
|
||||
<h3>{c.Author.Username}</h3>
|
||||
<p>{c.Body}</p>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
templ TrackEmbed(prefs cfg.Preferences, t sc.Track, stream string, displayErr string) {
|
||||
|
||||
Reference in New Issue
Block a user