feat: implement metadata fetch command

This commit is contained in:
2026-02-20 09:32:59 +01:00
parent c87f1987b5
commit 36030f9f4c
2 changed files with 76 additions and 2 deletions

View File

@@ -3,8 +3,10 @@ package lib
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"io" "io"
"net/http" "net/http"
"strconv"
"github.com/go-flac/flacpicture/v2" "github.com/go-flac/flacpicture/v2"
"github.com/go-flac/flacvorbis/v2" "github.com/go-flac/flacvorbis/v2"
@@ -66,7 +68,67 @@ func (app *App) GetTrackMetadata(url string) (TrackMetadata, error) {
} }
func (app *App) PrintMetadata(url string) error { func (app *App) PrintMetadata(url string) error {
return errors.New("Unimplemented.") urlType, err := ParseUrlType(url)
if err != nil {
return err
}
switch urlType {
case UrlTypeTrack:
metadata, err := app.GetTrackMetadata(url)
if err != nil {
return err
}
if err = PrintTrackMetadata(metadata); err != nil {
return err
}
return nil
case UrlTypePlaylist:
metadata, err := app.GetPlaylistMetadata(url)
if err != nil {
return err
}
var members, owner string
for _, member := range metadata.Data.Playlist.Members.Items {
if member.IsOwner {
owner = member.User.Data.Name
continue
}
members += member.User.Data.Name + " "
}
fmt.Println(
"Name: " + metadata.Data.Playlist.Name + "\n" +
"Owner: " + owner + "\n" +
"Members: " + members + "\n" +
"Tracks: " + strconv.Itoa(metadata.Data.Playlist.Content.TotalCount),
)
return nil
}
return errors.New("Invalid URL type.")
}
func PrintTrackMetadata(metadata TrackMetadata) error {
artists, err := GetArtists(metadata)
if err != nil {
return err
}
fmt.Println(
"Name:\t\t" + metadata.Data.TrackUnion.Name + "\n" +
"Artists:\t" + artists + "\n" +
"Album:\t\t" + metadata.Data.TrackUnion.AlbumOfTrack.Name + "\n" +
"Year:\t\t" + strconv.FormatInt(metadata.Data.TrackUnion.AlbumOfTrack.Date.Year, 10) + "\n" +
"Spotify ID:\t" + metadata.Data.TrackUnion.Id,
)
return nil
} }
func (app *App) EmbedMetadata(fileName string, metadata TrackMetadata) error { func (app *App) EmbedMetadata(fileName string, metadata TrackMetadata) error {

View File

@@ -128,8 +128,10 @@ type PlaylistMetadata struct {
Data struct { Data struct {
Playlist struct { Playlist struct {
Name string `json:"name"` Name string `json:"name"`
Uri string `json:"uri"`
Content struct { Content struct {
Items []struct { TotalCount int `json:"totalCount"`
Items []struct {
Item struct { Item struct {
Data struct { Data struct {
IdentityTrait struct { IdentityTrait struct {
@@ -140,6 +142,16 @@ type PlaylistMetadata struct {
} `json:"itemV3"` } `json:"itemV3"`
} `json:"items"` } `json:"items"`
} `json:"content"` } `json:"content"`
Members struct {
Items []struct {
IsOwner bool `json:"isOwner"`
User struct {
Data struct {
Name string `json:"name"`
} `json:"data"`
} `json:"user"`
} `json:"items"`
} `json:"members"`
} `json:"playlistV2"` } `json:"playlistV2"`
} `json:"data"` } `json:"data"`
} }