broadcast status changes to listeners
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package originals
|
package originals
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync"
|
||||||
"ytdlp-site/database"
|
"ytdlp-site/database"
|
||||||
"ytdlp-site/transcodes"
|
"ytdlp-site/transcodes"
|
||||||
|
|
||||||
@@ -35,10 +36,35 @@ type Original struct {
|
|||||||
PlaylistID uint // Playlist.ID (if part of a playlist)
|
PlaylistID uint // Playlist.ID (if part of a playlist)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var listeners map[uint][]*Queue // map of userId to queues
|
||||||
|
var lMu sync.Mutex
|
||||||
|
|
||||||
|
func bcast(userId, origId uint, status Status) {
|
||||||
|
lMu.Lock()
|
||||||
|
defer lMu.Unlock()
|
||||||
|
|
||||||
|
qs, ok := listeners[userId]
|
||||||
|
if ok {
|
||||||
|
for _, q := range qs {
|
||||||
|
q.Ch <- Event{origId, status}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func SetStatus(id uint, status Status) error {
|
func SetStatus(id uint, status Status) error {
|
||||||
db := database.Get()
|
db := database.Get()
|
||||||
log.Debugln("original", id, "status -> ", status)
|
log.Debugln("original", id, "status -> ", status)
|
||||||
return db.Model(&Original{}).Where("id = ?", id).Update("status", status).Error
|
err := db.Model(&Original{}).Where("id = ?", id).Update("status", status).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
var orig Original
|
||||||
|
err = db.Where("id = ?", id).First(&orig).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
bcast(orig.UserID, id, status)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// if there is an active transcode for this original,
|
// if there is an active transcode for this original,
|
||||||
@@ -78,19 +104,21 @@ func newQueue() *Queue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var listeners map[uint][]*Queue
|
|
||||||
|
|
||||||
func Subscribe(userId uint) *Queue {
|
func Subscribe(userId uint) *Queue {
|
||||||
_, ok := listeners[userId]
|
_, ok := listeners[userId]
|
||||||
if !ok {
|
if !ok {
|
||||||
listeners[userId] = make([]*Queue, 0)
|
listeners[userId] = make([]*Queue, 0)
|
||||||
}
|
}
|
||||||
q := newQueue()
|
q := newQueue()
|
||||||
|
lMu.Lock()
|
||||||
listeners[userId] = append(listeners[userId], q)
|
listeners[userId] = append(listeners[userId], q)
|
||||||
|
lMu.Unlock()
|
||||||
return q
|
return q
|
||||||
}
|
}
|
||||||
|
|
||||||
func Unsubscribe(userId uint, q *Queue) {
|
func Unsubscribe(userId uint, q *Queue) {
|
||||||
|
lMu.Lock()
|
||||||
|
defer lMu.Unlock()
|
||||||
|
|
||||||
qs, ok := listeners[userId]
|
qs, ok := listeners[userId]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
Reference in New Issue
Block a user