class Rbtclk::CountdownTimer

Public Class Methods

new(font: "clb8x8", format: "%X", color: "black", time: 180, no_alarm: false) click to toggle source
# File lib/rbtclk/countdown_timer.rb, line 15
def initialize(font: "clb8x8", format: "%X", color: "black", time: 180, no_alarm: false)
  @artii = Artii::Base.new(font: font)
  @format = format
  @color = color
  @time = time.to_i
  @no_alarm = no_alarm
  @elapsed = 0
  @sound_player = SoundPlayer.new
end

Public Instance Methods

show() click to toggle source
# File lib/rbtclk/countdown_timer.rb, line 25
def show
  Curses.init_screen
  Curses.start_color
  Curses.use_default_colors
  Curses.init_pair(1, translate(@color), -1)
  Curses.init_pair(2, translate("magenta"), translate("black"))
  Curses.curs_set(0)

  @start_time = Time.now + 1

  begin
    view_thread = Thread.new do
      while @elapsed < @time
        refresh
        @elapsed += 1
        sleep 1
      end

      @sound_player.play unless @no_alarm

      toggle_marker = true
      loop do
        blink(toggle_marker)
        toggle_marker = !toggle_marker
        sleep 1
      end
    end

    input_thread = Thread.new do
      loop do
        case Curses.getch
        when "q"
          Thread.kill(view_thread)
          Thread.kill(input_thread)
        end
      end
    end

    view_thread.join
    input_thread.join
  ensure
    Curses.close_screen
  end
end

Private Instance Methods

refresh() click to toggle source
# File lib/rbtclk/countdown_timer.rb, line 71
def refresh
  Curses.clear
  Curses.setpos(0, 0)
  Curses.attron(Curses.color_pair(1))
  Curses.addstr(@artii.asciify((Time.parse("1/1") + ((@start_time + @time) - Time.now)).strftime(@format)))
  Curses.refresh
end