class Airplay::CLI::ImageViewer

Attributes

devices[R]
options[R]

Public Class Methods

new(devices, options = {}) click to toggle source
# File lib/airplay/cli/image_viewer.rb, line 6
def initialize(devices, options = {})
  @devices = Array(devices)
  @options = options
end

Public Instance Methods

interactive(files) click to toggle source
# File lib/airplay/cli/image_viewer.rb, line 26
def interactive(files)
  numbers = Array(0...files.count)
  transition = "None"

  i = 0
  loop do
    view(files[i], transition)

    case read_char
    when "\e[C" # Right Arrow
      i = i + 1 > numbers.count - 1 ? 0 : i + 1
      transition = "SlideLeft"
    when "\e[D" # Left Arrow
      i = i - 1 < 0 ? numbers.count - 1 : i - 1
      transition = "SlideRight"
    else
      break
    end
  end
end
slideshow(files) click to toggle source
# File lib/airplay/cli/image_viewer.rb, line 18
def slideshow(files)
  puts "Autoplay every #{options[:wait]}"
  files.each do |file|
    view(file)
    sleep options[:wait]
  end
end
view(file, transition = "SlideLeft") click to toggle source
# File lib/airplay/cli/image_viewer.rb, line 11
def view(file, transition = "SlideLeft")
  puts "Showing #{file}"
  devices.each do |device|
    device.view(file, transition: transition)
  end
end

Private Instance Methods

read_char() click to toggle source
# File lib/airplay/cli/image_viewer.rb, line 49
def read_char
  STDIN.echo = false
  STDIN.raw!

  input = STDIN.getc.chr
  if input == "\e" then
    input << STDIN.read_nonblock(3) rescue nil
    input << STDIN.read_nonblock(2) rescue nil
  end
ensure
  STDIN.echo = true
  STDIN.cooked!

  return input
end