X-Git-Url: http://nitlanguage.org diff --git a/lib/mpd.nit b/lib/mpd.nit index 9383934..727ac60 100644 --- a/lib/mpd.nit +++ b/lib/mpd.nit @@ -14,32 +14,40 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Client for a MPD server +# Music Player Daemon client library module mpd 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 @@ -153,12 +162,12 @@ class MPDConnection 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 @@ -180,6 +189,7 @@ class MPDConnection end end + # Load playlist named `name`. fun load_playlist(name: String) do write_and_check "load \"{name}\"" @@ -188,23 +198,44 @@ 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