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
blink(toggle_marker)
click to toggle source
# File lib/rbtclk/countdown_timer.rb, line 79 def blink(toggle_marker) Curses.clear Curses.setpos(0, 0) Curses.attron(Curses.color_pair(2)) Curses.addstr(@artii.asciify(Time.parse("1/1").strftime(@format))) if toggle_marker Curses.refresh end
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