Updated logic in DJ handlers. Also let's give a try to not run this updating code in a PlaylistNext() handler in a separate thread. Also funnier handling of audio tag missing.
This commit is contained in:
parent
454df3bb74
commit
cf90bba297
@ -42,11 +42,7 @@ func (dj *DJHandlers) ListenersUpdate(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
switch r.FormValue("action") {
|
switch r.FormValue("action") {
|
||||||
case "listener_add":
|
case "listener_add":
|
||||||
l := dj.listeners.Inc()
|
_ = dj.listeners.Inc()
|
||||||
go func() {
|
|
||||||
dj.curSong.UpdateMaxListeners(l)
|
|
||||||
dj.curSong.IncListeners()
|
|
||||||
}()
|
|
||||||
case "listener_remove":
|
case "listener_remove":
|
||||||
if _, err := dj.listeners.Dec(); err != nil {
|
if _, err := dj.listeners.Dec(); err != nil {
|
||||||
log.Println("DJHandlers.ListenersUpdate:", err)
|
log.Println("DJHandlers.ListenersUpdate:", err)
|
||||||
@ -63,6 +59,10 @@ func (dj *DJHandlers) ListenersUpdate(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const defaultArtistTag = "[LOL, no artist tag]"
|
||||||
|
const defaultTitleTag = "[No title tag for you -_-]"
|
||||||
|
const defaultTitleTagNoArtist = "[And no title tag either! Pffft]"
|
||||||
|
|
||||||
func (dj *DJHandlers) PlaylistNext(w http.ResponseWriter, _ *http.Request) {
|
func (dj *DJHandlers) PlaylistNext(w http.ResponseWriter, _ *http.Request) {
|
||||||
w.Header().Add("Content-Type", "text/plain")
|
w.Header().Add("Content-Type", "text/plain")
|
||||||
nxt := dj.playlist.Next()
|
nxt := dj.playlist.Next()
|
||||||
@ -75,40 +75,51 @@ func (dj *DJHandlers) PlaylistNext(w http.ResponseWriter, _ *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
// go func() {
|
||||||
oggf, err := oggtag.NewOggFile(nxt)
|
oggf, err := oggtag.NewOggFile(nxt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("cannot read an OGG file", nxt, ":", err)
|
log.Println("cannot read an OGG file", nxt, ":", err)
|
||||||
return
|
http.Error(w, "cannot read an OGG file", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
newSong := radio.Song{
|
||||||
|
Artist: oggf.GetTag("artist"),
|
||||||
|
Title: oggf.GetTag("title"),
|
||||||
|
Duration: oggf.GetDuration(),
|
||||||
|
// Here 5 seconds are being added because it is approximately the
|
||||||
|
// time between the creation of this Song object and when ezstream
|
||||||
|
// actually starts to play it.
|
||||||
|
StartAt: time.Now().Add(5 * time.Second)}
|
||||||
|
|
||||||
|
if newSong.Artist == "" && newSong.Title == "" {
|
||||||
|
log.Println("Playlist:", nxt, "has no artist and title tags.")
|
||||||
|
newSong.Artist = defaultArtistTag
|
||||||
|
newSong.Title = defaultTitleTagNoArtist
|
||||||
|
} else if newSong.Artist == "" {
|
||||||
|
log.Println("Playlist:", nxt, "has no artist tag.")
|
||||||
|
newSong.Artist = defaultArtistTag
|
||||||
|
} else if newSong.Title == "" {
|
||||||
|
log.Println("Playlist:", nxt, "has no title tag.")
|
||||||
|
newSong.Title = defaultTitleTag
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasSuffix(nxt, "/fallback.ogg") {
|
||||||
|
newSong.Artist = "Nothing to play. Playing a fallback: " + newSong.Artist
|
||||||
|
}
|
||||||
|
|
||||||
|
dj.curSong.Listeners, dj.curSong.MaxListeners = dj.listeners.Reset()
|
||||||
|
|
||||||
|
if dj.curSong.Artist != "" {
|
||||||
|
if err := dj.stats.Add(dj.curSong); err != nil {
|
||||||
|
log.Println("cannot add a song to a stats DB:", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
newSong := radio.Song{
|
*dj.curSong = newSong
|
||||||
Artist: oggf.GetTag("artist"),
|
dj.curSong.Listeners = 0
|
||||||
Title: oggf.GetTag("title"),
|
dj.curSong.MaxListeners = 0
|
||||||
Duration: oggf.GetDuration(),
|
// }()
|
||||||
Listeners: dj.listeners.Current(),
|
|
||||||
MaxListeners: dj.listeners.Current(),
|
|
||||||
// Here 5 seconds are being added because it is approximately the
|
|
||||||
// time between the creation of this Song object and when ezstream
|
|
||||||
// actually starts to play it.
|
|
||||||
StartAt: time.Now().Add(5 * time.Second)}
|
|
||||||
|
|
||||||
if newSong.Artist == "" || newSong.Title == "" {
|
|
||||||
log.Println("Playlist:", nxt, "has no artist or title tags.")
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.HasSuffix(nxt, "/fallback.ogg") {
|
|
||||||
newSong.Artist = "Nothing to play. Playing a fallback: " + newSong.Artist
|
|
||||||
}
|
|
||||||
|
|
||||||
if dj.curSong.Artist != "" {
|
|
||||||
if err := dj.stats.Add(dj.curSong); err != nil {
|
|
||||||
log.Println("cannot add a song to a stats DB:", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dj.curSong.SetFrom(&newSong)
|
|
||||||
}()
|
|
||||||
|
|
||||||
fmt.Fprintln(w, nxt)
|
fmt.Fprintln(w, nxt)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user