lib/airplayer/controller.rb in airplayer-0.0.6 vs lib/airplayer/controller.rb in airplayer-0.0.7

- old
+ new

@@ -1,30 +1,31 @@ require 'timeout' -require 'airplay' require 'airplayer/progress_bar/base' module AirPlayer class Controller BufferingTimeoutError = Class.new(TimeoutError) def initialize @airplay = Airplay::Client.new - @device = @airplay.browse.first @player = nil @progressbar = nil @timeout = 30 @interval = 1 @total_sec = 0 @current_sec = 0 rescue Airplay::Client::ServerNotFoundError - abort '[ERROR] Apple device not found' + abort '[ERROR] AirPlay device is not found' end - def play(media) + def play(media, options = {}) raise TypeError unless media.is_a? Media - display_information(media) + device = select_device(options.fetch(:device, nil)) + @airplay.use(device.name) + + display_information(device, media) @player = @airplay.send_video(media.open) buffering @progressbar.progress = @current_sec while playing @@ -34,11 +35,11 @@ rescue BufferingTimeoutError abort '[ERROR] Buffering timeout' rescue TypeError abort '[ERROR] Not media class' rescue - abort "Play stopped" + abort 'Play stopped' end def pause @player.stop if @player @progressbar.finish if @progressbar @@ -51,17 +52,17 @@ @progressbar.reset @progressbar.resume end private - def display_information(media) + def display_information(device, media) puts puts " Source: #{media.path}" puts " Title: #{media.title}" - puts " Device: #{@device.name} (#{@device.ip})" + puts " Device: #{device.name} (#{device.ip})" - @progressbar = ProgressBar.create(:format => ' %a |%b%i| %p%% %t') + @progressbar = ProgressBar.create(format: ' %a |%b%i| %p%% %t') end def buffering timeout @timeout, BufferingTimeoutError do @progressbar.title = :Buffering until playing @@ -77,9 +78,21 @@ sleep @interval progress? end def progress? - 0 < @current_sec && @current_sec < @total_sec + 0 < @current_sec && @total_sec - @current_sec > 1 + end + + def select_device(device_number = nil) + device_number ||= 0 + device = Device.new + + if device.exist?(device_number) + device.get(device_number) + else + puts "Device number #{device_number} is not found. Use default device" + device.default + end end end end