# 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 vol = status.volume
if vol != null then
var new_vol = vol + diff
- new_vol = new_vol.max(0).min(100)
+ new_vol = new_vol.clamp(0, 100)
volume = new_vol
return
end
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
end
end
+ # Load playlist named `name`.
fun load_playlist(name: String)
do
write_and_check "load \"{name}\""
# 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