Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- require 'rubygems'
- require 'rbosa'
- require 'highline/import'
- minutes = 60
- after = :sleep
- trap("TERM") { puts; exit }
- trap("INT") { puts; exit }
- class Sleep
- def initialize
- @action_performed = false
- show_splash
- read_input
- show_info
- start_timer
- fade_itunes
- perform_action
- end
- def start_timer
- puts
- @minutes.times do |minute|
- puts " * Will #{action_name} after #{@minutes - minute} minutes"
- sleep 60
- if itunes_running? && itunes_stopped?
- puts " * iTunes is stopped, performing action now"
- perform_action
- exit
- end
- end
- end
- def fade_itunes
- return unless itunes_running?
- itunes = OSA.app('iTunes')
- if itunes.player_state == OSA::ITunes::EPLS::PLAYING
- volume = itunes.sound_volume
- begin
- itunes.sound_volume = itunes.sound_volume - 1
- sleep 0.1
- end while itunes.sound_volume > 0
- itunes.pause
- itunes.sound_volume = volume
- end
- end
- def itunes_running?
- OSA.app('System Events').processes.any? {|process| process.name == "iTunes" }
- end
- def itunes_stopped?
- OSA.app('iTunes').player_state != OSA::ITunes::EPLS::PLAYING
- end
- def perform_action
- return if @action_performed
- @action_performed = true
- if system_events = OSA.app('System Events')
- case @action
- when :sleep
- puts " * Sleeping"
- puts
- system_events.sleep
- when :shutdown
- puts " * Shut down"
- puts
- system_events.shut_down
- when :nothing
- puts " * Doing nothing"
- puts
- end
- end
- end
- def show_info
- puts
- line(nil, true)
- line "Will #{action_name} in #{@minutes} minutes"
- line(nil, true)
- end
- def show_splash
- 5.times { puts }
- line(nil, true)
- line "Sleep"
- line(nil, true)
- puts
- end
- def action_name
- case @action
- when :sleep
- "sleep"
- when :shutdown
- "shutdown"
- when :nothing
- "do nothing"
- end
- end
- def read_input
- @minutes = ask_for_minutes
- if @minutes
- @action = ask_for_action
- if @action
- return
- end
- end
- canceled
- end
- def ask_for_action
- value = ask("Action (s - sleep, d - shutdown, n - nothing): ")
- return nil if value.strip == ""
- case value
- when "s", "sleep"
- return :sleep
- when "d", "shutdown"
- return :shutdown
- when "n", "nothing"
- return :nothing
- end
- ask_for_action
- end
- def ask_for_minutes
- value = ask("Sleep after minutes: ")
- return nil if value.strip == ""
- return value.to_i if value.to_i > 0
- ask_for_minutes
- end
- def canceled
- puts
- puts "Sleep canceled"
- exit;
- end
- def line(str=nil, corner=false)
- len = 35
- if str.nil? || str == ""
- if corner
- puts ["+", "-" * (len - 2), "+"].join
- else
- puts "-" * len
- end
- else
- puts "| #{str}#{ " " * (len - str.size - 3)}|"
- end
- end
- end
- Sleep.new
Add Comment
Please, Sign In to add comment