mjibson / moggio Goto Github PK
View Code? Open in Web Editor NEWA multi-source music player in Go
License: ISC License
A multi-source music player in Go
License: ISC License
heya matt!
trying out mog today. looks pretty neat.
one thing i noticed, i added a bunch of files and queued them up. it successfully jumps to the next song when playing, but when i go to http://localhost:6601/queue the list is empty?
How about implementing them using dbus? As far as I know dbus is supported on windows.
Got this error:
/api/source/set: 500 Internal Server Error: Call error 5: API request too large: 1349078. Limit for datastore_v3 is: 1048576
Go 1.6 added restrictions for safer C pointer handling so it looks like the port audio dependency fails in 1.6:
panic: runtime error: cgo argument has Go pointer to Go pointer
goroutine 1 [running]:
panic(0x4292700, 0xc82012c0a0)
/usr/local/Cellar/go/1.6/libexec/src/runtime/panic.go:464 +0x3e6
github.com/mjibson/mog/vendor/github.com/gordonklaus/portaudio._cgoCheckPointer1(0x4236b20, 0xc820138080, 0x0, 0x0, 0x0, 0x421b880)
??:0 +0x4d
github.com/mjibson/mog/vendor/github.com/gordonklaus/portaudio.OpenStream(0x0, 0x0, 0x0, 0xc820132120, 0x2, 0x120e9e0, 0x40e5888000000000, 0x400, 0x0, 0xc820185bd0, ...)
/Users/shazow/local/go/src/github.com/mjibson/mog/vendor/github.com/gordonklaus/portaudio/portaudio.go:504 +0x3d1
github.com/mjibson/mog/vendor/github.com/gordonklaus/portaudio.OpenDefaultStream(0x0, 0x2, 0x40e5888000000000, 0x400, 0xc820185bd0, 0x1, 0x1, 0xc820140298, 0x0, 0x0)
/Users/shazow/local/go/src/github.com/mjibson/mog/vendor/github.com/gordonklaus/portaudio/portaudio.go:538 +0x24a
github.com/mjibson/mog/output.get(0xac44, 0x2, 0x0, 0x0, 0x0, 0x0)
/Users/shazow/local/go/src/github.com/mjibson/mog/output/port.go:22 +0x1ba
github.com/mjibson/mog/output.Get(0xac44, 0x2, 0x0, 0x0, 0x0, 0x0)
/Users/shazow/local/go/src/github.com/mjibson/mog/output/output.go:22 +0x115
main.PlayPath(0x7fff5fbff9ee, 0x73, 0x4980000, 0xc82012c010, 0x0, 0x0)
Probably not buffering fast enough.
Support it. Maybe it'll support better search instead of the current crawl everything solution.
Loading 2900 songs from local disk (not a lot), and running ~10 minutes, memory usage was 425MB resident and 1.5GB virtual. Realistically, this should be able to run in <100MB resident, <200MB virtual.
Linux, downloaded 64bit version.
For example, when a source is refreshed, the current search query should continue to apply while the track listing is updated.
Merge in with bandcamp protocol. In general it can look for .mp3, .wav, and .nsf[e] links (so, all file extensions supported by the codecs) and add those as songs. It should first, though, try to smart detect if it's a bandcamp or other special page.
Nice work @mjibson. Moggio is very cool. I love the way multiple sources are brought together.
Thought I would open this up to see if anyone would be interested in an iTunes backend? If the server is running on the same machine as my iTunes library it should be possible to play the audio, maybe with afplay
(not sure, I haven't got my iTunes library on this machine).
Not sure how this fits in though. I haven't looked into how the sources/backends are built yet.
Happened at start of song.
2015/06/10 20:09:09 play
2015/06/10 20:09:09 GMUSIC f5ca2839-473e-3f31-9856-41d95b607caa
2015/06/10 20:09:09 playing {3m30s Queen '39 A Night At The Opera 5 http://lh5.ggpht.com/cBzAj2Q0WTVhaKL3TDlbguwupPbDFp5HwwQCyD_1go0NWTeMFg93MxM-NP9tIcBzr_JIEACP2Q} 44100 2 11.337µs 46.436352ms
2015/06/10 20:09:10 server.cmdDoSave
2015/06/10 20:09:11 save to db complete
2015/06/10 20:09:11 server.controlCmd
net.(*netFD).Read(0xc2089dd810, 0xc20820d000, 0x1000, 0x1000, 0x0, 0x7f91e9c52cf0, 0xc214bbc558)
/usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208b9e0b8, 0xc20820d000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:121 +0xdc
crypto/tls.(*block).readFromUntil(0xc208209da0, 0x7f91e9c79e40, 0xc208b9e0b8, 0x5, 0x0, 0x0)
/usr/local/go/src/crypto/tls/conn.go:454 +0xe6
crypto/tls.(*Conn).readRecord(0xc2080a02c0, 0x17, 0x0, 0x0)
/usr/local/go/src/crypto/tls/conn.go:539 +0x2da
crypto/tls.(*Conn).Read(0xc2080a02c0, 0xc208226000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/crypto/tls/conn.go:904 +0x166
net/http.noteEOFReader.Read(0x7f91e418b978, 0xc2080a02c0, 0xc2099883c8, 0xc208226000, 0x1000, 0x1000, 0x7fea80, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:1270 +0x6e
net/http.(*noteEOFReader).Read(0xc208cfce60, 0xc208226000, 0x1000, 0x1000, 0xc208014d00, 0x0, 0x0)
<autogenerated>:125 +0xd4
bufio.(*Reader).fill(0xc208d37080)
/usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).Peek(0xc208d37080, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:132 +0xf0
net/http.(*persistConn).readLoop(0xc209988370)
/usr/local/go/src/net/http/transport.go:842 +0xa4
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:660 +0xc9f
goroutine 410 [select]:
net/http.(*persistConn).writeLoop(0xc209988370)
/usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:661 +0xcbc
Was trying to play a NSF song. No sound came out, then this.
2015/07/01 14:54:30 open file /home/mjibson/music/nsfe/Ninja Gaiden 1.nsfe
panic: delay timer expired
goroutine 306 [running]:
github.com/mjibson/mog/server.func·027()
/go/src/github.com/mjibson/mog/server/audio.go:366 +0x64
created by time.goFunc
/usr/local/go/src/time/sleep.go:129 +0x4b
goroutine 1 [IO wait]:
net.(*pollDesc).Wait(0xc2080116b0, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2080116b0, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).accept(0xc208011650, 0x0, 0x7f9aacb86cf0, 0xc20a0e01a8)
/usr/local/go/src/net/fd_unix.go:419 +0x40b
net.(*TCPListener).AcceptTCP(0xc2080343f0, 0x47a44e, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:234 +0x4e
net/http.tcpKeepAliveListener.Accept(0xc2080343f0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1976 +0x4c
net/http.(*Server).Serve(0xc20803c780, 0x7f9aacb8b938, 0xc2080343f0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1728 +0x92
net/http.(*Server).ListenAndServe(0xc20803c780, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1718 +0x154
net/http.ListenAndServe(0x904ab0, 0x5, 0x7f9aacb8a870, 0xc2080b0c30, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1808 +0xba
github.com/mjibson/mog/server.(*Server).ListenAndServe(0xc208064500, 0x904ab0, 0x5, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:58 +0x1ea
github.com/mjibson/mog/server.ListenAndServe(0xc2080849e0, 0x18, 0x904ab0, 0x5, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/server.go:58 +0x2e6
main.main()
/go/src/github.com/mjibson/mog/main.go:100 +0x97f
goroutine 8 [runnable]:
github.com/mjibson/mog/_third_party/github.com/mjibson/nsf/cpu6502.(*Cpu).Step(0xc2088287e0)
/go/src/github.com/mjibson/mog/_third_party/github.com/mjibson/nsf/cpu6502/6502.go:194
github.com/mjibson/mog/_third_party/github.com/mjibson/nsf/cpu6502.(*Cpu).Run(0xc2088287e0)
/go/src/github.com/mjibson/mog/_third_party/github.com/mjibson/nsf/cpu6502/6502.go:174 +0x33
github.com/mjibson/mog/_third_party/github.com/mjibson/nsf.(*NSF).Init(0xc20d261440, 0x5)
/go/src/github.com/mjibson/mog/_third_party/github.com/mjibson/nsf/emu.go:126 +0x33b
github.com/mjibson/mog/codec/nsf.(*NSFSong).Init(0xc20987a720, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/codec/nsf/nsf.go:55 +0x1bb
github.com/mjibson/mog/server.func·014()
/go/src/github.com/mjibson/mog/server/audio.go:185 +0x5e1
github.com/mjibson/mog/server.func·015()
/go/src/github.com/mjibson/mog/server/audio.go:247 +0x11c
github.com/mjibson/mog/server.func·014()
/go/src/github.com/mjibson/mog/server/audio.go:238 +0x13d5
github.com/mjibson/mog/server.(*Server).audio(0xc208064500)
/go/src/github.com/mjibson/mog/server/audio.go:375 +0xdca
created by github.com/mjibson/mog/server.New
/go/src/github.com/mjibson/mog/server/server.go:173 +0x536
goroutine 18 [chan send]:
github.com/mjibson/mog/server.func·028()
/go/src/github.com/mjibson/mog/server/audio.go:368 +0xf4
created by github.com/mjibson/mog/server.(*Server).audio
/go/src/github.com/mjibson/mog/server/audio.go:371 +0xd41
goroutine 81 [chan receive, 301 minutes]:
github.com/mjibson/mog/server.(*Server).WebSocket(0xc208064500, 0xc20880c000)
/go/src/github.com/mjibson/mog/server/websocket.go:102 +0xe5
github.com/mjibson/mog/server.*Server.WebSocket·fm(0xc20880c000)
/go/src/github.com/mjibson/mog/server/web.go:49 +0x31
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Server.serveWebSocket(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa025b8, ...)
/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:90 +0x292
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Handler.ServeHTTP(0xc2080e7c90, 0x7f9aacb8baf0, 0xc20803eaa0, 0xc2082405b0)
/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:113 +0x8a
net/http.(*ServeMux).ServeHTTP(0xc2080b0c30, 0x7f9aacb8baf0, 0xc20803eaa0, 0xc2082405b0)
/usr/local/go/src/net/http/server.go:1541 +0x17d
net/http.serverHandler.ServeHTTP(0xc20803c780, 0x7f9aacb8baf0, 0xc20803eaa0, 0xc2082405b0)
/usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc2080803c0)
/usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 113 [syscall, 301 minutes, locked to thread]:
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1
goroutine 218 [select, 20 minutes]:
net/http.(*persistConn).writeLoop(0xc208162000)
/usr/local/go/src/net/http/transport.go:945 +0x41d
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:661 +0xcbc
goroutine 217 [select, 20 minutes]:
net/http.(*persistConn).readLoop(0xc208162000)
/usr/local/go/src/net/http/transport.go:928 +0x9ce
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:660 +0xc9f
goroutine 208 [chan send]:
github.com/mjibson/mog/server.(*Server).Cmd(0xc208064500, 0xc209c78e10, 0xc2094a4020, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:127 +0x44d
github.com/mjibson/mog/server.*Server.Cmd·fm(0xc209c78e10, 0xc2094a4020, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:36 +0x79
github.com/mjibson/mog/server.func·035(0x7f9aacb8baf0, 0xc208080000, 0xc208240000, 0xc2094a4020, 0x1, 0x1)
/go/src/github.com/mjibson/mog/server/web.go:83 +0x197
github.com/mjibson/mog/_third_party/github.com/julienschmidt/httprouter.(*Router).ServeHTTP(0xc2080b6580, 0x7f9aacb8baf0, 0xc208080000, 0xc208240000)
/go/src/github.com/mjibson/mog/_third_party/github.com/julienschmidt/httprouter/router.go:299 +0x18e
net/http.(*ServeMux).ServeHTTP(0xc2080b0c30, 0x7f9aacb8baf0, 0xc208080000, 0xc208240000)
/usr/local/go/src/net/http/server.go:1541 +0x17d
net/http.serverHandler.ServeHTTP(0xc20803c780, 0x7f9aacb8baf0, 0xc208080000, 0xc208240000)
/usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc20803ebe0)
/usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 209 [chan send]:
github.com/mjibson/mog/server.(*Server).ProtocolRemove(0xc208064500, 0xc20f3ab380, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:207 +0x34f
github.com/mjibson/mog/server.*Server.ProtocolRemove·fm(0xc20f3ab380, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:43 +0x79
github.com/mjibson/mog/server.func·035(0x7f9aacb8baf0, 0xc208100140, 0xc2080329c0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:83 +0x197
github.com/mjibson/mog/_third_party/github.com/julienschmidt/httprouter.(*Router).ServeHTTP(0xc2080b6580, 0x7f9aacb8baf0, 0xc208100140, 0xc2080329c0)
/go/src/github.com/mjibson/mog/_third_party/github.com/julienschmidt/httprouter/router.go:299 +0x18e
net/http.(*ServeMux).ServeHTTP(0xc2080b0c30, 0x7f9aacb8baf0, 0xc208100140, 0xc2080329c0)
/usr/local/go/src/net/http/server.go:1541 +0x17d
net/http.serverHandler.ServeHTTP(0xc20803c780, 0x7f9aacb8baf0, 0xc208100140, 0xc2080329c0)
/usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc20803edc0)
/usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 290 [IO wait]:
net.(*pollDesc).Wait(0xc208e6a140, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc208e6a140, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc208e6a0e0, 0xc208780000, 0x1000, 0x1000, 0x0, 0x7f9aacb86cf0, 0xc20a0e0170)
/usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc20813e000, 0xc208780000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2080800e8, 0xc208780000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc2094a4040, 0xc208780000, 0x1000, 0x1000, 0x1, 0x0, 0x0)
/usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc20811e000)
/usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc20811e000, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc20811e000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc20f3ab1d0, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc20f3ab1d0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc20811e000, 0xc2081a7ba0, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2080800a0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2080800a0)
/usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
For example http://localhost:6601/album/Into%20the%20Woods%20(Original%20Motion%20Picture%20Soundtrack/Deluxe%20Edition)
I'm getting the following error while building mog:
I executed go build
# github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol
_third_party/github.com/facebookgo/httpcontrol/httpcontrol.go:215:4: error: unknown field ‘KeepAlive’ in ‘net.Dialer’
KeepAlive: t.DialKeepAlive,
^
# github.com/mjibson/mog/_third_party/google.golang.org/cloud/compute/metadata
_third_party/google.golang.org/cloud/compute/metadata/metadata.go:54:5: error: unknown field ‘KeepAlive’ in ‘net.Dialer’
KeepAlive: 30 * time.Second,
^
# github.com/mjibson/mog/protocol/stream
protocol/stream/stream.go:137:5: error: unknown field ‘KeepAlive’ in ‘net.Dialer’
KeepAlive: 30 * time.Second,
^
protocol/stream/stream.go:140:3: error: unknown field ‘TLSHandshakeTimeout’ in ‘http.Transport’
TLSHandshakeTimeout: 10 * time.Second,
^
protocol/stream/stream.go:132:13: error: incompatible type for field 1 in struct construction (type has no methods)
Transport: &http.Transport{
^
# github.com/mjibson/mog/server
server/websocket.go:102:6: error: expected operand
for range c {
^
server/websocket.go:102:6: error: expected ‘{’
server/websocket.go:102:6: error: expected ‘;’ or ‘}’ or newline
server/websocket.go:104:1: error: expected declaration
}
^
Sorry, but I couldn't get my hands on install documentation so I logged an issue here.
Annanay
In the queue, streaming titles change the queue's title, should only be current song's title.
I think this would be useful for people who would like to contribute:
Future implementations:
Moggio appears to be similar to Raddit:
In that it can play from multiple streaming sources. However Moggio has the glaring omission of YouTube support. I see YouTube mentioned in #16, but you closed without comment?
Is scrobbling support planned? (e.g. last.fm or libre.fm)
When opening the left nav, the highlighted page is always the last one clicked on. It is thus unselected for a first page load. It is also wrong if you click the queue music icon in the lower right corner. The active page needs to be determined dynamically as in: https://github.com/callemall/material-ui/blob/master/docs/src/app/components/app-left-nav.jsx#L65
here's a stacktrace.
2015/02/20 12:45:16 http: panic serving [::1]:5182: EOF
goroutine 16 [running]:
net/http.func·011()
/usr/src/go/src/net/http/server.go:1130 +0xc2
github.com/mjibson/mog/_third_party/github.com/ascherkus/go-id3/src/id3.skipBytes(0xc0834e3800, 0x37573)
/go/src/github.com/mjibson/mog/_third_party/github.com/ascherkus/go-id3/src/id3/util.go:156 +0xf2
github.com/mjibson/mog/_third_party/github.com/ascherkus/go-id3/src/id3.parseID3v24File(0xc0834e3800, 0xc082067540)
/go/src/github.com/mjibson/mog/_third_party/github.com/ascherkus/go-id3/src/id3/id3v24.go:53 +0x2ad
github.com/mjibson/mog/_third_party/github.com/ascherkus/go-id3/src/id3.Read(0xef0a50, 0xc0820ea1a0, 0xc0820ea1a0)
/go/src/github.com/mjibson/mog/_third_party/github.com/ascherkus/go-id3/src/id3/id3.go:70 +0x1ff
github.com/mjibson/mog/codec/mpa.(_Song).Info(0xc0820d2a80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
/go/src/github.com/mjibson/mog/codec/mpa/mpa.go:86 +0x26d
github.com/mjibson/mog/protocol/file.func·001(0xc0820cec30, 0x41, 0xee24c8, 0xc0834e2c60, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/protocol/file/file.go:101 +0x415
path/filepath.walk(0xc0820cec30, 0x41, 0xee24c8, 0xc0834e2c60, 0xc082173858, 0x0, 0x0)
/usr/src/go/src/path/filepath/path.go:347 +0x98
path/filepath.walk(0xc082096a80, 0x25, 0xee24c8, 0xc082381aa0, 0xc082173858, 0x0, 0x0)
/usr/src/go/src/path/filepath/path.go:372 +0x524
path/filepath.walk(0xc0820c0fa0, 0x11, 0xee24c8, 0xc0833f1860, 0xc082173858, 0x0, 0x0)
/usr/src/go/src/path/filepath/path.go:372 +0x524
path/filepath.walk(0xc08335de70, 0x8, 0xee24c8, 0xc0833f0840, 0xc082173858, 0x0, 0x0)
/usr/src/go/src/path/filepath/path.go:372 +0x524
path/filepath.Walk(0xc08335de70, 0x8, 0xc082173858, 0x0, 0x0)
/usr/src/go/src/path/filepath/path.go:394 +0xf9
github.com/mjibson/mog/protocol/file.(_File).Refresh(0xc082092460, 0xc082131858, 0x0, 0x0)
/go/src/github.com/mjibson/mog/protocol/file/file.go:115 +0x8e
github.com/mjibson/mog/protocol.Instance.Refresh·fm(0xc082045948, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/server.go:275 +0x52
github.com/mjibson/mog/server.(_Server).protocolRefresh(0xc0820801e0, 0xc08205f589, 0x4, 0xc082131858, 0x8, 0xc0820a3c00, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/server.go:279 +0x1d2
github.com/mjibson/mog/server.(_Server).ProtocolRefresh(0xc0820801e0, 0xc0820a3c80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:159 +0x123
github.com/mjibson/mog/server._Server.ProtocolRefresh·fm(0xc0820a3c80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:43 +0x80
github.com/mjibson/mog/server.func·030(0xee8ac0, 0xc082211040, 0xc0820c61a0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:74 +0xd4
github.com/mjibson/mog/_third_party/github.com/julienschmidt/httprouter.(_Router).ServeHTTP(0xc082092000, 0xee8ac0, 0xc082211040, 0xc0820c61a0)
/go/src/github.com/mjibson/mog/_third_party/github.com/julienschmidt/httprouter/router.go:293 +0x195
net/http.(_ServeMux).ServeHTTP(0xc08209a120, 0xee8ac0, 0xc082211040, 0xc0820c61a0)
/usr/src/go/src/net/http/server.go:1541 +0x184
net/http.serverHandler.ServeHTTP(0xc08209e780, 0xee8ac0, 0xc082211040, 0xc0820c61a0)
/usr/src/go/src/net/http/server.go:1703 +0x1a1
net/http.(_conn).serve(0xc082210fa0)
/usr/src/go/src/net/http/server.go:1204 +0xb5e
created by net/http.(*Server).Serve
/usr/src/go/src/net/http/server.go:1751 +0x365
Text in the track number and time columns is a few pixels below the title, artist, and other columns. Need to vertically align everything.
I tried to play a bandcamp when my internet disconnected and as a result mog crashed after consuming significant CPU.
I am pasting the panic log here. This panic is thrown as the delay time of 10 seconds expires.
But before that there were > 5500 (5698) tries to play the song, which made my cpu usage to jump to 70%.
I think mog should gracefully handle no internet connection and throw some error in the front-end
panic: delay timer expired
goroutine 22780 [running]:
github.com/mjibson/mog/server.func·025()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:358 +0x64
created by time.goFunc
/usr/local/go/src/time/sleep.go:129 +0x4b
goroutine 1 [IO wait]:
net.(*pollDesc).Wait(0xc208010ca0, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc208010ca0, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).accept(0xc208010c40, 0x0, 0x4a28c88, 0xc20810d028)
/usr/local/go/src/net/fd_unix.go:419 +0x40b
net.(*TCPListener).AcceptTCP(0xc208034828, 0x406725e, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:234 +0x4e
net/http.tcpKeepAliveListener.Accept(0xc208034828, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1976 +0x4c
net/http.(*Server).Serve(0xc208064540, 0x4a2b898, 0xc208034828, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1728 +0x92
net/http.(*Server).ListenAndServe(0xc208064540, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1718 +0x154
net/http.ListenAndServe(0x44e7110, 0x5, 0x4a2a7d0, 0xc2080f22d0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1808 +0xba
github.com/mjibson/mog/server.(*Server).ListenAndServe(0xc208048700, 0x44e7110, 0x5, 0x0, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/server/web.go:58 +0x1ea
github.com/mjibson/mog/server.ListenAndServe(0xc20808ce40, 0x19, 0x44e7110, 0x5, 0x0, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/server/server.go:58 +0x2e6
main.main()
/Users/goutham/go/src/github.com/mjibson/mog/main.go:98 +0x97f
goroutine 17 [syscall, locked to thread]:
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1
goroutine 37 [IO wait]:
net.(*pollDesc).Wait(0xc20815e0d0, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc20815e0d0, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc20815e070, 0xc2080e4000, 0x1000, 0x1000, 0x0, 0x4a28c88, 0xc2080d8198)
/usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2080e6018, 0xc2080e4000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc208066548, 0xc2080e4000, 0x1000, 0x1000, 0x1c0000c20814c460, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc208108020, 0xc2080e4000, 0x1000, 0x1000, 0x4a2a708, 0x0, 0x0)
/usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2080640c0)
/usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2080640c0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2080640c0, 0x0, 0x0, 0x0, 0xc207fe9d00, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc208162090, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc208162090, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2080640c0, 0xc208032680, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc208066500, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc208066500)
/usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 7 [select]:
net/http.(*Transport).getConn(0xc2081362d0, 0xc208616b60, 0x0, 0xc208030870, 0x4, 0xc20833f300, 0x19, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:525 +0x608
net/http.(*Transport).RoundTrip(0xc2081362d0, 0xc208616b60, 0x436dd40, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:228 +0x4d4
github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol.(*Transport).tries(0xc208066a00, 0xc208616b60, 0x2, 0x1, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol/httpcontrol.go:288 +0x256
github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol.(*Transport).tries(0xc208066a00, 0xc208616b60, 0x1, 0x1, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol/httpcontrol.go:313 +0x5c2
github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol.(*Transport).tries(0xc208066a00, 0xc208616b60, 0x0, 0x4a1be58, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol/httpcontrol.go:313 +0x5c2
github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol.(*Transport).RoundTrip(0xc208066a00, 0xc208616b60, 0xc20807bcb0, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol/httpcontrol.go:336 +0xa8
net/http.send(0xc208616b60, 0x4a292e8, 0xc208066a00, 0x85, 0x0, 0x0)
/usr/local/go/src/net/http/client.go:219 +0x4fc
net/http.(*Client).send(0xc20803bad0, 0xc208616b60, 0x85, 0x0, 0x0)
/usr/local/go/src/net/http/client.go:142 +0x15b
net/http.(*Client).doFollowingRedirects(0xc20803bad0, 0xc208616b60, 0x45e25a8, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/client.go:367 +0xb25
net/http.(*Client).Get(0xc20803bad0, 0xc208030870, 0x85, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/client.go:299 +0xba
net/http.Get(0xc208030870, 0x85, 0x2, 0x0, 0x0)
/usr/local/go/src/net/http/client.go:276 +0x50
github.com/mjibson/mog/protocol/bandcamp.func·001(0x0, 0x0, 0x2, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/protocol/bandcamp/bandcamp.go:64 +0x195
github.com/mjibson/mog/codec/mpa.(*Song).Init(0xc2083404d0, 0x0, 0x0, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/codec/mpa/mpa.go:50 +0xc9
github.com/mjibson/mog/codec/mpa.NewSong(0xc20833f0a0, 0xc20876d740, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/codec/mpa/mpa.go:44 +0x83
github.com/mjibson/mog/protocol/bandcamp.(*Bandcamp).GetSong(0xc20808dce0, 0xc20878a85d, 0xa, 0x0, 0x0, 0x0, 0x0)
/Users/goutham/go/src/github.com/mjibson/mog/protocol/bandcamp/bandcamp.go:69 +0x2ba
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:166 +0x3cf
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
github.com/mjibson/mog/server.func·013()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:239 +0x11c
github.com/mjibson/mog/server.func·010()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:119 +0x106
github.com/mjibson/mog/server.func·012()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:170 +0x4ff
created by github.com/mjibson/mog/server.New
/Users/goutham/go/src/github.com/mjibson/mog/server/server.go:173 +0x536
goroutine 18 [chan send]:
github.com/mjibson/mog/server.func·026()
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:360 +0xf4
created by github.com/mjibson/mog/server.(*Server).audio
/Users/goutham/go/src/github.com/mjibson/mog/server/audio.go:363 +0xc72
goroutine 8 [chan receive]:
github.com/mjibson/mog/server.(*Server).WebSocket(0xc208048700, 0xc208136000)
/Users/goutham/go/src/github.com/mjibson/mog/server/websocket.go:102 +0xe5
github.com/mjibson/mog/server.*Server.WebSocket·fm(0xc208136000)
/Users/goutham/go/src/github.com/mjibson/mog/server/web.go:49 +0x31
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Server.serveWebSocket(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45e2338, ...)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:90 +0x292
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Handler.ServeHTTP(0xc2080d8c90, 0x4a2ba50, 0xc208066640, 0xc208033860)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:113 +0x8a
net/http.(*ServeMux).ServeHTTP(0xc2080f22d0, 0x4a2ba50, 0xc208066640, 0xc208033860)
/usr/local/go/src/net/http/server.go:1541 +0x17d
net/http.serverHandler.ServeHTTP(0xc208064540, 0x4a2ba50, 0xc208066640, 0xc208033860)
/usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc2081180a0)
/usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 24 [IO wait]:
net.(*pollDesc).Wait(0xc2080d0060, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2080d0060, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2080d0000, 0xc208088000, 0x1000, 0x1000, 0x0, 0x4a28c88, 0xc20810cb00)
/usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208146000, 0xc208088000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2081580e8, 0xc208088000, 0x1000, 0x1000, 0xc20816c020, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20801e000, 0xc208088000, 0x1000, 0x1000, 0x4a2a708, 0x0, 0x0)
/usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2080e8120)
/usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2080e8120, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2080e8120, 0x0, 0x0, 0x0, 0xc207ff5f00, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2080a0060, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2080a0060, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2080e8120, 0xc20810a8f0, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2081580a0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2081580a0)
/usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 36 [IO wait]:
net.(*pollDesc).Wait(0xc20815e060, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc20815e060, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc20815e000, 0xc2080ea000, 0x1000, 0x1000, 0x0, 0x4a28c88, 0xc2080d80e0)
/usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2080e6010, 0xc2080ea000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc208066b88, 0xc2080ea000, 0x1000, 0x1000, 0xc2081fe020, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc208108000, 0xc2080ea000, 0x1000, 0x1000, 0x4a2a708, 0x0, 0x0)
/usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc208064060)
/usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc208064060, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc208064060, 0x0, 0x0, 0x0, 0xc207ff7900, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc208086030, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc208086030, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc208064060, 0xc208032410, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc208066b40, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc208066b40)
/usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 11 [chan receive]:
github.com/mjibson/mog/server.(*Server).WebSocket(0xc208048700, 0xc208030c60)
/Users/goutham/go/src/github.com/mjibson/mog/server/websocket.go:102 +0xe5
github.com/mjibson/mog/server.*Server.WebSocket·fm(0xc208030c60)
/Users/goutham/go/src/github.com/mjibson/mog/server/web.go:49 +0x31
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Server.serveWebSocket(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45e2338, ...)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:90 +0x292
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Handler.ServeHTTP(0xc2080d8c90, 0x4a2ba50, 0xc208118460, 0xc20810b520)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:113 +0x8a
net/http.(*ServeMux).ServeHTTP(0xc2080f22d0, 0x4a2ba50, 0xc208118460, 0xc20810b520)
/usr/local/go/src/net/http/server.go:1541 +0x17d
net/http.serverHandler.ServeHTTP(0xc208064540, 0x4a2ba50, 0xc208118460, 0xc20810b520)
/usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc208118280)
/usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 22866 [runnable, locked to thread]:
net._Cfunc_free(0x4c170d0)
/usr/local/go/src/net/:47 +0x45
net.cgoLookupIPCNAME(0xc20833f300, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a35b70, 0xc208763f00, 0x1)
/usr/local/go/src/net/cgo_unix.go:116 +0x32c
net.cgoLookupIP(0xc20833f300, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40104e9)
/usr/local/go/src/net/cgo_unix.go:148 +0x65
net.lookupIP(0xc20833f300, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/lookup_unix.go:64 +0x5f
net.func·025(0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/lookup.go:41 +0x55
net.(*singleflight).doCall(0x47f7350, 0xc2083664e0, 0xc20833f300, 0x16, 0xc2081af548)
/usr/local/go/src/net/singleflight.go:91 +0x2f
net.(*singleflight).Do(0x47f7350, 0xc20833f300, 0x16, 0xc2081af548, 0x0, 0x0, 0x0, 0x0, 0x4011818)
/usr/local/go/src/net/singleflight.go:61 +0x280
net.lookupIPMerge(0xc20833f300, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/lookup.go:42 +0xae
net.lookupIPDeadline(0xc20833f300, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/lookup.go:64 +0x12d
net.resolveInternetAddr(0x44f9af0, 0x3, 0xc20833f300, 0x19, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
/usr/local/go/src/net/ipsock.go:285 +0x49b
net.resolveAddr(0x44f2a70, 0x4, 0x44f9af0, 0x3, 0xc20833f300, 0x19, 0x0, 0x0, 0x0, 0x0, ...)
/usr/local/go/src/net/dial.go:110 +0x378
net.(*Dialer).Dial(0xc208164f80, 0x44f9af0, 0x3, 0xc20833f300, 0x19, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/dial.go:158 +0xf6
net.*Dialer.Dial·fm(0x44f9af0, 0x3, 0xc20833f300, 0x19, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:38 +0x79
net/http.(*Transport).dial(0xc2081362d0, 0x44f9af0, 0x3, 0xc20833f300, 0x19, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:479 +0x84
net/http.(*Transport).dialConn(0xc2081362d0, 0x0, 0xc208030870, 0x4, 0xc20833f300, 0x19, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:564 +0x1678
net/http.func·019()
/usr/local/go/src/net/http/transport.go:520 +0x42
created by net/http.(*Transport).getConn
/usr/local/go/src/net/http/transport.go:522 +0x335
goroutine 35 [IO wait]:
net.(*pollDesc).Wait(0xc20812e140, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc20812e140, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc20812e0e0, 0xc2080b2000, 0x1000, 0x1000, 0x0, 0x4a28c88, 0xc20810d3c8)
/usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2080e61d0, 0xc2080b2000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc208066228, 0xc2080b2000, 0x1000, 0x1000, 0x2, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc2080ec000, 0xc2080b2000, 0x1000, 0x1000, 0x2, 0x0, 0x0)
/usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2080e9260)
/usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2080e9260, 0xc208083b0a, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2080e9260, 0x0, 0x0, 0x0, 0xc20876a400, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2080dec60, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2080dec60, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2080e9260, 0xc2080328f0, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2080661e0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2080661e0)
/usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 26 [chan receive]:
github.com/mjibson/mog/server.(*Server).WebSocket(0xc208048700, 0xc208136120)
/Users/goutham/go/src/github.com/mjibson/mog/server/websocket.go:102 +0xe5
github.com/mjibson/mog/server.*Server.WebSocket·fm(0xc208136120)
/Users/goutham/go/src/github.com/mjibson/mog/server/web.go:49 +0x31
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Server.serveWebSocket(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45e2338, ...)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:90 +0x292
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Handler.ServeHTTP(0xc2080d8c90, 0x4a2ba50, 0xc208158320, 0xc208032750)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:113 +0x8a
net/http.(*ServeMux).ServeHTTP(0xc2080f22d0, 0x4a2ba50, 0xc208158320, 0xc208032750)
/usr/local/go/src/net/http/server.go:1541 +0x17d
net/http.serverHandler.ServeHTTP(0xc208064540, 0x4a2ba50, 0xc208158320, 0xc208032750)
/usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc2081581e0)
/usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 82 [select]:
github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol.(*Transport).monitor(0xc208066a00)
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol/httpcontrol.go:249 +0x2a6
created by github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol.(*Transport).start
/Users/goutham/go/src/github.com/mjibson/mog/_third_party/github.com/facebookgo/httpcontrol/httpcontrol.go:230 +0x2c6
https://milieumusic.bandcamp.com/album/eufloria
doesn't show milieu as the artist
2015/09/21 11:07:57 next
2015/09/21 11:07:57 stop
2015/09/21 11:07:57 play
2015/09/21 11:07:57 unknown id: file
/home/dieter/music-sdcard
/home/dieter/music-sdcard/Oceans of Sadness/ Send in the Clowns/05 - Conflict �?? Error �?? Disillusion �?? Denial.mp3
goroutine 5 [running]:
github.com/mjibson/mog/server.printErr(0x7f3f7db3d028, 0xc825fc20e0)
/home/dieter/go/src/github.com/mjibson/mog/server/server.go:38 +0x134
github.com/mjibson/mog/server.(*Server).commands.func3(0x7f3f7db3d028, 0xc825fc20e0)
/home/dieter/go/src/github.com/mjibson/mog/server/control.go:39 +0x46
github.com/mjibson/mog/server.(*Server).commands.func11()
/home/dieter/go/src/github.com/mjibson/mog/server/control.go:168 +0x489
github.com/mjibson/mog/server.(*Server).commands.func14()
/home/dieter/go/src/github.com/mjibson/mog/server/control.go:235 +0x105
github.com/mjibson/mog/server.(*Server).commands.func8()
/home/dieter/go/src/github.com/mjibson/mog/server/control.go:110 +0xfb
github.com/mjibson/mog/server.(*Server).commands(0xc8200d61e0)
/home/dieter/go/src/github.com/mjibson/mog/server/control.go:408 +0x1329
created by github.com/mjibson/mog/server.New
/home/dieter/go/src/github.com/mjibson/mog/server/server.go:188 +0x5d0
2015/09/21 11:07:57 server.controlCmd
Random mode should use a randomized list instead of randomly choosing a song each time, which can play the same track soon after itself.
Add a link to http://mogg.io/
in the description (maybe README too).
Hi, I am new to GoLang but I wanted to build something very similar mog.
I have decided to contribute to mog and I think it would be helpful to have documentation for me to get started.
Also a roadmap/checklist of what all have been achieved till date would be great.
And +1 for writing the music server.
Thanks,
Goutham
for the vorbis and spc decoders
Have you considered using libVLC [0] as a media decoder? It accepts many, many formats and should be able to be built on almost any architecture/os. There are (admittedly old) Go bindings at jteeuwen/go-vlc [1].
0: https://wiki.videolan.org/LibVLC/
1: https://github.com/jteeuwen/go-vlc
the seek bar works the first time but then stays at 100% the whole time
I just added my local music folder and after moggio was ready reading all files I got the following error message:
2016/03/09 20:51:06 server.cmdRemoveInProgress
2016/03/09 20:51:06 server.cmdProtocolAddInstance
2016/03/09 20:51:07 server.cmdDoSave
2016/03/09 20:51:09 gob: encoder: message too big
goroutine 5 [running]:
github.com/mjibson/moggio/server.printErr(0x7fabea8c0028, 0xc8748e8010)
/go/src/github.com/mjibson/moggio/server/server.go:42 +0x134
github.com/mjibson/moggio/server.(*Server).commands.func3(0x7fabea8c0028, 0xc8748e8010)
/go/src/github.com/mjibson/moggio/server/control.go:41 +0x46
github.com/mjibson/moggio/server.(*Server).commands.func25()
/go/src/github.com/mjibson/moggio/server/control.go:417 +0x56
github.com/mjibson/moggio/server.(*Server).commands(0xc820096b40)
/go/src/github.com/mjibson/moggio/server/control.go:714 +0x1a99
created by github.com/mjibson/moggio/server.New
/go/src/github.com/mjibson/moggio/server/server.go:201 +0x4ad
I suspect that I have too many music files in the specified folder, but I just wanted to let you know.
They only sometimes show.
Like the white album on google music.
Seeked during a SPC song:
2015/07/01 18:25:55 server.cmdSeek
mog: /go/src/github.com/mjibson/mog/_third_party/github.com/mjibson/spc/SNES_SPC_misc.cpp:339: const char* SNES_SPC::play(int, SNES_SPC::sample_t*): Assertion `(count & 1) == 0' failed.
SIGABRT: abort
PC=0x7f26488bb107
signal arrived during cgo execution
goroutine 9 [syscall, locked to thread]:
runtime.cgocall_errno(0x405a30, 0xc20a7cb728, 0x0)
/usr/local/go/src/runtime/cgocall.go:130 +0xf5 fp=0xc20a7cb708 sp=0xc20a7cb6e0
github.com/mjibson/mog/_third_party/github.com/mjibson/spc._Cfunc_spc_play(0x7f26340b8370, 0x1363dbf, 0xc2107f4000, 0x0)
github.com/mjibson/mog/_third_party/github.com/mjibson/spc/_obj/_cgo_gotypes.go:102 +0x44 fp=0xc20a7cb728 sp=0xc20a7cb708
github.com/mjibson/mog/_third_party/github.com/mjibson/spc.(*SPC).Play(0xc2080f81c0, 0xc20e12c000, 0x1363dbf, 0x1363dbf, 0x0, 0x0)
/go/src/github.com/mjibson/mog/_third_party/github.com/mjibson/spc/spc.go:54 +0xb2 fp=0xc20a7cb7b0 sp=0xc20a7cb728
github.com/mjibson/mog/codec/spc.(*SPC).Play(0xc208082200, 0x1363dbf, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/codec/spc/spc.go:102 +0x101 fp=0xc20a7cb810 sp=0xc20a7cb7b0
github.com/mjibson/mog/codec.Song.Play·fm(0x1363dbf, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/audio.go:200 +0x70 fp=0xc20a7cb860 sp=0xc20a7cb810
github.com/mjibson/mog/server.(*Seek).Read(0xc2084dfc80, 0x1363dbf, 0x0, 0x0, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/seek.go:33 +0xed fp=0xc20a7cb8d8 sp=0xc20a7cb860
github.com/mjibson/mog/server.(*Seek).Seek(0xc2084dfc80, 0x4b75170703, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/seek.go:61 +0xb0 fp=0xc20a7cb920 sp=0xc20a7cb8d8
github.com/mjibson/mog/server.func·025(0x4b75170703)
/go/src/github.com/mjibson/mog/server/audio.go:354 +0x4c fp=0xc20a7cb960 sp=0xc20a7cb920
github.com/mjibson/mog/server.(*Server).audio(0xc208064500)
/go/src/github.com/mjibson/mog/server/audio.go:425 +0x12dc fp=0xc20a7cbfd8 sp=0xc20a7cb960
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1 fp=0xc20a7cbfe0 sp=0xc20a7cbfd8
created by github.com/mjibson/mog/server.New
/go/src/github.com/mjibson/mog/server/server.go:173 +0x536
goroutine 1 [IO wait]:
net.(*pollDesc).Wait(0xc208011870, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc208011870, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).accept(0xc208011810, 0x0, 0x7f2649c93cf0, 0xc2088e5068)
/usr/local/go/src/net/fd_unix.go:419 +0x40b
net.(*TCPListener).AcceptTCP(0xc208034fe0, 0x47a44e, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:234 +0x4e
net/http.tcpKeepAliveListener.Accept(0xc208034fe0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1976 +0x4c
net/http.(*Server).Serve(0xc20803db60, 0x7f2649ca3ef8, 0xc208034fe0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1728 +0x92
net/http.(*Server).ListenAndServe(0xc20803db60, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1718 +0x154
net/http.ListenAndServe(0x904ab0, 0x5, 0x7f2649ca2e30, 0xc2081d0d80, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1808 +0xba
github.com/mjibson/mog/server.(*Server).ListenAndServe(0xc208064500, 0x904ab0, 0x5, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/web.go:58 +0x1ea
github.com/mjibson/mog/server.ListenAndServe(0xc2080849e0, 0x18, 0x904ab0, 0x5, 0x0, 0x0, 0x0)
/go/src/github.com/mjibson/mog/server/server.go:58 +0x2e6
main.main()
/go/src/github.com/mjibson/mog/main.go:100 +0x97f
goroutine 18 [chan receive]:
github.com/mjibson/mog/server.func·028()
/go/src/github.com/mjibson/mog/server/audio.go:364 +0x6c
created by github.com/mjibson/mog/server.(*Server).audio
/go/src/github.com/mjibson/mog/server/audio.go:371 +0xd41
goroutine 394 [IO wait]:
net.(*pollDesc).Wait(0xc208010220, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc208010220, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2080101c0, 0xc20847b000, 0x1000, 0x1000, 0x0, 0x7f2649c93cf0, 0xc20e054040)
/usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208286008, 0xc20847b000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc20828a048, 0xc20847b000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20e078000, 0xc20847b000, 0x1000, 0x1000, 0x1, 0x0, 0x0)
/usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc208bfc000)
/usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc208bfc000, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc208bfc000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc20d5a2030, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc20d5a2030, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc208bfc000, 0xc208216270, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc20828a000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc20828a000)
/usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 65 [chan receive, 208 minutes]:
github.com/mjibson/mog/server.(*Server).WebSocket(0xc208064500, 0xc20825ebd0)
/go/src/github.com/mjibson/mog/server/websocket.go:102 +0xe5
github.com/mjibson/mog/server.*Server.WebSocket·fm(0xc20825ebd0)
/go/src/github.com/mjibson/mog/server/web.go:49 +0x31
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Server.serveWebSocket(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa025b8, ...)
/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:90 +0x292
github.com/mjibson/mog/_third_party/golang.org/x/net/websocket.Handler.ServeHTTP(0xc2081f4c50, 0x7f2649ca40b0, 0xc20828a8c0, 0xc2080cf520)
/go/src/github.com/mjibson/mog/_third_party/golang.org/x/net/websocket/server.go:113 +0x8a
net/http.(*ServeMux).ServeHTTP(0xc2081d0d80, 0x7f2649ca40b0, 0xc20828a8c0, 0xc2080cf520)
/usr/local/go/src/net/http/server.go:1541 +0x17d
net/http.serverHandler.ServeHTTP(0xc20803db60, 0x7f2649ca40b0, 0xc20828a8c0, 0xc2080cf520)
/usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc20828a820)
/usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 402 [IO wait]:
net.(*pollDesc).Wait(0xc20e047330, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc20e047330, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc20e0472d0, 0xc20d5a0000, 0x1000, 0x1000, 0x0, 0x7f2649c93cf0, 0xc20e0f00a8)
/usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc208286010, 0xc20d5a0000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc20e0b8cc8, 0xc20d5a0000, 0x1000, 0x1000, 0x2, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20e072020, 0xc20d5a0000, 0x1000, 0x1000, 0x2, 0x0, 0x0)
/usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc20836c0c0)
/usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc20836c0c0, 0xc2083f9b0a, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc20836c0c0, 0x0, 0x0, 0x0, 0x8b4500, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2088ee030, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2088ee030, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc20836c0c0, 0xc2082160d0, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc20e0b8c80, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc20e0b8c80)
/usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
goroutine 113 [syscall, 208 minutes, locked to thread]:
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1
rax 0x0
rbx 0x7f2649cda000
rcx 0xffffffffffffffff
rdx 0x6
rdi 0x20ee
rsi 0x20f2
rbp 0x7f26489eace8
rsp 0x7f26424dbbc8
r8 0xfefefefefefefeff
r9 0xfefefefefeff092d
r10 0x8
r11 0x206
r12 0x776f49
r13 0x7761c0
r14 0x13
r15 0x8
rip 0x7f26488bb107
rflags 0x206
cs 0x33
fs 0x0
gs 0x0
If a file in google drive doesn't have album metadata, it should use its directory name.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.