summaryrefslogtreecommitdiff
path: root/Endpoints
diff options
context:
space:
mode:
authorPhysick <96335032+DegustatorPonos@users.noreply.github.com>2025-12-13 12:32:15 +0500
committerPhysick <96335032+DegustatorPonos@users.noreply.github.com>2025-12-13 12:32:15 +0500
commitae11ed555cb350ea4c11fc1625f4a56229969ddd (patch)
tree1d02b84131b713a2eed9a332ffac51997b0ec285 /Endpoints
parent4b8ef84059e772ef7636c451356680ec5b0983c4 (diff)
Tracks meta
Diffstat (limited to 'Endpoints')
-rw-r--r--Endpoints/SongList.go26
1 files changed, 21 insertions, 5 deletions
diff --git a/Endpoints/SongList.go b/Endpoints/SongList.go
index fe9ad60..0d0bf58 100644
--- a/Endpoints/SongList.go
+++ b/Endpoints/SongList.go
@@ -16,12 +16,15 @@ type Song struct {
Name string
Duration int
Start int
+ Meta audio.TrackMeta
}
type SongsList struct {
Songs []Song
}
+var cache *SongsList = nil
+
func (base Song) String() string {
var outp, jsonErr = json.Marshal(base)
if jsonErr != nil {
@@ -39,7 +42,7 @@ func (base SongsList) String() string {
}
func getSongs(w http.ResponseWriter, r *http.Request) {
- var songsList, err = getAvaliableSongs()
+ var songsList, err = GetAvaliableSongs()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
log.Printf("Failed to get files: %v\n", err.Error())
@@ -50,7 +53,7 @@ func getSongs(w http.ResponseWriter, r *http.Request) {
}
func getRandomSong(w http.ResponseWriter, r *http.Request) {
- var songsList, err = getAvaliableSongs()
+ var songsList, err = GetAvaliableSongs()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
log.Printf("Failed to get files: %v\n", err.Error())
@@ -58,10 +61,15 @@ func getRandomSong(w http.ResponseWriter, r *http.Request) {
}
var index = rand.Intn(len(songsList.Songs))
w.Header().Add("Content-Type", "application/json")
- fmt.Fprint(w, songsList.Songs[index])
+ var outp = songsList.Songs[index]
+ outp.Start = settings.Current.Distribution.GetDistributedInt(outp.Duration)
+ fmt.Fprint(w, outp)
}
-func getAvaliableSongs() (SongsList, error) {
+func GetAvaliableSongs() (SongsList, error) {
+ if cache != nil {
+ return *cache, nil
+ }
var files, dirErr = os.ReadDir(settings.Current.SongsLocation)
if dirErr != nil {
return SongsList{}, dirErr
@@ -69,18 +77,26 @@ func getAvaliableSongs() (SongsList, error) {
var outp = SongsList {
Songs: make([]Song, 0, len(files)),
}
- for _, v := range files {
+ for i, v := range files {
+ fmt.Printf("Indexing %d/%d\n", i+1, len(files))
var fullPath = fmt.Sprintf("%s/%s", settings.Current.SongsLocation, v.Name())
var duration, durErr = audio.GetSongDuration(fullPath)
if durErr != nil {
log.Printf("Failed to parse file metadata: File: %s, error: %s\n", fullPath, durErr.Error())
continue
}
+ var meta, metaErr = audio.GenerateMetadata(v.Name())
+ if metaErr != nil {
+ log.Printf("Failed to get metadata from file: %s", metaErr)
+ continue
+ }
var song = Song {
Name: v.Name(),
Duration: int(duration.Seconds()),
+ Meta: meta,
}
outp.Songs = append(outp.Songs, song)
}
+ cache = &outp
return outp, nil
}