2019-01-02 16:11:22 +01:00
|
|
|
package www
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"log"
|
2019-01-02 19:06:45 +01:00
|
|
|
"strconv"
|
2019-01-02 16:11:22 +01:00
|
|
|
"html/template"
|
2019-01-02 19:06:45 +01:00
|
|
|
"net/http"
|
2019-01-02 16:11:22 +01:00
|
|
|
"github.com/gorilla/websocket"
|
|
|
|
|
"../playlist"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// todo: hub - https://stackoverflow.com/questions/31532652/go-websocket-send-all-clients-a-message
|
2019-01-03 14:21:24 +01:00
|
|
|
var wsc *websocket.Conn
|
2019-01-02 16:11:22 +01:00
|
|
|
|
2019-01-02 19:06:45 +01:00
|
|
|
var p *playlist.Playlist
|
2019-01-03 14:21:24 +01:00
|
|
|
var pp *playlist.PrettyPlaylist
|
|
|
|
|
var mp *playlist.MinimalPlaylist
|
2019-01-02 16:11:22 +01:00
|
|
|
|
|
|
|
|
var pln = log.Println
|
|
|
|
|
|
|
|
|
|
type op_t struct {
|
|
|
|
|
OP string `json:"op"`
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
INDEX int `json:"index"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var upgrader = websocket.Upgrader{
|
|
|
|
|
ReadBufferSize: 512,
|
|
|
|
|
WriteBufferSize: 512,
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-02 19:06:45 +01:00
|
|
|
func Init(playlist *playlist.Playlist) {
|
|
|
|
|
p = playlist
|
2019-01-03 14:21:24 +01:00
|
|
|
p.CALLB = pop_callback
|
2019-01-02 16:11:22 +01:00
|
|
|
pp = p.Pretty()
|
2019-01-03 14:21:24 +01:00
|
|
|
mp = p.Minimal()
|
2019-01-02 16:11:22 +01:00
|
|
|
http.HandleFunc("/pp", pp_handler)
|
|
|
|
|
http.HandleFunc("/ppop", pp_operations)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func pp_handler(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
t, err := template.ParseFiles("./www/tmpl/playlist.html")
|
|
|
|
|
if err != nil {
|
|
|
|
|
pln(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
pp.Print()
|
|
|
|
|
t.Execute(w, pp)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func pp_operations(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
pln("x")
|
|
|
|
|
c, err := upgrader.Upgrade(w, r, nil)
|
|
|
|
|
if err != nil {
|
|
|
|
|
pln(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2019-01-03 14:21:24 +01:00
|
|
|
wsc = c // this should be hub
|
2019-01-02 16:11:22 +01:00
|
|
|
go readop(c)
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-03 14:21:24 +01:00
|
|
|
func readop(c *websocket.Conn) {
|
2019-01-02 16:11:22 +01:00
|
|
|
for {
|
|
|
|
|
opdata := &op_t{}
|
|
|
|
|
if err := c.ReadJSON(&opdata); err != nil {
|
|
|
|
|
pln(err)
|
|
|
|
|
return //connection lost?
|
|
|
|
|
}
|
2019-01-02 19:06:45 +01:00
|
|
|
|
|
|
|
|
if opdata.OP == "move" {
|
|
|
|
|
if id, err := strconv.ParseUint(opdata.ID, 10, 32); err == nil {
|
|
|
|
|
p.Move(uint32(id), opdata.INDEX)
|
|
|
|
|
pp = p.Pretty()
|
2019-01-03 14:21:24 +01:00
|
|
|
mp = p.Minimal()
|
|
|
|
|
// pp.Print()
|
2019-01-02 19:06:45 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-03 14:21:24 +01:00
|
|
|
if err := c.WriteJSON(mp); err != nil {
|
2019-01-02 16:11:22 +01:00
|
|
|
pln(err)
|
|
|
|
|
return //connection lost?
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-03 14:21:24 +01:00
|
|
|
func pop_callback(list *playlist.Playlist) {
|
|
|
|
|
if list == p {
|
|
|
|
|
pp = p.Pretty()
|
|
|
|
|
mp = p.Minimal()
|
|
|
|
|
if wsc != nil {
|
|
|
|
|
wsc.WriteJSON(mp) // this should be hub broadcasted
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|