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