fidget 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 071950c0536d7b69138334ac835bd62b2fb905e6
4
- data.tar.gz: 144764a39998a5493f86d9a44af78e33db43d053
3
+ metadata.gz: ad59e6d764cbf2bc8910fe3905b909f7efb25c1d
4
+ data.tar.gz: 675e1df0a3eb686dd15ee958ecd5e82de9c02043
5
5
  SHA512:
6
- metadata.gz: 02a03445b97d4f61a5ccccd827d1e747cdc850b57076395c99faa40cead70ad6967df6d78e77d97477c2a38b46ecda15341d13a8b9e45aca210eac0e33dfabc9
7
- data.tar.gz: 9dcbb6fe00c3cb618f98b44754cd3fb164b68770237c5bc1cf11098ffe0c495142fb537375eb0d476aafef7808b1a72b138d04efc682f1ff2718c37fa79021d1
6
+ metadata.gz: ec59b3d504006e39b0e881db51b7be974d4897bcb8de11dadc433658773c5d10e5f9cd0b25c80fbdb881586dc55c5ea1f83235211756447a89c02c0c0acac93d
7
+ data.tar.gz: e1a8fb990e49593ce2f141a183e7715b570db26b854d601385a28ba89553c4fc0c2f55cbb0b9abd65271ffd2a0997204d453da8fec2f0cdaebfa82254db8f259
data/README.md CHANGED
@@ -30,6 +30,8 @@ Additional OS X options:
30
30
 
31
31
  * `idle` will prevent the system from idle sleeping.
32
32
  * `disk` will prevent the disk from sleeping.
33
+ * 'user' will assert that the user is active. This keeps the display
34
+ on and prevents idle sleep.
33
35
 
34
36
  Additional Windows options:
35
37
 
@@ -40,6 +42,11 @@ Additional Linux options:
40
42
 
41
43
  * `blanking` disables terminal blanking on Linux.
42
44
 
45
+ Default options for each platform:
46
+ * OS X: `user`
47
+ * Linux: `display`
48
+ * Windows: `display`,`sleep`
49
+
43
50
  If you pass a command, then Fidget will execute that command and prevent the
44
51
  system from sleeping until that command terminates. If you do not provide a
45
52
  command, then Fidget will prevent sleeping until you press Ctrl-C to terminate.
@@ -83,7 +90,7 @@ Default options, with a block:
83
90
 
84
91
  #! /usr/bin/env ruby
85
92
  require 'fidget'
86
-
93
+
87
94
  Fidget.prevent_sleep do
88
95
  100.times do
89
96
  print '.'
@@ -109,12 +116,12 @@ No block, just calling methods:
109
116
  require 'fidget'
110
117
 
111
118
  Fidget.prevent_sleep(:display, :sleep)
112
-
119
+
113
120
  100.times do
114
121
  print '.'
115
122
  sleep 1
116
123
  end
117
-
124
+
118
125
  Fidget.allow_sleep
119
126
 
120
127
  Simply prevent the computer from sleeping while the current process is running:
@@ -123,12 +130,12 @@ Simply prevent the computer from sleeping while the current process is running:
123
130
  require 'fidget'
124
131
 
125
132
  Fidget.current_process
126
-
133
+
127
134
  100.times do
128
135
  print '.'
129
136
  sleep 1
130
137
  end
131
-
138
+
132
139
 
133
140
  ## Limitations
134
141
 
data/bin/fidget CHANGED
@@ -19,6 +19,8 @@ the following core options:
19
19
  Additional OS X options:
20
20
  * 'idle' will prevent the system from idle sleeping.
21
21
  * 'disk' will prevent the disk from sleeping.
22
+ * 'user' will assert that the user is active. This keeps the display
23
+ on and prevents idle sleep.
22
24
 
23
25
  Additional Windows options:
24
26
  * 'away' enables a low-power, but not sleeping, mode on Windows.
@@ -27,6 +29,11 @@ Additional Windows options:
27
29
  Additional Linux options:
28
30
  * 'blanking' disables terminal blanking on Linux.
29
31
 
32
+ Default options for each platform:
33
+ * OS X: `user`
34
+ * Linux: `display`
35
+ * Windows: `display,sleep`
36
+
30
37
  If you pass the a command, then Fidget will execute that command and prevent
31
38
  the system from sleeping until that command terminates. If you do not provide a
32
39
  command, then Fidget will prevent sleeping until you press Ctrl-C to terminate.
@@ -37,7 +44,7 @@ command, then Fidget will prevent sleeping until you press Ctrl-C to terminate.
37
44
  end
38
45
 
39
46
  opts.on("-d", "--debug", "Display debugging messages") do
