Class: MPD
- Inherits:
-
Object
- Object
- MPD
- Includes:
- Parser, Plugins::Channels, Plugins::Controls, Plugins::Database, Plugins::Information, Plugins::Outputs, Plugins::PlaybackOptions, Plugins::Playlists, Plugins::Queue, Plugins::Reflection, Plugins::Stickers
- Defined in:
- lib/ruby-mpd.rb,
lib/ruby-mpd/song.rb,
lib/ruby-mpd/parser.rb,
lib/ruby-mpd/version.rb,
lib/ruby-mpd/playlist.rb,
lib/ruby-mpd/exceptions.rb,
lib/ruby-mpd/plugins/queue.rb,
lib/ruby-mpd/plugins/outputs.rb,
lib/ruby-mpd/plugins/channels.rb,
lib/ruby-mpd/plugins/controls.rb,
lib/ruby-mpd/plugins/database.rb,
lib/ruby-mpd/plugins/stickers.rb,
lib/ruby-mpd/plugins/playlists.rb,
lib/ruby-mpd/plugins/reflection.rb,
lib/ruby-mpd/plugins/information.rb,
lib/ruby-mpd/plugins/playback_options.rb
Overview
The main class/namespace of the MPD client.
Defined Under Namespace
Modules: Parser, Plugins Classes: AlreadyExists, AlreadyUpdating, ConnectionError, Error, IncorrectPassword, NotFound, NotListError, NotPlaying, PermissionError, Playlist, PlaylistLoadError, PlaylistMaxError, ServerArgumentError, ServerError, Song, SystemError
Constant Summary collapse
- VERSION =
'0.2.4'
Instance Attribute Summary collapse
-
#version ⇒ Object
readonly
The version of the MPD protocol the server is using.
Instance Method Summary collapse
-
#connect(callbacks = false) ⇒ true
Connect to the daemon.
-
#connected? ⇒ Boolean
Check if the client is connected.
-
#disconnect ⇒ Boolean
Disconnect from the MPD daemon.
-
#emit(event, *args) ⇒ void
Triggers an event, running it’s callbacks.
-
#initialize(hostname = 'localhost', port = 6600) ⇒ MPD
constructor
Initialize an MPD object with the specified hostname and port.
-
#kill ⇒ Boolean
Kills the MPD process.
-
#on(event, &block) ⇒ void
This will register a block callback that will trigger whenever that specific event happens.
-
#password(pass) ⇒ Boolean
Used for authentication with the server.
-
#ping ⇒ Boolean
Ping the server.
-
#send_command(command, *args) ⇒ true, ...
Used to send a command to the server, and to recieve the reply.
Methods included from Plugins::Channels
#channels, #readmessages, #sendmessage, #subscribe, #unsubscribe
Methods included from Plugins::Reflection
#commands, #config, #decoders, #notcommands, #tags, #url_handlers
Methods included from Plugins::Outputs
#disableoutput, #enableoutput, #outputs
Methods included from Plugins::Stickers
#delete_sticker, #find_sticker, #get_sticker, #list_stickers, #set_sticker
Methods included from Plugins::Database
#albums, #artists, #count, #directories, #files, #list, #rescan, #search, #songs, #songs_by_artist, #update
Methods included from Plugins::Playlists
Methods included from Plugins::Queue
#add, #addid, #clear, #delete, #move, #queue, #queue_changes, #queue_search, #save, #shuffle, #song_priority, #song_with_id, #swap, #swapid
Methods included from Plugins::Controls
#next, #pause=, #play, #previous, #seek, #stop
Methods included from Plugins::PlaybackOptions
#consume=, #crossfade=, #mixrampdb=, #mixrampdelay=, #random=, #repeat=, #replay_gain_mode=, #replay_gain_status, #single=, #volume=
Methods included from Plugins::Information
#clearerror, #consume?, #crossfade, #current_song, #paused?, #playing?, #playlist_version, #random?, #repeat?, #single?, #stats, #status, #stopped?, #volume
Constructor Details
#initialize(hostname = 'localhost', port = 6600) ⇒ MPD
Initialize an MPD object with the specified hostname and port. When called without arguments, ‘localhost’ and 6600 are used.
47 48 49 50 51 52 53 54 |
# File 'lib/ruby-mpd.rb', line 47 def initialize(hostname = 'localhost', port = 6600) @hostname = hostname @port = port reset_vars @mutex = Mutex.new @callbacks = {} end |
Instance Attribute Details
#version ⇒ Object (readonly)
The version of the MPD protocol the server is using.
43 44 45 |
# File 'lib/ruby-mpd.rb', line 43 def version @version end |
Instance Method Details
#connect(callbacks = false) ⇒ true
Connect to the daemon.
When called without any arguments, this will just connect to the server and wait for your commands.
When called with true as an argument, this will enable callbacks by starting a seperate polling thread, which will also automatically reconnect if disconnected for whatever reason.
145 146 147 148 149 150 151 152 153 |
# File 'lib/ruby-mpd.rb', line 145 def connect(callbacks = false) raise ConnectionError, 'Already connected!' if self.connected? @socket = File.exists?(@hostname) ? UNIXSocket.new(@hostname) : TCPSocket.new(@hostname, @port) @version = @socket.gets.chomp.gsub('OK MPD ', '') # Read the version callback_thread if callbacks return true end |
#connected? ⇒ Boolean
Check if the client is connected.
158 159 160 161 162 163 |
# File 'lib/ruby-mpd.rb', line 158 def connected? return false if !@socket ret = send_command(:ping) rescue false return ret end |
#disconnect ⇒ Boolean
Disconnect from the MPD daemon. This has no effect if the client is not connected. Reconnect using the #connect method. This will also stop the callback thread, thus disabling callbacks.
169 170 171 172 173 174 175 176 177 178 |
# File 'lib/ruby-mpd.rb', line 169 def disconnect @cb_thread[:stop] = true if @cb_thread return false if !@socket @socket.puts 'close' @socket.close reset_vars return true end |
#emit(event, *args) ⇒ void
This method returns an undefined value.
Triggers an event, running it’s callbacks.
88 89 90 91 92 93 |
# File 'lib/ruby-mpd.rb', line 88 def emit(event, *args) return unless @callbacks[event] @callbacks[event].each do |handle| handle.call *args end end |
#kill ⇒ Boolean
Kills the MPD process.
182 183 184 |
# File 'lib/ruby-mpd.rb', line 182 def kill send_command :kill end |
#on(event, &block) ⇒ void
This method returns an undefined value.
This will register a block callback that will trigger whenever that specific event happens.
mpd.on :volume do |volume|
puts "Volume was set to #{volume}!"
end
One can also define separate methods or Procs and whatnot, just pass them in as a parameter.
method = Proc.new {|volume| puts "Volume was set to #{volume}!" }
mpd.on :volume, &method
80 81 82 83 |
# File 'lib/ruby-mpd.rb', line 80 def on(event, &block) @callbacks[event] ||= [] @callbacks[event].push block end |
#password(pass) ⇒ Boolean
Used for authentication with the server.
189 190 191 |
# File 'lib/ruby-mpd.rb', line 189 def password(pass) send_command :password, pass end |
#ping ⇒ Boolean
Ping the server.
195 196 197 |
# File 'lib/ruby-mpd.rb', line 195 def ping send_command :ping end |
#send_command(command, *args) ⇒ true, ...
Used to send a command to the server, and to recieve the reply. Reply gets parsed. Synchronized on a mutex to be thread safe.
Can be used to get low level direct access to MPD daemon. Not recommended, should be just left for internal use by other methods.
208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/ruby-mpd.rb', line 208 def send_command(command, *args) raise ConnectionError, "Not connected to the server!" if !@socket @mutex.synchronize do begin @socket.puts convert_command(command, *args) response = handle_server_response return parse_response(command, response) rescue Errno::EPIPE reset_vars # kill the socket and reset raise ConnectionError, 'Broken pipe (got disconnected)' end end end |