# Connection to a MPD server
class MPDConnection
- var socket: nullable Socket = null
+ # Socket connection to server.
+ var socket: nullable TCPStream = null
+
+ # Server hostname.
var host: String
+
+ # Server port.
var port: Int
+
+ # Server password.
var password: nullable String
+ # Last occured error.
var error: nullable String = null
# Connect to the MPD server
fun connect
do
- var p: nullable Socket = null
+ var p: nullable TCPStream = null
- p = new Socket.stream_with_host(host, port)
- p.connect
+ p = new TCPStream.connect(host, port)
+ assert p.connected
sys.nanosleep(0,5000)
- var rep = p.read
+ var rep = p.read(1024)
assert not rep.is_empty
if not rep.has_prefix("OK") then
print "MPD responded {rep}"
socket.write(msg)
sys.nanosleep(0,5000)
- var rep = socket.read
+ var rep = socket.read(1024)
if not rep.has_prefix("OK") then
print "Error: MPD responded {rep}"
socket.close
# get current status
socket.write("status\n")
- var rep = socket.read
+ var rep = socket.read(1024)
for l in rep.split_with("\n") do
var words = l.split_with(" ")
if words.length > 1 then
var key = words[0].to_lower
- var first_space = l.index_of(' ')
+ var first_space = l.chars.index_of(' ')
var rest = l.substring_from(first_space+1)
if key == "volume:" then
volume = rest.to_i
error = "Cannot get volume"
end
+ # Set MPD server volume.
fun volume=(vol: Int) do write_and_check("setvol {vol}\n")
# Pause music playing on the MPD server
var time: nullable Int = null
socket.write("currentsong\n")
- var rep = socket.read
+ var rep = socket.read(1024)
for l in rep.split_with("\n") do
var words = l.split_with(" ")
if words.length > 1 then
var key = words[0].to_lower
- var first_space = l.index_of(' ')
+ var first_space = l.chars.index_of(' ')
var rest = l.substring_from(first_space+1)
if key == "album:" then
album = rest
return null
end
end
+
+ # Load playlist named `name`.
+ fun load_playlist(name: String)
+ do
+ write_and_check "load \"{name}\""
+ end
end
# MPD song info
class SongInfo
+ # Song album.
var album: String
+
+ # Song artist.
var artist: String
+
+ # Song title.
var title: String
+
+ # Song total duration.
var time: Int
end
# MPD server status
class ServerStatus
+
+ # MPD server volume.
var volume: nullable Int
+ # Playback state (play/stop/pause).
var state: String
+
+ # Is MPD server playing?
fun playing: Bool do return state == "play"
+
+ # Is MPD server stopped?
fun stopped: Bool do return state == "stop"
+ # Time elapsed within the current song.
var elapsed: nullable Int
+
+ # TODO comment
var time_at: nullable Int
+
+ # Total time of the current song.
var time_total: nullable Int
+
+ # Get the cursor position on the song duration.
fun time_ratio: nullable Float do
if time_at == null or time_total == null then return null
return time_at.to_f / time_total.to_f