40
- loglevel = Logger::DEBUG
47
+ Fidget.debuglevel = Logger::DEBUG
41
48
  end
42
49
 
43
50
  opts.on("-v", "--version", "Display the version of Fidget") do
@@ -1,5 +1,6 @@
1
1
  class Fidget
2
2
  require 'fidget/version'
3
+ require 'fidget/logger'
3
4
 
4
5
  case Gem::Platform.local.os
5
6
  when /darwin/
@@ -12,18 +13,24 @@ class Fidget
12
13
  require 'fidget/platform/windows'
13
14
 
14
15
  when 'java'
15
- STDERR.puts 'When running under jRuby, we cannot reliably manage power settings.'
16
+ logger.error 'When running under jRuby, we cannot reliably manage power settings.'
16
17
  require 'fidget/platform/null'
17
18
 
18
19
  else
19
20
  raise "Unknown platform: #{Gem::Platform.local.os}"
20
21
  end
21
22
 
22
- def self.current_process(options = nil)
23
+ def self.current_process(*options)
24
+ simulator(options)
25
+ options.delete :simulate
26
+
23
27
  Fidget::Platform.current_process(options)
24
28
  end
25
29
 
26
- def self.prevent_sleep(options = nil)
30
+ def self.prevent_sleep(*options)
31
+ simulator(options)
32
+ options.delete :simulate
33
+
27
34
  if block_given?
28
35
  Fidget::Platform.prevent_sleep(options) do
29
36
  yield
@@ -31,10 +38,33 @@ class Fidget
31
38
  else
32
39
  Fidget::Platform.prevent_sleep(options)
33
40
  end
41
+
34
42
  end
35
43
 
36
44
  def self.allow_sleep
45
+ Thread.kill @@simulator if @@simulator
37
46
  Fidget::Platform.allow_sleep
38
47
  end
39
48
 
49
+ def self.simulator(options)
50
+ # if :all or :simulate were passed, start up the action simulator
51
+ unless (options & [:all, :simulate]).empty?
52
+ @@simulator = Thread.new do
53
+ loop do
54
+ Fidget::Platform.simulate
55
+ sleep 30
56
+ end
57
+ end
58
+
59
+ # if this is still running, make sure it gets cleaned up
60
+ at_exit do
61
+ return unless @@simulator
62
+ return unless @@simulator.alive?
63
+ Thread.kill @@simulator
64
+ end
65
+ end
66
+
67
+ end
68
+ private_class_method :simulator
69
+
40
70
  end
@@ -0,0 +1,28 @@
1
+ class Fidget
2
+ require 'logger'
3
+
4
+ def self.logger
5
+ unless @logger
6
+ @logger = Logger.new(STDERR)
7
+ @logger.level = Logger::WARN
8
+ end
9
+ @logger
10
+ end
11
+ private_class_method :logger
12
+
13
+ def self.error(message)
14
+ logger.error(message)
15
+ end
16
+
17
+ def self.warn(message)
18
+ logger.warn(message)
19
+ end
20
+
21
+ def self.debug(message)
22
+ logger.debug(message)
23
+ end
24
+
25
+ def self.debuglevel=(level)
26
+ logger.level = level
27
+ end
28
+ end
@@ -29,9 +29,17 @@ class Fidget::Platform
29
29
  @@pids = nil
30
30
  end
31
31
 
32
- def self.arguments(*options)
32
+ def self.simulate
33
+ # osx needs accessibilty access to do this, along with a big scary prompt.
34
+ # But it's not really needed anyway. Caffeinate works really well.
35
+ # Should we want to at some point..., https://github.com/AXElements/AXElements
36
+ end
37
+
38
+
39
+ def self.arguments(options)
33
40
  options.flatten!
34
41
  options.compact!
42
+ return '-u' if options.empty?
35
43
  return '-dism' if options == [:all]
36
44
 
37
45
  terms = {
@@ -39,6 +47,7 @@ class Fidget::Platform
39
47
  :idle => 'i',
40
48
  :disk => 'm',
41
49
  :sleep => 's',
50
+ :user => 'u',
42
51
  }
43
52
  options.each do |opt|
44
53
  STDERR.puts "Fidget: option #{opt} is not supported on OS X" unless terms.include? opt
@@ -2,6 +2,7 @@ class Fidget::Platform
2
2
  require "dbus"
3
3
 
4
4
  def self.current_process(options)
5
+ return false unless required_binaries
5
6
  options = munge(options)
6
7
  suspend(options)
7
8
 
@@ -11,6 +12,7 @@ class Fidget::Platform
11
12
  end
12
13
 
13
14
  def self.prevent_sleep(options)
15
+ return false unless required_binaries
14
16
  options = munge(options)
15
17
  suspend(options)
16
18
 
