mirror of
https://git.maid.zone/stuff/soundcloak.git
synced 2025-12-10 13:49:39 +05:00
[WIP] get comments on track
This commit is contained in:
@@ -82,6 +82,13 @@ type Stream struct {
|
|||||||
URL string `json:"url"`
|
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) {
|
func (m Media) SelectCompatible(mode string, opus bool) (*Transcoding, string) {
|
||||||
switch mode {
|
switch mode {
|
||||||
case cfg.AudioBest:
|
case cfg.AudioBest:
|
||||||
@@ -484,7 +491,7 @@ func RecentTracks(cid string, prefs cfg.Preferences, args string) (*Paginated[*T
|
|||||||
return &p, nil
|
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]{
|
p := Paginated[*Track]{
|
||||||
Next: "https://" + api + "/tracks/" + string(t.ID) + "/related" + args,
|
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
|
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]{
|
p := Paginated[*Playlist]{
|
||||||
Next: "https://" + api + "/tracks/" + string(t.ID) + "/playlists_without_albums" + args,
|
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
|
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]{
|
p := Paginated[*Playlist]{
|
||||||
Next: "https://" + api + "/tracks/" + string(t.ID) + "/albums" + args,
|
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
|
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)
|
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]{
|
p := Paginated[*User]{
|
||||||
Next: "https://" + api + "/users/" + string(u.ID) + "/relatedartists?page_size=20",
|
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
|
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]{
|
p := Paginated[*Track]{
|
||||||
Next: "https://" + api + "/users/" + string(u.ID) + "/toptracks?limit=10",
|
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")
|
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 {
|
app.Get("/:user", func(c fiber.Ctx) error {
|
||||||
@@ -953,11 +962,11 @@ func main() {
|
|||||||
|___/\___| ⠛⠒⠛⠉⠉⠀⠀⠀⣴⠟⣣⡴⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|___/\___| ⠛⠒⠛⠉⠉⠀⠀⠀⣴⠟⣣⡴⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
~~~~~~~~~~~~~~~~~~~~⠛⠛~~~~~~~~~~~~~~~~~~~~~~~~`
|
~~~~~~~~~~~~~~~~~~~~⠛⠛~~~~~~~~~~~~~~~~~~~~~~~~`
|
||||||
fmt.Println(art)
|
fmt.Println(art)
|
||||||
|
const sep = " :: "
|
||||||
|
|
||||||
keys := [...]string{"Built from", "ProxyStreams", "ProxyImages", "Restream", "GetWebProfiles", "Listening on"}
|
|
||||||
// maps in go are unordered..
|
// maps in go are unordered..
|
||||||
table := map[string]string{
|
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),
|
"ProxyStreams": boolean(cfg.ProxyStreams),
|
||||||
"ProxyImages": boolean(cfg.ProxyStreams),
|
"ProxyImages": boolean(cfg.ProxyStreams),
|
||||||
"Restream": boolean(cfg.Restream),
|
"Restream": boolean(cfg.Restream),
|
||||||
@@ -973,11 +982,11 @@ func main() {
|
|||||||
longest = key
|
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(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])
|
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 != "" {
|
if t.Artwork != "" {
|
||||||
<img src={ t.Artwork } width="300px"/>
|
<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 != "" {
|
if t.TagList != "" {
|
||||||
<p>Tags: { strings.Join(sc.TagListParser(t.TagList), ", ") }</p>
|
<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) {
|
templ TrackEmbed(prefs cfg.Preferences, t sc.Track, stream string, displayErr string) {
|
||||||
|
|||||||
Reference in New Issue
Block a user