X-Git-Url: http://nitlanguage.org diff --git a/lib/mpd.nit b/lib/mpd.nit index ced7e17..e814b56 100644 --- a/lib/mpd.nit +++ b/lib/mpd.nit @@ -21,25 +21,33 @@ import socket # 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}" @@ -61,7 +69,7 @@ class MPDConnection 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 @@ -82,12 +90,12 @@ class MPDConnection # 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 @@ -131,6 +139,7 @@ class MPDConnection 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 @@ -150,14 +159,15 @@ class MPDConnection var album: nullable String = null var artist: nullable String = null var title: nullable String = null + 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 @@ -165,36 +175,67 @@ class MPDConnection artist = rest else if key == "title:" then title = rest + else if key == "time:" then + time = rest.to_i end end end - if album != null and artist != null and title != null then - return new SongInfo(album, artist, title) + if album != null and artist != null and + title != null and time != null then + return new SongInfo(album, artist, title, time) else 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