Guest User

Untitled

a guest
Apr 24th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2.  
  3. require 'rubygems'
  4. require 'rbosa'
  5. require 'highline/import'
  6.  
  7. minutes = 60
  8. after = :sleep
  9.  
  10. trap("TERM") { puts; exit }
  11. trap("INT") { puts; exit }
  12.  
  13. class Sleep
  14. def initialize
  15. @action_performed = false
  16. show_splash
  17. read_input
  18. show_info
  19. start_timer
  20. fade_itunes
  21. perform_action
  22. end
  23.  
  24. def start_timer
  25. puts
  26. @minutes.times do |minute|
  27. puts " * Will #{action_name} after #{@minutes - minute} minutes"
  28. sleep 60
  29. if itunes_running? && itunes_stopped?
  30. puts " * iTunes is stopped, performing action now"
  31. perform_action
  32. exit
  33. end
  34. end
  35. end
  36.  
  37. def fade_itunes
  38. return unless itunes_running?
  39. itunes = OSA.app('iTunes')
  40. if itunes.player_state == OSA::ITunes::EPLS::PLAYING
  41. volume = itunes.sound_volume
  42. begin
  43. itunes.sound_volume = itunes.sound_volume - 1
  44. sleep 0.1
  45. end while itunes.sound_volume > 0
  46. itunes.pause
  47. itunes.sound_volume = volume
  48. end
  49. end
  50.  
  51. def itunes_running?
  52. OSA.app('System Events').processes.any? {|process| process.name == "iTunes" }
  53. end
  54.  
  55. def itunes_stopped?
  56. OSA.app('iTunes').player_state != OSA::ITunes::EPLS::PLAYING
  57. end
  58.  
  59. def perform_action
  60. return if @action_performed
  61. @action_performed = true
  62. if system_events = OSA.app('System Events')
  63. case @action
  64. when :sleep
  65. puts " * Sleeping"
  66. puts
  67. system_events.sleep
  68. when :shutdown
  69. puts " * Shut down"
  70. puts
  71. system_events.shut_down
  72. when :nothing
  73. puts " * Doing nothing"
  74. puts
  75. end
  76. end
  77. end
  78.  
  79. def show_info
  80. puts
  81. line(nil, true)
  82. line "Will #{action_name} in #{@minutes} minutes"
  83. line(nil, true)
  84. end
  85.  
  86. def show_splash
  87. 5.times { puts }
  88. line(nil, true)
  89. line "Sleep"
  90. line(nil, true)
  91. puts
  92. end
  93.  
  94. def action_name
  95. case @action
  96. when :sleep
  97. "sleep"
  98. when :shutdown
  99. "shutdown"
  100. when :nothing
  101. "do nothing"
  102. end
  103. end
  104.  
  105. def read_input
  106. @minutes = ask_for_minutes
  107. if @minutes
  108. @action = ask_for_action
  109. if @action
  110. return
  111. end
  112. end
  113. canceled
  114. end
  115.  
  116. def ask_for_action
  117. value = ask("Action (s - sleep, d - shutdown, n - nothing): ")
  118. return nil if value.strip == ""
  119. case value
  120. when "s", "sleep"
  121. return :sleep
  122. when "d", "shutdown"
  123. return :shutdown
  124. when "n", "nothing"
  125. return :nothing
  126. end
  127. ask_for_action
  128. end
  129.  
  130. def ask_for_minutes
  131. value = ask("Sleep after minutes: ")
  132. return nil if value.strip == ""
  133. return value.to_i if value.to_i > 0
  134. ask_for_minutes
  135. end
  136.  
  137. def canceled
  138. puts
  139. puts "Sleep canceled"
  140. exit;
  141. end
  142.  
  143. def line(str=nil, corner=false)
  144. len = 35
  145. if str.nil? || str == ""
  146. if corner
  147. puts ["+", "-" * (len - 2), "+"].join
  148. else
  149. puts "-" * len
  150. end
  151. else
  152. puts "| #{str}#{ " " * (len - str.size - 3)}|"
  153. end
  154. end
  155. end
  156.  
  157. Sleep.new
Add Comment
Please, Sign In to add comment