module BladeRunner::Console

Constants

COLOR_NAMES
PADDING

Public Instance Methods

colors() click to toggle source
# File lib/blade_runner/interface/console.rb, line 15
def colors
  @colors ||= OpenStruct.new.tap do |colors|
    COLOR_NAMES.each do |name|
      const = Curses.const_get("COLOR_#{name.upcase}")
      Curses.init_pair(const, const, Curses::COLOR_BLACK)
      colors[name] = Curses.color_pair(const)
    end
  end
end
create_window(options = {}) click to toggle source
# File lib/blade_runner/interface/console.rb, line 25
def create_window(options = {})
  height = options[:height] || 0
  width  = options[:width]  || 0
  top    = options[:top]    || 0
  left   = options[:left]   || PADDING
  parent = options[:parent] || Curses.stdscr

  parent.subwin(height, width, top, left)
end
run() click to toggle source
# File lib/blade_runner/interface/console.rb, line 44
def run
  start_screen
  init_windows
  handle_keys
  handle_stale_tabs

  BR.subscribe("/results") do |details|
    session = BR::Session.find(details["session_id"])

    if tab = Tab.find(session.id)
      if details["line"] && tab.active?
        Tab.content_window.addstr(details["line"] + "\n")
        Tab.content_window.noutrefresh
      end
      tab.draw
    else
      tab = Tab.create(id: session.id)
      tab.activate if Tab.size == 1
    end

    Curses.doupdate
  end
end
start() click to toggle source
# File lib/blade_runner/interface/console.rb, line 35
def start
  run
  BR::Assets.watch_logical_paths
end
stop() click to toggle source
# File lib/blade_runner/interface/console.rb, line 40
def stop
  Curses.close_screen
end

Private Instance Methods

handle_keys() click to toggle source
# File lib/blade_runner/interface/console.rb, line 90
def handle_keys
  EM.defer do
    while ch = Curses.getch
      case ch
      when Curses::KEY_LEFT
        Tab.active.activate_previous
        Curses.doupdate
      when Curses::KEY_RIGHT
        Tab.active.activate_next
        Curses.doupdate
      when "q"
        BR.stop
      end
    end
  end
end
handle_stale_tabs() click to toggle source
# File lib/blade_runner/interface/console.rb, line 107
def handle_stale_tabs
  BR.subscribe("/browsers") do |details|
    if details["message"] = "ping"
      if tab = Tab.find(details["session_id"])
        tab.last_ping_at = Time.now
      end
    end
  end

  EM.add_periodic_timer(1) do
    Tab.stale.each { |t| remove_tab(t) }
  end
end
init_windows() click to toggle source
# File lib/blade_runner/interface/console.rb, line 77
def init_windows
  header_window = create_window(height: 3)
  header_window.attron(Curses::A_BOLD)
  header_window.addstr "BLADE RUNNER [press 'q' to quit]\n"
  header_window.attroff(Curses::A_BOLD)
  header_window.addstr "Open #{BR.url} to start"
  header_window.noutrefresh

  Tab.install(top: header_window.maxy)

  Curses.doupdate
end
remove_tab(tab) click to toggle source
# File lib/blade_runner/interface/console.rb, line 121
def remove_tab(tab)
  Tab.remove(tab.id)
  Curses.doupdate
end
start_screen() click to toggle source
# File lib/blade_runner/interface/console.rb, line 69
def start_screen
  Curses.init_screen
  Curses.start_color
  Curses.noecho
  Curses.curs_set(0)
  Curses.stdscr.keypad(true)
end