@@ -23,11 +25,17 @@ class Fidget::Platform
23
25
  end
24
26
 
25
27
  def self.allow_sleep
28
+ return false unless required_binaries
26
29
  options = munge(options)
27
30
  resume(options)
28
31
  end
29
32
 
30
- def self.munge(*options)
33
+ def self.simulate
34
+ return false unless required_binaries('xset')
35
+ system('xset reset')
36
+ end
37
+
38
+ def self.munge(options)
31
39
  options.flatten!
32
40
  options.compact!
33
41
  options = [:display] if options.empty?
@@ -65,7 +73,7 @@ class Fidget::Platform
65
73
  rescue => e
66
74
  STDERR.puts 'Fidget: DBus action failed.'
67
75
  STDERR.puts e.message
68
- STDERR.puts e.backtrace.join "\n"
76
+ STDERR.puts e.backtrace.first
69
77
  end
70
78
  end
71
79
 
@@ -101,4 +109,16 @@ class Fidget::Platform
101
109
  end
102
110
  private_class_method :dbus_screensaver
103
111
 
112
+ def self.required_binaries(*list)
113
+ list = ['xset', 'xdg-screensaver', 'xwininfo'] if list.empty?
114
+ found = true
115
+ list.each do |command|
116
+ unless system("which #{command} > /dev/null 2>&1")
117
+ found = false
118
+ Fidget.debug "Fidget: required binary (#{command}) not found."
119
+ end
120
+ end
121
+ found
122
+ end
123
+ private_class_method :required_binaries
104
124
  end
@@ -0,0 +1,24 @@
1
+ class Fidget::Platform
2
+ def self.current_process(options)
3
+ false
4
+ end
5
+
6
+ def self.prevent_sleep(options)
7
+ return false
8
+
9
+ # prevent sleep
10
+ if block_given?
11
+ yield
12
+ # allow sleep
13
+ end
14
+ end
15
+
16
+ def self.allow_sleep
17
+ false
18
+ end
19
+
20
+ def self.simulate
21
+ false
22
+ end
23
+
24
+ end
@@ -33,10 +33,17 @@ class Fidget::Platform
33
33
  set_state(nil)
34
34
  end
35
35
 
36
+ def self.simulate
37
+ # memoized so we don't keep loading the library every few seconds
38
+ @@kb ||= Win32API.new('user32.dll', 'keybd_event', 'IILL', 'V')
39
+ @@kb.call(KB_KEY_F24, 0, KB_EVENT_KEYPRESS, 0)
40
+ @@kb.call(KB_KEY_F24, 0, KB_EVENT_KEYUP, 0)
41
+ end
42
+
36
43
  # Set thread execution state, using information from
37
44
  # https://msdn.microsoft.com/en-us/library/aa373208(VS.85).aspx
38
45
  # http://stackoverflow.com/questions/4126136/stop-a-windows-7-pc-from-going-to-sleep-while-a-ruby-program-executes
39
- def self.set_state(*options)
46
+ def self.set_state(options)
40
47
  options.flatten!
41
48
  options.compact!
42
49
  options = [:display, :sleep] if options.empty?
@@ -57,20 +64,6 @@ class Fidget::Platform
57
64
  state = Win32API.new('kernel32','SetThreadExecutionState','L')
58
65
  state.call(ES_CONTINUOUS|mode)
59
66
 
60
- if options.include? :simulate
61
- @@kb_poker = Thread.new do
62
- kb = Win32API.new('user32.dll', 'keybd_event', 'nnnn', 'v')
63
- loop do
64
- kb.call(KB_KEY_F24, 0, KB_EVENT_KEYPRESS, nil)
65
- kb.call(KB_KEY_F24, 0, KB_EVENT_KEYUP, nil)
66
- sleep 30
67
- end
68
- end
69
- end
70
-
71
- if options.nil?
72
- Thread.kill @@kb_poker if @@kb_poker
73
- end
74
67
  end
75
68
  private_class_method :set_state
76
69
 
@@ -1,3 +1,3 @@
1
1
  class Fidget
2
- VERSION = '0.0.3'
3
- end
2
+ VERSION = '0.0.4'
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fidget
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Ford
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-08 00:00:00.000000000 Z
11
+ date: 2017-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-dbus
@@ -42,8 +42,10 @@ files:
42
42
  - README.md
43
43
  - LICENSE
44
44
  - bin/fidget
45
+ - lib/fidget/logger.rb
45
46
  - lib/fidget/platform/darwin.rb
46
47
  - lib/fidget/platform/linux.rb
48
+ - lib/fidget/platform/null.rb
47
49
  - lib/fidget/platform/windows.rb
48
50
  - lib/fidget/version.rb
49
51
  - lib/fidget.rb