fixes?; downloading tracks with metadata (restream required)

This commit is contained in:
Laptop
2024-11-29 00:36:21 +02:00
parent 8ef6813018
commit 5f7f2fd0f4
14 changed files with 289 additions and 132 deletions

View File

@@ -4,6 +4,7 @@ import (
"bytes"
"io"
"github.com/bogem/id3v2/v2"
"github.com/gofiber/fiber/v2"
"github.com/maid-zone/soundcloak/lib/cfg"
"github.com/maid-zone/soundcloak/lib/sc"
@@ -126,9 +127,18 @@ func (r *reader) Read(buf []byte) (n int, err error) {
return
}
type collector struct {
data []byte
}
func (c *collector) Write(data []byte) (n int, err error) {
c.data = append(c.data, data...)
return len(data), nil
}
func Load(r fiber.Router) {
r.Get("/_/restream/:author/:track", func(c *fiber.Ctx) error {
t, err := sc.GetTrack(stubPrefs, c.Params("author")+"/"+c.Params("track"))
t, err := sc.GetTrack(c.Params("author") + "/" + c.Params("track"))
if err != nil {
return err
}
@@ -151,6 +161,30 @@ func Load(r fiber.Router) {
return err
}
if c.Query("metadata") == "true" {
tag := id3v2.NewEmptyTag()
tag.SetArtist(t.Author.Username)
if t.Genre != "" {
tag.SetGenre(t.Genre)
}
tag.SetTitle(t.Title)
if t.Artwork != "" {
data, mime, err := t.DownloadImage()
if err != nil {
return err
}
tag.AddAttachedPicture(id3v2.PictureFrame{MimeType: mime, Picture: data, PictureType: id3v2.PTFrontCover, Encoding: id3v2.EncodingUTF8})
}
var c collector
tag.WriteTo(&c)
r.leftover = c.data
}
return c.SendStream(&r)
})
}